#include <h/mh.h>
#include <fcntl.h>
#include <h/aliasbr.h>
-#include <h/mts.h>
#include <h/utils.h>
#include <grp.h>
#include <pwd.h>
if (context_foil(NULL) == -1)
done(1);
- mts_init(invo_name);
arguments = getarguments(invo_name, argc, argv, 0);
argp = arguments;
while ((cp = *argp++)) {
if (*cp == '-') {
switch (smatch(++cp, switches)) {
- case AMBIGSW:
- ambigsw(cp, switches);
- done(1);
- case UNKWNSW:
- adios(NULL, "-%s unknown", cp);
-
- case HELPSW:
- snprintf(buf, sizeof(buf), "%s [switches] [aliasfiles ...]", invo_name);
- print_help(buf, switches, 0);
- done(1);
- case VERSIONSW:
- print_version(invo_name);
- done(1);
-
- case MAILSW:
- if (!(cp = *argp++) || *cp == '-')
- adios(NULL, "missing argument to %s", argp[-2]);
- if (mail)
- adios(NULL, "mail to one address only");
- else
- mail = cp;
- continue;
-
- case SERCHSW:
- if (!(cp = *argp++) || *cp == '-')
- adios(NULL, "missing argument to %s", argp[-2]);
- if (dp >= NDIRS)
- adios(NULL, "more than %d directories", NDIRS);
- dirs[dp++] = cp;
- continue;
+ case AMBIGSW:
+ ambigsw(cp, switches);
+ done(1);
+ case UNKWNSW:
+ adios(NULL, "-%s unknown", cp);
+
+ case HELPSW:
+ snprintf(buf, sizeof(buf), "%s [switches] [aliasfiles ...]", invo_name);
+ print_help(buf, switches, 0);
+ done(1);
+ case VERSIONSW:
+ print_version(invo_name);
+ done(1);
+
+ case MAILSW:
+ if (!(cp = *argp++) || *cp == '-')
+ adios(NULL, "missing argument to %s",
+ argp[-2]);
+ if (mail)
+ adios(NULL, "mail to one address only");
+ else
+ mail = cp;
+ continue;
+
+ case SERCHSW:
+ if (!(cp = *argp++) || *cp == '-')
+ adios(NULL, "missing argument to %s",
+ argp[-2]);
+ if (dp >= NDIRS)
+ adios(NULL, "more than %d directories",
+ NDIRS);
+ dirs[dp++] = cp;
+ continue;
}
}
akv[akp++] = cp;
grp_names();
grp_members();
grp_ids();
-#ifdef UCI
- ldr_names();
- ldr_ship();
-#endif /* UCI */
maildrops();
done(0);
setgrent();
while ((gr = getgrent())) {
for (i = 0; i < numgroups; i++)
- if (!strcmp(grps[i], gr->gr_name)) {
+ if (strcmp(grps[i], gr->gr_name)==0) {
setup();
fprintf(out, "duplicate group %s(gid=%d)\n",
gr->gr_name, (int) gr->gr_gid);
while ((gr = getgrent())) {
for (cp = gr->gr_mem; *cp; cp++) {
for (hm = homehead; hm; hm = hm->h_next)
- if (!strcmp(*cp, hm->h_name))
+ if (strcmp(*cp, hm->h_name)==0)
break;
if (hm == NULL) {
setup();
{
register int i;
- if (mmdfldir && *mmdfldir)
- mdrop(mmdfldir);
- if (uucpldir && *uucpldir)
- mdrop(uucpldir);
+ mdrop(mailspool);
for (i = 0; dirs[i]; i++)
mdrop(dirs[i]);
}
register struct home *hm;
for (hm = homehead; hm; hm = hm->h_next)
- if (!strcmp(s, hm->h_name))
+ if (strcmp(s, hm->h_name)==0)
return 1;
return 0;
}
adios("pipe", "unable to");
switch (fork()) {
- case NOTOK:
- adios("fork", "unable to");
-
- case OK:
- close(pd[1]);
- if (pd[0] != 0) {
- dup2(pd[0], 0);
- close(pd[0]);
- }
- if ((fd = open("/dev/null", O_WRONLY))
- != NOTOK)
- if (fd != 1) {
- dup2(fd, 1);
- close(fd);
- }
- execlp(mailproc, mhbasename(mailproc),
- mail, "-subject", invo_name,
- NULL);
- adios(mailproc, "unable to exec ");
-
- default:
- close(pd[0]);
- out = fdopen(pd[1], "w");
- fprintf(out, "%s: the following is suspicious\n\n", invo_name);
- }
- }
-}
-
-#ifdef UCI
-/*
-** UCI specific stuff for conflict
-*/
-
-/* taken from <grpldr.h> */
-
-#define GLDRS "/admin/etc/GroupLeaders"
-
-struct grpldr {
- char *gl_name;
- char **gl_ldr;
-};
-
-int setglent(), endglent();
-struct grpldr *getglent(), *getglnam();
-
-
-/* taken from the getglent() routines */
-
-#define MAXGLS 100
-
-static FILE *glp = NULL;
-static char line[BUFSIZ+1];
-static struct grpldr grpldr;
-static char *gl_ldr[MAXGLS + 1];
-
+ case NOTOK:
+ adios("fork", "unable to");
-setglent() {
- if (glp == NULL)
- glp = fopen(GLDRS, "r");
- else
- rewind(glp);
-
- return (glp != NULL);
-}
-
-
-endglent() {
- if (glp != NULL) {
- fclose(glp);
- glp = NULL;
- }
-
- return 1;
-}
-
-struct grpldr *getglent() {
- register char *cp, **q;
-
- if (glp == NULL && !setglent())
- return NULL;
- if ((cp = fgets(line, BUFSIZ, glp)) == NULL)
- return NULL;
-
- grpldr.gl_name = cp;
- grpldr.gl_ldr = q = gl_ldr;
-
- while (*cp) {
- while (*cp && !isspace(*cp))
- cp++;
- while (*cp && isspace(*cp))
- *cp++ = '\0';
- if (*cp == '\0')
- break;
- if (q < gl_ldr + MAXGLS)
- *q++ = cp;
- else
- break;
- }
- *q = NULL;
-
- return (&grpldr);
-}
-
-struct grpldr *getglnam(name)
-char *name;
-{
- register struct grpldr *gl = NULL;
-
- setglent();
- while (gl = getglent())
- if (strcmp(name, gl->gl_name) == 0)
- break;
- endglent();
-
- return gl;
-}
-
-ldr_names() {
- register int gp, hit = 0;
- char *gldrs[NGRPS];
- register struct grpldr *gl;
-
- gldrs[0] = NULL;
- setglent();
- while (gl = getglent()) {
- if (getgrnam(gl->gl_name) == NULL) {
- setup();
- fprintf(out, "unknown group %s in group leaders file\n",
- gl->gl_name);
- hit++;
- }
- for (gp = 0; gldrs[gp]; gp++)
- if (strcmp(gldrs[gp], gl->gl_name) == 0) {
- setup();
- fprintf(out, "duplicate group %s in group leaders file\n", gl->gl_name);
- hit++;
- break;
- }
- if (gldrs[gp] == NULL)
- if (gp < NGRPS) {
- gldrs[gp++] = getcpy(gl->gl_name);
- gldrs[gp] = NULL;
- } else {
- setup();
- fprintf(out, "more than %d groups in group leaders file (time to recompile)\n", NGRPS - 1);
- hit++;
- }
- }
- endglent();
-
- for (gp = 0; gldrs[gp]; gp++)
- free(gldrs[gp]);
-
- if (!hit && out && !mail)
- fprintf(out, "all groups in group leaders file accounted for\n");
-}
-
-
-ldr_ship() {
- register int hit = 0;
- register char **cp, **dp;
- register struct grpldr *gl;
-
- setglent();
- while (gl = getglent())
- for (cp = gl->gl_ldr; *cp; cp++) {
- if (!check(*cp)) {
- setup();
- fprintf(out, "group %s has unknown leader %s\n", gl->gl_name, *cp);
- hit++;
+ case OK:
+ close(pd[1]);
+ if (pd[0] != 0) {
+ dup2(pd[0], 0);
+ close(pd[0]);
}
-
- for (dp = cp + 1; *dp; dp++)
- if (strcmp(*cp, *dp) == 0) {
- setup();
- fprintf(out, "group %s had duplicate leader %s\n", gl->gl_name, *cp);
- hit++;
+ if ((fd = open("/dev/null", O_WRONLY))
+ != NOTOK)
+ if (fd != 1) {
+ dup2(fd, 1);
+ close(fd);
}
+ execlp(mailproc, mhbasename(mailproc),
+ mail, "-subject", invo_name,
+ NULL);
+ adios(mailproc, "unable to exec ");
+
+ default:
+ close(pd[0]);
+ out = fdopen(pd[1], "w");
+ fprintf(out, "%s: the following is suspicious\n\n", invo_name);
}
- endglent();
-
- if (!hit && out && !mail)
- fprintf(out, "all group leaders accounted for\n");
+ }
}
-#endif /* UCI */