X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fconflict.c;h=3670e8e73cd5d29dcb548944865f72919779e580;hp=5710aab8cb7f45703df1bef489cc35b1e9dab10c;hb=5b92ee6942b9b466914f5faa5fa4c00a2ebc6d35;hpb=240013872c392fe644bd4f79382d9f5314b4ea60 diff --git a/uip/conflict.c b/uip/conflict.c index 5710aab..3670e8e 100644 --- a/uip/conflict.c +++ b/uip/conflict.c @@ -9,7 +9,6 @@ #include #include #include -#include #include #include #include @@ -74,50 +73,50 @@ main(int argc, char **argv) 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; } - if (akp == 0) - akv[akp++] = AliasFile; if (!homehead) init_pw(); if (!mail) @@ -129,10 +128,6 @@ main(int argc, char **argv) grp_names(); grp_members(); grp_ids(); -#ifdef UCI - ldr_names(); - ldr_ship(); -#endif /* UCI */ maildrops(); done(0); @@ -191,7 +186,7 @@ grp_names(void) 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); @@ -230,7 +225,7 @@ grp_members(void) 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(); @@ -286,10 +281,7 @@ maildrops(void) { register int i; - if (mmdfldir && *mmdfldir) - mdrop(mmdfldir); - if (uucpldir && *uucpldir) - mdrop(uucpldir); + mdrop(mailspool); for (i = 0; dirs[i]; i++) mdrop(dirs[i]); } @@ -327,7 +319,7 @@ check(char *s) 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; } @@ -345,188 +337,30 @@ setup(void) 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 */ - -#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("mhmail", "mhmail", + mail, "-subject", invo_name, + NULL); + adios("mhmail", "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 */