diff options
author | Andrew Bartlett <abartlet@samba.org> | 2006-06-05 21:48:29 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 14:08:53 -0500 |
commit | ca62ddd8d901cce923d1cda958793054f80b1f57 (patch) | |
tree | c32836c83e6d7102ae4bde6917a5251f7d493860 /source4/ntvfs | |
parent | 2a9982aa52d07605a5170806530ee46eae38a78e (diff) | |
download | samba-ca62ddd8d901cce923d1cda958793054f80b1f57.tar.gz samba-ca62ddd8d901cce923d1cda958793054f80b1f57.tar.bz2 samba-ca62ddd8d901cce923d1cda958793054f80b1f57.zip |
r16051: Move the XATTR compatability code into a new file, so I can use it for
the getntacl utility.
Andrew Bartlett
(This used to be commit b1e0d4747b412929e1d4e24d6d9e504df3ddc824)
Diffstat (limited to 'source4/ntvfs')
-rw-r--r-- | source4/ntvfs/posix/config.m4 | 32 | ||||
-rw-r--r-- | source4/ntvfs/posix/config.mk | 2 | ||||
-rw-r--r-- | source4/ntvfs/posix/xattr_system.c | 83 |
3 files changed, 8 insertions, 109 deletions
diff --git a/source4/ntvfs/posix/config.m4 b/source4/ntvfs/posix/config.m4 index fb4362f755..c2cdf0ecaf 100644 --- a/source4/ntvfs/posix/config.m4 +++ b/source4/ntvfs/posix/config.m4 @@ -21,38 +21,6 @@ if test x"$ac_cv_decl_have_stat_tv_nsec" = x"yes"; then AC_DEFINE(HAVE_STAT_TV_NSEC,1,[Whether stat has tv_nsec nanosecond fields]) fi -dnl ############################################ -dnl use flistxattr as the key function for having -dnl sufficient xattr support for posix xattr backend -AC_CHECK_HEADERS(sys/attributes.h attr/xattr.h sys/xattr.h) -AC_SEARCH_LIBS_EXT(flistxattr, [attr], XATTR_LIBS) -AC_CHECK_FUNC_EXT(flistxattr, $XATTR_LIBS) -SMB_EXT_LIB(XATTR,[${XATTR_LIBS}],[${XATTR_CFLAGS}],[${XATTR_CPPFLAGS}],[${XATTR_LDFLAGS}]) -if test x"$ac_cv_func_ext_flistxattr" = x"yes"; then - AC_CACHE_CHECK([whether xattr interface takes additional options], smb_attr_cv_xattr_add_opt, - [old_LIBS=$LIBS - LIBS="$LIBS $XATTRLIBS" - AC_TRY_COMPILE([ - #include <sys/types.h> - #if HAVE_ATTR_XATTR_H - #include <attr/xattr.h> - #elif HAVE_SYS_XATTR_H - #include <sys/xattr.h> - #endif - #ifndef NULL - #define NULL ((void *)0) - #endif - ],[ - getxattr(NULL, NULL, NULL, 0, 0, 0); - ],smb_attr_cv_xattr_add_opt=yes,smb_attr_cv_xattr_add_opt=no) - LIBS=$old_LIBS]) - if test x"$smb_attr_cv_xattr_add_opt" = x"yes"; then - AC_DEFINE(XATTR_ADDITIONAL_OPTIONS, 1, [xattr functions have additional options]) - fi - AC_DEFINE(HAVE_XATTR_SUPPORT,1,[Whether we have xattr support]) - SMB_ENABLE(XATTR,YES) -fi - AC_CHECK_HEADERS(blkid/blkid.h) AC_SEARCH_LIBS_EXT(blkid_get_cache, [blkid], BLKID_LIBS) AC_CHECK_FUNC_EXT(blkid_get_cache, $BLKID_LIBS) diff --git a/source4/ntvfs/posix/config.mk b/source4/ntvfs/posix/config.mk index dde49a5531..2835fc4575 100644 --- a/source4/ntvfs/posix/config.mk +++ b/source4/ntvfs/posix/config.mk @@ -32,6 +32,6 @@ OBJ_FILES = \ pvfs_notify.o \ xattr_system.o \ xattr_tdb.o -PUBLIC_DEPENDENCIES = NDR_XATTR XATTR BLKID ntvfs_common MESSAGING +PUBLIC_DEPENDENCIES = NDR_XATTR WRAP_XATTR BLKID ntvfs_common MESSAGING # End MODULE ntvfs_posix ################################################ diff --git a/source4/ntvfs/posix/xattr_system.c b/source4/ntvfs/posix/xattr_system.c index 958f57e0fd..9dca13e5c2 100644 --- a/source4/ntvfs/posix/xattr_system.c +++ b/source4/ntvfs/posix/xattr_system.c @@ -22,76 +22,7 @@ #include "includes.h" #include "vfs_posix.h" - -#if defined(HAVE_XATTR_SUPPORT) && defined(XATTR_ADDITIONAL_OPTIONS) -static ssize_t _wrap_darwin_fgetxattr(int fd, const char *name, void *value, size_t size) -{ - return fgetxattr(fd, name, value, size, 0, 0); -} -static ssize_t _wrap_darwin_getxattr(const char *path, const char *name, void *value, size_t size) -{ - return getxattr(path, name, value, size, 0, 0); -} -static int _wrap_darwin_fsetxattr(int fd, const char *name, void *value, size_t size, int flags) -{ - return fsetxattr(fd, name, value, size, 0, flags); -} -static int _wrap_darwin_setxattr(const char *path, const char *name, void *value, size_t size, int flags) -{ - return setxattr(path, name, value, size, 0, flags); -} -static int _wrap_darwin_fremovexattr(int fd, const char *name) -{ - return fremovexattr(fd, name, 0); -} -static int _wrap_darwin_removexattr(const char *path, const char *name) -{ - return removexattr(path, name, 0); -} -#define fgetxattr _wrap_darwin_fgetxattr -#define getxattr _wrap_darwin_getxattr -#define fsetxattr _wrap_darwin_fsetxattr -#define setxattr _wrap_darwin_setxattr -#define fremovexattr _wrap_darwin_fremovexattr -#define removexattr _wrap_darwin_removexattr -#elif !defined(HAVE_XATTR_SUPPORT) -static ssize_t _none_fgetxattr(int fd, const char *name, void *value, size_t size) -{ - errno = ENOSYS; - return -1; -} -static ssize_t _none_getxattr(const char *path, const char *name, void *value, size_t size) -{ - errno = ENOSYS; - return -1; -} -static int _none_fsetxattr(int fd, const char *name, void *value, size_t size, int flags) -{ - errno = ENOSYS; - return -1; -} -static int _none_setxattr(const char *path, const char *name, void *value, size_t size, int flags) -{ - errno = ENOSYS; - return -1; -} -static int _none_fremovexattr(int fd, const char *name) -{ - errno = ENOSYS; - return -1; -} -static int _none_removexattr(const char *path, const char *name) -{ - errno = ENOSYS; - return -1; -} -#define fgetxattr _none_fgetxattr -#define getxattr _none_getxattr -#define fsetxattr _none_fsetxattr -#define setxattr _none_setxattr -#define fremovexattr _none_fremovexattr -#define removexattr _none_removexattr -#endif +#include "lib/util/wrap_xattr.h" /* pull a xattr as a blob, from either a file or a file descriptor @@ -113,9 +44,9 @@ NTSTATUS pull_xattr_blob_system(struct pvfs_state *pvfs, again: if (fd != -1) { - ret = fgetxattr(fd, attr_name, blob->data, estimated_size); + ret = wrap_fgetxattr(fd, attr_name, blob->data, estimated_size); } else { - ret = getxattr(fname, attr_name, blob->data, estimated_size); + ret = wrap_getxattr(fname, attr_name, blob->data, estimated_size); } if (ret == -1 && errno == ERANGE) { estimated_size *= 2; @@ -150,9 +81,9 @@ NTSTATUS push_xattr_blob_system(struct pvfs_state *pvfs, int ret; if (fd != -1) { - ret = fsetxattr(fd, attr_name, blob->data, blob->length, 0); + ret = wrap_fsetxattr(fd, attr_name, blob->data, blob->length, 0); } else { - ret = setxattr(fname, attr_name, blob->data, blob->length, 0); + ret = wrap_setxattr(fname, attr_name, blob->data, blob->length, 0); } if (ret == -1) { return pvfs_map_errno(pvfs, errno); @@ -171,9 +102,9 @@ NTSTATUS delete_xattr_system(struct pvfs_state *pvfs, const char *attr_name, int ret; if (fd != -1) { - ret = fremovexattr(fd, attr_name); + ret = wrap_fremovexattr(fd, attr_name); } else { - ret = removexattr(fname, attr_name); + ret = wrap_removexattr(fname, attr_name); } if (ret == -1) { return pvfs_map_errno(pvfs, errno); |