Avoid segfault on ref:name specified as uid.
authorPhil Pennock <pdp@exim.org>
Wed, 23 Mar 2011 02:28:33 +0000 (22:28 -0400)
committerPhil Pennock <pdp@exim.org>
Wed, 23 Mar 2011 02:28:33 +0000 (22:28 -0400)
If group not also specified, make this a fatal error.  If group
specified, we'll error out anyway unless the group can be resolved.

Approach considered but not followed: fatal config error if built with
ref:name where name is a number.

fixes bug 1098

doc/doc-txt/ChangeLog
src/src/exim.c

index 7105e5fc644d230d8e442f22614f2a8324eca4cb..2b3ec8573b68cd2fcfb9eb77354c5e94c5ee8705 100644 (file)
@@ -15,6 +15,9 @@ PP/03 New openssl_options items: no_sslv2 no_sslv3 no_ticket no_tlsv1
 
 PP/04 New "dns_use_edns0" global option.
 
+PP/05 Don't segfault on misconfiguration of ref:name exim-user as uid.
+      Bugzilla 1098.
+
 
 Exim version 4.75
 -----------------
index 30974c9c6621e6bd0fffe015125dc57ac98c3dc3..528ffc7c84b65309fb6096aa7becd981306d1739 100644 (file)
@@ -1414,7 +1414,19 @@ if (route_finduser(US EXIM_USERNAME, &pw, &exim_uid))
       EXIM_USERNAME);
     exit(EXIT_FAILURE);
     }
-  exim_gid = pw->pw_gid;
+  /* If ref:name uses a number as the name, route_finduser() returns
+  TRUE with exim_uid set and pw coerced to NULL. */
+  if (pw)
+    exim_gid = pw->pw_gid;
+#ifndef EXIM_GROUPNAME
+  else
+    {
+    fprintf(stderr,
+        "exim: ref:name should specify a usercode, not a group.\n"
+        "exim: can't let you get away with it unless you also specify a group.\n");
+    exit(EXIT_FAILURE);
+    }
+#endif
   }
 else
   {