X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fslocal.c;h=18c4a5820accd038be8b78e1e1aef487863be509;hp=41f986dcb089b36e965f91731bddcc6095ee4d07;hb=b6823062c9806496b39ff12bf1fbe43ae127c96c;hpb=2abb9a7cfb0930e27062088734d306e7d78e4cc2 diff --git a/uip/slocal.c b/uip/slocal.c index 41f986d..18c4a58 100644 --- a/uip/slocal.c +++ b/uip/slocal.c @@ -28,6 +28,7 @@ #include #include #include +#include #ifdef INITGROUPS_HEADER #include INITGROUPS_HEADER @@ -189,72 +190,72 @@ main(int argc, char **argv) switch (smatch(++cp, switches)) { case AMBIGSW: ambigsw(cp, switches); - exit(1); + exit(EX_USAGE); case UNKWNSW: - adios(NULL, "-%s unknown", cp); + adios(EX_USAGE, NULL, "-%s unknown", cp); case HELPSW: snprintf(buf, sizeof(buf), "%s [switches] [address info sender]", invo_name); print_help(buf, switches, 0); - exit(0); + exit(argc == 2 ? EX_OK : EX_USAGE); case VERSIONSW: print_version(invo_name); - exit(0); + exit(argc == 2 ? EX_OK : EX_USAGE); case ADDRSW: if (!(addr = *argp++)) { /* allow -xyz arguments */ - adios(NULL, "missing argument to %s", + adios(EX_USAGE, NULL, "missing argument to %s", argp[-2]); } continue; case INFOSW: if (!(info = *argp++)) { /* allow -xyz arguments */ - adios(NULL, "missing argument to %s", + adios(EX_USAGE, NULL, "missing argument to %s", argp[-2]); } continue; case USERSW: if (!(user = *argp++)) { /* allow -xyz arguments */ - adios(NULL, "missing argument to %s", + adios(EX_USAGE, NULL, "missing argument to %s", argp[-2]); } continue; case FILESW: if (!(file = *argp++) || *file == '-') { - adios(NULL, "missing argument to %s", + adios(EX_USAGE, NULL, "missing argument to %s", argp[-2]); } continue; case SENDERSW: if (!(sender = *argp++)) { /* allow -xyz arguments */ - adios(NULL, "missing argument to %s", + adios(EX_USAGE, NULL, "missing argument to %s", argp[-2]); } continue; case MAILBOXSW: if (!(mbox = *argp++) || *mbox == '-') { - adios(NULL, "missing argument to %s", + adios(EX_USAGE, NULL, "missing argument to %s", argp[-2]); } continue; case HOMESW: if (!(home = *argp++) || *home == '-') { - adios(NULL, "missing argument to %s", + adios(EX_USAGE, NULL, "missing argument to %s", argp[-2]); } continue; case MAILSW: if (!(cp = *argp++) || *cp == '-') { - adios(NULL, "missing argument to %s", + adios(EX_USAGE, NULL, "missing argument to %s", argp[-2]); } if (mdlvr) { - adios(NULL, "only one maildelivery file at a time!"); + adios(EX_USAGE, NULL, "only one maildelivery file at a time!"); } mdlvr = cp; continue; @@ -292,7 +293,7 @@ main(int argc, char **argv) user = (cp = strchr(addr, '.')) ? ++cp : addr; } if (!(pw = getpwnam(user))) { - adios(NULL, "no such local user as %s", user); + adios(EX_NOUSER, NULL, "no such local user as %s", user); } if (chdir(pw->pw_dir) == -1) { @@ -314,7 +315,7 @@ main(int argc, char **argv) /* Record the delivery time */ if (!(now = dlocaltimenow())) { - adios(NULL, "unable to ascertain local time"); + adios(EX_OSERR, NULL, "unable to ascertain local time"); } snprintf(ddate, sizeof(ddate), "Delivery-Date: %s\n", dtimenow()); @@ -326,14 +327,14 @@ main(int argc, char **argv) /* getting message from file */ if ((tempfd = open(file, O_RDONLY)) == -1) { - adios(file, "unable to open"); + adios(EX_IOERR, file, "unable to open"); } if (debug) { debug_printf("retrieving message from file \"%s\"\n", file); } if ((fd = copy_message(tempfd, tmpfil, 1)) == -1) { - adios(NULL, "unable to create temporary file"); + adios(EX_CANTCREAT, NULL, "unable to create temporary file"); } close(tempfd); } else { @@ -342,7 +343,7 @@ main(int argc, char **argv) debug_printf("retrieving message from stdin\n"); } if ((fd = copy_message(fileno(stdin), tmpfil, 1)) == -1) { - adios(NULL, "unable to create temporary file"); + adios(EX_CANTCREAT, NULL, "unable to create temporary file"); } } @@ -368,7 +369,7 @@ main(int argc, char **argv) unlink(tmpfil); if (!(fp = fdopen(fd, "r+"))) { - adios(NULL, "unable to access temporary file"); + adios(EX_IOERR, NULL, "unable to access temporary file"); } /* If no sender given, extract it from envelope information. */ @@ -746,10 +747,10 @@ parse(int fd) /* add special entries to lookup table */ if ((p = lookup(hdrs, "source"))) { - p->p_value = getcpy(sender); + p->p_value = mh_xstrdup(sender); } if ((p = lookup(hdrs, "addr"))) { - p->p_value = getcpy(addr); + p->p_value = mh_xstrdup(addr); } /* @@ -759,9 +760,8 @@ parse(int fd) switch (state = m_getfld(state, name, field, sizeof(field), in)) { case FLD: - case FLDEOF: case FLDPLUS: - lp = getcpy(field); + lp = mh_xstrdup(field); while (state == FLDPLUS) { state = m_getfld(state, name, field, sizeof(field), in); @@ -783,24 +783,20 @@ parse(int fd) } p->p_value = add(lp, cp); } - free(lp); + mh_free0(&lp); break; } } if (!p->p_name && i < NVEC) { - p->p_name = getcpy(name); + p->p_name = mh_xstrdup(name); p->p_value = lp; p->p_flags = P_NIL; p++, i++; p->p_name = NULL; } - if (state != FLDEOF) { - continue; - } - break; + continue; case BODY: - case BODYEOF: case FILEEOF: break; @@ -822,7 +818,7 @@ parse(int fd) if (!(q = lookup(hdrs, "reply-to")) || !q->p_value) { q = lookup(hdrs, "from"); } - p->p_value = getcpy(q ? q->p_value : ""); + p->p_value = mh_xstrdup(q ? q->p_value : ""); p->p_flags &= ~P_CHK; if (debug) { debug_printf("vars[%d]: name=\"%s\" value=\"%s\"\n", @@ -895,18 +891,18 @@ glob(int fd) return; } if ((p = lookup(vars, "sender"))) { - p->p_value = getcpy(sender); + p->p_value = mh_xstrdup(sender); } if ((p = lookup(vars, "address"))) { - p->p_value = getcpy(addr); + p->p_value = mh_xstrdup(addr); } if ((p = lookup(vars, "size"))) { snprintf(buffer, sizeof(buffer), "%d", fstat(fd, &st) != -1 ? (int) st.st_size : 0); - p->p_value = getcpy(buffer); + p->p_value = mh_xstrdup(buffer); } if ((p = lookup(vars, "info"))) { - p->p_value = getcpy(info); + p->p_value = mh_xstrdup(info); } if (debug) { for (p = vars; p->p_name; p++) { @@ -1032,7 +1028,7 @@ usr_pipe(int fd, char *cmd, char *pgm, char **vec, int suppress) m_putenv("PATH", path); execvp(pgm, vec); - _exit(-1); + _exit(EX_OSERR); default: /* parent process */ @@ -1094,7 +1090,7 @@ get_sender(char *envelope, char **sender) unsigned char buffer[BUFSIZ]; if (!envelope) { - *sender = getcpy(""); + *sender = mh_xstrdup(""); return; } @@ -1118,7 +1114,7 @@ get_sender(char *envelope, char **sender) } else { break; } - *sender = getcpy(buffer); + *sender = mh_xstrdup(buffer); } @@ -1198,7 +1194,7 @@ you_lose: ** get copy of envelope information ** ("From " line) */ - envelope = getcpy(buffer); + envelope = mh_xstrdup(buffer); /* Put the delivery date in message */ fputs(ddate, ffp); @@ -1268,7 +1264,7 @@ trimstr(char *cp) *sp = ' '; } } - return getcpy(bp); + return mh_xstrdup(bp); } /*