X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=sbr%2Fmts.c;h=88bae835c34c24a2c504c7b49db7c78b548b227a;hb=5cf527275a011bac7352394f94176fd9c3251141;hp=b529d15f7ffd3c3f88f2bdd427832ded64be57c4;hpb=c4e3a0c3f0c72c6932d132974e268f0c0a54afbc;p=mmh diff --git a/sbr/mts.c b/sbr/mts.c index b529d15..88bae83 100644 --- a/sbr/mts.c +++ b/sbr/mts.c @@ -64,7 +64,6 @@ static char localmbox[BUFSIZ]; */ static char *sm_method = "smtp"; int sm_mts = MTS_SMTP; -char *hostable = nmhetcdir(/hosts); char *sendmail = SENDMAILPATH; /* @@ -108,7 +107,6 @@ static struct bind binds[] = { { "mmdelim1", &mmdlm1 }, { "mmdelim2", &mmdlm2 }, { "mts", &sm_method }, - { "hostable", &hostable }, { "sendmail", &sendmail }, { "clientname", &clientname }, { "servers", &servers }, @@ -129,11 +127,10 @@ static struct bind binds[] = { void mts_init (char *name) { - NMH_UNUSED (name); - const char *cp; FILE *fp; static int inited = 0; + NMH_UNUSED (name); if (inited++ || (fp = fopen (get_mtsconf_pathname(), "r")) == NULL) return; @@ -340,19 +337,6 @@ 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; } @@ -376,6 +360,39 @@ getuserinfo (void) return; } + + /* username */ + /* If there's a Local-Mailbox profile component, try to extract + the username from it. But don't try very hard, this assumes + the very simple User Name form. + Note that post(8) and whom(1) use context_foil (), so they + won't see the profile component. */ + if ((np = context_find("Local-Mailbox")) != NULL) { + char *left_angle_bracket = strchr (np, '<'); + char *at_sign = strchr (np, '@'); + char *right_angle_bracket = strchr (np, '>'); + + strncpy(localmbox, np, sizeof(localmbox)); + + if (left_angle_bracket && at_sign && right_angle_bracket) { + if (at_sign > left_angle_bracket && + at_sign - left_angle_bracket < BUFSIZ) { + strncpy(username, left_angle_bracket + 1, + at_sign - left_angle_bracket - 1); + } + } + } + + if (username[0] == '\0') { + strncpy (username, pw->pw_name, sizeof(username)); + } + + username[sizeof(username) - 1] = '\0'; + + escape_local_part(username, sizeof(username)); + + + /* fullname */ np = pw->pw_gecos; /* Get the user's real name from the GECOS field. Stop once we hit a ',', @@ -385,11 +402,11 @@ getuserinfo (void) continue; *cp = '\0'; - strncpy (username, pw->pw_name, sizeof(username)); - /* The $SIGNATURE environment variable overrides the GECOS field's idea of your real name. If SIGNATURE isn't set, use the Signature profile - setting if it exists. */ + setting if it exists. + Note that post(8) and whom(1) use context_foil (), so they + won't see the profile component. */ if ((cp = getenv ("SIGNATURE")) && *cp) strncpy (fullname, cp, sizeof(fullname)); else if ((cp = context_find("Signature"))) @@ -399,9 +416,14 @@ getuserinfo (void) escape_display_name(fullname, sizeof(fullname)); - localmbox[0] = '\0'; - return; + /* localmbox, if not using Local-Mailbox */ + if (localmbox[0] == '\0') { + snprintf(localmbox, sizeof(localmbox), "%s <%s@%s>", fullname, + username, LocalName(0)); + } + + localmbox[sizeof(localmbox) - 1] = '\0'; } static const char*