X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/d8ad4d3ff9dcea9c581d72e1e9ec292ea18673b1..87e1a81114d1efdf25865507453e748dbd554c35:/lib-src/movemail.c diff --git a/lib-src/movemail.c b/lib-src/movemail.c index f2b2484c8e..81ac8aa187 100644 --- a/lib-src/movemail.c +++ b/lib-src/movemail.c @@ -1,8 +1,8 @@ /* movemail foo bar -- move file foo to file bar, locking file foo the way /bin/mail respects. -Copyright (C) 1986, 1992-1994, 1996, 1999, 2001-2012 - Free Software Foundation, Inc. +Copyright (C) 1986, 1992-1994, 1996, 1999, 2001-2013 Free Software +Foundation, Inc. This file is part of GNU Emacs. @@ -380,13 +380,9 @@ main (int argc, char **argv) if (indesc < 0) pfatal_with_name (inname); -#ifdef BSD_SYSTEM - /* In case movemail is setuid to root, make sure the user can - read the output file. */ - /* This is desirable for all systems - but I don't want to assume all have the umask system call */ - umask (umask (0) & 0333); -#endif /* BSD_SYSTEM */ + /* Make sure the user can read the output file. */ + umask (umask (0) & 0377); + outdesc = open (outname, O_WRONLY | O_CREAT | O_EXCL, 0666); if (outdesc < 0) pfatal_with_name (outname); @@ -470,10 +466,8 @@ main (int argc, char **argv) } } -#ifdef BSD_SYSTEM - if (fsync (outdesc) < 0) + if (fsync (outdesc) != 0 && errno != EINVAL) pfatal_and_delete (outname); -#endif /* Prevent symlink attacks truncating other users' mailboxes */ if (setregid (-1, real_gid) < 0) @@ -665,7 +659,6 @@ popmail (char *mailbox, char *outfile, int preserve, char *password, int reverse register int i; int mbfi; FILE *mbf; - char *getenv (const char *); popserver server; int start, end, increment; char *user, *hostname; @@ -755,21 +748,14 @@ popmail (char *mailbox, char *outfile, int preserve, char *password, int reverse } } - /* On AFS, a call to write only modifies the file in the local - * workstation's AFS cache. The changes are not written to the server - * until a call to fsync or close is made. Users with AFS home - * directories have lost mail when over quota because these checks were - * not made in previous versions of movemail. */ - -#ifdef BSD_SYSTEM - if (fsync (mbfi) < 0) + if (fsync (mbfi) != 0 && errno != EINVAL) { error ("Error in fsync: %s", strerror (errno), 0); + close (mbfi); return EXIT_FAILURE; } -#endif - if (close (mbfi) == -1) + if (close (mbfi) != 0) { error ("Error in close: %s", strerror (errno), 0); return EXIT_FAILURE;