]> git.sur5r.net Git - bacula/bacula/commitdiff
Exclude OSX resource forks from saving using the xattr code
authorMarco van Wieringen <mvw@planets.elm.net>
Mon, 31 Aug 2009 07:36:38 +0000 (09:36 +0200)
committerMarco van Wieringen <mvw@planets.elm.net>
Mon, 31 Aug 2009 07:36:38 +0000 (09:36 +0200)
Exclude OSX acl data from saving using the xattr code when normal acl mode is also enabled.
Make excluding certain xattr in the generic functions somewhat easier for certain OS specific attributes.

bacula/src/filed/xattr.c
bacula/technotes

index b814183ae444b95b3aa8e0368842f0e11d3626fa..972a7e65cc5efbd205c5d4b0234ee49384f8ce8a 100644 (file)
@@ -131,12 +131,20 @@ static bxattr_exit_code send_xattr_stream(JCR *jcr, int stream)
  */
 #if defined(HAVE_DARWIN_OS)
 static int os_default_xattr_streams[1] = { STREAM_XATTR_DARWIN };
+static char *xattr_acl_skiplist[2] = { "com.apple.system.Security", NULL };
+static char *xattr_skiplist[3] = { "com.apple.system.extendedsecurity", "com.apple.ResourceFork", NULL };
 #elif defined(HAVE_FREEBSD_OS)
 static int os_default_xattr_streams[1] = { STREAM_XATTR_FREEBSD };
+static char *xattr_acl_skiplist[1] = { NULL };
+static char *xattr_skiplist[1] = { NULL };
 #elif defined(HAVE_LINUX_OS)
 static int os_default_xattr_streams[1] = { STREAM_XATTR_LINUX };
+static char *xattr_acl_skiplist[2] = { "system.posix_acl_access", NULL };
+static char *xattr_skiplist[1] = { NULL };
 #elif defined(HAVE_NETBSD_OS)
 static int os_default_xattr_streams[1] = { STREAM_XATTR_NETBSD };
+static char *xattr_acl_skiplist[1] = { NULL };
+static char *xattr_skiplist[1] = { NULL };
 #endif
 
 /*
@@ -243,7 +251,8 @@ static uint32_t serialize_xattr_stream(JCR *jcr, uint32_t expected_serialize_len
 
 static bxattr_exit_code generic_xattr_build_streams(JCR *jcr, FF_PKT *ff_pkt)
 {
-   int count = 0;
+   bool skip_xattr;
+   int cnt, xattr_count = 0;
    int32_t xattr_list_len,
            xattr_value_len;
    uint32_t expected_serialize_len = 0;
@@ -301,22 +310,41 @@ static bxattr_exit_code generic_xattr_build_streams(JCR *jcr, FF_PKT *ff_pkt)
     */
    bp = xattr_list;
    while ((bp - xattr_list) + 1 < xattr_list_len) {
-#if defined(HAVE_LINUX_OS)
+      skip_xattr = false;
+
       /*
-       * On Linux you also get the acls in the extented attribute list.
+       * On some OSes you also get the acls in the extented attribute list.
        * So we check if we are already backing up acls and if we do we
        * don't store the extended attribute with the same info.
        */
-      if ((ff_pkt->flags & FO_ACL) == 0 || strcmp(bp, "system.posix_acl_access"))
-         count++;
-#else
-      count++;
-#endif
+      if (ff_pkt->flags & FO_ACL) {
+         for (cnt = 0; xattr_acl_skiplist[cnt] != NULL; cnt++) {
+            if (!strcmp(bp, xattr_acl_skiplist[cnt])) {
+               skip_xattr = true;
+               break;
+            }
+         }
+      }
 
+      /*
+       * On some OSes we want to skip certain xattrs which are in the xattr_skiplist array.
+       */
+      if (!skip_xattr) {
+         for (cnt = 0; xattr_skiplist[cnt] != NULL; cnt++) {
+            if (!strcmp(bp, xattr_skiplist[cnt])) {
+               skip_xattr = true;
+               break;
+            }
+         }
+      }
+
+      if (!skip_xattr) {
+         xattr_count++;
+      }
       bp = strchr(bp, '\0') + 1;
    }
 
-   if (count == 0) {
+   if (xattr_count == 0) {
       retval = bxattr_exit_ok;
       goto bail_out;
    }
@@ -325,8 +353,8 @@ static bxattr_exit_code generic_xattr_build_streams(JCR *jcr, FF_PKT *ff_pkt)
     * Allocate enough room to hold all extended attributes.
     * After allocating the storage make sure its empty by zeroing it.
     */
-   xattr_value_list = (xattr_t *)malloc(count * sizeof(xattr_t));
-   memset((caddr_t)xattr_value_list, 0, count * sizeof(xattr_t));
+   xattr_value_list = (xattr_t *)malloc(xattr_count * sizeof(xattr_t));
+   memset((caddr_t)xattr_value_list, 0, xattr_count * sizeof(xattr_t));
 
    /*
     * Walk the list of extended attributes names and retrieve the data.
@@ -335,17 +363,38 @@ static bxattr_exit_code generic_xattr_build_streams(JCR *jcr, FF_PKT *ff_pkt)
    current_xattr = xattr_value_list;
    bp = xattr_list;
    while ((bp - xattr_list) + 1 < xattr_list_len) {
-#if defined(HAVE_LINUX_OS)
+      skip_xattr = false;
+
       /*
-       * On Linux you also get the acls in the extented attribute list.
+       * On some OSes you also get the acls in the extented attribute list.
        * So we check if we are already backing up acls and if we do we
        * don't store the extended attribute with the same info.
        */
-      if (ff_pkt->flags & FO_ACL && !strcmp(bp, "system.posix_acl_access")) {
+      if (ff_pkt->flags & FO_ACL) {
+         for (cnt = 0; xattr_acl_skiplist[cnt] != NULL; cnt++) {
+            if (!strcmp(bp, xattr_acl_skiplist[cnt])) {
+               skip_xattr = true;
+               break;
+            }
+         }
+      }
+
+      /*
+       * On some OSes we want to skip certain xattrs which are in the xattr_skiplist array.
+       */
+      if (!skip_xattr) {
+         for (cnt = 0; xattr_skiplist[cnt] != NULL; cnt++) {
+            if (!strcmp(bp, xattr_skiplist[cnt])) {
+               skip_xattr = true;
+               break;
+            }
+         }
+      }
+
+      if (!skip_xattr) {
          bp = strchr(bp, '\0') + 1;
          continue;
       }
-#endif
 
       /*
        * Each xattr valuepair starts with a magic so we can parse it easier.
index b9fb0f7cbe6067833345b6eb12c70ba1085a1903..aa842230e820193a1ddce00cbc9321e9a360a954 100644 (file)
@@ -1,4 +1,4 @@
-              Technical notes for current SVN
+              Technical notes for current GIT
           
 General:
 
@@ -6,6 +6,11 @@ General:
 kes  Fix Win32/64 build
 kes  Fix bug #1355 Director crashes with double free in Accurate SQL query
 ebl  Prohibe copy and assignment in Bvfs.
+mvw  Exclude OSX resource forks from saving using the xattr code
+     Exclude OSX acl data from saving using the xattr code when
+     normal acl mode is also enabled.
+     Make excluding certain xattr in the generic functions somewhat
+     easier for certain OS specific attributes.
 28Aug09
 kes  Fix bug #1357 Verify jobs fail when job has zero files
 26Aug09