X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Fmts.c;h=503ec3c15f131d22f2978e53c5855894c2894e64;hp=2f5132f9959b445c010ddb5ea191afc1ceca70f3;hb=2abae0bfd0ad5bf898461e50aa4b466d641f23d9;hpb=5d09b7206ae2602d3aedb2b552ef160b855d8054 diff --git a/sbr/mts.c b/sbr/mts.c index 2f5132f..503ec3c 100644 --- a/sbr/mts.c +++ b/sbr/mts.c @@ -32,49 +32,20 @@ static const char *get_mtsuserconf_pathname(void); static void mts_read_conf_file(FILE *fp); /* -** *mmdfldir and *uucpldir are the maildrop directories. If maildrops -** are kept in the user's home directory, then these should be empty -** strings. In this case, the appropriate ...lfil array should contain -** the name of the file in the user's home directory. Usually, this is -** something like ".mail". -*/ - -/* ** nmh mail transport interface customization file */ static char *mtsconf = NMHETCDIR"/mts.conf"; -char *mmdfldir = MAILSPOOL; -char *mmdflfil = ""; -char *uucpldir = "/usr/spool/mail"; -char *uucplfil = ""; - -char *mmdlm1 = "\001\001\001\001\n"; -char *mmdlm2 = "\001\001\001\001\n"; /* Cache the username and fullname of the user */ static char username[BUFSIZ]; static char fullname[BUFSIZ]; -/* 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 = ""; - /* ** Global MailDelivery file */ char *maildelivery = NMHETCDIR"/maildelivery"; - -/* -** Aliasing Facility (doesn't belong here) -*/ -int Everyone = NOTOK; -static char *everyone = "-1"; -char *NoShell = ""; - /* ** Customize the MTS settings for nmh by adjusting ** the file mts.conf in the nmh etc directory. @@ -86,16 +57,7 @@ struct bind { }; static struct bind binds[] = { - { "mmdfldir", &mmdfldir }, - { "mmdflfil", &mmdflfil }, - { "uucpldir", &uucpldir }, - { "uucplfil", &uucplfil }, - { "mmdelim1", &mmdlm1 }, - { "mmdelim2", &mmdlm2 }, - { "masquerade", &masquerade }, { "maildelivery", &maildelivery }, - { "everyone", &everyone }, - { "noshell", &NoShell }, { NULL, NULL } }; @@ -123,17 +85,6 @@ mts_init(char *name) mts_read_conf_file(fp); fclose(fp); } - - Everyone = atoi(everyone); - - 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; } @@ -157,27 +108,27 @@ tailor_value(unsigned char *s) *bp = *s; } else { switch (*++s) { - case 'b': *bp = '\b'; break; - case 'f': *bp = '\f'; break; - case 'n': *bp = '\n'; break; - case 't': *bp = '\t'; break; - - case 0: s--; - case QUOTE: - *bp = QUOTE; - break; - - default: - if (!isdigit(*s)) { - *bp++ = QUOTE; - *bp = *s; - } - r = *s != '0' ? 10 : 8; - for (i = 0; isdigit(*s); s++) - i = i * r + *s - '0'; - s--; - *bp = toascii(i); - break; + case 'b': *bp = '\b'; break; + case 'f': *bp = '\f'; break; + case 'n': *bp = '\n'; break; + case 't': *bp = '\t'; break; + + case 0: s--; + case QUOTE: + *bp = QUOTE; + break; + + default: + if (!isdigit(*s)) { + *bp++ = QUOTE; + *bp = *s; + } + r = *s != '0' ? 10 : 8; + for (i = 0; isdigit(*s); s++) + i = i * r + *s - '0'; + s--; + *bp = toascii(i); + break; } } } @@ -294,10 +245,7 @@ getfullname(void) /* ** 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) { @@ -319,91 +267,35 @@ 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 ". For instance, - ** "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 @@ -463,7 +355,7 @@ mts_read_conf_file(FILE *fp) *bp++ = 0; for (b = binds; b->keyword; b++) - if (!strcmp(buffer, b->keyword)) + if (strcmp(buffer, b->keyword)==0) break; if (b->keyword && (cp = tailor_value(bp))) *b->value = cp;