]> git.wh0rd.org - dump.git/blobdiff - restore/xattr.c
Regenerate configure.
[dump.git] / restore / xattr.c
index 2bb88d0cded5d900529ff39805ab0995e7b85474..ddabfa2e9f38e8eb8db728836d73efc97cbdfe41 100644 (file)
@@ -29,7 +29,7 @@
 
 #ifndef lint
 static const char rcsid[] =
-       "$Id: xattr.c,v 1.4 2007/02/22 20:12:50 stelian Exp $";
+       "$Id: xattr.c,v 1.7 2010/06/11 11:19:17 stelian Exp $";
 #endif /* not lint */
 
 #include <config.h>
@@ -91,9 +91,11 @@ struct ext2_xattr_entry {
 #define EXT2_XATTR_PAD_BITS            2
 #define EXT2_XATTR_PAD         (1<<EXT2_XATTR_PAD_BITS)
 #define EXT2_XATTR_ROUND               (EXT2_XATTR_PAD-1)
+#ifndef EXT2_XATTR_LEN
 #define EXT2_XATTR_LEN(name_len) \
        (((name_len) + EXT2_XATTR_ROUND + \
        sizeof(struct ext2_xattr_entry)) & ~EXT2_XATTR_ROUND)
+#endif
 #define EXT2_XATTR_NEXT(entry) \
        ( (struct ext2_xattr_entry *)( \
          (char *)(entry) + EXT2_XATTR_LEN((entry)->e_name_len)) )
@@ -306,7 +308,7 @@ posix_acl_to_xattr(const struct posix_acl *acl, void *buffer, size_t size) {
        if (!buffer)
                return real_size;
        if (real_size > size) {
-               fprintf(stderr, "ACL: not enough space to convert (%d %d)\n", real_size, size);
+               fprintf(stderr, "ACL: not enough space to convert (%d %d)\n", real_size, (int)size);
                return -1;
        }
 
@@ -423,7 +425,10 @@ xattr_cb_set(char *name, char *value, int valuelen, int isSELinux, void *private
 {
        char *path = (char *)private;
        int err;
-       
+
+       if (Nflag)
+               return GOOD;
+
        isSELinux;
 #ifdef TRANSSELINUX                    /*GAN6May06 SELinux MLS */
        if (isSELinux)
@@ -460,7 +465,7 @@ xattr_cb_compare(char *name, char *value, int valuelen, int isSELinux, void *pri
                
                valuesz = strlen(con) + 1;
                valuef[0] = 0;
-               strncat(valuef, con, sizeof valuef);
+               strncat(valuef, con, sizeof(valuef) - 1);
                freecon(con);
        }
        else {
@@ -547,6 +552,7 @@ xattr_walk(char *buffer, int (*xattr_cb)(char *, char *, int, int, void *), void
        for (entry = FIRST_ENTRY(buffer); !IS_LAST_ENTRY(entry);
             entry = EXT2_XATTR_NEXT(entry)) {
                char name[XATTR_MAXSIZE], value[XATTR_MAXSIZE];
+               int size;
                int off;
                int convertacl = 0;
                int convertcon = 0;
@@ -583,20 +589,19 @@ xattr_walk(char *buffer, int (*xattr_cb)(char *, char *, int, int, void *), void
                off = strlen(name);
                memcpy(name + off, entry->e_name, entry->e_name_len);
                name[off + entry->e_name_len] = '\0';
+               size = entry->e_value_size;
 
-               memcpy(value, buffer + VALUE_OFFSET(buffer, entry), entry->e_value_size);
+               memcpy(value, buffer + VALUE_OFFSET(buffer, entry), size);
 
                if (convertacl) {
                        struct posix_acl *acl;
-                       int size;
 
-                       acl = ext3_acl_from_disk(value, entry->e_value_size);
+                       acl = ext3_acl_from_disk(value, size);
                        if (!acl)
                                return FAIL;
                        size = posix_acl_to_xattr(acl, value, XATTR_MAXSIZE);
                        if (size < 0)
                                return FAIL;
-                       entry->e_value_size = size;
                        free(acl);
                }
                
@@ -612,7 +617,7 @@ xattr_walk(char *buffer, int (*xattr_cb)(char *, char *, int, int, void *), void
                        if (!transselinuxarg)
                                err = security_canonicalize_context(value, &con);
                        else {
-                               strncat(value, transselinuxarg, sizeof value);
+                               strncat(value, transselinuxarg, sizeof(value) - 1);
                                err = security_canonicalize_context_raw(value, &con);
                        }
                        
@@ -621,14 +626,14 @@ xattr_walk(char *buffer, int (*xattr_cb)(char *, char *, int, int, void *), void
                                return FAIL;
                        }
 
-                       entry->e_value_size = strlen(con) + 1;
+                       size = strlen(con) + 1;
                        value[0] = 0;
-                       strncat(value, con, sizeof value);
+                       strncat(value, con, sizeof(value) - 1);
                        freecon(con);
                }
 #endif
 
-               if (xattr_cb(name, value, entry->e_value_size, convertcon, private) != GOOD)
+               if (xattr_cb(name, value, size, convertcon, private) != GOOD)
                        return FAIL;
        }