X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/d45c3d28d788129428036fd7f26fa417beccd93e..78211e93:/uip/slocal.c?ds=inline diff --git a/uip/slocal.c b/uip/slocal.c index 6b4c306b..1c30dfc5 100644 --- a/uip/slocal.c +++ b/uip/slocal.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -34,15 +35,9 @@ #include #include -#ifdef INITGROUPS_HEADER -#include INITGROUPS_HEADER -#else -/* On AIX 4.1, initgroups() is defined and even documented (giving the parameter - types as char* and int), but doesn't have a prototype in any of the system - header files. AIX 4.3, SunOS 4.1.3, and ULTRIX 4.2A have the same - problem. */ -extern int initgroups(char*, int); -#endif +/* Hopefully, grp.h declares initgroups(). If we run into a platform + where it doesn't, we could consider declaring it here as well. */ +#include /* This define is needed for Berkeley db v2 and above to * make the header file expose the 'historical' ndbm APIs. @@ -50,55 +45,40 @@ extern int initgroups(char*, int); * harmless. */ #define DB_DBM_HSEARCH 1 +#ifdef DB_DBM_HSEARCH +#endif /* Use DB_DBM_HSEARCH to prevent warning from gcc -Wunused-macros. */ #ifdef NDBM_HEADER #include NDBM_HEADER #endif -#include - -#ifndef HAVE_GETUTENT -# ifndef UTMP_FILE -# ifdef _PATH_UTMP -# define UTMP_FILE _PATH_UTMP -# else -# define UTMP_FILE "/etc/utmp" -# endif -# endif -#endif - -static struct swit switches[] = { -#define ADDRSW 0 - { "addr address", 0 }, -#define USERSW 1 - { "user name", 0 }, -#define FILESW 2 - { "file file", 0 }, -#define SENDERSW 3 - { "sender address", 0 }, -#define MAILBOXSW 4 - { "mailbox file", 0 }, -#define HOMESW 5 - { "home directory", -4 }, -#define INFOSW 6 - { "info data", 0 }, -#define MAILSW 7 - { "maildelivery file", 0 }, -#define VERBSW 8 - { "verbose", 0 }, -#define NVERBSW 9 - { "noverbose", 0 }, -#define SUPPRESSDUP 10 - { "suppressdup", 0 }, -#define NSUPPRESSDUP 11 - { "nosuppressdup", 0 }, -#define DEBUGSW 12 - { "debug", 0 }, -#define VERSIONSW 13 - { "version", 0 }, -#define HELPSW 14 - { "help", 0 }, - { NULL, 0 } -}; +#ifdef HAVE_GETUTXENT +#include +#endif /* HAVE_GETUTXENT */ + +#define SLOCAL_SWITCHES \ + X("addr address", 0, ADDRSW) \ + X("user name", 0, USERSW) \ + X("file file", 0, FILESW) \ + X("sender address", 0, SENDERSW) \ + X("mailbox file", 0, MAILBOXSW) \ + X("home directory", -4, HOMESW) \ + X("info data", 0, INFOSW) \ + X("maildelivery file", 0, MAILSW) \ + X("verbose", 0, VERBSW) \ + X("noverbose", 0, NVERBSW) \ + X("suppressdup", 0, SUPPRESSDUP) \ + X("nosuppressdup", 0, NSUPPRESSDUP) \ + X("debug", 0, DEBUGSW) \ + X("version", 0, VERSIONSW) \ + X("help", 0, HELPSW) \ + +#define X(sw, minchars, id) id, +DEFINE_SWITCH_ENUM(SLOCAL); +#undef X + +#define X(sw, minchars, id) { sw, minchars, id }, +DEFINE_SWITCH_ARRAY(SLOCAL, switches); +#undef X static int globbed = 0; /* have we built "vars" table yet? */ static int parsed = 0; /* have we built header field table yet */ @@ -233,13 +213,12 @@ main (int argc, char **argv) adios (NULL, "-%s unknown", cp); case HELPSW: - snprintf (buf, sizeof(buf), - "%s [switches] [address info sender]", invo_name); + snprintf (buf, sizeof(buf), "%s [switches]", invo_name); print_help (buf, switches, 0); - done (1); + done (0); case VERSIONSW: print_version(invo_name); - done (1); + done (0); case ADDRSW: if (!(addr = *argp++))/* allow -xyz arguments */ @@ -295,20 +274,8 @@ main (int argc, char **argv) debug++; continue; } - } - - switch (argp - (argv + 1)) { - case 1: - addr = cp; - break; - - case 2: - info = cp; - break; - - case 3: - sender = cp; - break; + } else { + adios (NULL, "only switch arguments are supported"); } } @@ -940,62 +907,31 @@ lookup (struct pair *pairs, char *key) * logged in. */ -#ifdef HAVE_GETUTENT static int logged_in (void) { - struct utmp * utp; +#if HAVE_GETUTXENT + struct utmpx *utp; if (utmped) return utmped; - setutent(); + setutxent(); - while ((utp = getutent()) != NULL) { - if ( -#ifdef HAVE_STRUCT_UTMP_UT_TYPE - utp->ut_type == USER_PROCESS - && -#endif - utp->ut_name[0] != 0 - && strncmp (user, utp->ut_name, sizeof(utp->ut_name)) == 0) { + while ((utp = getutxent()) != NULL) { + if ( utp->ut_type == USER_PROCESS && utp->ut_user[0] != 0 + && strncmp (user, utp->ut_user, sizeof(utp->ut_user)) == 0) { if (debug) continue; - endutent(); + endutxent(); return (utmped = DONE); } } - endutent(); - return (utmped = NOTOK); -} -#else -static int -logged_in (void) -{ - struct utmp ut; - FILE *uf; - - if (utmped) - return utmped; - - if ((uf = fopen (UTMP_FILE, "r")) == NULL) - return NOTOK; - - while (fread ((char *) &ut, sizeof(ut), 1, uf) == 1) { - if (ut.ut_name[0] != 0 - && strncmp (user, ut.ut_name, sizeof(ut.ut_name)) == 0) { - if (debug) - continue; - fclose (uf); - return (utmped = DONE); - } - } - - fclose (uf); + endutxent(); +#endif /* HAVE_GETUTXENT */ return (utmped = NOTOK); } -#endif #define check(t,a,b) if (t < a || t > b) return -1 #define cmpar(h1,m1,h2,m2) if (h1 < h2 || (h1 == h2 && m1 < m2)) return 0 @@ -1099,18 +1035,6 @@ usr_folder (int fd, char *string) /* use rcvstore to put message in folder */ status = usr_pipe (fd, "rcvstore", rcvstoreproc, vec, 1); -#if 0 - /* - * Currently, verbose status messages are handled by usr_pipe(). - */ - if (verbose) { - if (status == 0) - verbose_printf (", success.\n"); - else - verbose_printf (", failed.\n"); - } -#endif - return status; } @@ -1169,7 +1093,7 @@ usr_pipe (int fd, char *cmd, char *pgm, char **vec, int suppress) default: /* parent process */ - if (!setjmp (myctx)) { + if (! setjmp (myctx)) { SIGNAL (SIGALRM, alrmser); bytes = fstat (fd, &st) != -1 ? (int) st.st_size : 100; @@ -1214,9 +1138,7 @@ usr_pipe (int fd, char *cmd, char *pgm, char **vec, int suppress) static void alrmser (int i) { -#ifndef RELIABLE_SIGNALS - SIGNAL (SIGALRM, alrmser); -#endif + NMH_UNUSED (i); longjmp (myctx, DONE); } @@ -1334,13 +1256,6 @@ you_lose: /* get copy of envelope information ("From " line) */ envelope = getcpy (buffer); -#if 0 - /* First go ahead and put "From " line in message */ - fputs (buffer, ffp); - if (ferror (ffp)) - goto fputs_error; -#endif - /* Put the delivery date in message */ fputs (ddate, ffp); if (ferror (ffp))