[prev in list] [next in list] [prev in thread] [next in thread]
List: proftpd-committers
Subject: [ProFTPD-committers] CVS: proftpd/modules mod_log.c,1.75,1.76
From: TJ Saunders <castaglia () users ! sourceforge ! net>
Date: 2006-05-25 15:46:44
Message-ID: E1FjI2u-0001up-L1 () sc8-pr-cvs1 ! sourceforge ! net
[Download RAW message or body]
Update of /cvsroot/proftp/proftpd/modules
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7336/modules
Modified Files:
mod_log.c
Log Message:
Bug#2793 - LogFormat variable for the ProFTPD version.
Index: mod_log.c
===================================================================
RCS file: /cvsroot/proftp/proftpd/modules/mod_log.c,v
retrieving revision 1.75
retrieving revision 1.76
diff -u -r1.75 -r1.76
--- mod_log.c 20 Apr 2006 02:24:05 -0000 1.75
+++ mod_log.c 25 May 2006 15:46:42 -0000 1.76
@@ -96,6 +96,7 @@
#define META_DIR_PATH 24
#define META_CMD_PARAMS 25
#define META_RESPONSE_STR 26
+#define META_VERSION 27
static pool *log_pool;
static logformat_t *formats = NULL;
@@ -130,6 +131,7 @@
%u - Local user
%V - DNS name of server serving request
%v - ServerName of server serving request
+ %{version} - ProFTPD version
*/
static void add_meta(unsigned char **s, unsigned char meta, int args, ...) {
@@ -187,123 +189,133 @@
arg = NULL;
tmp++;
for (;;) {
- switch (*tmp) {
- case '{':
- arg = preparse_arg(&tmp);
- continue;
-
- case 'a':
- add_meta(&outs, META_REMOTE_IP, 0);
- break;
-
- case 'A':
- add_meta(&outs, META_ANON_PASS, 0);
- break;
-
- case 'b':
- add_meta(&outs, META_BYTES_SENT, 0);
- break;
-
- case 'c':
- add_meta(&outs, META_CLASS, 0);
- break;
-
- case 'D':
- add_meta(&outs, META_DIR_PATH, 0);
- break;
-
- case 'd':
- add_meta(&outs, META_DIR_NAME, 0);
- break;
-
- case 'e':
- if (arg) {
- add_meta(&outs, META_ENV_VAR, 0);
- add_meta(&outs, META_ARG, 1, (int) strlen(arg), arg);
- }
- break;
-
- case 'f':
- add_meta(&outs, META_FILENAME, 0);
- break;
-
- case 'F':
- add_meta(&outs, META_XFER_PATH, 0);
- break;
-
- case 'h':
- add_meta(&outs, META_REMOTE_HOST, 0);
- break;
-
- case 'J':
- add_meta(&outs, META_CMD_PARAMS, 0);
- break;
-
- case 'l':
- add_meta(&outs, META_IDENT_USER, 0);
- break;
- case 'L':
- add_meta(&outs, META_LOCAL_IP, 0);
- break;
-
- case 'm':
- add_meta(&outs, META_METHOD, 0);
- break;
-
- case 'p':
- add_meta(&outs, META_LOCAL_PORT, 0);
- break;
-
- case 'P':
- add_meta(&outs, META_PID, 0);
- break;
-
- case 'r':
- add_meta(&outs, META_COMMAND, 0);
- break;
-
- case 's':
- add_meta(&outs, META_RESPONSE_CODE, 0);
- break;
-
- case 'S':
- add_meta(&outs, META_RESPONSE_STR, 0);
- break;
-
- case 't':
- add_meta(&outs, META_TIME, 0);
- if (arg)
- add_meta(&outs, META_ARG, 1, (int) strlen(arg), arg);
- break;
-
- case 'T':
- add_meta(&outs, META_SECONDS, 0);
- break;
-
- case 'u':
- add_meta(&outs, META_USER, 0);
- break;
-
- case 'U':
- add_meta(&outs, META_ORIGINAL_USER, 0);
- break;
-
- case 'v':
- add_meta(&outs, META_LOCAL_NAME, 0);
- break;
-
- case 'V':
- add_meta(&outs, META_LOCAL_FQDN, 0);
- break;
+ if (strncmp(tmp, "{version}", 9) == 0) {
+ add_meta(&outs, META_VERSION, 0);
+ tmp += 9;
+ *outs++ = *tmp;
+ continue;
+ }
- case '%':
- *outs++ = '%';
- break;
+ switch (*tmp) {
+ case '{':
+ arg = preparse_arg(&tmp);
+ continue;
+
+ case 'a':
+ add_meta(&outs, META_REMOTE_IP, 0);
+ break;
+
+ case 'A':
+ add_meta(&outs, META_ANON_PASS, 0);
+ break;
+
+ case 'b':
+ add_meta(&outs, META_BYTES_SENT, 0);
+ break;
+
+ case 'c':
+ add_meta(&outs, META_CLASS, 0);
+ break;
+
+ case 'D':
+ add_meta(&outs, META_DIR_PATH, 0);
+ break;
+
+ case 'd':
+ add_meta(&outs, META_DIR_NAME, 0);
+ break;
+
+ case 'e':
+ if (arg) {
+ add_meta(&outs, META_ENV_VAR, 0);
+ add_meta(&outs, META_ARG, 1, (int) strlen(arg), arg);
+ }
+ break;
+
+ case 'f':
+ add_meta(&outs, META_FILENAME, 0);
+ break;
+
+ case 'F':
+ add_meta(&outs, META_XFER_PATH, 0);
+ break;
+
+ case 'h':
+ add_meta(&outs, META_REMOTE_HOST, 0);
+ break;
+
+ case 'J':
+ add_meta(&outs, META_CMD_PARAMS, 0);
+ break;
+
+ case 'l':
+ add_meta(&outs, META_IDENT_USER, 0);
+ break;
+
+ case 'L':
+ add_meta(&outs, META_LOCAL_IP, 0);
+ break;
+
+ case 'm':
+ add_meta(&outs, META_METHOD, 0);
+ break;
+
+ case 'p':
+ add_meta(&outs, META_LOCAL_PORT, 0);
+ break;
+
+ case 'P':
+ add_meta(&outs, META_PID, 0);
+ break;
+
+ case 'r':
+ add_meta(&outs, META_COMMAND, 0);
+ break;
+
+ case 's':
+ add_meta(&outs, META_RESPONSE_CODE, 0);
+ break;
+
+ case 'S':
+ add_meta(&outs, META_RESPONSE_STR, 0);
+ break;
+
+ case 't':
+ add_meta(&outs, META_TIME, 0);
+ if (arg)
+ add_meta(&outs, META_ARG, 1, (int) strlen(arg), arg);
+ break;
+
+ case 'T':
+ add_meta(&outs, META_SECONDS, 0);
+ break;
+
+ case 'u':
+ add_meta(&outs, META_USER, 0);
+ break;
+
+ case 'U':
+ add_meta(&outs, META_ORIGINAL_USER, 0);
+ break;
+
+ case 'v':
+ add_meta(&outs, META_LOCAL_NAME, 0);
+ break;
+
+ case 'V':
+ add_meta(&outs, META_LOCAL_FQDN, 0);
+ break;
+
+ case '%':
+ *outs++ = '%';
+ break;
}
+
tmp++;
break;
}
+
} else {
*outs++ = *tmp++;
}
@@ -543,340 +555,341 @@
m = (*f) + 1;
switch (*m) {
- case META_ARG:
- m++; argp = arg;
- while (*m != META_ARG_END)
- *argp++ = (char)*m++;
-
- *argp = 0; argp = arg;
- m++;
- break;
-
- case META_ANON_PASS:
- argp = arg;
-
- pass = get_param_ptr(cmd->server->conf, C_PASS, FALSE);
- if (!pass)
- pass = "UNKNOWN";
-
- sstrncpy(argp, pass, sizeof(arg));
-
- m++;
- break;
-
- case META_BYTES_SENT:
- argp = arg;
- if (session.xfer.p)
- snprintf(argp, sizeof(arg), "%" PR_LU,
- (pr_off_t) session.xfer.total_bytes);
- else
- sstrncpy(argp, "-", sizeof(arg));
-
- m++;
- break;
-
- case META_CLASS:
- argp = arg;
- sstrncpy(argp, session.class ? session.class->cls_name : "-", sizeof(arg));
- m++;
- break;
-
- case META_DIR_NAME:
- argp = arg;
-
- if (strcmp(cmd->argv[0], C_CDUP) == 0 ||
- strcmp(cmd->argv[0], C_CWD) == 0 ||
- strcmp(cmd->argv[0], C_MKD) == 0 ||
- strcmp(cmd->argv[0], C_RMD) == 0 ||
- strcmp(cmd->argv[0], C_XCWD) == 0 ||
- strcmp(cmd->argv[0], C_XCUP) == 0 ||
- strcmp(cmd->argv[0], C_XMKD) == 0 ||
- strcmp(cmd->argv[0], C_XRMD) == 0) {
- char *tmp = strrchr(cmd->arg, '/');
+ case META_ARG:
+ m++;
+ argp = arg;
+ while (*m != META_ARG_END)
+ *argp++ = (char) *m++;
- sstrncpy(argp, tmp ? tmp : cmd->arg, sizeof(arg));
+ *argp = 0;
+ argp = arg;
+ m++;
+ break;
- } else {
- sstrncpy(argp, "", sizeof(arg));
- }
+ case META_ANON_PASS:
+ argp = arg;
- m++;
- break;
+ pass = get_param_ptr(cmd->server->conf, C_PASS, FALSE);
+ if (!pass)
+ pass = "UNKNOWN";
- case META_DIR_PATH:
- argp = arg;
+ sstrncpy(argp, pass, sizeof(arg));
- if (strcmp(cmd->argv[0], C_CDUP) == 0 ||
- strcmp(cmd->argv[0], C_MKD) == 0 ||
- strcmp(cmd->argv[0], C_RMD) == 0 ||
- strcmp(cmd->argv[0], C_XCUP) == 0 ||
- strcmp(cmd->argv[0], C_XMKD) == 0 ||
- strcmp(cmd->argv[0], C_XRMD) == 0) {
- sstrncpy(argp, dir_abs_path(p, cmd->arg, TRUE), sizeof(arg));
-
- } else if (strcmp(cmd->argv[0], C_CWD) == 0 ||
- strcmp(cmd->argv[0], C_XCWD) == 0) {
-
- /* Note: by this point in the dispatch cycle, the current working
- * directory has already been changed. For the CWD/XCWD commands,
- * this means that dir_abs_path() may return an improper path,
- * with the target directory being reported twice. To deal with this,
- * don't use dir_abs_path(), and use pr_fs_getvwd()/pr_fs_getcwd()
- * instead.
- */
-
- if (session.chroot_path) {
- /* Chrooted session. */
- sstrncpy(arg, strcmp(pr_fs_getvwd(), "/") ?
- pdircat(p, session.chroot_path, pr_fs_getvwd(), NULL) :
- session.chroot_path, sizeof(arg));
+ m++;
+ break;
- } else
+ case META_BYTES_SENT:
+ argp = arg;
+ if (session.xfer.p)
+ snprintf(argp, sizeof(arg), "%" PR_LU,
+ (pr_off_t) session.xfer.total_bytes);
+ else
+ sstrncpy(argp, "-", sizeof(arg));
- /* Non-chrooted session. */
- sstrncpy(arg, pr_fs_getcwd(), sizeof(arg));
+ m++;
+ break;
- } else
- sstrncpy(argp, "", sizeof(arg));
+ case META_CLASS:
+ argp = arg;
+ sstrncpy(argp, session.class ? session.class->cls_name : "-",
+ sizeof(arg));
+ m++;
+ break;
+
+ case META_DIR_NAME:
+ argp = arg;
- m++;
- break;
+ if (strcmp(cmd->argv[0], C_CDUP) == 0 ||
+ strcmp(cmd->argv[0], C_CWD) == 0 ||
+ strcmp(cmd->argv[0], C_MKD) == 0 ||
+ strcmp(cmd->argv[0], C_RMD) == 0 ||
+ strcmp(cmd->argv[0], C_XCWD) == 0 ||
+ strcmp(cmd->argv[0], C_XCUP) == 0 ||
+ strcmp(cmd->argv[0], C_XMKD) == 0 ||
+ strcmp(cmd->argv[0], C_XRMD) == 0) {
+ char *tmp = strrchr(cmd->arg, '/');
- case META_FILENAME:
- argp = arg;
+ sstrncpy(argp, tmp ? tmp : cmd->arg, sizeof(arg));
- if (strcmp(cmd->argv[0], C_RNTO) == 0) {
- sstrncpy(argp, dir_abs_path(p, cmd->arg, TRUE), sizeof(arg));
+ } else {
+ sstrncpy(argp, "", sizeof(arg));
+ }
- } else if (session.xfer.p &&
- session.xfer.path) {
- sstrncpy(argp, dir_abs_path(p, session.xfer.path, TRUE), sizeof(arg));
+ m++;
+ break;
- } else {
+ case META_DIR_PATH:
+ argp = arg;
- /* Some commands (i.e. DELE, MKD, RMD, XMKD, and XRMD) have associated
- * filenames that are not stored in the session.xfer structure; these
- * should be expanded properly as well.
- */
- if (strcmp(cmd->argv[0], C_DELE) == 0 ||
+ if (strcmp(cmd->argv[0], C_CDUP) == 0 ||
strcmp(cmd->argv[0], C_MKD) == 0 ||
strcmp(cmd->argv[0], C_RMD) == 0 ||
+ strcmp(cmd->argv[0], C_XCUP) == 0 ||
strcmp(cmd->argv[0], C_XMKD) == 0 ||
- strcmp(cmd->argv[0], C_XRMD) == 0)
- sstrncpy(arg, dir_abs_path(p, cmd->arg, TRUE), sizeof(arg));
+ strcmp(cmd->argv[0], C_XRMD) == 0) {
+ sstrncpy(argp, dir_abs_path(p, cmd->arg, TRUE), sizeof(arg));
- else
- /* All other situations get a "-". */
- sstrncpy(argp, "-", sizeof(arg));
- }
+ } else if (strcmp(cmd->argv[0], C_CWD) == 0 ||
+ strcmp(cmd->argv[0], C_XCWD) == 0) {
- m++;
- break;
+ /* Note: by this point in the dispatch cycle, the current working
+ * directory has already been changed. For the CWD/XCWD commands,
+ * this means that dir_abs_path() may return an improper path,
+ * with the target directory being reported twice. To deal with this,
+ * don't use dir_abs_path(), and use pr_fs_getvwd()/pr_fs_getcwd()
+ * instead.
+ */
- case META_XFER_PATH:
- argp = arg;
- if (session.xfer.p && session.xfer.path) {
- sstrncpy(argp, session.xfer.path, sizeof(arg));
+ if (session.chroot_path) {
+ /* Chrooted session. */
+ sstrncpy(arg, strcmp(pr_fs_getvwd(), "/") ?
+ pdircat(p, session.chroot_path, pr_fs_getvwd(), NULL) :
+ session.chroot_path, sizeof(arg));
- } else {
+ } else
- /* Some commands (i.e. DELE) have associated filenames that are not
- * stored in the session.xfer structure; these should be expanded
- * properly as well.
- */
- if (strcmp(cmd->argv[0], C_DELE) == 0)
- sstrncpy(arg, cmd->arg, sizeof(arg));
+ /* Non-chrooted session. */
+ sstrncpy(arg, pr_fs_getcwd(), sizeof(arg));
- else
- sstrncpy(argp, "-", sizeof(arg));
- }
+ } else
+ sstrncpy(argp, "", sizeof(arg));
- m++;
- break;
+ m++;
+ break;
- case META_ENV_VAR:
- argp = arg;
- m++;
+ case META_FILENAME:
+ argp = arg;
- if (*m == META_START && *(m+1) == META_ARG) {
- char *env;
+ if (strcmp(cmd->argv[0], C_RNTO) == 0) {
+ sstrncpy(argp, dir_abs_path(p, cmd->arg, TRUE), sizeof(arg));
- env = getenv(get_next_meta(p,cmd,&m));
- sstrncpy(argp, env, sizeof(arg));
- }
+ } else if (session.xfer.p &&
+ session.xfer.path) {
+ sstrncpy(argp, dir_abs_path(p, session.xfer.path, TRUE), sizeof(arg));
- break;
+ } else {
+ /* Some commands (i.e. DELE, MKD, RMD, XMKD, and XRMD) have associated
+ * filenames that are not stored in the session.xfer structure; these
+ * should be expanded properly as well.
+ */
+ if (strcmp(cmd->argv[0], C_DELE) == 0 ||
+ strcmp(cmd->argv[0], C_MKD) == 0 ||
+ strcmp(cmd->argv[0], C_RMD) == 0 ||
+ strcmp(cmd->argv[0], C_XMKD) == 0 ||
+ strcmp(cmd->argv[0], C_XRMD) == 0)
+ sstrncpy(arg, dir_abs_path(p, cmd->arg, TRUE), sizeof(arg));
- case META_REMOTE_HOST:
- argp = arg;
- sstrncpy(argp, pr_netaddr_get_sess_remote_name(), sizeof(arg));
- m++;
- break;
-
- case META_REMOTE_IP:
- argp = arg;
- sstrncpy(argp, pr_netaddr_get_ipstr(pr_netaddr_get_sess_remote_addr()),
- sizeof(arg));
- m++;
- break;
-
- case META_IDENT_USER:
- argp = arg;
- sstrncpy(argp, session.ident_user, sizeof(arg));
- m++;
- break;
-
- case META_METHOD:
- argp = arg;
- sstrncpy(argp, cmd->argv[0], sizeof(arg));
- m++;
- break;
-
- case META_LOCAL_PORT:
- argp = arg;
- snprintf(argp, sizeof(arg), "%d", cmd->server->ServerPort);
- m++;
- break;
-
- case META_LOCAL_IP:
- argp = arg;
- sstrncpy(argp, pr_netaddr_get_ipstr(session.c->local_addr), sizeof(arg));
- m++;
- break;
-
- case META_LOCAL_FQDN:
- argp = arg;
- sstrncpy(argp, cmd->server->ServerFQDN, sizeof(arg));
- m++;
- break;
-
- case META_PID:
- argp = arg;
- snprintf(argp, sizeof(arg), "%u",(unsigned int)getpid());
- m++;
- break;
-
- case META_TIME:
- {
- char *time_fmt = "[%d/%b/%Y:%H:%M:%S ";
- struct tm t;
- int internal_fmt = 1;
- int timz;
- char sign;
-
- argp = arg; m++;
-
- if (*m == META_START && *(m+1) == META_ARG) {
- time_fmt = get_next_meta(p, cmd, &m);
- internal_fmt = 0;
+ else
+ /* All other situations get a "-". */
+ sstrncpy(argp, "-", sizeof(arg));
}
- t = *_get_gmtoff(&timz);
- sign = (timz < 0 ? '-' : '+');
- if (timz < 0)
- timz = -timz;
-
- strftime(argp, 80, time_fmt, &t);
- if (internal_fmt) {
- if (strlen(argp) < sizeof(arg))
- snprintf(argp + strlen(argp), sizeof(arg) - strlen(argp),
- "%c%.2d%.2d]", sign, timz/60, timz%60);
+ m++;
+ break;
+
+ case META_XFER_PATH:
+ argp = arg;
+ if (session.xfer.p &&
+ session.xfer.path) {
+ sstrncpy(argp, session.xfer.path, sizeof(arg));
+
+ } else {
+ /* Some commands (i.e. DELE) have associated filenames that are not
+ * stored in the session.xfer structure; these should be expanded
+ * properly as well.
+ */
+ if (strcmp(cmd->argv[0], C_DELE) == 0)
+ sstrncpy(arg, cmd->arg, sizeof(arg));
+
else
- pr_log_pri(PR_LOG_NOTICE, "notice: %%t expansion yields excessive "
- "string, ignoring");
+ sstrncpy(argp, "-", sizeof(arg));
}
- }
- break;
- case META_SECONDS:
- argp = arg;
- if (session.xfer.p) {
-
- /* Make sure that session.xfer.start_time actually has values (which
- * is not always the case).
- */
- if (session.xfer.start_time.tv_sec != 0 ||
- session.xfer.start_time.tv_usec != 0) {
- struct timeval end_time;
-
- gettimeofday(&end_time,NULL);
- end_time.tv_sec -= session.xfer.start_time.tv_sec;
-
- if (end_time.tv_usec >= session.xfer.start_time.tv_usec)
- end_time.tv_usec -= session.xfer.start_time.tv_usec;
-
- else {
- end_time.tv_usec = 1000000L - (session.xfer.start_time.tv_usec -
- end_time.tv_usec);
- end_time.tv_sec--;
+ m++;
+ break;
+
+ case META_ENV_VAR:
+ argp = arg;
+ m++;
+
+ if (*m == META_START &&
+ *(m+1) == META_ARG) {
+ char *env;
+
+ env = getenv(get_next_meta(p, cmd, &m));
+ sstrncpy(argp, env, sizeof(arg));
+ }
+
+ break;
+
+ case META_REMOTE_HOST:
+ argp = arg;
+ sstrncpy(argp, pr_netaddr_get_sess_remote_name(), sizeof(arg));
+ m++;
+ break;
+
+ case META_REMOTE_IP:
+ argp = arg;
+ sstrncpy(argp, pr_netaddr_get_ipstr(pr_netaddr_get_sess_remote_addr()),
+ sizeof(arg));
+ m++;
+ break;
+
+ case META_IDENT_USER:
+ argp = arg;
+ sstrncpy(argp, session.ident_user, sizeof(arg));
+ m++;
+ break;
+
+ case META_METHOD:
+ argp = arg;
+ sstrncpy(argp, cmd->argv[0], sizeof(arg));
+ m++;
+ break;
+
+ case META_LOCAL_PORT:
+ argp = arg;
+ snprintf(argp, sizeof(arg), "%d", cmd->server->ServerPort);
+ m++;
+ break;
+
+ case META_LOCAL_IP:
+ argp = arg;
+ sstrncpy(argp, pr_netaddr_get_ipstr(session.c->local_addr), sizeof(arg));
+ m++;
+ break;
+
+ case META_LOCAL_FQDN:
+ argp = arg;
+ sstrncpy(argp, cmd->server->ServerFQDN, sizeof(arg));
+ m++;
+ break;
+
+ case META_PID:
+ argp = arg;
+ snprintf(argp, sizeof(arg), "%u",(unsigned int)getpid());
+ m++;
+ break;
+
+ case META_TIME:
+ {
+ char *time_fmt = "[%d/%b/%Y:%H:%M:%S ";
+ struct tm t;
+ int internal_fmt = 1;
+ int timz;
+ char sign;
+
+ argp = arg;
+ m++;
+
+ if (*m == META_START &&
+ *(m+1) == META_ARG) {
+ time_fmt = get_next_meta(p, cmd, &m);
+ internal_fmt = 0;
}
- snprintf(argp, sizeof(arg), "%ld.%03ld", (long) end_time.tv_sec,
- (long) (end_time.tv_usec / 1000));
+ t = *_get_gmtoff(&timz);
+ sign = (timz < 0 ? '-' : '+');
+ if (timz < 0)
+ timz = -timz;
+
+ strftime(argp, 80, time_fmt, &t);
+ if (internal_fmt) {
+ if (strlen(argp) < sizeof(arg))
+ snprintf(argp + strlen(argp), sizeof(arg) - strlen(argp),
+ "%c%.2d%.2d]", sign, timz/60, timz%60);
+ else
+ pr_log_pri(PR_LOG_NOTICE, "notice: %%t expansion yields excessive "
+ "string, ignoring");
+ }
+ }
+ break;
- } else
- sstrncpy(argp, "-", sizeof(arg));
+ case META_SECONDS:
+ argp = arg;
+ if (session.xfer.p) {
+ /* Make sure that session.xfer.start_time actually has values (which
+ * is not always the case).
+ */
+ if (session.xfer.start_time.tv_sec != 0 ||
+ session.xfer.start_time.tv_usec != 0) {
+ struct timeval end_time;
+
+ gettimeofday(&end_time,NULL);
+ end_time.tv_sec -= session.xfer.start_time.tv_sec;
+
+ if (end_time.tv_usec >= session.xfer.start_time.tv_usec)
+ end_time.tv_usec -= session.xfer.start_time.tv_usec;
+
+ else {
+ end_time.tv_usec = 1000000L - (session.xfer.start_time.tv_usec -
+ end_time.tv_usec);
+ end_time.tv_sec--;
+ }
- } else
- sstrncpy(argp, "-", sizeof(arg));
+ snprintf(argp, sizeof(arg), "%ld.%03ld", (long) end_time.tv_sec,
+ (long) (end_time.tv_usec / 1000));
+
+ } else
+ sstrncpy(argp, "-", sizeof(arg));
- m++;
- break;
+ } else
+ sstrncpy(argp, "-", sizeof(arg));
- case META_COMMAND:
- argp = arg;
+ m++;
+ break;
- if (strcasecmp(cmd->argv[0], C_PASS) == 0 &&
- session.hide_password) {
- sstrncpy(argp, "PASS (hidden)", sizeof(arg));
+ case META_COMMAND:
+ argp = arg;
- } else {
- sstrncpy(argp, get_full_cmd(cmd), sizeof(arg));
- }
+ if (strcasecmp(cmd->argv[0], C_PASS) == 0 &&
+ session.hide_password) {
+ sstrncpy(argp, "PASS (hidden)", sizeof(arg));
- m++;
- break;
+ } else {
+ sstrncpy(argp, get_full_cmd(cmd), sizeof(arg));
+ }
- case META_CMD_PARAMS:
- argp = arg;
- if (strcasecmp(cmd->argv[0], C_PASS) == 0 &&
- session.hide_password) {
- sstrncpy(argp, "(hidden)", sizeof(arg));
+ m++;
+ break;
- } else {
- sstrncpy(argp, cmd->arg, sizeof(arg));
- }
+ case META_CMD_PARAMS:
+ argp = arg;
+ if (strcasecmp(cmd->argv[0], C_PASS) == 0 &&
+ session.hide_password) {
+ sstrncpy(argp, "(hidden)", sizeof(arg));
- m++;
- break;
+ } else {
+ sstrncpy(argp, cmd->arg, sizeof(arg));
+ }
- case META_LOCAL_NAME:
- argp = arg;
+ m++;
+ break;
- sstrncpy(argp, cmd->server->ServerName, sizeof(arg));
- m++;
- break;
+ case META_LOCAL_NAME:
+ argp = arg;
+ sstrncpy(argp, cmd->server->ServerName, sizeof(arg));
+ m++;
+ break;
- case META_USER:
- argp = arg;
+ case META_USER:
+ argp = arg;
- if (!session.user) {
- char *u;
+ if (!session.user) {
+ char *u = get_param_ptr(cmd->server->conf,"UserName",FALSE);
+ if (!u)
+ u = "root";
- u = get_param_ptr(cmd->server->conf,"UserName",FALSE);
- if (!u)
- u = "root";
+ sstrncpy(argp, u, sizeof(arg));
- sstrncpy(argp, u, sizeof(arg));
- } else {
- sstrncpy(argp, session.user, sizeof(arg));
- }
+ } else {
+ sstrncpy(argp, session.user, sizeof(arg));
+ }
- m++;
- break;
+ m++;
+ break;
- case META_ORIGINAL_USER:
- {
+ case META_ORIGINAL_USER: {
char *login_user = get_param_ptr(main_server->conf, C_USER, FALSE);
argp = arg;
@@ -889,8 +902,7 @@
break;
}
- case META_RESPONSE_CODE:
- {
+ case META_RESPONSE_CODE: {
pr_response_t *r;
argp = arg;
@@ -908,10 +920,12 @@
} else {
sstrncpy(argp, "-", sizeof(arg));
}
+
+ m++;
+ break;
}
- case META_RESPONSE_STR:
- {
+ case META_RESPONSE_STR: {
pr_response_t *r;
argp = arg;
@@ -925,12 +939,19 @@
} else {
sstrncpy(argp, "-", sizeof(arg));
}
+
+ m++;
+ break;
}
- m++;
- break;
- }
+ case META_VERSION:
+ argp = arg;
+ sstrncpy(argp, PROFTPD_VERSION_TEXT, sizeof(arg));
+ m++;
+ break;
+ }
+
*f = m;
if (argp) {
return pstrdup(p, argp);
@@ -989,14 +1010,18 @@
logfile_t *lf = NULL;
/* If not in anon mode, only handle logs for main servers */
- for (lf = logs; lf; lf = lf->next)
- if (lf->lf_fd != -1 && (cmd->class & lf->lf_classes)) {
- if (!session.anon_config && lf->lf_conf &&
+ for (lf = logs; lf; lf = lf->next) {
+ if (lf->lf_fd != -1 &&
+ (cmd->class & lf->lf_classes)) {
+
+ if (!session.anon_config &&
+ lf->lf_conf &&
lf->lf_conf->config_type == CONF_ANON)
continue;
do_log(cmd, lf);
}
+ }
return DECLINED(cmd);
}
-------------------------------------------------------
All the advantages of Linux Managed Hosting--Without the Cost and Risk!
Fully trained technicians. The highest number of Red Hat certifications in
the hosting industry. Fanatical Support. Click to learn more
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=107521&bid=248729&dat=121642
_______________________________________________
ProFTPD Committers Mailing List
proftpd-committers@proftpd.org
https://lists.sourceforge.net/lists/listinfo/proftp-committers
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic