Fix uip/whom.c for C89 compatibility
[mmh] / uip / aliasbr.c
index 85260d8..b00f51b 100644 (file)
@@ -11,6 +11,7 @@
 #include <h/utils.h>
 #include <grp.h>
 #include <pwd.h>
+#include <ctype.h>
 
 static int akvis;
 static char *akerrst;
@@ -31,7 +32,7 @@ char *akresult(struct aka *);
 char *akvalue(char *);
 char *akerror(int);
 
-static  char *akval(struct aka *, char *);
+static char *akval(struct aka *, char *);
 static int aleq(char *, char *);
 static char *scanp(unsigned char *);
 static char *getp(char *);
@@ -39,7 +40,6 @@ 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 *);
@@ -51,7 +51,7 @@ struct home *seek_home(char *);
 char *
 akvalue(char *s)
 {
-       register char *v;
+       char *v;
 
        akvis = -1;
        v = akval(akahead, s);
@@ -71,18 +71,18 @@ 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)
-                       : getcpy(ad->ad_text);
+                       : mh_xstrdup(ad->ad_text);
 
                if (cp) {
                        dp = cp;
                        cp = concat(cp, ",", pp, NULL);
-                       free(dp);
-                       free(pp);
+                       mh_free0(&dp);
+                       mh_free0(&pp);
                } else
                        cp = pp;
        }
@@ -103,40 +103,39 @@ akval(struct aka *ak, char *s)
                if (aleq(s, ak->ak_name))
                        return akresult(ak);
 
-       return getcpy(s);
+       return mh_xstrdup(s);
 }
 
 
 static int
 aleq(char *string, char *aliasent)
 {
-       register char c;
+       char c;
 
        while ((c = *string++))
                if (*aliasent == '*')
                        return 1;
+               else if ((c | 040) != (*aliasent | 040))
+                       return 0;
                else
-                       if ((c | 040) != (*aliasent | 040))
-                               return 0;
-                       else
-                               aliasent++;
+                       aliasent++;
 
        return (*aliasent == 0 || *aliasent == '*');
 }
 
 
+/*
+** file needs to be absolute or relative to cwd
+*/
 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)!=0 &&
-                       strncmp(file, "../", 3)!=0))
-               file = etcpath(file);
        if ((fp = fopen(file, "r")) == NULL) {
                akerrst = file;
                return AK_NOFILE;
@@ -224,10 +223,6 @@ alias(char *file)
                        }
                        break;
 
-               case '*':  /* Everyone */
-                       addall(ak);
-                       break;
-
                default:  /* list */
                        while ((cp = getalias(pp)))
                                add_aka(ak, cp);
@@ -287,7 +282,7 @@ scanp(unsigned char *p)
 static char *
 getp(char *p)
 {
-       register unsigned char  *cp = scanp(p);
+       unsigned char *cp = scanp(p);
 
        p = cp;
        while (!isspace(*cp) && *cp)
@@ -301,7 +296,7 @@ getp(char *p)
 static char *
 seekp(char *p, char *c, char **a)
 {
-       register unsigned char *cp;
+       unsigned char *cp;
 
        p = cp = scanp(p);
        while (!isspace(*cp) && *cp && *cp != ':' && *cp != ';')
@@ -317,9 +312,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;
@@ -338,9 +333,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));
@@ -349,28 +344,19 @@ addgroup(struct aka *ak, char *grp)
                return 0;
        }
 
-#ifndef DBMPWD
-       if (homehead == NULL)
-               init_pw();
-#endif /* DBMPWD */
-
        while ((gp = *gr->gr_mem++))
-#ifdef DBMPWD
        {
                struct passwd *pw;
-#endif /* DBMPWD */
                for (hm = homehead; hm; hm = hm->h_next)
                        if (strcmp(hm->h_name, gp)==0) {
                                add_aka(ak, hm->h_name);
                                break;
                        }
-#ifdef DBMPWD
                if ((pw = getpwnam(gp))) {
-                               hmalloc(pw);
-                               add_aka(ak, gp);
+                       hmalloc(pw);
+                       add_aka(ak, gp);
                }
        }
-#endif /* DBMPWD */
 
        return 1;
 }
@@ -380,8 +366,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;
@@ -394,10 +380,7 @@ addmember(struct aka *ak, char *grp)
                return 0;
        }
 
-#ifndef DBMPWD
-       if (homehead == NULL)
-#endif /* DBMPWD */
-               init_pw();
+       init_pw();
 
        for (hm = homehead; hm; hm = hm->h_next)
                if (hm->h_gid == gid)
@@ -407,32 +390,10 @@ addmember(struct aka *ak, char *grp)
 }
 
 
-static int
-addall(struct aka *ak)
-{
-       int noshell = NoShell == NULL || *NoShell == 0;
-       register struct home *hm;
-
-#ifndef DBMPWD
-       if (homehead == NULL)
-#endif /* DBMPWD */
-               init_pw();
-       if (Everyone < 0)
-               Everyone = EVERYONE;
-
-       for (hm = homehead; hm; hm = hm->h_next)
-               if (hm->h_uid > Everyone && (noshell ||
-                               strcmp(hm->h_shell, NoShell)!=0))
-                       add_aka(ak, hm->h_name);
-
-       return homehead != NULL;
-}
-
-
 static char *
 getalias(char *addrs)
 {
-       register unsigned char *pp, *qp;
+       unsigned char *pp, *qp;
        static char *cp = NULL;
 
        if (cp == NULL)
@@ -464,15 +425,15 @@ 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)==0)
                        return;
 
-       ad = (struct adr *) mh_xmalloc(sizeof(*ad));
-       ad->ad_text = getcpy(pp);
-       ad->ad_local = strchr(pp, '@') == NULL && strchr(pp, '!') == NULL;
+       ad = mh_xcalloc(1, sizeof(*ad));
+       ad->ad_text = mh_xstrdup(pp);
+       ad->ad_local = strchr(pp, '@') == NULL;
        ad->ad_next = NULL;
        if (ak->ak_addr)
                ld->ad_next = ad;
@@ -484,39 +445,32 @@ add_aka(struct aka *ak, char *pp)
 void
 init_pw(void)
 {
-       register struct passwd  *pw;
-#ifdef DBMPWD
-       static int init;
+       struct passwd *pw;
+       static int init = 0;
 
        if (!init) {
-               /* if the list has yet to be initialized */
-               /* zap the list, and rebuild from scratch */
-               homehead=NULL;
-               hometail=NULL;
-               init++;
-#endif /* DBMPWD */
-
+               /* read the passwd database and build a list */
                setpwent();
-
-               while ((pw = getpwent()))
-                       if (!hmalloc(pw))
+               while ((pw = getpwent())) {
+                       if (!hmalloc(pw)) {
                                break;
-
+                       }
+               }
                endpwent();
-#ifdef DBMPWD
+
+               init++;  /* now we're initialized */
        }
-#endif /* DBMPWD */
 }
 
 
 static struct aka *
 akalloc(char *id)
 {
-       register struct aka *p;
+       struct aka *p;
 
-       p = (struct aka *) mh_xmalloc(sizeof(*p));
+       p = mh_xcalloc(1, sizeof(*p));
 
-       p->ak_name = getcpy(id);
+       p->ak_name = mh_xstrdup(id);
        p->ak_visible = 0;
        p->ak_addr = NULL;
        p->ak_next = NULL;
@@ -533,21 +487,22 @@ akalloc(char *id)
 static struct home *
 hmalloc(struct passwd *pw)
 {
-       register struct home *p;
+       struct home *p;
 
-       p = (struct home *) mh_xmalloc(sizeof(*p));
+       p = mh_xcalloc(1, sizeof(*p));
 
-       p->h_name = getcpy(pw->pw_name);
+       p->h_name = mh_xstrdup(pw->pw_name);
        p->h_uid = pw->pw_uid;
        p->h_gid = pw->pw_gid;
-       p->h_home = getcpy(pw->pw_dir);
-       p->h_shell = getcpy(pw->pw_shell);
+       p->h_home = mh_xstrdup(pw->pw_dir);
+       p->h_shell = mh_xstrdup(pw->pw_shell);
        p->h_ngrps = 0;
        p->h_next = NULL;
-       if (hometail != NULL)
-               hometail->h_next = p;
-       if (homehead == NULL)
+       /* append to end */
+       if (!homehead)
                homehead = p;
+       if (hometail)
+               hometail->h_next = p;
        hometail = p;
 
        return p;
@@ -557,28 +512,21 @@ hmalloc(struct passwd *pw)
 struct home *
 seek_home(char *name)
 {
-       register struct home *hp;
-#ifdef DBMPWD
+       struct home *hp;
        struct passwd *pw;
        char lname[32];
        unsigned char *c;
        char *c1;
-#else  /* DBMPWD */
-
-       if (homehead == NULL)
-               init_pw();
-#endif /* DBMPWD */
 
        for (hp = homehead; hp; hp = hp->h_next)
                if (!mh_strcasecmp(name, hp->h_name))
                        return hp;
 
-#ifdef DBMPWD
        /*
        ** 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 < sizeof(lname) - 1);
+       for (c = name, c1 = lname; *c && (c1 - lname < (int)sizeof(lname) - 1);
                        c++, c1++) {
                if (isalpha(*c) && isupper(*c))
                        *c1 = tolower(*c);
@@ -588,7 +536,6 @@ seek_home(char *name)
        *c1 = '\0';
        if ((pw = getpwnam(lname)))
                return(hmalloc(pw));
-#endif /* DBMPWD */
 
        return NULL;
 }