From 6ae8386c237a1c8b0f81451a94fad26be930ba70 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Mon, 8 Aug 2011 08:25:18 +0200 Subject: [PATCH] Bug fix: The function for restoring ACLs and xattr returned error on systems other than Linux and FreeBSD, even if nothing was to be restored. --- libisofs/aaip-os-dummy.c | 8 ++++++-- libisofs/aaip-os-linux.c | 16 ++++++++++++++++ libisofs/fs_local.c | 2 ++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/libisofs/aaip-os-dummy.c b/libisofs/aaip-os-dummy.c index cda962b..7490577 100644 --- a/libisofs/aaip-os-dummy.c +++ b/libisofs/aaip-os-dummy.c @@ -89,8 +89,12 @@ int aaip_set_attr_list(char *path, size_t num_attrs, char **names, continue; } /* Extended Attribute */ - if(!(flag & 4)) - return(-6); + if(flag & 4) + continue; + if(!(flag & 8)) + if(strncmp(names[i], "user.", 5)) + continue; + return(-6); } if(flag & 2) return(-6); diff --git a/libisofs/aaip-os-linux.c b/libisofs/aaip-os-linux.c index f722ab6..b5f4cfc 100644 --- a/libisofs/aaip-os-linux.c +++ b/libisofs/aaip-os-linux.c @@ -447,10 +447,26 @@ int aaip_set_attr_list(char *path, size_t num_attrs, char **names, continue; } /* Extended Attribute */ + +#ifdef Libisofs_aaip_linux_set_attr_list_neW +/* >>> Enable this after release 1.1.4. */ + + if(flag & 4) + continue; + if(!(flag & 8)) + if(strncmp(names[i], "user.", 5)) + continue; + +#else /* Libisofs_aaip_linux_set_attr_list_neW */ +/* <<< This worked well, but obviously only because bit0 is always set */ + if((flag & 1) && !(flag & 8)) if(strncmp(names[i], "user.", 5)) continue; +#endif /* ! Libisofs_aaip_linux_set_attr_list_neW */ + + #ifdef Libisofs_with_aaip_xattR if(flag & 32) diff --git a/libisofs/fs_local.c b/libisofs/fs_local.c index e634746..816c393 100644 --- a/libisofs/fs_local.c +++ b/libisofs/fs_local.c @@ -862,6 +862,8 @@ int iso_local_set_attrs(char *disk_path, size_t num_attrs, char **names, return ISO_OUT_OF_MEM; if (ret == -2) return ISO_AAIP_BAD_AASTRING; + if (ret == -6 || ret == -7) + return ISO_AAIP_NOT_ENABLED; return ISO_AAIP_NO_SET_LOCAL; } return 1;