X-Git-Url: https://git.wh0rd.org/?p=dump.git;a=blobdiff_plain;f=restore%2Fxattr.c;h=ddabfa2e9f38e8eb8db728836d73efc97cbdfe41;hp=2bb88d0cded5d900529ff39805ab0995e7b85474;hb=HEAD;hpb=7f7d329e78edfcea92bff630c3e942d3410fdaab diff --git a/restore/xattr.c b/restore/xattr.c index 2bb88d0..ddabfa2 100644 --- a/restore/xattr.c +++ b/restore/xattr.c @@ -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 @@ -91,9 +91,11 @@ struct ext2_xattr_entry { #define EXT2_XATTR_PAD_BITS 2 #define EXT2_XATTR_PAD (1<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; }