Removed conflict(8), because checking passwd, /var/mail, etc. is not our job.
[mmh] / uip / conflict.c
diff --git a/uip/conflict.c b/uip/conflict.c
deleted file mode 100644 (file)
index 3670e8e..0000000
+++ /dev/null
@@ -1,366 +0,0 @@
-/*
-** conflict.c -- check for conflicts in mail system
-**
-** This code is Copyright (c) 2002, by the authors of nmh.  See the
-** COPYRIGHT file in the root directory of the nmh distribution for
-** complete copyright information.
-*/
-
-#include <h/mh.h>
-#include <fcntl.h>
-#include <h/aliasbr.h>
-#include <h/utils.h>
-#include <grp.h>
-#include <pwd.h>
-
-/*
-** maximum number of directories that can
-** be specified using -search switch.
-*/
-#define NDIRS  100
-
-/*
-** Add space for group names, 100 at a time
-*/
-#define NGRPS  100
-
-static struct swit switches[] = {
-#define MAILSW  0
-       { "mail name", 0 },
-#define SERCHSW  1
-       { "search directory", 0 },
-#define VERSIONSW  2
-       { "version", 0 },
-#define HELPSW  3
-       { "help", 0 },
-       { NULL, 0 }
-};
-
-static char *mail = NULL;
-static char *dirs[NDIRS];
-static FILE *out = NULL;
-
-extern struct aka  *akahead;
-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 mdrop(char *);
-int check(char *);
-void setup(void);
-
-
-int
-main(int argc, char **argv)
-{
-       int akp = 0, dp = 0;
-       char *cp, **argp, **arguments;
-       char buf[BUFSIZ], *akv[50];
-
-#ifdef LOCALE
-       setlocale(LC_ALL, "");
-#endif
-       invo_name = mhbasename(argv[0]);
-
-       /* foil search of user profile/context */
-       if (context_foil(NULL) == -1)
-               done(1);
-
-       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;
-                       }
-               }
-               akv[akp++] = cp;
-       }
-
-       if (!homehead)
-               init_pw();
-       if (!mail)
-               out = stdout;
-       dirs[dp] = NULL;
-
-       alias_files(akp, akv);
-       pwd_names();
-       grp_names();
-       grp_members();
-       grp_ids();
-       maildrops();
-
-       done(0);
-       return 1;
-}
-
-
-void
-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));
-               } else if (out && !mail)
-                       fprintf(out, "alias file %s is ok\n", akv[i]);
-}
-
-
-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",
-                                               lm->h_name, (int) lm->h_uid);
-                               hit++;
-                       }
-
-       if (!hit && out && !mail)
-               fprintf(out, "no duplicate users\n");
-}
-
-
-void
-grp_names(void)
-{
-       int numgroups, maxgroups;
-       int i, hit = 0;
-       char **grps;
-       struct group *gr;
-
-       /* allocate space NGRPS at a time */
-       numgroups = 0;
-       maxgroups = NGRPS;
-       grps = (char **) mh_xmalloc((size_t) (maxgroups * sizeof(*grps)));
-
-       setgrent();
-       while ((gr = getgrent())) {
-               for (i = 0; i < numgroups; i++)
-                       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;
-                       }
-               if (i >= numgroups) {
-                       if (numgroups >= maxgroups) {
-                               maxgroups += NGRPS;
-                               grps = (char **) mh_xrealloc(grps,
-                                       (size_t) (maxgroups * sizeof(*grps)));
-                       }
-                       grps[numgroups++] = getcpy(gr->gr_name);
-               }
-       }
-       endgrent();
-
-       for (i = 0; i < numgroups; i++)
-               free(grps[i]);
-       free(grps);
-
-       if (!hit && out && !mail)
-               fprintf(out, "no duplicate groups\n");
-}
-
-
-void
-grp_members(void)
-{
-       register int hit = 0;
-       register char **cp, **dp;
-       register struct group *gr;
-       register struct home  *hm;
-
-       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)==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);
-                               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);
-                                       hit++;
-                               }
-               }
-       }
-       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",
-                                       hm->h_name, hm->h_ngrps, NGROUPS_MAX);
-                       hit++;
-               }
-
-       if (!hit && out && !mail)
-               fprintf(out, "all group members accounted for\n");
-}
-
-
-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);
-                       hit++;
-               }
-
-       if (!hit && out && !mail)
-               fprintf(out, "all group-id users accounted for\n");
-}
-
-
-void
-maildrops(void)
-{
-       register int i;
-
-       mdrop(mailspool);
-       for (i = 0; dirs[i]; i++)
-               mdrop(dirs[i]);
-}
-
-
-void
-mdrop(char *drop)
-{
-       register int hit = 0;
-       register struct dirent *dp;
-       register DIR *dd = opendir(drop);
-
-       if (!dd) {
-               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);
-                       hit++;
-               }
-
-       closedir(dd);
-       if (!hit && out && !mail)
-               fprintf(out, "all maildrops accounted for in %s\n", drop);
-}
-
-
-int
-check(char *s)
-{
-       register struct home *hm;
-
-       for (hm = homehead; hm; hm = hm->h_next)
-               if (strcmp(s, hm->h_name)==0)
-                       return 1;
-       return 0;
-}
-
-void
-setup(void)
-{
-       int fd, pd[2];
-
-       if (out)
-               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("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);
-               }
-       }
-}