]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/filed/xattr.c
update configure
[bacula/bacula] / bacula / src / filed / xattr.c
index eb4ea5d98c033159031b4e70c8df81899a682115..5af66a3277e8e9a89c4069ef71f11231db3b4b43 100644 (file)
@@ -1,7 +1,7 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2008-2010 Free Software Foundation Europe e.V.
+   Copyright (C) 2008-2011 Free Software Foundation Europe e.V.
 
    The main author of Bacula is Kern Sibbald, with contributions from
    many others, a complete list can be found in the file AUTHORS.
@@ -1302,18 +1302,6 @@ static bxattr_exit_code bsd_build_xattr_streams(JCR *jcr, FF_PKT *ff_pkt)
    for (namespace_index = 0; namespace_index < sizeof(os_default_xattr_namespaces) / sizeof(int); namespace_index++) {
       attrnamespace = os_default_xattr_namespaces[namespace_index];
 
-      /*
-       * Convert the numeric attrnamespace into a string representation and make a private copy of that string.
-       * The extattr_namespace_to_string functions returns a strdupped string which we need to free.
-       */
-      if (extattr_namespace_to_string(attrnamespace, &current_attrnamespace) != 0) {
-         Mmsg2(jcr->errmsg, _("Failed to convert %d into namespace on file \"%s\"\n"),
-               attrnamespace, jcr->last_fname);
-         Dmsg2(100, "Failed to convert %d into namespace on file \"%s\"\n",
-               attrnamespace, jcr->last_fname);
-         goto bail_out;
-      }
-
       /*
        * First get the length of the available list with extended attributes.
        * If we get EPERM on system namespace, don't return error.
@@ -1333,8 +1321,6 @@ static bxattr_exit_code bsd_build_xattr_streams(JCR *jcr, FF_PKT *ff_pkt)
 #endif
          case EPERM:
             if (attrnamespace == EXTATTR_NAMESPACE_SYSTEM) {
-               actuallyfree(current_attrnamespace);
-               current_attrnamespace = NULL;
                continue;
             }
             /*
@@ -1383,6 +1369,18 @@ static bxattr_exit_code bsd_build_xattr_streams(JCR *jcr, FF_PKT *ff_pkt)
       }
       xattr_list[xattr_list_len] = '\0';
 
+      /*
+       * Convert the numeric attrnamespace into a string representation and make a private copy of that string.
+       * The extattr_namespace_to_string functions returns a strdupped string which we need to free.
+       */
+      if (extattr_namespace_to_string(attrnamespace, &current_attrnamespace) != 0) {
+         Mmsg2(jcr->errmsg, _("Failed to convert %d into namespace on file \"%s\"\n"),
+               attrnamespace, jcr->last_fname);
+         Dmsg2(100, "Failed to convert %d into namespace on file \"%s\"\n",
+               attrnamespace, jcr->last_fname);
+         goto bail_out;
+      }
+
       /*
        * Walk the list of extended attributes names and retrieve the data.
        * We already count the bytes needed for serializing the stream later on.
@@ -2396,7 +2394,7 @@ static bxattr_exit_code solaris_save_xattr(JCR *jcr, int fd, const char *xattr_n
        * The current implementation of xattr on Solaris doesn't support this, but if it ever does we are prepared.
        * Encode the stat struct into an ASCII representation.
        */
-      encode_stat(attribs, &st, 0, stream);
+      encode_stat(attribs, &st, sizeof(st), 0, stream);
       cnt = bsnprintf(buffer, sizeof(buffer), "%s%c%s%c%s%c",
                      target_attrname, 0, attribs, 0, (acl_text) ? acl_text : "", 0);
       break;
@@ -2417,7 +2415,7 @@ static bxattr_exit_code solaris_save_xattr(JCR *jcr, int fd, const char *xattr_n
           * first real xattr. Encode the stat struct into an ASCII representation and jump
           * out of the function.
           */
-         encode_stat(attribs, &st, 0, stream);
+         encode_stat(attribs, &st, sizeof(st), 0, stream);
          cnt = bsnprintf(buffer, sizeof(buffer),
                          "%s%c%s%c%s%c",
                          target_attrname, 0, attribs, 0, (acl_text) ? acl_text : "", 0);
@@ -2429,7 +2427,7 @@ static bxattr_exit_code solaris_save_xattr(JCR *jcr, int fd, const char *xattr_n
           * The current implementation of xattr on Solaris doesn't support this, but if it ever does we are prepared.
           * Encode the stat struct into an ASCII representation.
           */
-         encode_stat(attribs, &st, 0, stream);
+         encode_stat(attribs, &st, sizeof(st), 0, stream);
          cnt = bsnprintf(buffer, sizeof(buffer),
                          "%s%c%s%c%s%c",
                          target_attrname, 0, attribs, 0, (acl_text) ? acl_text : "", 0);
@@ -2447,7 +2445,7 @@ static bxattr_exit_code solaris_save_xattr(JCR *jcr, int fd, const char *xattr_n
             /*
              * Generate a xattr encoding with the reference to the target in there.
              */
-            encode_stat(attribs, &st, st.st_ino, stream);
+            encode_stat(attribs, &st, sizeof(st), st.st_ino, stream);
             cnt = bsnprintf(buffer, sizeof(buffer),
                             "%s%c%s%c%s%c",
                             target_attrname, 0, attribs, 0, xlce->target, 0);
@@ -2478,7 +2476,7 @@ static bxattr_exit_code solaris_save_xattr(JCR *jcr, int fd, const char *xattr_n
       /*
        * Encode the stat struct into an ASCII representation.
        */
-      encode_stat(attribs, &st, 0, stream);
+      encode_stat(attribs, &st, sizeof(st), 0, stream);
       cnt = bsnprintf(buffer, sizeof(buffer),
                      "%s%c%s%c%s%c",
                      target_attrname, 0, attribs, 0, (acl_text) ? acl_text : "", 0);
@@ -2522,7 +2520,7 @@ static bxattr_exit_code solaris_save_xattr(JCR *jcr, int fd, const char *xattr_n
       /*
        * Generate a xattr encoding with the reference to the target in there.
        */
-      encode_stat(attribs, &st, st.st_ino, stream);
+      encode_stat(attribs, &st, sizeof(st), st.st_ino, stream);
       cnt = bsnprintf(buffer, sizeof(buffer),
                       "%s%c%s%c%s%c",
                       target_attrname, 0, attribs, 0, link_source, 0);
@@ -2975,7 +2973,7 @@ static bxattr_exit_code solaris_restore_xattrs(JCR *jcr, bool is_extensible)
    /*
     * Decode the attributes from the stream.
     */
-   decode_stat(attribs, &st, &inum);
+   decode_stat(attribs, &st, sizeof(st), &inum);
 
    /*
     * Decode the next field (acl_text).