X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=sbr%2Faddrsbr.c;h=a1cdf8c37b49b1f5396937993583f53eef080ffb;hb=11ce969d33d8d6ffafd010005af0b7188f0f5693;hp=0e2f0a424171e88481a8f8bb5a92a50eb30a0575;hpb=1691e80890e5d8ba258c51c214a3e91880e1db2b;p=mmh diff --git a/sbr/addrsbr.c b/sbr/addrsbr.c index 0e2f0a4..a1cdf8c 100644 --- a/sbr/addrsbr.c +++ b/sbr/addrsbr.c @@ -7,7 +7,7 @@ #include #include -#include +#include /* High level parsing of addresses: @@ -70,6 +70,10 @@ static char *note = NULL; static char err[BUFSIZ]; static char adr[BUFSIZ]; + +extern boolean username_extension_masquerading; /* defined in mts.c */ + + /* * external prototypes */ @@ -285,7 +289,7 @@ auxformat (struct mailname *mp, int extras) if (!extras) return addr; - if (mp->m_pers || mp->m_path) + if (mp->m_pers || mp->m_path) { if (mp->m_note) snprintf (buffer, sizeof(buffer), "%s %s <%s>", legal_person (mp->m_pers ? mp->m_pers : mp->m_mbox), @@ -294,6 +298,7 @@ auxformat (struct mailname *mp, int extras) snprintf (buffer, sizeof(buffer), "%s <%s>", legal_person (mp->m_pers ? mp->m_pers : mp->m_mbox), addr); + } else if (mp->m_note) snprintf (buffer, sizeof(buffer), "%s %s", addr, mp->m_note); @@ -309,30 +314,55 @@ auxformat (struct mailname *mp, int extras) */ char * -adrsprintf (char *local, char *domain) +adrsprintf (char *username, char *domain) { - static char addr[BUFSIZ]; + int snprintf_return; + static char addr[BUFSIZ]; + + if (username == NULL) + username = getusername(); + + if (username_extension_masquerading) { + /* mts.conf contains "masquerade:[...]username_extension[...]", so tack + on the value of the $USERNAME_EXTENSION environment variable, if set, + to username. */ + char* extension = getenv("USERNAME_EXTENSION"); + static char username_with_extension[BUFSIZ]; + + if (extension != NULL && *extension != '\0') { + snprintf_return = snprintf(username_with_extension, + sizeof(username_with_extension), + "%s%s", username, extension); + + if (snprintf_return < 0 || + snprintf_return >= sizeof(username_with_extension)) + adios(NULL, "snprintf() error writing username (%d chars) and" + " $USERNAME_EXTENSION (%d chars) to array of BUFSIZ (%d)" + " chars", + strlen(username), strlen(extension), BUFSIZ); + + username = username_with_extension; + } + } - if (local == NULL) #ifdef REALLYDUMB - return getusername (); - else -#endif /* REALLYDUMB */ - local = getusername (); + return username; +#endif if (domain == NULL) -#ifdef REALLYDUMB - return local; - else -#endif /* REALLYDUMB */ - domain = LocalName (); + domain = LocalName(); #ifndef BANG - snprintf (addr, sizeof(addr), "%s@%s", local, domain); + snprintf_return = snprintf (addr, sizeof(addr), "%s@%s", username, domain); #else /* BANG */ - snprintf (addr, sizeof(addr), "%s!%s", domain, local); + snprintf_return = snprintf (addr, sizeof(addr), "%s!%s", domain, username); #endif /* BANG */ + if (snprintf_return < 0 || snprintf_return >= sizeof(addr)) + adios(NULL, "snprintf() error writing username (%d chars), domain (%d" + " chars), and 1 separator char to array of BUFSIZ (%d) chars", + strlen(username), strlen(domain), BUFSIZ); + return addr; }