X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Faliasbr.c;h=7b7bcefbd5db98b7d6d59f98456d8047a6c6105c;hp=1923867611af9cf0857578c2e65753a998ab0994;hb=83e04675b53374a1436029a367283d6d4ee05a07;hpb=fce8a87e8a4a443a08a98b24eef270451a63fab8 diff --git a/uip/aliasbr.c b/uip/aliasbr.c index 1923867..7b7bcef 100644 --- a/uip/aliasbr.c +++ b/uip/aliasbr.c @@ -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;