X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fconflict.c;h=3670e8e73cd5d29dcb548944865f72919779e580;hp=fdd6de20c20fcda3cec65aa9e026e26d14973516;hb=5b92ee6942b9b466914f5faa5fa4c00a2ebc6d35;hpb=ced6090a330d3d83d0bce709f756aa3d7d65fea4 diff --git a/uip/conflict.c b/uip/conflict.c index fdd6de2..3670e8e 100644 --- a/uip/conflict.c +++ b/uip/conflict.c @@ -9,7 +9,6 @@ #include #include #include -#include #include #include #include @@ -47,19 +46,19 @@ extern struct home *homehead; /* ** prototypes */ -void alias_files (int, char **); -void pwd_names (void); -void grp_names (void); -void grp_members (void); -void grp_ids (void); -void maildrops (void); +void alias_files(int, char **); +void pwd_names(void); +void grp_names(void); +void grp_members(void); +void grp_ids(void); +void maildrops(void); void mdrop(char *); -int check (char *); -void setup (void); +int check(char *); +void setup(void); int -main (int argc, char **argv) +main(int argc, char **argv) { int akp = 0, dp = 0; char *cp, **argp, **arguments; @@ -68,115 +67,111 @@ main (int argc, char **argv) #ifdef LOCALE setlocale(LC_ALL, ""); #endif - invo_name = r1bindex (argv[0], '/'); + invo_name = mhbasename(argv[0]); /* foil search of user profile/context */ - if (context_foil (NULL) == -1) - done (1); + if (context_foil(NULL) == -1) + done(1); - mts_init (invo_name); - arguments = getarguments (invo_name, argc, argv, 0); + 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; + 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; } } akv[akp++] = cp; } - if (akp == 0) - akv[akp++] = AliasFile; if (!homehead) - init_pw (); + init_pw(); if (!mail) out = stdout; dirs[dp] = NULL; - alias_files (akp, akv); - pwd_names (); - grp_names (); - grp_members (); - grp_ids (); -#ifdef UCI - ldr_names (); - ldr_ship (); -#endif /* UCI */ - maildrops (); - - done (0); + alias_files(akp, akv); + pwd_names(); + grp_names(); + grp_members(); + grp_ids(); + maildrops(); + + done(0); return 1; } void -alias_files (int akp, char **akv) +alias_files(int akp, char **akv) { register int i, err; for (i = 0; i < akp; i++) - if ((err = alias (akv[i])) != AK_OK) { - setup (); - fprintf (out, "aliasing error in %s - %s\n", akv[i], akerror (err)); + if ((err = alias(akv[i])) != AK_OK) { + setup(); + fprintf(out, "aliasing error in %s - %s\n", akv[i], + akerror(err)); } else if (out && !mail) - fprintf (out, "alias file %s is ok\n", akv[i]); + fprintf(out, "alias file %s is ok\n", akv[i]); } void -pwd_names (void) +pwd_names(void) { int hit = 0; register struct home *hm, *lm; for (hm = homehead; hm; hm = hm->h_next) for (lm = hm->h_next; lm; lm = lm->h_next) - if (strcmp (hm->h_name, lm->h_name) == 0) { - setup (); - fprintf (out, "duplicate user %s(uid=%d)\n", + if (strcmp(hm->h_name, lm->h_name) == 0) { + setup(); + fprintf(out, "duplicate user %s(uid=%d)\n", lm->h_name, (int) lm->h_uid); hit++; } if (!hit && out && !mail) - fprintf (out, "no duplicate users\n"); + fprintf(out, "no duplicate users\n"); } void -grp_names (void) +grp_names(void) { int numgroups, maxgroups; int i, hit = 0; @@ -188,12 +183,12 @@ grp_names (void) maxgroups = NGRPS; grps = (char **) mh_xmalloc((size_t) (maxgroups * sizeof(*grps))); - setgrent (); - while ((gr = getgrent ())) { + setgrent(); + while ((gr = getgrent())) { for (i = 0; i < numgroups; i++) - if (!strcmp (grps[i], gr->gr_name)) { - setup (); - fprintf (out, "duplicate group %s(gid=%d)\n", + if (strcmp(grps[i], gr->gr_name)==0) { + setup(); + fprintf(out, "duplicate group %s(gid=%d)\n", gr->gr_name, (int) gr->gr_gid); hit++; break; @@ -204,97 +199,91 @@ grp_names (void) grps = (char **) mh_xrealloc(grps, (size_t) (maxgroups * sizeof(*grps))); } - grps[numgroups++] = getcpy (gr->gr_name); + grps[numgroups++] = getcpy(gr->gr_name); } } - endgrent (); + endgrent(); for (i = 0; i < numgroups; i++) - free (grps[i]); - free (grps); + free(grps[i]); + free(grps); if (!hit && out && !mail) - fprintf (out, "no duplicate groups\n"); + fprintf(out, "no duplicate groups\n"); } void -grp_members (void) +grp_members(void) { register int hit = 0; register char **cp, **dp; register struct group *gr; register struct home *hm; - setgrent (); - while ((gr = getgrent ())) { + setgrent(); + 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 (); - fprintf (out, "group %s(gid=%d) has unknown member %s\n", - gr->gr_name, (int) gr->gr_gid, *cp); + setup(); + fprintf(out, "group %s(gid=%d) has unknown member %s\n", gr->gr_name, (int) gr->gr_gid, *cp); hit++; } else { hm->h_ngrps++; } for (dp = cp + 1; *dp; dp++) - if (strcmp (*cp, *dp) == 0) { - setup (); - fprintf (out, "group %s(gid=%d) has duplicate member %s\n", - gr->gr_name, (int) gr->gr_gid, *cp); + if (strcmp(*cp, *dp) == 0) { + setup(); + fprintf(out, "group %s(gid=%d) has duplicate member %s\n", gr->gr_name, (int) gr->gr_gid, *cp); hit++; } } } - endgrent (); + endgrent(); for (hm = homehead; hm; hm = hm->h_next) if (hm->h_ngrps > NGROUPS_MAX) { - setup (); - fprintf (out, "user %s is a member of %d groups (max %d)\n", + setup(); + fprintf(out, "user %s is a member of %d groups (max %d)\n", hm->h_name, hm->h_ngrps, NGROUPS_MAX); hit++; } if (!hit && out && !mail) - fprintf (out, "all group members accounted for\n"); + fprintf(out, "all group members accounted for\n"); } void -grp_ids (void) +grp_ids(void) { /* -DRAND not implemented at most places */ register int hit = 0; register struct home *hm; for (hm = homehead; hm; hm = hm->h_next) - if (getgrgid (hm->h_gid) == NULL) { - setup (); - fprintf (out, "user %s(uid=%d) has unknown group-id %d\n", - hm->h_name, (int) hm->h_uid, (int) hm->h_gid); + if (getgrgid(hm->h_gid) == NULL) { + setup(); + fprintf(out, "user %s(uid=%d) has unknown group-id %d\n", hm->h_name, (int) hm->h_uid, (int) hm->h_gid); hit++; } if (!hit && out && !mail) - fprintf (out, "all group-id users accounted for\n"); + fprintf(out, "all group-id users accounted for\n"); } void -maildrops (void) +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]); + mdrop(dirs[i]); } @@ -303,41 +292,40 @@ mdrop(char *drop) { register int hit = 0; register struct dirent *dp; - register DIR *dd = opendir (drop); + register DIR *dd = opendir(drop); if (!dd) { - setup (); - fprintf (out, "unable to open maildrop area %s\n", drop); + setup(); + fprintf(out, "unable to open maildrop area %s\n", drop); return; } - while ((dp = readdir (dd))) - if (dp->d_name[0] != '.' && !check (dp->d_name)) { - setup (); - fprintf (out, "there is a maildrop for the unknown user %s in %s\n", - dp->d_name, drop); + while ((dp = readdir(dd))) + if (dp->d_name[0] != '.' && !check(dp->d_name)) { + setup(); + fprintf(out, "there is a maildrop for the unknown user %s in %s\n", dp->d_name, drop); hit++; } - closedir (dd); + closedir(dd); if (!hit && out && !mail) - fprintf (out, "all maildrops accounted for in %s\n", drop); + fprintf(out, "all maildrops accounted for in %s\n", drop); } int -check (char *s) +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; } void -setup (void) +setup(void) { int fd, pd[2]; @@ -345,195 +333,34 @@ setup (void) return; if (mail) { - if (pipe (pd) == NOTOK) - 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, r1bindex (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]; - - -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%s\n", - " (time to recompile)", 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++; + if (pipe(pd) == NOTOK) + 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]); } - - 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 */