.PP
.BR masquerade:
.RS 5
-This directive controls three different types of email address masquerading.
-The three possible values, which may be specified in any combination on the
-line, separated by spaces, are \*(lqdraft_from\*(rq, \*(lqmmailid\*(rq, and
+This directive controls two different types of email address masquerading.
+The two possible values, which may be specified in any combination on the
+line, separated by spaces, are \*(lqdraft_from\*(rq and
\*(lqusername_extension\*(rq.
.PP
-\*(lqmmailid\*(rq was the only type of masquerading in the original MH package, and
-apparently stands for \*(lqmasquerade mail identification\*(rq. This type of
-masquerading keys off of the GECOS field of the passwd file. When enabled,
-.B nmh
-will check if the user's pw_gecos field in the passwd file is of the
-form:
-.PP
-.RS 5
-Full Name <fakeusername>
-.RE
-.PP
-If it is, the internal
-.B nmh
-routines that find the username and full name
-of that user will return \*(lqfakeusername\*(rq and \*(lqFull Name\*(rq respectively. This is
-useful if you want the messages you send to always appear to come from the name
-of an MTA alias rather than your actual account name. For instance, many
-organizations set up \*(lqFirst.Last\*(rq sendmail aliases for all users. If this is
-the case, the GECOS field for each user should look like:
-.PP
-.RS 5
-First [Middle] Last <First.Last>
-.RE
-.PP
\*(lqusername_extension\*(rq, when specified on the \*(lqmasquerade:\*(rq line, allows a second
type of username masquerading. If the user sets the
.B $USERNAME_EXTENSION
/* Variables for username masquerading: */
boolean draft_from_masquerading = FALSE;
-static boolean mmailid_masquerading = FALSE;
boolean username_extension_masquerading = FALSE; /* " from addrsbr.c */
static char* masquerade = "";
if (strstr(masquerade, "draft_from") != NULL)
draft_from_masquerading = TRUE;
- if (strstr(masquerade, "mmailid") != NULL)
- mmailid_masquerading = TRUE;
-
if (strstr(masquerade, "username_extension") != NULL)
username_extension_masquerading = TRUE;
}
/*
** Find the user's username and full name, and cache them.
-** Also, handle "mmailid" username masquerading controlled from the GECOS field
-** of the passwd file.
*/
-
static void
getuserinfo(void)
{
/*
** Get the user's real name from the GECOS field. Stop once
** we hit a ',', which some OSes use to separate other 'finger'
- ** information in the GECOS field, like phone number. Also, if
- ** mmailid masquerading is turned on due to "mmailid" appearing
- ** on the "masquerade:" line of mts.conf, stop if we hit a '<'
- ** (which should precede any ','s).
+ ** information in the GECOS field, like phone number.
*/
+ for (cp = fullname; *np != '\0' && *np != ',';) {
#ifndef BSD42
- if (mmailid_masquerading)
- /* Stop at ',' or '<'. */
- for (cp = fullname; *np != '\0' && *np != ',' && *np != '<';
- *cp++ = *np++)
- continue;
- else
- /*
- ** Allow '<' as a legal character of the user's name.
- ** This code is basically a duplicate of the code above the
- ** "else" -- we don't collapse it down to one copy and put
- ** the mmailid_masquerading check inside the loop with "(x
- ** ? y : z)" because that's inefficient and the value'll
- ** never change while it's in there.
- */
- for (cp = fullname; *np != '\0' && *np != ','; *cp++ = *np++)
- continue;
+ *cp++ = *np++;
#else /* BSD42 */
- /*
- ** On BSD(-derived) systems, the system utilities that deal with
- ** the GECOS field (finger, mail, sendmail, etc.) translate
- ** any '&' character in it to the login name, with the first
- ** letter capitalized. So, for instance, fingering a user "bob"
- ** with the GECOS field "& Jones" would reveal him to be "In real
- ** life: Bob Jones". Surprisingly, though, the OS doesn't do the
- ** translation for you, so we have to do it manually here.
- */
- if (mmailid_masquerading)
- /* Stop at ',' or '<'. */
- for (cp = fullname;
- *np != '\0' && *np != ',' && *np != '<';) {
- if (*np == '&') { /* blech! */
- strcpy(cp, pw->pw_name);
- *cp = toupper(*cp);
- while (*cp)
- cp++;
- np++;
- } else {
- *cp++ = *np++;
- }
- }
- else
/*
- ** Allow '<' as a legal character of the user's name.
- ** This code is basically a duplicate of the code above the
- ** "else" -- we don't collapse it down to one copy and put
- ** the mmailid_masquerading check inside the loop with "(x
- ** ? y : z)" because that's inefficient and the value'll
- ** never change while it's in there.
+ ** On BSD(-derived) systems, the system utilities that
+ ** deal with the GECOS field (finger, mail, sendmail,
+ ** etc.) translate any '&' character in it to the login name,
+ ** with the first letter capitalized. So, for instance,
+ ** fingering a user "bob" with the GECOS field "& Jones"
+ ** would reveal him to be "In real life: Bob Jones".
+ ** Surprisingly, though, the OS doesn't do the translation
+ ** for you, so we have to do it manually here.
*/
- for (cp = fullname; *np != '\0' && *np != ',';) {
- if (*np == '&') { /* blech! */
- strcpy(cp, pw->pw_name);
- *cp = toupper(*cp);
- while (*cp)
- cp++;
- np++;
- } else {
- *cp++ = *np++;
- }
+ if (*np == '&') { /* blech! */
+ strcpy(cp, pw->pw_name);
+ *cp = toupper(*cp);
+ while (*cp)
+ cp++;
+ np++;
+ } else {
+ *cp++ = *np++;
}
#endif /* BSD42 */
- *cp = '\0';
-
- if (mmailid_masquerading) {
- /*
- ** Do mmailid processing. The GECOS field should have
- ** the form "Full Name <fakeusername>". For instance,
- ** "Dan Harkless <Dan.Harkless>". Naturally, you'll want
- ** your MTA to have an alias (e.g. in /etc/aliases) from
- ** "fakeusername" to your account name.
- */
- if (*np)
- np++;
- for (cp = username; *np && *np != '>'; *cp++ = *np++)
- continue;
- *cp = '\0';
}
- if (!mmailid_masquerading || *np == '\0')
- strncpy(username, pw->pw_name, sizeof(username));
+ *cp = '\0';
+ strncpy(username, pw->pw_name, sizeof(username));
/*
** The $SIGNATURE environment variable overrides the GECOS field's