Implemented a new type of username masquerading, which is also activated by
authorDan Harkless <dan@harkless.org>
Wed, 26 Jan 2000 05:40:30 +0000 (05:40 +0000)
committerDan Harkless <dan@harkless.org>
Wed, 26 Jan 2000 05:40:30 +0000 (05:40 +0000)
setting mmailid to non-zero in mts.conf.  The new type is based on the From:
header in the message draft rather than the GECOS field of the passwd file like
the old type.

With mmailid turned off, when a user specifies a custom From: header in a draft,
it'll be used, but the user's real address will be revealed in the SMTP envelope
From: and in the Sender: header.  With mmailid on, this revelation is disabled.

Also copied to here my new comment from mh.h explaining (if I understand it
correctly) the functionality of struct swit's minchars field.  Also, changed the
minchars for "help" from 4 to 0.  It doesn't make sense to use a positive
integer that's the exact length of the option.  That'll make it print out like
"-(help)".  The parentheses are supposed to go around the minimum part of the
option you need to specify when abbreviating it.  Perhaps someone thought it
would be cute to put "help" in parentheses to imply that you know about it
already as you just specified it be seeing the current output, but I think this
"overloading" of the meaning of the parentheses is awkward.  I need to go around
and change "help" to 0 everywhere, but it's getting too late to do it tonight.

Also added some other explanatory comments to existing code.

uip/post.c

index a1cc05f..a66e241 100644 (file)
 
 #define FCCS           10      /* max number of fccs allowed */
 
+/* In the following array of structures, the numeric second field of the
+   structures (minchars) is apparently used like this:
+
+   -# : Switch can be abbreviated to # characters; switch hidden in -help.
+   0  : Switch can't be abbreviated;               switch shown in -help.
+   #  : Switch can be abbreviated to # characters; switch shown in -help. */
+
 static struct swit switches[] = {
 #define        ALIASW                    0
     { "alias aliasfile", 0 },
@@ -98,7 +105,7 @@ static struct swit switches[] = {
 #define VERSIONSW                20
     { "version", 0 },
 #define        HELPSW                   21
-    { "help", 4 },
+    { "help", 0 },
 #define BITSTUFFSW               22
     { "dashstuffing", -12 },           /* should we dashstuff BCC messages? */
 #define NBITSTUFFSW              23
@@ -276,6 +283,8 @@ static char *fill_in = NULL;
 static char *partno = NULL;
 static int queued = 0;
 
+extern int  MMailids;
+
 /*
  * static prototypes
  */
@@ -717,6 +726,14 @@ putfmt (char *name, char *str, FILE *out)
     tmpaddrs.m_next = NULL;
     for (count = 0; (cp = getname (str)); count++)
        if ((mp = getm (cp, NULL, 0, AD_HOST, NULL))) {
+           if (MMailids && (hdr->set & MFRM))
+               /* The user manually specified a From: address in their draft
+                  and mts.conf turned on "mmailid", so we'll set things up to
+                  use the actual email address embedded in the draft From:
+                  (without the GECOS full name or angle brackets) as the
+                  envelope From:. */
+               strncpy(from, auxformat(mp, 0), sizeof(from) - 1);
+
            if (tmpaddrs.m_next)
                np->m_next = mp;
            else
@@ -856,9 +873,16 @@ finish_headers (FILE *out)
            if (msgid)
                fprintf (out, "Message-ID: <%d.%ld@%s>\n",
                        (int) getpid (), (long) tclock, LocalName ());
-           if (msgflags & MFRM)
-               fprintf (out, "Sender: %s\n", from);
+           if (msgflags & MFRM) {
+               /* There was already a From: in the draft.  Don't add one. */
+               if (!MMailids)
+                   /* mts.conf didn't turn on mmailid, so we'll reveal the
+                      user's actual account@thismachine address in a Sender:
+                      header (and use it as the envelope From: later). */
+                   fprintf (out, "Sender: %s\n", from);
+           }
            else
+               /* Construct a From: header. */
                fprintf (out, "From: %s\n", signature);
            if (whomsw)
                break;