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 *);
{
register char *v;
- if (akahead == NULL)
- alias(AliasFile);
-
akvis = -1;
v = akval(akahead, s);
if (akvis == -1)
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) && strncmp(file, "../", 3)))
- file = etcpath(file);
if ((fp = fopen(file, "r")) == NULL) {
akerrst = file;
return AK_NOFILE;
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;
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;
}
}
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;
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;
}
}
-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)
{
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));