From owner-freebsd-ports-bugs@FreeBSD.ORG Fri Jan 5 08:07:33 2007 Return-Path: X-Original-To: freebsd-ports-bugs@freebsd.org Delivered-To: freebsd-ports-bugs@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 9179216A407 for ; Fri, 5 Jan 2007 08:07:33 +0000 (UTC) (envelope-from beech@alaskaparadise.com) Received: from stargate.alaskaparadise.com (114-103-74-65.gci.net [65.74.103.114]) by mx1.freebsd.org (Postfix) with ESMTP id 9220013C442 for ; Fri, 5 Jan 2007 08:07:29 +0000 (UTC) (envelope-from beech@alaskaparadise.com) Received: from localhost (localhost [127.0.0.1]) by stargate.alaskaparadise.com (Postfix) with ESMTP id 8932C7E46; Thu, 4 Jan 2007 22:38:17 -0900 (AKST) From: Beech Rintoul Organization: Alaska Paradise Travel To: freebsd-ports-bugs@freebsd.org Date: Thu, 4 Jan 2007 22:38:11 -0900 User-Agent: KMail/1.9.5 References: <200701020830.l028UMaw079124@freefall.freebsd.org> In-Reply-To: <200701020830.l028UMaw079124@freefall.freebsd.org> X-Face: jC2w\k*Q1\0DA2Q0Eh&BrP/Rt2M,^2O#R07VoT98m*>miQF9%Bi9vy`F6cPjwEe?m,)=?utf-8?q?2=0A=09X=3FM=5C=3AOE9QgZ?="xT3/n3,3MJ7N=Cfkmi%f(w^~X"SUxn>; 27NO; C+)g[7J`$G*SN>{<=?utf-8?q?O=3Bg7=7C=0A=09o=7D=265A=5D4?=@7D`=Eb@Zs1Ln814?]|k@'bG=.Ca"[|8+_.OsNAo8!#?4u MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200701042238.14313.beech@alaskaparadise.com> Cc: Cheng-Lung Sung Subject: Re: ports/107416: [Maintainer Update] ftp/proftpd: Added combined patch-contrib-mod_sql.c X-BeenThere: freebsd-ports-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Ports bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jan 2007 08:07:33 -0000 The distributor has sent me another patch for mod_sql.c. Please use these patches and commit ASAP (I'm getting a bunch of complaints which these address). diff -ruN --exclude=CVS /usr/ports/ftp/proftpd.orig/Makefile /usr/ports/ftp/proftpd/Makefile --- /usr/ports/ftp/proftpd.orig/Makefile Mon Jan 1 03:44:05 2007 +++ /usr/ports/ftp/proftpd/Makefile Tue Jan 2 14:46:46 2007 @@ -7,7 +7,7 @@ PORTNAME= proftpd DISTVERSION= 1.3.1rc1 -PORTREVISION= 2 +PORTREVISION= 3 CATEGORIES= ftp MASTER_SITES= ftp://ftp.proftpd.org/distrib/source/ \ ftp://ftp.fastorama.com/mirrors/ftp.proftpd.org/distrib/source/ \ @@ -58,7 +58,7 @@ RADIUS "Include mod_radius" off \ QUOTATAB_RADIUS "include mod_quotatab_radius" off \ BAN "include mod_ban (Requires CTRLS)" off \ - NLS "Use nls-builds mod_lang" off + NLS "Use nls (builds mod_lang)" off MODULES?= LIBDIRS?= @@ -156,6 +156,7 @@ MODULES:=${MODULES}:mod_sql:mod_sql_mysql INCLUDEDIRS:=${INCLUDEDIRS}:${LOCALBASE}/include LIBDIRS:=${LIBDIRS}:${LOCALBASE}/lib/mysql +PLIST_SUB+= MYSQL="" .endif .if defined(WITH_POSTGRESQL) @@ -227,8 +228,9 @@ ${WRKSRC}/utils/ftpcount.1 post-install: - [ -f ${PREFIX}/etc/proftpd.conf ] || \ - ${CP} ${EXAMPLESDIR}/etc/proftpd.conf ${PREFIX}/etc/proftpd.conf.sample + @if [ ! -f ${PREFIX}/etc/proftpd.conf ]; then \ + ${CP} -p ${EXAMPLESDIR}/etc/proftpd.conf ${PREFIX}/etc/proftpd.conf ; \ + fi .if !defined(NOPORTDOCS) @${MKDIR} ${PREFIX}/share/doc/proftpd diff -ruN --exclude=CVS /usr/ports/ftp/proftpd.orig/files/patch-contrib-mod_sql.c /usr/ports/ftp/proftpd/files/patch-contrib-mod_sql.c --- /usr/ports/ftp/proftpd.orig/files/patch-contrib-mod_sql.c Wed Dec 31 14:00:00 1969 +++ /usr/ports/ftp/proftpd/files/patch-contrib-mod_sql.c Thu Jan 4 16:38:34 2007 @@ -0,0 +1,268 @@ +--- contrib/mod_sql.c.orig Mon Dec 11 13:40:18 2006 ++++ contrib/mod_sql.c Thu Jan 4 14:31:13 2007 +@@ -23,7 +23,7 @@ + * the resulting executable, without including the source code for OpenSSL in + * the source distribution. + * +- * $Id: mod_sql.c,v 1.117 2006/12/11 22:40:18 castaglia Exp $ ++ * $Id: mod_sql.c,v 1.121 2007/01/03 18:24:35 castaglia Exp $ + */ + + #include "conf.h" +@@ -104,8 +104,11 @@ + + module sql_module; + +-static char *_sql_where(cmd_rec *, int, ...); + #define SQL_MAX_STMT_LEN 4096 ++ ++static char *sql_prepare_where(int, cmd_rec *, int, ...); ++#define SQL_PREPARE_WHERE_FL_NO_TAGS 0x00001 ++ + static char *resolve_long_tag(cmd_rec *, char *); + static int resolve_numeric_tag(cmd_rec *, char *); + static char *resolve_short_tag(cmd_rec *, char); +@@ -752,10 +755,10 @@ + return mr ? (char *) mr->data : NULL; + } + +-static char *_sql_where(cmd_rec *cmd, int cnt, ...) { ++static char *sql_prepare_where(int flags, cmd_rec *cmd, int cnt, ...) { + int i, flag; + int curr_avail; +- char *buf = "", *res, *tchar, *curr, *tmp; ++ char *buf = "", *res, *tchar; + va_list dummy; + + res = pcalloc(cmd->tmp_pool, SQL_MAX_STMT_LEN); +@@ -774,31 +777,53 @@ + } + va_end(dummy); + +- /* Process variables in WHERE clauses, except any "%{num}" references. */ +- curr = res; +- curr_avail = SQL_MAX_STMT_LEN; +- for (tmp = buf; *tmp; ) { +- char *str; +- modret_t *mr; ++ if (!(flags & SQL_PREPARE_WHERE_FL_NO_TAGS)) { ++ char *curr, *tmp; + +- if (*tmp == '%') { +- char *tag = NULL; ++ /* Process variables in WHERE clauses, except any "%{num}" references. */ ++ curr = res; ++ curr_avail = SQL_MAX_STMT_LEN; ++ ++ for (tmp = buf; *tmp; ) { ++ char *str; ++ modret_t *mr; + +- if (*(++tmp) == '{') { +- char *query; ++ if (*tmp == '%') { ++ char *tag = NULL; + +- if (*tmp != '\0') +- query = ++tmp; ++ if (*(++tmp) == '{') { ++ char *query; + +- while (*tmp && *tmp != '}') +- tmp++; ++ if (*tmp != '\0') ++ query = ++tmp; ++ ++ while (*tmp && *tmp != '}') ++ tmp++; ++ ++ tag = pstrndup(cmd->tmp_pool, query, (tmp - query)); ++ if (tag) { ++ str = resolve_long_tag(cmd, tag); ++ if (!str) ++ str = pstrdup(cmd->tmp_pool, ""); ++ ++ mr = _sql_dispatch(_sql_make_cmd(cmd->tmp_pool, 2, "default", ++ str), "sql_escapestring"); ++ if (check_response(mr) < 0) ++ return NULL; + +- tag = pstrndup(cmd->tmp_pool, query, (tmp - query)); +- if (tag) { +- str = resolve_long_tag(cmd, tag); +- if (!str) +- str = pstrdup(cmd->tmp_pool, ""); ++ sstrcat(curr, mr->data, curr_avail); ++ curr += strlen(mr->data); ++ curr_avail -= strlen(mr->data); ++ ++ if (*tmp != '\0') ++ tmp++; ++ ++ } else { ++ return NULL; ++ } + ++ } else { ++ str = resolve_short_tag(cmd, *tmp); + mr = _sql_dispatch(_sql_make_cmd(cmd->tmp_pool, 2, "default", + str), "sql_escapestring"); + if (check_response(mr) < 0) +@@ -810,32 +835,18 @@ + + if (*tmp != '\0') + tmp++; +- +- } else { +- return NULL; + } + + } else { +- str = resolve_short_tag(cmd, *tmp); +- mr = _sql_dispatch(_sql_make_cmd(cmd->tmp_pool, 2, "default", +- str), "sql_escapestring"); +- if (check_response(mr) < 0) +- return NULL; +- +- sstrcat(curr, mr->data, curr_avail); +- curr += strlen(mr->data); +- curr_avail -= strlen(mr->data); +- +- if (*tmp != '\0') +- tmp++; ++ *curr++ = *tmp++; ++ curr_avail--; + } +- +- } else { +- *curr++ = *tmp++; +- curr_avail--; + } ++ *curr++ = '\0'; ++ ++ } else { ++ res = buf; + } +- *curr++ = '\0'; + + return res; + } +@@ -1212,7 +1223,7 @@ + } + + if (!cmap.usercustom) { +- where = _sql_where(cmd, 2, usrwhere, cmap.userwhere); ++ where = sql_prepare_where(0, cmd, 2, usrwhere, cmap.userwhere, NULL); + + mr = _sql_dispatch(_sql_make_cmd(cmd->tmp_pool, 5, "default", + cmap.usrtable, cmap.usrfields, where, "1"), "sql_select"); +@@ -1438,7 +1449,7 @@ + return NULL; + } + +- where = _sql_where(cmd, 2, grpwhere, cmap.groupwhere); ++ where = sql_prepare_where(0, cmd, 2, grpwhere, cmap.groupwhere, NULL); + + mr = _sql_dispatch(_sql_make_cmd(cmd->tmp_pool, 5, "default", + cmap.grptable, cmap.grpfield, where, "1"), "sql_select"); +@@ -1456,7 +1467,7 @@ + + grpwhere = pstrcat(cmd->tmp_pool, cmap.grpfield, " = '", groupname, "'", + NULL); +- where = _sql_where(cmd, 2, grpwhere, cmap.groupwhere); ++ where = sql_prepare_where(0, cmd, 2, grpwhere, cmap.groupwhere, NULL); + + mr = _sql_dispatch(_sql_make_cmd(cmd->tmp_pool, 4, "default", + cmap.grptable, cmap.grpfields, where), "sql_select"); +@@ -1530,7 +1541,7 @@ + + usrwhere = pstrcat(cmd->tmp_pool, cmap.usrfield, " = '", _sql_realuser(cmd), + "'", NULL); +- where = _sql_where(cmd, 2, usrwhere, cmap.userwhere); ++ where = sql_prepare_where(0, cmd, 2, usrwhere, cmap.userwhere, NULL); + + mr = _sql_dispatch(_sql_make_cmd(cmd->tmp_pool, 4, "default", cmap.usrtable, + query, where), "sql_update"); +@@ -1606,7 +1617,8 @@ + cmap.grpmembersfield, " = '", username, "'", NULL); + } + +- where = _sql_where(cmd, 2, grpwhere, cmap.groupwhere); ++ where = sql_prepare_where(SQL_PREPARE_WHERE_FL_NO_TAGS, cmd, 2, grpwhere, ++ sql_prepare_where(0, cmd, 1, cmap.groupwhere, NULL), NULL); + + mr = _sql_dispatch(_sql_make_cmd(cmd->tmp_pool, 4, "default", + cmap.grptable, cmap.grpfields, where), "sql_select"); +@@ -1746,7 +1758,7 @@ + static char *resolve_short_tag(cmd_rec *cmd, char tag) { + char arg[256] = {'\0'}, *argp; + +- switch(tag) { ++ switch (tag) { + case 'A': { + char *pass; + +@@ -2915,7 +2927,7 @@ + /* single select or not? */ + if (SQL_FASTUSERS) { + /* retrieve our list of passwds */ +- where = _sql_where(cmd, 1, cmap.userwhere); ++ where = sql_prepare_where(0, cmd, 1, cmap.userwhere, NULL); + + mr = _sql_dispatch(_sql_make_cmd(cmd->tmp_pool, 4, "default", + cmap.usrtable, cmap.usrfields, where), "sql_select"); +@@ -2978,7 +2990,7 @@ + } + } else { + /* retrieve our list of passwds */ +- where = _sql_where(cmd, 1, cmap.userwhere); ++ where = sql_prepare_where(0, cmd, 1, cmap.userwhere, NULL); + + mr = _sql_dispatch(_sql_make_cmd(cmd->tmp_pool, 4, "default", + cmap.usrtable, cmap.usrfield, where), "sql_select"); +@@ -3086,7 +3098,7 @@ + + if (SQL_FASTGROUPS) { + /* retrieve our list of groups */ +- where = _sql_where(cmd, 1, cmap.groupwhere); ++ where = sql_prepare_where(0, cmd, 1, cmap.groupwhere, NULL); + + mr = _sql_dispatch(_sql_make_cmd(cmd->tmp_pool, 6, "default", + cmap.grptable, cmap.grpfields, where, NULL), "sql_select"); +@@ -3119,9 +3131,15 @@ + } + + } else { +- /* retrieve our list of groups */ +- where = _sql_where(cmd, 1, cmap.groupwhere); +- ++ /* Retrieve our list of groups. */ ++ if (cmap.groupwhere && ++ strlen(cmap.groupwhere) > 0) { ++ where = sql_prepare_where(0, cmd, 1, cmap.groupwhere, NULL); ++ ++ } else { ++ where = NULL; ++ } ++ + mr = _sql_dispatch(_sql_make_cmd(cmd->tmp_pool, 6, "default", + cmap.grptable, cmap.grpfield, where, NULL, "DISTINCT"), "sql_select"); + if (check_response(mr) < 0) +@@ -3593,7 +3611,7 @@ + + usrwhere = pstrcat(cmd->tmp_pool, cmap.usrfield, " = '", _sql_realuser(cmd), + "'", NULL); +- where = _sql_where(cmd, 2, usrwhere, cmap.userwhere); ++ where = sql_prepare_where(0, cmd, 2, usrwhere, cmap.userwhere, NULL); + + query = pstrcat(cmd->tmp_pool, cmap.sql_fstor, ", ", + cmap.sql_fretr, ", ", cmap.sql_bstor, ", ", +@@ -3627,7 +3645,7 @@ + + usrwhere = pstrcat(cmd->tmp_pool, cmap.usrfield, " = '", _sql_realuser(cmd), + "'", NULL); +- where = _sql_where(cmd, 2, usrwhere, cmap.userwhere); ++ where = sql_prepare_where(0, cmd, 2, usrwhere, cmap.userwhere, NULL); + + query = pstrcat(cmd->tmp_pool, cmap.sql_frate, ", ", + cmap.sql_fcred, ", ", cmap.sql_brate, ", ", diff -ruN --exclude=CVS /usr/ports/ftp/proftpd.orig/pkg-plist /usr/ports/ftp/proftpd/pkg-plist --- /usr/ports/ftp/proftpd.orig/pkg-plist Mon Jan 1 03:44:05 2007 +++ /usr/ports/ftp/proftpd/pkg-plist Tue Jan 2 14:44:52 2007 @@ -2,7 +2,6 @@ bin/ftpdctl bin/ftptop bin/ftpwho -etc/proftpd.conf.sample include/proftpd/auth.h include/proftpd/bindings.h include/proftpd/buildstamp.h @@ -55,6 +54,7 @@ sbin/ftpshut sbin/in.proftpd sbin/proftpd +%%MYSQL%%include/proftpd/mod_sql.h @unexec if cmp -s %D/etc/proftpd.conf %D/%%EXAMPLESDIR%%/etc/proftpd.conf; then rm -f %D/etc/proftpd.conf; fi %%EXAMPLESDIR%%/etc/proftpd.conf @exec if [ ! -f %D/etc/proftpd.conf ] ; then cp -p %D/%F %B/proftpd.conf; fi