X-Git-Url: https://git.wh0rd.org/?p=dump.git;a=blobdiff_plain;f=restore%2Fxattr.c;h=ccc01c14c21e74177ce4b4af95cdf4f227b79991;hp=2bb88d0cded5d900529ff39805ab0995e7b85474;hb=15508d36add49ba67db4b0c64637dae09c2249f2;hpb=7f7d329e78edfcea92bff630c3e942d3410fdaab diff --git a/restore/xattr.c b/restore/xattr.c index 2bb88d0..ccc01c1 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.6 2010/03/08 10:40:52 stelian Exp $"; #endif /* not lint */ #include @@ -423,7 +423,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) @@ -547,6 +550,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 +587,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); } @@ -621,14 +624,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); 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; }