Removed support for UUCP bang path addresses.
[mmh] / uip / aliasbr.c
index 1923867..7b7bcef 100644 (file)
@@ -39,7 +39,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 *);
@@ -115,16 +114,18 @@ aleq(char *string, char *aliasent)
        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)
 {
@@ -134,8 +135,6 @@ alias(char *file)
        register struct aka *ak = NULL;
        register FILE *fp;
 
-       if (*file!='/' && (strncmp(file, "./", 2) && strncmp(file, "../", 3)))
-               file = etcpath(file);
        if ((fp = fopen(file, "r")) == NULL) {
                akerrst = file;
                return AK_NOFILE;
@@ -144,22 +143,22 @@ alias(char *file)
        while (vfgets(fp, &ap) == OK) {
                bp = ap;
                switch (*(pp = scanp(bp))) {
-                       case '<':  /* recurse a level */
-                               if (!*(cp = getp(pp + 1))) {
-                                       akerrst = "'<' without alias-file";
-                                       fclose(fp);
-                                       return AK_ERROR;
-                               }
-                               if ((i = alias(cp)) != AK_OK) {
-                                       fclose(fp);
-                                       return i;
-                               }
-
-                       case ':':  /* comment */
-                       case ';':
-                       case '#':
-                       case 0:
-                               continue;
+               case '<':  /* recurse a level */
+                       if (!*(cp = getp(pp + 1))) {
+                               akerrst = "'<' without alias-file";
+                               fclose(fp);
+                               return AK_ERROR;
+                       }
+                       if ((i = alias(cp)) != AK_OK) {
+                               fclose(fp);
+                               return i;
+                       }
+
+               case ':':  /* comment */
+               case ';':
+               case '#':
+               case 0:
+                       continue;
                }
 
                akerrst = bp;
@@ -172,65 +171,61 @@ alias(char *file)
                        return AK_LIMIT;
                }
                switch (lc) {
-                       case ':':
-                               ak->ak_visible = 0;
-                               break;
+               case ':':
+                       ak->ak_visible = 0;
+                       break;
 
-                       case ';':
-                               ak->ak_visible = 1;
-                               break;
+               case ';':
+                       ak->ak_visible = 1;
+                       break;
 
-                       default:
-                               fclose(fp);
-                               return AK_ERROR;
+               default:
+                       fclose(fp);
+                       return AK_ERROR;
                }
 
                switch (*(pp = scanp(ap))) {
-                       case 0:  /* EOL */
+               case 0:  /* EOL */
+                       fclose(fp);
+                       return AK_ERROR;
+
+               case '<':  /* read values from file */
+                       if (!*(cp = getp(pp + 1))) {
                                fclose(fp);
                                return AK_ERROR;
+                       }
+                       if (!addfile(ak, cp)) {
+                               fclose(fp);
+                               return AK_NOFILE;
+                       }
+                       break;
 
-                       case '<':  /* read values from file */
-                               if (!*(cp = getp(pp + 1))) {
-                                       fclose(fp);
-                                       return AK_ERROR;
-                               }
-                               if (!addfile(ak, cp)) {
-                                       fclose(fp);
-                                       return AK_NOFILE;
-                               }
-                               break;
-
-                       case '=':  /* UNIX group */
-                               if (!*(cp = getp(pp + 1))) {
-                                       fclose(fp);
-                                       return AK_ERROR;
-                               }
-                               if (!addgroup(ak, cp)) {
-                                       fclose(fp);
-                                       return AK_NOGROUP;
-                               }
-                               break;
-
-                       case '+':  /* UNIX group members */
-                               if (!*(cp = getp(pp + 1))) {
-                                       fclose(fp);
-                                       return AK_ERROR;
-                               }
-                               if (!addmember(ak, cp)) {
-                                       fclose(fp);
-                                       return AK_NOGROUP;
-                               }
-                               break;
+               case '=':  /* UNIX group */
+                       if (!*(cp = getp(pp + 1))) {
+                               fclose(fp);
+                               return AK_ERROR;
+                       }
+                       if (!addgroup(ak, cp)) {
+                               fclose(fp);
+                               return AK_NOGROUP;
+                       }
+                       break;
 
-                       case '*':  /* Everyone */
-                               addall(ak);
-                               break;
+               case '+':  /* UNIX group members */
+                       if (!*(cp = getp(pp + 1))) {
+                               fclose(fp);
+                               return AK_ERROR;
+                       }
+                       if (!addmember(ak, cp)) {
+                               fclose(fp);
+                               return AK_NOGROUP;
+                       }
+                       break;
 
-                       default:  /* list */
-                               while ((cp = getalias(pp)))
-                                       add_aka(ak, cp);
-                               break;
+               default:  /* list */
+                       while ((cp = getalias(pp)))
+                               add_aka(ak, cp);
+                       break;
                }
        }
 
@@ -245,25 +240,29 @@ akerror(int i)
        static char buffer[BUFSIZ];
 
        switch (i) {
-               case AK_NOFILE:
-                       snprintf(buffer, sizeof(buffer), "unable to read '%s'", akerrst);
-                       break;
-
-               case AK_ERROR:
-                       snprintf(buffer, sizeof(buffer), "error in line '%s'", akerrst);
-                       break;
-
-               case AK_LIMIT:
-                       snprintf(buffer, sizeof(buffer), "out of memory while on '%s'", akerrst);
-                       break;
-
-               case AK_NOGROUP:
-                       snprintf(buffer, sizeof(buffer), "no such group as '%s'", akerrst);
-                       break;
-
-               default:
-                       snprintf(buffer, sizeof(buffer), "unknown error (%d)", i);
-                       break;
+       case AK_NOFILE:
+               snprintf(buffer, sizeof(buffer), "unable to read '%s'",
+                               akerrst);
+               break;
+
+       case AK_ERROR:
+               snprintf(buffer, sizeof(buffer), "error in line '%s'",
+                               akerrst);
+               break;
+
+       case AK_LIMIT:
+               snprintf(buffer, sizeof(buffer), "out of memory while on '%s'",
+                               akerrst);
+               break;
+
+       case AK_NOGROUP:
+               snprintf(buffer, sizeof(buffer), "no such group as '%s'",
+                               akerrst);
+               break;
+
+       default:
+               snprintf(buffer, sizeof(buffer), "unknown error (%d)", i);
+               break;
        }
 
        return buffer;
@@ -355,7 +354,7 @@ addgroup(struct aka *ak, char *grp)
                struct passwd *pw;
 #endif /* DBMPWD */
                for (hm = homehead; hm; hm = hm->h_next)
-                       if (!strcmp(hm->h_name, gp)) {
+                       if (strcmp(hm->h_name, gp)==0) {
                                add_aka(ak, hm->h_name);
                                break;
                        }
@@ -402,28 +401,6 @@ 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)))
-                       add_aka(ak, hm->h_name);
-
-       return homehead != NULL;
-}
-
-
 static char *
 getalias(char *addrs)
 {
@@ -462,12 +439,12 @@ add_aka(struct aka *ak, char *pp)
        register struct adr *ad, *ld;
 
        for (ad = ak->ak_addr, ld = NULL; ad; ld = ad, ad = ad->ad_next)
-               if (!strcmp(pp, ad->ad_text))
+               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->ad_local = strchr(pp, '@') == NULL;
        ad->ad_next = NULL;
        if (ak->ak_addr)
                ld->ad_next = ad;