X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Faliasbr.c;h=8b32826b5f9122611ae92bf0aea0c26b24d6f4e2;hp=85260d839d1bd68659699c13acb9b59f8338bc80;hb=32b2354dbaf4bf934936eb5b102a4a3d2fdd209a;hpb=d3ba09a465cb0e5fc9a74d0b152a7ed965f895cb diff --git a/uip/aliasbr.c b/uip/aliasbr.c index 85260d8..8b32826 100644 --- a/uip/aliasbr.c +++ b/uip/aliasbr.c @@ -31,7 +31,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 +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,9 +135,6 @@ alias(char *file) register struct aka *ak = NULL; register 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 +222,6 @@ alias(char *file) } break; - case '*': /* Everyone */ - addall(ak); - break; - default: /* list */ while ((cp = getalias(pp))) add_aka(ak, cp); @@ -287,7 +281,7 @@ scanp(unsigned char *p) static char * getp(char *p) { - register unsigned char *cp = scanp(p); + register unsigned char *cp = scanp(p); p = cp; while (!isspace(*cp) && *cp) @@ -349,28 +343,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; } @@ -394,10 +379,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,28 +389,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)!=0)) - add_aka(ak, hm->h_name); - - return homehead != NULL; -} - - static char * getalias(char *addrs) { @@ -472,7 +432,7 @@ add_aka(struct aka *ak, char *pp) 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; @@ -484,28 +444,21 @@ add_aka(struct aka *ak, char *pp) void init_pw(void) { - register struct passwd *pw; -#ifdef DBMPWD - static int init; + register 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 */ } @@ -544,10 +497,11 @@ hmalloc(struct passwd *pw) p->h_shell = getcpy(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; @@ -558,27 +512,20 @@ struct home * seek_home(char *name) { register struct home *hp; -#ifdef DBMPWD 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 +535,6 @@ seek_home(char *name) *c1 = '\0'; if ((pw = getpwnam(lname))) return(hmalloc(pw)); -#endif /* DBMPWD */ return NULL; }