Change originator_xxx fields in the daemon when it gives up root so that
authorPhilip Hazel <ph10@hermes.cam.ac.uk>
Wed, 14 Mar 2007 12:15:56 +0000 (12:15 +0000)
committerPhilip Hazel <ph10@hermes.cam.ac.uk>
Wed, 14 Mar 2007 12:15:56 +0000 (12:15 +0000)
the -H files are always consistent.

doc/doc-txt/ChangeLog
src/src/daemon.c
test/runtest
test/stdout/0035
test/stdout/3415

index 9140b63..bbaa500 100644 (file)
@@ -1,4 +1,4 @@
-$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.495 2007/03/14 11:22:23 ph10 Exp $
+$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.496 2007/03/14 12:15:56 ph10 Exp $
 
 Change log file for Exim from version 4.21
 -------------------------------------------
@@ -175,6 +175,13 @@ PH/39 In a list of hosts for manualroute, if one item (either because of multi-
       from the list, along with the local host and any following hosts (which
       is what is supposed to happen).
 
+PH/40 When Exim receives a message, it writes the login name, uid, and gid of
+      whoever called Exim into the -H file. In the case of the daemon it was
+      behaving confusingly. When first started, it used values for whoever
+      started the daemon, but after a SIGHUP it used the Exim user (because it
+      calls itself on a restart). I have changed the code so that it now always
+      uses the Exim user.
+
 
 Exim version 4.66
 -----------------
index 4c6c908..e844403 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/daemon.c,v 1.22 2007/01/23 14:34:02 ph10 Exp $ */
+/* $Cambridge: exim/src/src/daemon.c,v 1.23 2007/03/14 12:15:56 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -881,6 +881,7 @@ There are no arguments to this function, and it never returns. */
 void
 daemon_go(void)
 {
+struct passwd *pw;
 int *listen_sockets = NULL;
 int listen_socket_count = 0;
 ip_address_item *addresses = NULL;
@@ -1453,6 +1454,14 @@ cannot do this. */
 
 exim_setugid(exim_uid, exim_gid, geteuid()==root_uid, US"running as a daemon");
 
+/* Update the originator_xxx fields so that received messages as listed as
+coming from Exim, not whoever started the daemon. */
+
+originator_uid = exim_uid;
+originator_gid = exim_gid;
+originator_login = ((pw = getpwuid(exim_uid)) != NULL)?
+  string_copy_malloc(US pw->pw_name) : US"exim";
+
 /* Get somewhere to keep the list of queue-runner pids if we are keeping track
 of them (and also if we are doing queue runs). */
 
index 4e511dc..472aeaf 100755 (executable)
@@ -1,6 +1,6 @@
 #! /usr/bin/perl -w
 
-# $Cambridge: exim/test/runtest,v 1.24 2007/02/08 15:16:19 ph10 Exp $
+# $Cambridge: exim/test/runtest,v 1.25 2007/03/14 12:15:56 ph10 Exp $
 
 ###############################################################################
 # This is the controlling script for the "new" test suite for Exim. It should #
@@ -463,9 +463,10 @@ while(<IN>)
 
 
   # ======== Exim's login ========
-  # For bounce messages, this will appear on the U= lines in logs and also
-  # after Received: and in addresses. In one pipe test it appears after
-  # "Running as:". It also appears in addresses, and in the names of lock
+  # For messages received by the daemon, this is in the -H file, which some
+  # tests inspect. For bounce messages, this will appear on the U= lines in
+  # logs and also after Received: and in addresses. In one pipe test it appears
+  # after "Running as:". It also appears in addresses, and in the names of lock
   # files.
 
   s/U=$parm_eximuser/U=EXIMUSER/;
@@ -482,6 +483,8 @@ while(<IN>)
   s/\buid=$parm_exim_uid\b/uid=EXIM_UID/g;
   s/\bgid=$parm_exim_gid\b/gid=EXIM_GID/g;
 
+  s/^$parm_eximuser $parm_exim_uid $parm_exim_gid/EXIMUSER EXIM_UID EXIM_GID/;
+
 
   # ======== General uids, gids, and pids ========
   # Note: this must come after munges for caller's and exim's uid/gid
index dfc44ed..15cac0b 100644 (file)
@@ -135,7 +135,7 @@ Connecting to 127.0.0.1 port 1225 ... connected
 <<< 221 myhost.test.ex closing connection
 End of script
 10HmaX-0005vi-00-H
-CALLER UID GID
+EXIMUSER EXIM_UID EXIM_GID
 <notsubmit@y>
 ddddddddd 0
 -helo_name rhu.barb
@@ -154,7 +154,7 @@ dddP Received: from [127.0.0.1] (helo=rhu.barb)
        id 10HmaX-0005vi-00
        for x@y; Tue, 2 Mar 1999 09:44:33 +0000
 10HmaY-0005vi-00-H
-CALLER UID GID
+EXIMUSER EXIM_UID EXIM_GID
 <a@y>
 ddddddddd 0
 -helo_name rhu.barb
@@ -176,7 +176,7 @@ dddP Received: from [127.0.0.1] (helo=rhu.barb)
 dddF From: a@y
 038  Date: Tue, 2 Mar 1999 09:44:33 +0000
 10HmaZ-0005vi-00-H
-CALLER UID GID
+EXIMUSER EXIM_UID EXIM_GID
 <>
 ddddddddd 0
 -helo_name rhu.barb
@@ -196,7 +196,7 @@ dddP Received: from [127.0.0.1] (helo=rhu.barb)
 047I Message-Id: <E10HmaZ-0005vi-00@myhost.test.ex>
 038  Date: Tue, 2 Mar 1999 09:44:33 +0000
 10HmbA-0005vi-00-H
-CALLER UID GID
+EXIMUSER EXIM_UID EXIM_GID
 <notsubmit@y>
 ddddddddd 0
 -helo_name rhu.barb
@@ -216,7 +216,7 @@ dddP Received: from [127.0.0.1] (helo=rhu.barb)
        for x@y; Tue, 2 Mar 1999 09:44:33 +0000
 dddS Sender: sender@some.where
 10HmbB-0005vi-00-H
-CALLER UID GID
+EXIMUSER EXIM_UID EXIM_GID
 <a@y>
 ddddddddd 0
 -helo_name rhu.barb
@@ -239,7 +239,7 @@ ddd* Sender: sender@some.where
 dddF From: a@y
 038  Date: Tue, 2 Mar 1999 09:44:33 +0000
 10HmbC-0005vi-00-H
-CALLER UID GID
+EXIMUSER EXIM_UID EXIM_GID
 <a@y>
 ddddddddd 0
 -helo_name rhu.barb
@@ -262,7 +262,7 @@ dddS Sender: sender@some.where
 dddF From: a@y
 038  Date: Tue, 2 Mar 1999 09:44:33 +0000
 10HmbD-0005vi-00-H
-CALLER UID GID
+EXIMUSER EXIM_UID EXIM_GID
 <a@y>
 ddddddddd 0
 -helo_name rhu.barb
index 8cfc49d..bc9555c 100644 (file)
@@ -144,7 +144,7 @@ Connecting to 127.0.0.1 port 1225 ... connected
 <<< 221 myhost.test.ex closing connection
 End of script
 10HmaX-0005vi-00-H
-CALLER UID GID
+EXIMUSER EXIM_UID EXIM_GID
 <username@myhost.test.ex>
 ddddddddd 0
 -helo_name rhu.barb
@@ -169,7 +169,7 @@ dddF From: a@y
 dddS Sender: username@myhost.test.ex
 038  Date: Tue, 2 Mar 1999 09:44:33 +0000
 10HmaY-0005vi-00-H
-CALLER UID GID
+EXIMUSER EXIM_UID EXIM_GID
 <>
 ddddddddd 0
 -helo_name rhu.barb
@@ -192,7 +192,7 @@ dddP Received: from [127.0.0.1] (helo=rhu.barb)
 dddF From: username@myhost.test.ex
 038  Date: Tue, 2 Mar 1999 09:44:33 +0000
 10HmaZ-0005vi-00-H
-CALLER UID GID
+EXIMUSER EXIM_UID EXIM_GID
 <>
 ddddddddd 0
 -helo_name rhu.barb
@@ -215,7 +215,7 @@ dddP Received: from [127.0.0.1] (helo=rhu.barb)
 dddF From: username@another.domain
 038  Date: Tue, 2 Mar 1999 09:44:33 +0000
 10HmbA-0005vi-00-H
-CALLER UID GID
+EXIMUSER EXIM_UID EXIM_GID
 <>
 ddddddddd 0
 -helo_name rhu.barb
@@ -238,7 +238,7 @@ dddP Received: from [127.0.0.1] (helo=rhu.barb)
 dddF From: username@auth.id.domain
 038  Date: Tue, 2 Mar 1999 09:44:33 +0000
 10HmbB-0005vi-00-H
-CALLER UID GID
+EXIMUSER EXIM_UID EXIM_GID
 <>
 ddddddddd 0
 -helo_name rhu.barb