X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Frcvtty.c;h=97c32284b531038d9c20dafac78dc67d1f5d5431;hp=b847b563972e4f0aab765add41c924fe3e0fc581;hb=d8916ff5d389de5ab225cd6f40aeda1b285d0f28;hpb=794dab6aa5027ffaf024506140c258f6a0a9322d diff --git a/uip/rcvtty.c b/uip/rcvtty.c index b847b56..97c3228 100644 --- a/uip/rcvtty.c +++ b/uip/rcvtty.c @@ -3,22 +3,35 @@ * rcvtty.c -- a rcvmail program (a lot like rcvalert) handling IPC ttys * * $Id$ + * + * 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. + */ + +/* Changed to use getutent() and friends. Assumes that when getutent() exists, + * a number of other things also exist. Please check. + * Ruud de Rooij Sun, 28 May 2000 17:28:55 +0200 */ #include #include #include #include -#include +#include +#include #include #include #include -#ifndef UTMP_FILE -# ifdef _PATH_UTMP -# define UTMP_FILE _PATH_UTMP -# else -# define UTMP_FILE "/etc/utmp" + +#ifndef HAVE_GETUTENT +# ifndef UTMP_FILE +# ifdef _PATH_UTMP +# define UTMP_FILE _PATH_UTMP +# else +# define UTMP_FILE "/etc/utmp" +# endif # endif #endif @@ -47,7 +60,7 @@ static struct swit switches[] = { #define VERSIONSW 8 { "version", 0 }, #define HELPSW 9 - { "help", 4 }, + { "help", 0 }, { NULL, 0 } }; @@ -79,8 +92,12 @@ main (int argc, char **argv) int md, vecp = 0; char *cp, *user, buf[BUFSIZ], tty[BUFSIZ]; char **argp, **arguments, *vec[MAXARGS]; +#ifdef HAVE_GETUTENT + struct utmp * utp; +#else struct utmp ut; register FILE *uf; +#endif #ifdef LOCALE setlocale(LC_ALL, ""); @@ -155,17 +172,35 @@ main (int argc, char **argv) exit (RCV_MBX); user = getusername(); + +#ifdef HAVE_GETUTENT + setutent(); + while ((utp = getutent()) != NULL) { + if ( +#ifdef HAVE_STRUCT_UTMP_UT_TYPE + utp->ut_type == USER_PROCESS + && +#endif + utp->ut_name[0] != 0 + && utp->ut_line[0] != 0 + && strncmp (user, utp->ut_name, sizeof(utp->ut_name)) == 0) { + strncpy (tty, utp->ut_line, sizeof(utp->ut_line)); + alert (tty, md); + } + } + endutent(); +#else if ((uf = fopen (UTMP_FILE, "r")) == NULL) exit (RCV_MBX); - 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) { strncpy (tty, ut.ut_line, sizeof(ut.ut_line)); alert (tty, md); } - fclose (uf); +#endif + exit (RCV_MOK); return 0; /* dead code to satisfy the compiler */ } @@ -191,12 +226,12 @@ message_fd (char **vec) struct stat st; #ifdef HAVE_MKSTEMP - unlink (mkstemp (strncpy (tmpfil, "/tmp/rcvttyXXXXX", sizeof(tmpfil)))); + fd = mkstemp (strncpy (tmpfil, "/tmp/rcvttyXXXXX", sizeof(tmpfil))); #else unlink (mktemp (strncpy (tmpfil, "/tmp/rcvttyXXXXX", sizeof(tmpfil)))); -#endif if ((fd = open (tmpfil, O_RDWR | O_CREAT | O_TRUNC, 0600)) == NOTOK) return header_fd (); +#endif unlink (tmpfil); if ((child_id = vfork()) == NOTOK) {