--- /dev/null
+diff -ru c2sorig/authreg.c c2s/authreg.c
+--- c2sorig/authreg.c Mon Nov 22 15:53:34 2004
++++ c2s/authreg.c Mon Nov 22 20:06:25 2004
+@@ -623,7 +623,7 @@
+ log_write(c2s->log, LOG_NOTICE, "[%d] created user: user=%s; realm=%s", sess->s->tag, username, sess->realm);
+
+ /* extract the password */
+- snprintf(password, 1024, "%.*s", NAD_CDATA_L(nad, elem), NAD_CDATA(nad, elem));
++ snprintf(password, 257, "%.*s", NAD_CDATA_L(nad, elem), NAD_CDATA(nad, elem));
+
+ /* change it */
+ if((c2s->ar->set_password)(c2s->ar, username, sess->realm, password) != 0)
+diff -ru c2sorig/authreg_mysql.c c2s/authreg_mysql.c
+--- c2sorig/authreg_mysql.c Mon Nov 22 15:53:34 2004
++++ c2s/authreg_mysql.c Mon Nov 22 16:55:37 2004
+@@ -24,6 +24,10 @@
+
+ #ifdef STORAGE_MYSQL
+
++#define MYSQL_LU 1024 /* maximum length of username - should correspond to field length */
++#define MYSQL_LR 256 /* maximum length of realm - should correspond to field length */
++#define MYSQL_LP 256 /* maximum length of password - should correspond to field length */
++
+ #include <mysql.h>
+
+ typedef struct mysqlcontext_st {
+@@ -42,7 +46,8 @@
+ static MYSQL_RES *_ar_mysql_get_user_tuple(authreg_t ar, char *username, char *realm) {
+ mysqlcontext_t ctx = (mysqlcontext_t) ar->private;
+ MYSQL *conn = ctx->conn;
+- char euser[2049], erealm[2049], sql[5121]; /* query(1024) + euser(2048) + erealm(2048) + \0(1) */
++ char iuser[MYSQL_LU+1], irealm[MYSQL_LR+1];
++ char euser[MYSQL_LU*2+1], erealm[MYSQL_LR*2+1], sql[1024 + MYSQL_LU*2 + MYSQL_LR*2 + 1]; /* query(1024) + euser + erealm + \0(1) */
+ MYSQL_RES *res;
+
+ if(mysql_ping(conn) != 0) {
+@@ -50,8 +55,11 @@
+ return NULL;
+ }
+
+- mysql_real_escape_string(conn, euser, username, strlen(username));
+- mysql_real_escape_string(conn, erealm, realm, strlen(realm));
++ snprintf(iuser, MYSQL_LU+1, "%s", username);
++ snprintf(irealm, MYSQL_LR+1, "%s", realm);
++
++ mysql_real_escape_string(conn, euser, iuser, strlen(iuser));
++ mysql_real_escape_string(conn, erealm, irealm, strlen(irealm));
+
+ sprintf(sql, ctx->sql_select, euser, erealm);
+
+@@ -127,15 +135,21 @@
+ static int _ar_mysql_set_password(authreg_t ar, char *username, char *realm, char password[257]) {
+ mysqlcontext_t ctx = (mysqlcontext_t) ar->private;
+ MYSQL *conn = ctx->conn;
+- char euser[2049], erealm[2049], epass[513], sql[5633]; /* query(1024) + euser(2048) + erealm(2048) + epass(512) + \0(1) */
++ char iuser[MYSQL_LU+1], irealm[MYSQL_LR+1];
++ char euser[MYSQL_LU*2+1], erealm[MYSQL_LR*2+1], epass[513], sql[1024+MYSQL_LU*2+MYSQL_LR*2+512+1]; /* query(1024) + euser + erealm + epass(512) + \0(1) */
+
+ if(mysql_ping(conn) != 0) {
+ log_write(ar->c2s->log, LOG_ERR, "mysql: connection to database lost");
+ return 1;
+ }
+
+- mysql_real_escape_string(conn, euser, username, strlen(username));
+- mysql_real_escape_string(conn, erealm, realm, strlen(realm));
++ snprintf(iuser, MYSQL_LU+1, "%s", username);
++ snprintf(irealm, MYSQL_LR+1, "%s", realm);
++
++ password[256]= '\0';
++
++ mysql_real_escape_string(conn, euser, iuser, strlen(iuser));
++ mysql_real_escape_string(conn, erealm, irealm, strlen(irealm));
+ mysql_real_escape_string(conn, epass, password, strlen(password));
+
+ sprintf(sql, ctx->sql_setpassword, epass, euser, erealm);
+@@ -195,15 +209,19 @@
+ static int _ar_mysql_set_zerok(authreg_t ar, char *username, char *realm, char hash[41], char token[11], int sequence) {
+ mysqlcontext_t ctx = (mysqlcontext_t) ar->private;
+ MYSQL *conn = ctx->conn;
+- char euser[2049], erealm[2049], ehash[81], etoken[21], sql[5233]; /* query(1024) + euser(2048) + erealm(2048) + ehash(80) + etoken(20) + sequence(12) + \0(1) */
++ char iuser[MYSQL_LU+1], irealm[MYSQL_LR+1];
++ char euser[MYSQL_LU*2+1], erealm[MYSQL_LR*2+1], ehash[81], etoken[21], sql[1024+MYSQL_LU*2+MYSQL_LR*2+80+20+12+1]; /* query(1024) + euser + erealm + ehash(80) + etoken(20) + sequence(12) + \0(1) */
+
+ if(mysql_ping(conn) != 0) {
+ log_write(ar->c2s->log, LOG_ERR, "mysql: connection to database lost");
+ return 1;
+ }
+
+- mysql_real_escape_string(conn, euser, username, strlen(username));
+- mysql_real_escape_string(conn, erealm, realm, strlen(realm));
++ snprintf(iuser, MYSQL_LU+1, "%s", username);
++ snprintf(irealm, MYSQL_LR+1, "%s", realm);
++
++ mysql_real_escape_string(conn, euser, iuser, strlen(iuser));
++ mysql_real_escape_string(conn, erealm, irealm, strlen(irealm));
+ mysql_real_escape_string(conn, ehash, hash, strlen(hash));
+ mysql_real_escape_string(conn, etoken, token, strlen(token));
+
+@@ -222,7 +240,8 @@
+ static int _ar_mysql_create_user(authreg_t ar, char *username, char *realm) {
+ mysqlcontext_t ctx = (mysqlcontext_t) ar->private;
+ MYSQL *conn = ctx->conn;
+- char euser[2049], erealm[2049], sql[5121]; /* query(1024) + euser(2048) + erealm(2048) + \0(1) */
++ char iuser[MYSQL_LU+1], irealm[MYSQL_LR+1];
++ char euser[MYSQL_LU*2+1], erealm[MYSQL_LR*2+1], sql[1024+MYSQL_LU*2+MYSQL_LR*2+1]; /* query(1024) + euser + erealm + \0(1) */
+ MYSQL_RES *res = _ar_mysql_get_user_tuple(ar, username, realm);
+
+ if(res != NULL) {
+@@ -237,8 +256,11 @@
+ return 1;
+ }
+
+- mysql_real_escape_string(conn, euser, username, strlen(username));
+- mysql_real_escape_string(conn, erealm, realm, strlen(realm));
++ snprintf(iuser, MYSQL_LU+1, "%s", username);
++ snprintf(irealm, MYSQL_LR+1, "%s", realm);
++
++ mysql_real_escape_string(conn, euser, iuser, strlen(iuser));
++ mysql_real_escape_string(conn, erealm, irealm, strlen(irealm));
+
+ sprintf(sql, ctx->sql_create, euser, erealm);
+
+@@ -255,15 +277,19 @@
+ static int _ar_mysql_delete_user(authreg_t ar, char *username, char *realm) {
+ mysqlcontext_t ctx = (mysqlcontext_t) ar->private;
+ MYSQL *conn = ctx->conn;
+- char euser[2049], erealm[2049], sql[5121]; /* query(1024) + euser(2048) + erealm(2048) + \0(1) */
++ char iuser[MYSQL_LU+1], irealm[MYSQL_LR+1];
++ char euser[MYSQL_LU*2+1], erealm[MYSQL_LR*2+1], sql[1024+MYSQL_LU*2+MYSQL_LR*2+1]; /* query(1024) + euser + erealm + \0(1) */
+
+ if(mysql_ping(conn) != 0) {
+ log_write(ar->c2s->log, LOG_ERR, "mysql: connection to database lost");
+ return 1;
+ }
+
+- mysql_real_escape_string(conn, euser, username, strlen(username));
+- mysql_real_escape_string(conn, erealm, realm, strlen(realm));
++ snprintf(iuser, MYSQL_LU+1, "%s", username);
++ snprintf(irealm, MYSQL_LR+1, "%s", realm);
++
++ mysql_real_escape_string(conn, euser, iuser, strlen(iuser));
++ mysql_real_escape_string(conn, erealm, irealm, strlen(irealm));
+
+ sprintf(sql, ctx->sql_delete, euser, erealm);
+
+diff -ru c2sorig/authreg_pgsql.c c2s/authreg_pgsql.c
+--- c2sorig/authreg_pgsql.c Mon Nov 22 15:53:34 2004
++++ c2s/authreg_pgsql.c Mon Nov 22 16:52:20 2004
+@@ -26,6 +26,10 @@
+
+ #include <libpq-fe.h>
+
++#define PGSQL_LU 1024 /* maximum length of username - should correspond to field length */
++#define PGSQL_LR 256 /* maximum length of realm - should correspond to field length */
++#define PGSQL_LP 256 /* maximum length of password - should correspond to field length */
++
+ typedef struct pgsqlcontext_st {
+ PGconn * conn;
+ char * sql_create;
+@@ -42,11 +46,16 @@
+ static PGresult *_ar_pgsql_get_user_tuple(authreg_t ar, char *username, char *realm) {
+ pgsqlcontext_t ctx = (pgsqlcontext_t) ar->private;
+ PGconn *conn = ctx->conn;
+- char euser[2049], erealm[2049], sql[5121]; /* query(1024) + euser(2048) + erealm(2048) + \0(1) */
++
++ char iuser[PGSQL_LU+1], irealm[PGSQL_LR+1];
++ char euser[PGSQL_LU*2+1], erealm[PGSQL_LR*2+1], sql[1024+PGSQL_LU*2+PGSQL_LR*2+1]; /* query(1024) + euser + erealm + \0(1) */
+ PGresult *res;
+
+- PQescapeString(euser, username, strlen(username));
+- PQescapeString(erealm, realm, strlen(realm));
++ snprintf(iuser, PGSQL_LU+1, "%s", username);
++ snprintf(irealm, PGSQL_LR+1, "%s", realm);
++
++ PQescapeString(euser, iuser, strlen(iuser));
++ PQescapeString(erealm, irealm, strlen(irealm));
+
+ sprintf(sql, ctx->sql_select, euser, erealm);
+
+@@ -114,11 +123,15 @@
+ static int _ar_pgsql_set_password(authreg_t ar, char *username, char *realm, char password[257]) {
+ pgsqlcontext_t ctx = (pgsqlcontext_t) ar->private;
+ PGconn *conn = ctx->conn;
+- char euser[2049], erealm[2049], epass[513], sql[5633]; /* query(1024) + euser(2048) + erealm(2048) + epass(512) + \0(1) */
++ char iuser[PGSQL_LU+1], irealm[PGSQL_LR+1];
++ char euser[PGSQL_LU*2+1], erealm[PGSQL_LR*2+1], epass[513], sql[1024+PGSQL_LU*2+PGSQL_LR*2+512+1]; /* query(1024) + euser + erealm + epass(512) + \0(1) */
+ PGresult *res;
+
+- PQescapeString(euser, username, strlen(username));
+- PQescapeString(erealm, realm, strlen(realm));
++ snprintf(iuser, PGSQL_LU+1, "%s", username);
++ snprintf(irealm, PGSQL_LR+1, "%s", realm);
++
++ PQescapeString(euser, iuser, strlen(iuser));
++ PQescapeString(erealm, irealm, strlen(irealm));
+ PQescapeString(epass, password, strlen(password));
+
+ sprintf(sql, ctx->sql_setpassword, epass, euser, erealm);
+@@ -177,11 +190,15 @@
+ static int _ar_pgsql_set_zerok(authreg_t ar, char *username, char *realm, char hash[41], char token[11], int sequence) {
+ pgsqlcontext_t ctx = (pgsqlcontext_t) ar->private;
+ PGconn *conn = ctx->conn;
+- char euser[2049], erealm[2049], ehash[81], etoken[21], sql[5233]; /* query(1024) + euser(2048) + erealm(2048) + ehash(80) + etoken(20) + sequence(12) + \0(1) */
++ char iuser[PGSQL_LU+1], irealm[PGSQL_LR+1];
++ char euser[PGSQL_LU*2+1], erealm[PGSQL_LR*2+1], ehash[81], etoken[21], sql[1024 + PGSQL_LU*2 + PGSQL_LR*2 + 80 + 20 + 12 + 1]; /* query(1024) + euser + erealm + ehash(80) + etoken(20) + sequence(12) + \0(1) */
+ PGresult *res;
+
+- PQescapeString(euser, username, strlen(username));
+- PQescapeString(erealm, realm, strlen(realm));
++ snprintf(iuser, PGSQL_LU+1, "%s", username);
++ snprintf(irealm, PGSQL_LR+1, "%s", realm);
++
++ PQescapeString(euser, iuser, strlen(iuser));
++ PQescapeString(erealm, irealm, strlen(irealm));
+ PQescapeString(ehash, hash, strlen(hash));
+ PQescapeString(etoken, token, strlen(token));
+
+@@ -210,7 +227,8 @@
+ static int _ar_pgsql_create_user(authreg_t ar, char *username, char *realm) {
+ pgsqlcontext_t ctx = (pgsqlcontext_t) ar->private;
+ PGconn *conn = ctx->conn;
+- char euser[2049], erealm[2049], sql[5121]; /* query(1024) + euser(2048) + erealm(2048) + \0(1) */
++ char iuser[PGSQL_LU+1], irealm[PGSQL_LR+1];
++ char euser[PGSQL_LU*2+1], erealm[PGSQL_LR*2+1], sql[1024+PGSQL_LU*2+PGSQL_LR*2+1]; /* query(1024) + euser + erealm + \0(1) */
+ PGresult *res;
+
+ res = _ar_pgsql_get_user_tuple(ar, username, realm);
+@@ -221,8 +239,11 @@
+
+ PQclear(res);
+
+- PQescapeString(euser, username, strlen(username));
+- PQescapeString(erealm, realm, strlen(realm));
++ snprintf(iuser, PGSQL_LU+1, "%s", username);
++ snprintf(irealm, PGSQL_LR+1, "%s", realm);
++
++ PQescapeString(euser, iuser, strlen(iuser));
++ PQescapeString(erealm, irealm, strlen(irealm));
+
+ sprintf(sql, ctx->sql_create, euser, erealm);
+
+@@ -249,11 +270,15 @@
+ static int _ar_pgsql_delete_user(authreg_t ar, char *username, char *realm) {
+ pgsqlcontext_t ctx = (pgsqlcontext_t) ar->private;
+ PGconn *conn = ctx->conn;
+- char euser[2049], erealm[2049], sql[5121]; /* query(1024) + euser(2048) + erealm(2048) + \0(1) */
++ char iuser[PGSQL_LU+1], irealm[PGSQL_LR+1];
++ char euser[PGSQL_LU*2+1], erealm[PGSQL_LR*2+1], sql[1024+PGSQL_LU*2+PGSQL_LR*2+1]; /* query(1024) + euser + erealm + \0(1) */
+ PGresult *res;
+
+- PQescapeString(euser, username, strlen(username));
+- PQescapeString(erealm, realm, strlen(realm));
++ snprintf(iuser, PGSQL_LU+1, "%s", username);
++ snprintf(irealm, PGSQL_LR+1, "%s", realm);
++
++ PQescapeString(euser, iuser, strlen(iuser));
++ PQescapeString(erealm, irealm, strlen(irealm));
+
+ sprintf(sql, ctx->sql_delete, euser, erealm);
+
+++ /dev/null
-# Copyright 1999-2004 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/net-im/jabberd/jabberd-2.0.ebuild,v 1.8 2004/07/03 18:54:29 humpback Exp $
-
-inherit eutils
-
-MY_PV="2.0s2"
-S="${WORKDIR}/${PN}-${MY_PV}"
-
-DESCRIPTION="Open Source Jabber Server"
-HOMEPAGE="http://www.jabber.org"
-SRC_URI="http://www.jabberstudio.org/files/jabberd2/${PN}-${MY_PV}.tar.gz"
-
-SLOT="1"
-LICENSE="GPL-2"
-KEYWORDS="~x86 ~ppc ~sparc"
-IUSE="ldap ipv6 mysql postgres pam berkdb ssl"
-
-DEPEND="!net-im/jabber-server
- >=dev-libs/openssl-0.9.6i
- ldap? ( >=net-nds/openldap-2.1 )
- berkdb? ( >=sys-libs/db-4.1.25 )
- mysql? ( dev-db/mysql )
- postgres? ( dev-db/postgresql )"
-
-pkg_setup() {
- if ! use postgres && ! use mysql && ! use berkdb; then
- eerror
- eerror "For this version of jabberd you must have"
- eerror "at least one of 'mysql', 'postgres' and/or 'berkdb'"
- eerror "in the USE variable in /etc/make.conf."
- eerror
- die "Look at the error message above."
- fi
-}
-
-src_unpack() {
- unpack ${PN}-${MY_PV}.tar.gz
- cd ${S}/sx
- epatch ${FILESDIR}/xml-stream-patch-00
-}
-
-src_compile() {
- storage="fs"
- authreg="anon"
-
- if use berkdb; then
- storage="${storage} db"
- authreg="${authreg} db"
- fi
- if use mysql; then
- storage="${storage} mysql"
- authreg="${authreg} mysql"
- fi
- if use postgres; then
- storage="${myconf} pgsql"
- authreg="${authreg} pgsql"
- fi
- if use pam; then
- authreg="${authreg} pam"
- fi
- if use ldap; then
- authreg="${authreg} ldap"
- fi
-
- if use ipv6; then
- enables="${enables} --enable-ipv6"
- fi
-
- cd ${S}
-
-
- ./configure --prefix=/usr \
- --sysconfdir=/etc \
- --localstatedir=/var \
- --infodir=/usr/share/info \
- --mandir=/usr/share/man \
- --enable-debug \
- --enable-storage="${storage}" \
- --enable-authreg="${authreg}" \
- ${enables} || die
- make || die
-
-}
-
-src_install() {
- make DESTDIR=${D} install || die
-
- exeinto /etc/jabberd
- dodir /var/jabberd
- dodir /var/jabberd/pid
- dodir /var/jabberd/log
- dodir /var/jabberd/db
- touch ${D}/var/jabberd/log/c2s.log
- touch ${D}/var/jabberd/log/resolver.log
- touch ${D}/var/jabberd/log/router.log
- touch ${D}/var/jabberd/log/s2s.log
- touch ${D}/var/jabberd/log/sm.log
- doexe ${FILESDIR}/self-cert.sh
- insinto /etc/conf.d ; newins ${FILESDIR}/jabber-conf.d jabber
- exeinto /etc/init.d ; newexe ${FILESDIR}/jabber.rc6-r7 jabber
-
- dodoc AUTHORS PROTOCOL README
-
- docinto tools ; dodoc tools/db-setup.mysql tools/db-setup.pgsql tools/migrate.pl tools/pipe-auth.pl
-
- local test_group=`grep ^jabber: /etc/group | cut -d: -f1`
- if [ -z $test_group ]
- then
- enewgroup jabber
- fi
-
- local test_user=`grep ^jabber: /etc/passwd | cut -d: -f1`
- if [ -z $test_user ]
- then
- enewuser jabber -1 /bin/false /var/spool/jabber jabber
- fi
-
- fowners jabber:jabber /etc/jabberd
- fowners jabber:jabber /etc/jabberd/c2s.xml
- fowners jabber:jabber /etc/jabberd/c2s.xml.dist
- fowners jabber:jabber /etc/jabberd/jabberd.cfg
- fowners jabber:jabber /etc/jabberd/jabberd.cfg.dist
- fowners jabber:jabber /etc/jabberd/resolver.xml
- fowners jabber:jabber /etc/jabberd/resolver.xml.dist
- fowners jabber:jabber /etc/jabberd/router-users.xml
- fowners jabber:jabber /etc/jabberd/router-users.xml.dist
- fowners jabber:jabber /etc/jabberd/router.xml
- fowners jabber:jabber /etc/jabberd/router.xml.dist
- fowners jabber:jabber /etc/jabberd/s2s.xml
- fowners jabber:jabber /etc/jabberd/s2s.xml.dist
- fowners jabber:jabber /etc/jabberd/self-cert.sh
- fowners jabber:jabber /etc/jabberd/sm.xml
- fowners jabber:jabber /etc/jabberd/sm.xml.dist
- fowners jabber:jabber /etc/jabberd/templates
-
- fowners jabber:jabber /var/jabberd
- fowners jabber:jabber /var/jabberd/db
- fowners jabber:jabber /var/jabberd/log
- fowners jabber:jabber /var/jabberd/pid
- fowners jabber:jabber /var/jabberd/log/c2s.log
- fowners jabber:jabber /var/jabberd/log/resolver.log
- fowners jabber:jabber /var/jabberd/log/router.log
- fowners jabber:jabber /var/jabberd/log/s2s.log
- fowners jabber:jabber /var/jabberd/log/sm.log
- fperms 660 /etc/jabberd/c2s.xml
- fperms 660 /etc/jabberd/c2s.xml.dist
- fperms 660 /etc/jabberd/jabberd.cfg
- fperms 660 /etc/jabberd/jabberd.cfg.dist
- fperms 660 /etc/jabberd/resolver.xml
- fperms 660 /etc/jabberd/resolver.xml.dist
- fperms 660 /etc/jabberd/router-users.xml
- fperms 660 /etc/jabberd/router-users.xml.dist
- fperms 660 /etc/jabberd/router.xml
- fperms 660 /etc/jabberd/router.xml.dist
- fperms 660 /etc/jabberd/s2s.xml
- fperms 660 /etc/jabberd/s2s.xml.dist
- fperms 760 /etc/jabberd/self-cert.sh
- fperms 660 /etc/jabberd/sm.xml
- fperms 660 /etc/jabberd/sm.xml.dist
- fperms 660 /etc/jabberd/templates
- fperms o-rwx /usr/bin/jabberd
-}
-
-pkg_postinst() {
-
- einfo
- einfo "Change 'localhost' to your server's domainname in the"
- einfo "/etc/jabberd/*.xml configs first"
- einfo "Server admins should be added to the "jabber" group"
- if use ssl; then
- einfo
- einfo "To enable SSL connections, execute /etc/jabberd/self-cert.sh"
- einfo
- fi
-}