From: Björn Jacke Date: Sat, 2 Mar 2019 04:39:54 +0000 (+0100) Subject: xattr/setxattr: fix flag support on AIX X-Git-Tag: tevent-0.10.1~116 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=56e0ffa11319eebbe0d8b07502aa3ec8971435d0;p=thirdparty%2Fsamba.git xattr/setxattr: fix flag support on AIX AIX requires the flags to be 0, we need to do those checks manually. Signed-off-by: Bjoern Jacke Reviewed-by: Andrew Bartlett --- diff --git a/lib/replace/xattr.c b/lib/replace/xattr.c index f142ed61723..b7fbde2a2ca 100644 --- a/lib/replace/xattr.c +++ b/lib/replace/xattr.c @@ -538,7 +538,21 @@ int rep_setxattr (const char *path, const char *name, const void *value, size_t return retval; #endif #elif defined(HAVE_XATTR_EA) - return setea(path, name, value, size, flags); + if (flags) { + retval = getea(path, name, NULL, 0); + if (retval < 0) { + if (flags & XATTR_REPLACE && errno == ENOATTR) { + return -1; + } + } else { + if (flags & XATTR_CREATE) { + errno = EEXIST; + return -1; + } + } + } + retval = setea(path, name, value, size, 0); + return retval; #elif defined(HAVE_XATTR_EXTATTR) int attrnamespace; const char *attrname; @@ -632,7 +646,21 @@ int rep_fsetxattr (int filedes, const char *name, const void *value, size_t size return retval; #endif #elif defined(HAVE_XATTR_EA) - return fsetea(filedes, name, value, size, flags); + if (flags) { + retval = fgetea(filedes, name, NULL, 0); + if (retval < 0) { + if (flags & XATTR_REPLACE && errno == ENOATTR) { + return -1; + } + } else { + if (flags & XATTR_CREATE) { + errno = EEXIST; + return -1; + } + } + } + retval = fsetea(filedes, name, value, size, 0); + return retval; #elif defined(HAVE_XATTR_EXTATTR) int attrnamespace; const char *attrname;