Index: modules/mod_facts.c
===================================================================
RCS file: /cvsroot/proftp/proftpd/modules/mod_facts.c,v
retrieving revision 1.45
diff -u -r1.45 mod_facts.c
--- modules/mod_facts.c 23 May 2011 21:11:56 -0000 1.45
+++ modules/mod_facts.c 16 Nov 2011 23:42:05 -0000
@@ -1034,13 +1034,19 @@
c = find_config(get_dir_ctxt(cmd->tmp_pool, (char *) best_path), CONF_PARAM,
"DirFakeUser", FALSE);
if (c) {
- const char *fake_user;
+ const char *fake_user = NULL;
- fake_user = c->argv[0];
- if (strncmp(fake_user, "~", 2) != 0) {
- fake_uid = pr_auth_name2uid(cmd->tmp_pool, fake_user);
+ if (c->argc > 0) {
+ fake_user = c->argv[0];
+ if (strncmp(fake_user, "~", 2) != 0) {
+ fake_uid = pr_auth_name2uid(cmd->tmp_pool, fake_user);
+
+ } else {
+ fake_uid = session.uid;
+ }
} else {
+ /* Handle the "DirFakeUser off" case (Bug#3715). */
fake_uid = session.uid;
}
}
@@ -1048,13 +1054,19 @@
c = find_config(get_dir_ctxt(cmd->tmp_pool, (char *) best_path), CONF_PARAM,
"DirFakeGroup", FALSE);
if (c) {
- const char *fake_group;
+ const char *fake_group = NULL;
- fake_group = c->argv[0];
- if (strncmp(fake_group, "~", 2) != 0) {
- fake_gid = pr_auth_name2gid(cmd->tmp_pool, fake_group);
+ if (c->argc > 0) {
+ fake_group = c->argv[0];
+ if (strncmp(fake_group, "~", 2) != 0) {
+ fake_gid = pr_auth_name2gid(cmd->tmp_pool, fake_group);
+
+ } else {
+ fake_gid = session.gid;
+ }
} else {
+ /* Handle the "DirFakeGroup off" case (Bug#3715). */
fake_gid = session.gid;
}
}