X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/d8a78332490cd5a5928d6a23d06797ca9caa2b45..2ff6abb1d4635521329716ea00f2c6c919929be5:/uip/aliasbr.c diff --git a/uip/aliasbr.c b/uip/aliasbr.c index d8350f9d..03934416 100644 --- a/uip/aliasbr.c +++ b/uip/aliasbr.c @@ -35,25 +35,23 @@ 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 *); static int addgroup (struct aka *, char *); static int addmember (struct aka *, char *); -static int addall (struct aka *); 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. */ char * akvalue (char *s) { - register char *v; + char *v; if (akahead == NULL) alias (AliasFile); @@ -76,8 +74,8 @@ akvisible (void) char * akresult (struct aka *ak) { - register char *cp = NULL, *dp, *pp; - register struct adr *ad; + char *cp = NULL, *dp, *pp; + struct adr *ad; for (ad = ak->ak_addr; ad; ad = ad->ad_next) { pp = ad->ad_local ? akval (ak->ak_next, ad->ad_text) @@ -105,6 +103,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 +125,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); @@ -145,14 +149,14 @@ akval (struct aka *ak, char *s) } } - return getcpy (s); + return mh_xstrdup(s); } static int aleq (char *string, char *aliasent) { - register char c; + char c; while ((c = *string++)) if (*aliasent == '*') @@ -171,10 +175,10 @@ int alias (char *file) { int i; - register char *bp, *cp, *pp; + char *bp, *cp, *pp; char lc, *ap; - register struct aka *ak = NULL; - register FILE *fp; + struct aka *ak = NULL; + FILE *fp; if (*file != '/' && (strncmp (file, "./", 2) && strncmp (file, "../", 3))) @@ -266,10 +270,6 @@ alias (char *file) } break; - case '*': /* Everyone */ - addall (ak); - break; - default: /* list */ while ((cp = getalias (pp))) add_aka (ak, cp); @@ -314,9 +314,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 +325,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 +339,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; @@ -355,9 +355,9 @@ seekp (char *p, char *c, char **a) static int addfile (struct aka *ak, char *file) { - register char *cp; + char *cp; char buffer[BUFSIZ]; - register FILE *fp; + FILE *fp; if (!(fp = fopen (etcpath (file), "r"))) { akerrst = file; @@ -376,9 +376,9 @@ addfile (struct aka *ak, char *file) static int addgroup (struct aka *ak, char *grp) { - register char *gp; - register struct group *gr = getgrnam (grp); - register struct home *hm = NULL; + char *gp; + struct group *gr = getgrnam (grp); + struct home *hm = NULL; if (!gr) gr = getgrgid (atoi (grp)); @@ -410,8 +410,8 @@ static int addmember (struct aka *ak, char *grp) { gid_t gid; - register struct group *gr = getgrnam (grp); - register struct home *hm = NULL; + struct group *gr = getgrnam (grp); + struct home *hm = NULL; if (gr) gid = gr->gr_gid; @@ -434,30 +434,10 @@ addmember (struct aka *ak, char *grp) } -static int -addall (struct aka *ak) -{ - int noshell = NoShell == NULL || *NoShell == 0; - register struct home *hm; - - init_pw (); - - if (Everyone < 0) - Everyone = EVERYONE; - - for (hm = homehead; hm; hm = hm->h_next) - if ((int) hm->h_uid > Everyone - && (noshell || strcmp (hm->h_shell, NoShell))) - add_aka (ak, hm->h_name); - - return homehead != NULL; -} - - static char * getalias (char *addrs) { - register unsigned char *pp, *qp; + char *pp, *qp; static char *cp = NULL; if (cp == NULL) @@ -467,7 +447,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 +459,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; @@ -492,14 +472,14 @@ getalias (char *addrs) static void add_aka (struct aka *ak, char *pp) { - register struct adr *ad, *ld; + struct adr *ad, *ld; for (ad = ak->ak_addr, ld = NULL; ad; ld = ad, ad = ad->ad_next) if (!strcmp (pp, ad->ad_text)) return; - ad = (struct adr *) mh_xmalloc (sizeof(*ad)); - ad->ad_text = getcpy (pp); + NEW(ad); + ad->ad_text = mh_xstrdup(pp); ad->ad_local = strchr(pp, '@') == NULL && strchr(pp, '!') == NULL; ad->ad_next = NULL; if (ak->ak_addr) @@ -512,7 +492,7 @@ add_aka (struct aka *ak, char *pp) void init_pw (void) { - register struct passwd *pw; + struct passwd *pw; static int init; if (!init) @@ -537,10 +517,9 @@ init_pw (void) static struct aka * akalloc (char *id) { - register struct aka *p; - - p = (struct aka *) mh_xmalloc (sizeof(*p)); + struct aka *p; + NEW(p); p->ak_name = getcpy (id); p->ak_visible = 0; p->ak_addr = NULL; @@ -558,10 +537,9 @@ akalloc (char *id) static struct home * hmalloc (struct passwd *pw) { - register struct home *p; - - p = (struct home *) mh_xmalloc (sizeof(*p)); + struct home *p; + NEW(p); p->h_name = getcpy (pw->pw_name); p->h_uid = pw->pw_uid; p->h_gid = pw->pw_gid; @@ -577,36 +555,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; -}