X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=sbr%2Fmts.c;h=939a8c7685ee311ee3e57e1a610694918556be14;hb=e6d71f88fe62d7508ccd1809cd7e822bbb116b00;hp=cd2a3d8784589062cf80d2a9cea0115628beca76;hpb=c05210483d82bf5f3786725ff80e12444088a701;p=mmh diff --git a/sbr/mts.c b/sbr/mts.c index cd2a3d8..939a8c7 100644 --- a/sbr/mts.c +++ b/sbr/mts.c @@ -17,15 +17,9 @@ #include #include #include +#include #include -#ifdef HAVE_SYS_UTSNAME_H -# include -#endif - -#define NOTOK (-1) -#define OK 0 - /* * static prototypes */ @@ -84,7 +78,7 @@ char *sendmail = SENDMAILPATH; * SMTP/POP stuff */ char *clientname = NULL; -char *servers = "localhost \01localnet"; +char *servers = "localhost"; char *pophost = ""; /* @@ -147,6 +141,8 @@ static struct bind binds[] = { void mts_init (char *name) { + NMH_UNUSED (name); + const char *cp; FILE *fp; static int inited = 0; @@ -242,43 +238,45 @@ tailor_value (unsigned char *s) /* * Get the fully qualified name of the local host. + * + * If flag is 0, then use anything out of mts.conf (like localname). + * If flag is 1, then only use the "proper" local hostname. */ char * -LocalName (void) +LocalName (int flag) { - static char buffer[BUFSIZ] = ""; + static char buffer0[BUFSIZ] = ""; + static char buffer1[BUFSIZ] = ""; + static char *buffer[] = { buffer0, buffer1 }; + char *buf; struct addrinfo hints, *res; -#ifdef HAVE_UNAME - struct utsname name; -#endif + + if (flag < 0 || flag > 1) + return NULL; + + buf = buffer[flag]; /* check if we have cached the local name */ - if (buffer[0]) - return buffer; + if (buf[0]) + return buf; mts_init ("mts"); /* check if the mts.conf file specifies a "localname" */ - if (*localname) { - strncpy (buffer, localname, sizeof(buffer)); + if (*localname && flag == 0) { + strncpy (buf, localname, sizeof(buffer0)); } else { - memset(buffer, 0, sizeof(buffer)); -#ifdef HAVE_UNAME - /* first get our local name */ - uname (&name); - strncpy (buffer, name.nodename, sizeof(buffer) - 1); -#else + memset(buf, 0, sizeof(buffer0)); /* first get our local name */ - gethostname (buffer, sizeof(buffer) - 1); -#endif + gethostname (buf, sizeof(buffer0) - 1); /* now fully qualify our name */ memset(&hints, 0, sizeof(hints)); hints.ai_flags = AI_CANONNAME; hints.ai_family = PF_UNSPEC; - if (getaddrinfo(buffer, NULL, &hints, &res) == 0) { - strncpy(buffer, res->ai_canonname, sizeof(buffer) - 1); + if (getaddrinfo(buf, NULL, &hints, &res) == 0) { + strncpy(buf, res->ai_canonname, sizeof(buffer0) - 1); freeaddrinfo(res); } } @@ -288,11 +286,11 @@ LocalName (void) * we append that now. This should rarely be needed. */ if (*localdomain) { - strcat (buffer, "."); - strcat (buffer, localdomain); + strcat (buf, "."); + strcat (buf, localdomain); } - return buffer; + return buf; } @@ -306,10 +304,6 @@ SystemName (void) { static char buffer[BUFSIZ] = ""; -#ifdef HAVE_UNAME - struct utsname name; -#endif - /* check if we have cached the system name */ if (buffer[0]) return buffer; @@ -322,12 +316,7 @@ SystemName (void) return buffer; } -#ifdef HAVE_UNAME - uname (&name); - strncpy (buffer, name.nodename, sizeof(buffer)); -#else gethostname (buffer, sizeof(buffer)); -#endif return buffer; } @@ -391,7 +380,6 @@ getuserinfo (void) 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). */ -#ifndef BSD42 if (mmailid_masquerading) /* Stop at ',' or '<'. */ for (cp = fullname; *np != '\0' && *np != ',' && *np != '<'; @@ -406,46 +394,6 @@ getuserinfo (void) for (cp = fullname; *np != '\0' && *np != ','; *cp++ = *np++) continue; -#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. */ - for (cp = fullname; - *np != '\0' && *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) {