X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/4b265472d682bf2ae1ee2eec288cbefbf8fa95e1..75e6b97059b6e5b012b1084677070add5c5b0c19:/lib-src/movemail.c diff --git a/lib-src/movemail.c b/lib-src/movemail.c index b816b6f294..a634e2966d 100644 --- a/lib-src/movemail.c +++ b/lib-src/movemail.c @@ -39,11 +39,11 @@ Boston, MA 02111-1307, USA. */ * "po:username". This will cause movemail to open a connection to * a pop server running on $MAILHOST (environment variable). Movemail * must be setuid to root in order to work with POP. - * + * * New module: popmail.c * Modified routines: * main - added code within #ifdef MAIL_USE_POP; added setuid (getuid ()) - * after POP code. + * after POP code. * New routines in movemail.c: * get_errmsg - return pointer to system error message * @@ -55,14 +55,21 @@ Boston, MA 02111-1307, USA. */ */ #define NO_SHORTNAMES /* Tell config not to load remap.h */ -#include <../src/config.h> +#include #include #include #include #include #include -#include <../src/syswait.h> + #include +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_FCNTL_H +#include +#endif +#include "syswait.h" #ifdef MAIL_USE_POP #include "pop.h" #endif @@ -95,25 +102,15 @@ Boston, MA 02111-1307, USA. */ implemented and used on Unix. */ //#define DISABLE_DIRECT_ACCESS -/* Ensure all file i/o is in binary mode. */ #include -int _fmode = _O_BINARY; #endif /* WINDOWSNT */ -#ifdef USG -#include -#include #ifndef F_OK #define F_OK 0 #define X_OK 1 #define W_OK 2 #define R_OK 4 #endif -#endif /* USG */ - -#ifdef HAVE_UNISTD_H -#include -#endif #if defined (XENIX) || defined (WINDOWSNT) #include @@ -132,7 +129,8 @@ extern int lk_open (), lk_close (); #endif #if !defined (MAIL_USE_SYSTEM_LOCK) && !defined (MAIL_USE_MMDF) && \ - defined (HAVE_LIBMAIL) && defined (HAVE_MAILLOCK_H) + (defined (HAVE_LIBMAIL) || defined (HAVE_LIBLOCKFILE)) && \ + defined (HAVE_MAILLOCK_H) #include /* We can't use maillock unless we know what directory system mail files appear in. */ @@ -146,7 +144,12 @@ static char *mail_spool_name (); extern int errno; #endif char *strerror (); -extern char *rindex (); +#ifdef HAVE_INDEX +extern char *index __P ((const char *, int)); +#endif +#ifdef HAVE_RINDEX +extern char *rindex __P((const char *, int)); +#endif void fatal (); void error (); @@ -194,6 +197,11 @@ main (argc, argv) # define ARGSTR "p" #endif /* MAIL_USE_POP */ +#ifdef WINDOWSNT + /* Ensure all file i/o is in binary mode. */ + _fmode = _O_BINARY; +#endif + delete_lockname = 0; while ((c = getopt (argc, argv, ARGSTR)) != EOF) @@ -208,7 +216,7 @@ main (argc, argv) preserve_mail++; break; default: - exit(1); + exit (EXIT_FAILURE); } } @@ -220,14 +228,13 @@ main (argc, argv) #endif ) { - fprintf (stderr, "Usage: movemail [-p] inbox destfile%s\n", #ifdef MAIL_USE_POP - " [POP-password]" + fprintf (stderr, "Usage: movemail [-p] inbox destfile%s\n", + " [POP-password]"); #else - "" + fprintf (stderr, "Usage: movemail [-p] inbox destfile%s\n", ""); #endif - ); - exit (1); + exit (EXIT_FAILURE); } inname = argv[optind]; @@ -451,7 +458,7 @@ main (argc, argv) pfatal_with_name (inname); } - + { char buf[1024]; @@ -529,12 +536,12 @@ main (argc, argv) if (spool_name) mailunlock (); #endif - exit (0); + exit (EXIT_SUCCESS); } wait (&status); if (!WIFEXITED (status)) - exit (1); + exit (EXIT_FAILURE); else if (WRETCODE (status) != 0) exit (WRETCODE (status)); @@ -547,7 +554,7 @@ main (argc, argv) #endif /* ! DISABLE_DIRECT_ACCESS */ - return 0; + return EXIT_SUCCESS; } #ifdef MAIL_USE_MAILLOCK @@ -599,18 +606,24 @@ fatal (s1, s2) { if (delete_lockname) unlink (delete_lockname); - error (s1, s2); - exit (1); + error (s1, s2, 0); + exit (EXIT_FAILURE); } -/* Print error message. `s1' is printf control string, `s2' is arg for it. */ +/* Print error message. `s1' is printf control string, `s2' and `s3' + are args for it or null. */ void error (s1, s2, s3) char *s1, *s2, *s3; { fprintf (stderr, "movemail: "); - fprintf (stderr, s1, s2, s3); + if (s3) + fprintf (stderr, s1, s2, s3); + else if (s2) + fprintf (stderr, s1, s2); + else + fprintf (stderr, s1); fprintf (stderr, "\n"); } @@ -683,7 +696,8 @@ FILE *sfi; FILE *sfo; char ibuffer[BUFSIZ]; char obuffer[BUFSIZ]; -char Errmsg[80]; +char Errmsg[200]; /* POP errors, at least, can exceed + the original length of 80. */ /* * The full legal syntax for a POP mailbox specification for movemail @@ -695,8 +709,11 @@ char Errmsg[80]; * If the mailbox is in the form "po:username:hostname", then it is * modified by this function -- the second colon is replaced by a * null. + * + * Return a value suitable for passing to `exit'. */ +int popmail (mailbox, outfile, preserve, password, reverse_order) char *mailbox; char *outfile; @@ -720,20 +737,20 @@ popmail (mailbox, outfile, preserve, password, reverse_order) server = pop_open (hostname, user, password, POP_NO_GETPASS); if (! server) { - error ("Error connecting to POP server: %s", pop_error); - return (1); + error ("Error connecting to POP server: %s", pop_error, 0); + return EXIT_FAILURE; } if (pop_stat (server, &nmsgs, &nbytes)) { - error ("Error getting message count from POP server: %s", pop_error); - return (1); + error ("Error getting message count from POP server: %s", pop_error, 0); + return EXIT_FAILURE; } if (!nmsgs) { pop_close (server); - return (0); + return EXIT_SUCCESS; } mbfi = open (outfile, O_WRONLY | O_CREAT | O_EXCL, 0666); @@ -741,17 +758,17 @@ popmail (mailbox, outfile, preserve, password, reverse_order) { pop_close (server); error ("Error in open: %s, %s", strerror (errno), outfile); - return (1); + return EXIT_FAILURE; } fchown (mbfi, getuid (), -1); if ((mbf = fdopen (mbfi, "wb")) == NULL) { pop_close (server); - error ("Error in fdopen: %s", strerror (errno)); + error ("Error in fdopen: %s", strerror (errno), 0); close (mbfi); unlink (outfile); - return (1); + return EXIT_FAILURE; } if (reverse_order) @@ -772,18 +789,18 @@ popmail (mailbox, outfile, preserve, password, reverse_order) mbx_delimit_begin (mbf); if (pop_retr (server, i, mbf) != OK) { - error (Errmsg); + error (Errmsg, 0, 0); close (mbfi); - return (1); + return EXIT_FAILURE; } mbx_delimit_end (mbf); fflush (mbf); if (ferror (mbf)) { - error ("Error in fflush: %s", strerror (errno)); + error ("Error in fflush: %s", strerror (errno), 0); pop_close (server); close (mbfi); - return (1); + return EXIT_FAILURE; } } @@ -796,15 +813,15 @@ popmail (mailbox, outfile, preserve, password, reverse_order) #ifdef BSD_SYSTEM if (fsync (mbfi) < 0) { - error ("Error in fsync: %s", strerror (errno)); - return (1); + error ("Error in fsync: %s", strerror (errno), 0); + return EXIT_FAILURE; } #endif if (close (mbfi) == -1) { - error ("Error in close: %s", strerror (errno)); - return (1); + error ("Error in close: %s", strerror (errno), 0); + return EXIT_FAILURE; } if (! preserve) @@ -812,24 +829,25 @@ popmail (mailbox, outfile, preserve, password, reverse_order) { if (pop_delete (server, i)) { - error ("Error from POP server: %s", pop_error); + error ("Error from POP server: %s", pop_error, 0); pop_close (server); - return (1); + return EXIT_FAILURE; } } if (pop_quit (server)) { - error ("Error from POP server: %s", pop_error); - return (1); + error ("Error from POP server: %s", pop_error, 0); + return EXIT_FAILURE; } - - return (0); + + return EXIT_SUCCESS; } int pop_retr (server, msgno, arg) popserver server; + int msgno; FILE *arg; { extern char *strerror (); @@ -897,7 +915,7 @@ mbx_write (line, len, mbf) line++; len--; } - if (fwrite (line, 1, len, mbf) != len) + if (fwrite (line, 1, len, mbf) != len) return (NOTOK); if (fputc (0x0a, mbf) == EOF) return (NOTOK); @@ -913,6 +931,7 @@ mbx_delimit_begin (mbf) return (OK); } +int mbx_delimit_end (mbf) FILE *mbf; { @@ -937,3 +956,8 @@ strerror (errnum) } #endif /* ! HAVE_STRERROR */ + +/* arch-tag: 1c323112-41fe-4fe5-8de9-494de631f73f + (do not change this comment) */ + +/* movemail.c ends here */