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 *);
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)
{
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;
}
break;
- case '*': /* Everyone */
- addall(ak);
- break;
-
default: /* list */
while ((cp = getalias(pp)))
add_aka(ak, cp);
}
#ifdef DBMPWD
if ((pw = getpwnam(gp))) {
- hmalloc(pw);
- add_aka(ak, gp);
+ hmalloc(pw);
+ add_aka(ak, gp);
}
}
#endif /* DBMPWD */
}
-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)
{
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;
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;