X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Faliasbr.c;h=b00f51bc4b42c89368379e5b6d821d395bd2aba7;hp=baeab6f25e1d31e2b1ca87c910701427c94ea19d;hb=6e9577f324bef90765a5edc02044eb111ec48072;hpb=75a3bc56e890a9ca5e25f194acbb574e942de5c5 diff --git a/uip/aliasbr.c b/uip/aliasbr.c index baeab6f..b00f51b 100644 --- a/uip/aliasbr.c +++ b/uip/aliasbr.c @@ -11,6 +11,7 @@ #include #include #include +#include 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 *); @@ -50,7 +51,7 @@ struct home *seek_home(char *); char * akvalue(char *s) { - register char *v; + char *v; akvis = -1; v = akval(akahead, s); @@ -70,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; } @@ -102,14 +103,14 @@ 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 == '*') @@ -130,10 +131,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 ((fp = fopen(file, "r")) == NULL) { akerrst = file; @@ -281,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) @@ -295,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 != ';') @@ -311,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; @@ -332,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)); @@ -343,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); } } -#endif /* DBMPWD */ return 1; } @@ -374,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; @@ -388,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) @@ -404,7 +393,7 @@ addmember(struct aka *ak, char *grp) static char * getalias(char *addrs) { - register unsigned char *pp, *qp; + unsigned char *pp, *qp; static char *cp = NULL; if (cp == NULL) @@ -436,14 +425,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)==0) return; - ad = (struct adr *) mh_xmalloc(sizeof(*ad)); - ad->ad_text = getcpy(pp); + 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) @@ -456,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; @@ -505,15 +487,15 @@ 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; /* append to end */ @@ -530,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); @@ -561,7 +536,6 @@ seek_home(char *name) *c1 = '\0'; if ((pw = getpwnam(lname))) return(hmalloc(pw)); -#endif /* DBMPWD */ return NULL; }