X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=sbr%2Fmts.c;h=d298c88bf250817f903b4471ed910d9a083de1f7;hb=73f1ba9ecc732c6eca2db82b40f6353b305a58d7;hp=834579d166fc70286381aff4db10ffd326a9d77f;hpb=3a84d814004fd4557bf4f44952648e9e69bd22a8;p=mmh diff --git a/sbr/mts.c b/sbr/mts.c index 834579d..d298c88 100644 --- a/sbr/mts.c +++ b/sbr/mts.c @@ -54,9 +54,10 @@ char *uucplfil = ""; char *mmdlm1 = "\001\001\001\001\n"; char *mmdlm2 = "\001\001\001\001\n"; -/* Cache the username and fullname of the user */ +/* Cache the username, fullname, and mailbox of the user */ static char username[BUFSIZ]; static char fullname[BUFSIZ]; +static char localmbox[BUFSIZ]; /* Variables for username masquerading: */ boolean draft_from_masquerading = FALSE; /* also used from post.c */ @@ -78,7 +79,7 @@ char *sendmail = SENDMAILPATH; * SMTP/POP stuff */ char *clientname = NULL; -char *servers = "localhost \01localnet"; +char *servers = "localhost"; char *pophost = ""; /* @@ -238,34 +239,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; + 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)); + memset(buf, 0, sizeof(buffer0)); /* first get our local name */ - gethostname (buffer, sizeof(buffer) - 1); + 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); } } @@ -275,11 +287,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; } @@ -341,6 +353,34 @@ getfullname (void) /* + * Get the full local mailbox name. This is in the form: + * + * User Name + */ + +char * +getlocalmbox (void) +{ + if (username[0] == '\0') + getuserinfo(); + + if (localmbox[0] == '\0') { + char *cp; + + if ((cp = context_find("Local-Mailbox")) != NULL) { + strncpy(localmbox, cp, sizeof(localmbox)); + } else { + snprintf(localmbox, sizeof(localmbox), "%s <%s@%s>", fullname, + username, LocalName(0)); + } + + localmbox[sizeof(localmbox) - 1] = '\0'; + } + + return localmbox; +} + +/* * 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. @@ -401,9 +441,12 @@ getuserinfo (void) strncpy (username, pw->pw_name, sizeof(username)); /* The $SIGNATURE environment variable overrides the GECOS field's idea of - your real name. */ + your real name. If SIGNATURE isn't set, use the Signature profile + setting if it exists. */ if ((cp = getenv ("SIGNATURE")) && *cp) strncpy (fullname, cp, sizeof(fullname)); + else if ((cp = context_find("Signature"))) + strncpy (fullname, cp, sizeof(fullname)); if (strchr(fullname, '.')) { /* quote any .'s */ char tmp[BUFSIZ]; @@ -413,13 +456,17 @@ getuserinfo (void) strncpy (fullname, tmp, sizeof(fullname)); } + fullname[sizeof(fullname) - 1] = '\0'; + + localmbox[0] = '\0'; + return; } static const char* get_mtsconf_pathname (void) { - const char *cp = getenv ( "MHMTSCONF "); + const char *cp = getenv ( "MHMTSCONF" ); if (cp != NULL && *cp != '\0') { return cp; }