Preserve ACLs while copying.
authorBruno Haible <bruno@clisp.org>
Fri, 22 Dec 2006 18:56:01 +0000 (18:56 +0000)
committerBruno Haible <bruno@clisp.org>
Fri, 22 Dec 2006 18:56:01 +0000 (18:56 +0000)
ChangeLog
lib/copy-file.c
modules/copy-file

index ed39783..778f87b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2006-12-22  Bruno Haible  <bruno@clisp.org>
 
+       * lib/copy-file.c: Include acl.h.
+       (copy_file_preserving) [USE_ACL]: Use copy_acl instead of chmod.
+       Close the file descriptors only after being done with copy_acl.
+       * modules/copy-file (Depends-on): Add acl.
+
+2006-12-22  Bruno Haible  <bruno@clisp.org>
+
        * gnulib-tool (SED): New variable.
        Use $SED instead of sed everywhere.
 
index ca620dc..4314f4c 100644 (file)
@@ -39,6 +39,7 @@
 #include "error.h"
 #include "safe-read.h"
 #include "full-write.h"
+#include "acl.h"
 #include "binary-io.h"
 #include "exit.h"
 #include "gettext.h"
@@ -80,10 +81,12 @@ copy_file_preserving (const char *src_filename, const char *dest_filename)
        error (EXIT_FAILURE, errno, _("error writing \"%s\""), dest_filename);
     }
 
+#if !USE_ACL
   if (close (dest_fd) < 0)
     error (EXIT_FAILURE, errno, _("error writing \"%s\""), dest_filename);
   if (close (src_fd) < 0)
     error (EXIT_FAILURE, errno, _("error after reading \"%s\""), src_filename);
+#endif
 
   /* Preserve the access and modification times.  */
 #if HAVE_UTIME
@@ -110,5 +113,17 @@ copy_file_preserving (const char *src_filename, const char *dest_filename)
 #endif
 
   /* Preserve the access permissions.  */
+#if USE_ACL
+  if (copy_acl (src_filename, src_fd, dest_filename, dest_fd, mode))
+    exit (EXIT_FAILURE);
+#else
   chmod (dest_filename, mode);
+#endif
+
+#if USE_ACL
+  if (close (dest_fd) < 0)
+    error (EXIT_FAILURE, errno, _("error writing \"%s\""), dest_filename);
+  if (close (src_fd) < 0)
+    error (EXIT_FAILURE, errno, _("error after reading \"%s\""), src_filename);
+#endif
 }
index 27eb0fe..7e82ce8 100644 (file)
@@ -10,6 +10,7 @@ Depends-on:
 error
 safe-read
 full-write
+acl
 binary-io
 exit
 gettext-h