X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/d64d97e537301a9787a569982d67eed8ecdabe8b..87e1a81114d1efdf25865507453e748dbd554c35:/lib-src/movemail.c diff --git a/lib-src/movemail.c b/lib-src/movemail.c index cf93fb78d9..81ac8aa187 100644 --- a/lib-src/movemail.c +++ b/lib-src/movemail.c @@ -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) @@ -754,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;