Remove RCS keywords, since they no longer work after git migration.
[mmh] / sbr / addrsbr.c
index 0e2f0a4..484ec5e 100644 (file)
@@ -2,16 +2,18 @@
 /*
  * addrsbr.c -- parse addresses 822-style
  *
- * $Id$
+ * This code is Copyright (c) 2002, by the authors of nmh.  See the
+ * COPYRIGHT file in the root directory of the nmh distribution for
+ * complete copyright information.
  */
 
 #include <h/mh.h>
 #include <h/addrsbr.h>
-#include <zotnet/mf/mf.h>
+#include <h/mf.h>
 
 /* High level parsing of addresses:
 
-   The routines in zotnet/mf/mf.c parse the syntactic representations of
+   The routines in sbr/mf.c parse the syntactic representations of
    addresses.  The routines in sbr/addrsbr.c associate semantics with those
    addresses.  
 
@@ -70,6 +72,10 @@ static char *note = NULL;
 static char err[BUFSIZ];
 static char adr[BUFSIZ];
 
+
+extern boolean  username_extension_masquerading;  /* defined in mts.c */
+
+
 /*
  * external prototypes
  */
@@ -111,7 +117,7 @@ getm (char *str, char *dfhost, int dftype, int wanthost, char *eresult)
     char *dp;
 #endif /* not DUMB */
 
-    if (err && err[0]) {
+    if (err[0]) {
        if (eresult)
            strcpy (eresult, err);
        else
@@ -198,18 +204,18 @@ getm (char *str, char *dfhost, int dftype, int wanthost, char *eresult)
     }
 
     if (wanthost == AD_NHST)
-       mp->m_type = !strcasecmp (LocalName (), mp->m_host)
+       mp->m_type = !mh_strcasecmp (LocalName (), mp->m_host)
            ? LOCALHOST : NETHOST;
 #ifdef DUMB
     else
-       mp->m_type = strcasecmp (LocalName(), mp->m_host) ?  NETHOST : LOCALHOST;
+       mp->m_type = mh_strcasecmp (LocalName(), mp->m_host) ?  NETHOST : LOCALHOST;
 #else /* not DUMB */
     else
        if (pp = OfficialName (mp->m_host)) {
     got_real_host: ;
            free (mp->m_host);
            mp->m_host = getcpy (pp);
-           mp->m_type = strcasecmp (LocalName(), mp->m_host) ? NETHOST : LOCALHOST;
+           mp->m_type = mh_strcasecmp (LocalName(), mp->m_host) ? NETHOST : LOCALHOST;
        }
        else {
            if (dp = strchr(mp->m_host, '.')) {
@@ -285,7 +291,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 +300,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 +316,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;
 }
 
@@ -422,11 +454,11 @@ ismymbox (struct mailname *np)
            goto local_test;
 
        case UUCPHOST:
-           if (strcasecmp (np->m_host, SystemName()))
+           if (mh_strcasecmp (np->m_host, SystemName()))
                break;          /* fall */
        case LOCALHOST:
 local_test: ;
-           if (!strcasecmp (np->m_mbox, mq.m_mbox))
+           if (!mh_strcasecmp (np->m_mbox, mq.m_mbox))
                return 1;
            break;
 
@@ -447,11 +479,11 @@ local_test: ;
            continue;
        switch (mp->m_type & W_MBOX) {
            case W_NIL: 
-               if (strcasecmp (cp, pp))
+               if (mh_strcasecmp (cp, pp))
                    continue;
                break;
            case W_MBEG: 
-               if (strcasecmp (cp + len - i, pp))
+               if (mh_strcasecmp (cp + len - i, pp))
                    continue;
                break;
            case W_MEND: 
@@ -473,11 +505,11 @@ local_test: ;
            continue;
        switch (mp->m_type & W_HOST) {
            case W_NIL: 
-               if (strcasecmp (cp, pp))
+               if (mh_strcasecmp (cp, pp))
                    continue;
                break;
            case W_HBEG: 
-               if (strcasecmp (cp + len - i, pp))
+               if (mh_strcasecmp (cp + len - i, pp))
                    continue;
                break;
            case W_HEND: