X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/d8a78332490cd5a5928d6a23d06797ca9caa2b45..df02833a36f5525edb5b274fb67ca46aa4e5e6c5:/uip/aliasbr.c?ds=sidebyside diff --git a/uip/aliasbr.c b/uip/aliasbr.c index d8350f9d..6600f741 100644 --- a/uip/aliasbr.c +++ b/uip/aliasbr.c @@ -35,7 +35,7 @@ char *akerror (int); static char *akval (struct aka *, char *); static int aleq (char *, char *); -static char *scanp (unsigned char *); +static char *scanp (char *); static char *getp (char *); static char *seekp (char *, char *, char **); static int addfile (struct aka *, char *); @@ -46,7 +46,6 @@ static char *getalias (char *); static void add_aka (struct aka *, char *); static struct aka *akalloc (char *); static struct home *hmalloc (struct passwd *); -struct home *seek_home (char *); /* Do mh alias substitution on 's' and return the results. */ @@ -105,6 +104,12 @@ akval (struct aka *ak, char *s) if (!s) return s; /* XXX */ + /* It'd be tempting to check for a trailing semicolon and remove + it. But that would break the EXMH alias parser on what would + then be valid expressions: + http://lists.gnu.org/archive/html/nmh-workers/2012-10/msg00039.html + */ + for (; ak; ak = ak->ak_next) { if (aleq (s, ak->ak_name)) { return akresult (ak); @@ -121,7 +126,7 @@ akval (struct aka *ak, char *s) if (name) { /* s is of the form "Blind list: address". If address is an alias, expand it. */ - struct mailname *mp = getm (name, NULL, 0, AD_NAME, NULL); + struct mailname *mp = getm (name, NULL, 0, NULL, 0); if (mp && mp->m_ingrp) { char *gname = add (mp->m_gname, NULL); @@ -314,9 +319,9 @@ akerror (int i) static char * -scanp (unsigned char *p) +scanp (char *p) { - while (isspace (*p)) + while (isspace ((unsigned char) *p)) p++; return p; } @@ -325,10 +330,10 @@ scanp (unsigned char *p) static char * getp (char *p) { - register unsigned char *cp = scanp (p); + char *cp = scanp (p); p = cp; - while (!isspace (*cp) && *cp) + while (!isspace ((unsigned char) *cp) && *cp) cp++; *cp = 0; @@ -339,10 +344,10 @@ getp (char *p) static char * seekp (char *p, char *c, char **a) { - register unsigned char *cp; + char *cp; p = cp = scanp (p); - while (!isspace (*cp) && *cp && *cp != ':' && *cp != ';') + while (!isspace ((unsigned char) *cp) && *cp && *cp != ':' && *cp != ';') cp++; *c = *cp; *cp++ = 0; @@ -457,7 +462,7 @@ addall (struct aka *ak) static char * getalias (char *addrs) { - register unsigned char *pp, *qp; + char *pp, *qp; static char *cp = NULL; if (cp == NULL) @@ -467,7 +472,7 @@ getalias (char *addrs) return (cp = NULL); /* Remove leading any space from the address. */ - for (pp = cp; isspace (*pp); pp++) + for (pp = cp; isspace ((unsigned char) *pp); pp++) continue; if (*pp == 0) return (cp = NULL); @@ -479,7 +484,7 @@ getalias (char *addrs) *qp++ = 0; for (cp = qp, qp--; qp > pp; qp--) if (*qp != 0) { - if (isspace (*qp)) + if (isspace ((unsigned char) *qp)) *qp = 0; else break; @@ -577,36 +582,3 @@ hmalloc (struct passwd *pw) return p; } - - -struct home * -seek_home (char *name) -{ - register struct home *hp; - struct passwd *pw; - char lname[32]; - unsigned char *c; - char *c1; - - for (hp = homehead; hp; hp = hp->h_next) - if (!mh_strcasecmp (name, hp->h_name)) - return hp; - - /* - * The only place where there might be problems. - * This assumes that ALL usernames are kept in lowercase. - */ - for (c = name, c1 = lname; - *c && (c1 - lname < (int) sizeof(lname) - 1); - c++, c1++) { - if (isalpha(*c) && isupper(*c)) - *c1 = tolower (*c); - else - *c1 = *c; - } - *c1 = '\0'; - if ((pw = getpwnam(lname))) - return(hmalloc(pw)); - - return NULL; -}