Blob Blame History Raw
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;
     }
   }