summaryrefslogtreecommitdiff
path: root/lib-src
diff options
context:
space:
mode:
Diffstat (limited to 'lib-src')
-rw-r--r--lib-src/ChangeLog3
-rw-r--r--lib-src/movemail.c13
2 files changed, 15 insertions, 1 deletions
diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog
index d865754cb40..e0a175e8167 100644
--- a/lib-src/ChangeLog
+++ b/lib-src/ChangeLog
@@ -1,5 +1,8 @@
2011-02-21 Paul Eggert <eggert@cs.ucla.edu>
+ * movemail.c (popmail): Report fchown failure instead of ignoring it.
+ But if the file already has the right ownership, don't worry about it.
+
* make-docfile.c (input_buffer): Rename variables to avoid shadowing.
* movemail.c (main, pop_retr): Rename locals to avoid shadowing.
diff --git a/lib-src/movemail.c b/lib-src/movemail.c
index a5084f27f22..bc7fa8824e2 100644
--- a/lib-src/movemail.c
+++ b/lib-src/movemail.c
@@ -723,7 +723,18 @@ popmail (char *mailbox, char *outfile, int preserve, char *password, int reverse
error ("Error in open: %s, %s", strerror (errno), outfile);
return EXIT_FAILURE;
}
- fchown (mbfi, getuid (), -1);
+
+ if (fchown (mbfi, getuid (), -1) != 0)
+ {
+ int fchown_errno = errno;
+ struct stat st;
+ if (fstat (mbfi, &st) != 0 || st.st_uid != getuid ())
+ {
+ pop_close (server);
+ error ("Error in fchown: %s, %s", strerror (fchown_errno), outfile);
+ return EXIT_FAILURE;
+ }
+ }
if ((mbf = fdopen (mbfi, "wb")) == NULL)
{