Author: abartlet Date: 2006-06-05 21:48:29 +0000 (Mon, 05 Jun 2006) New Revision: 16051
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=16051 Log: Move the XATTR compatability code into a new file, so I can use it for the getntacl utility. Andrew Bartlett Added: branches/SAMBA_4_0/source/lib/util/wrap_xattr.c branches/SAMBA_4_0/source/lib/util/wrap_xattr.h Modified: branches/SAMBA_4_0/source/configure.ac branches/SAMBA_4_0/source/lib/util/config.mk branches/SAMBA_4_0/source/ntvfs/posix/config.m4 branches/SAMBA_4_0/source/ntvfs/posix/config.mk branches/SAMBA_4_0/source/ntvfs/posix/xattr_system.c branches/SAMBA_4_0/source/utils/config.mk branches/SAMBA_4_0/source/utils/getntacl.c Changeset: Modified: branches/SAMBA_4_0/source/configure.ac =================================================================== --- branches/SAMBA_4_0/source/configure.ac 2006-06-05 20:38:21 UTC (rev 16050) +++ branches/SAMBA_4_0/source/configure.ac 2006-06-05 21:48:29 UTC (rev 16051) @@ -22,6 +22,7 @@ sinclude(lib/util/signal.m4) sinclude(lib/util/util.m4) sinclude(lib/util/fsusage.m4) +sinclude(lib/util/xattr.m4) sinclude(lib/util/capability.m4) sinclude(lib/util/time.m4) sinclude(lib/popt/config.m4) Modified: branches/SAMBA_4_0/source/lib/util/config.mk =================================================================== --- branches/SAMBA_4_0/source/lib/util/config.mk 2006-06-05 20:38:21 UTC (rev 16050) +++ branches/SAMBA_4_0/source/lib/util/config.mk 2006-06-05 21:48:29 UTC (rev 16051) @@ -39,3 +39,14 @@ [SUBSYSTEM::UNIX_PRIVS] PRIVATE_PROTO_HEADER = unix_privs.h OBJ_FILES = unix_privs.o + +################################################ +# Start SUBSYSTEM WRAP_XATTR +[SUBSYSTEM::WRAP_XATTR] +PUBLIC_PROTO_HEADER = wrap_xattr.h +OBJ_FILES = \ + wrap_xattr.o +PUBLIC_DEPENDENCIES = XATTR +# +# End SUBSYSTEM WRAP_XATTR +################################################ Added: branches/SAMBA_4_0/source/lib/util/wrap_xattr.c =================================================================== --- branches/SAMBA_4_0/source/lib/util/wrap_xattr.c 2006-06-05 20:38:21 UTC (rev 16050) +++ branches/SAMBA_4_0/source/lib/util/wrap_xattr.c 2006-06-05 21:48:29 UTC (rev 16051) @@ -0,0 +1,121 @@ +/* + Unix SMB/CIFS implementation. + + POSIX NTVFS backend - xattr support using filesystem xattrs + + Copyright (C) Andrew Tridgell 2004 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "includes.h" +#include "system/filesys.h" +#include "wrap_xattr.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 + +_PUBLIC_ ssize_t wrap_fgetxattr(int fd, const char *name, void *value, size_t size) +{ + return fgetxattr(fd, name, value, size); +} +_PUBLIC_ ssize_t wrap_getxattr(const char *path, const char *name, void *value, size_t size) +{ + return getxattr(path, name, value, size); +} +_PUBLIC_ int wrap_fsetxattr(int fd, const char *name, void *value, size_t size, int flags) +{ + return fsetxattr(fd, name, value, size, flags); +} +_PUBLIC_ int wrap_setxattr(const char *path, const char *name, void *value, size_t size, int flags) +{ + return setxattr(path, name, value, size, flags); +} +_PUBLIC_ int wrap_fremovexattr(int fd, const char *name) +{ + return fremovexattr(fd, name); +} +_PUBLIC_ int wrap_removexattr(const char *path, const char *name) +{ + return removexattr(path, name); +} + Added: branches/SAMBA_4_0/source/lib/util/wrap_xattr.h =================================================================== --- branches/SAMBA_4_0/source/lib/util/wrap_xattr.h 2006-06-05 20:38:21 UTC (rev 16050) +++ branches/SAMBA_4_0/source/lib/util/wrap_xattr.h 2006-06-05 21:48:29 UTC (rev 16051) @@ -0,0 +1,25 @@ +#ifndef __LIB_UTIL_WRAP_XATTR_H__ +#define __LIB_UTIL_WRAP_XATTR_H__ + +#undef _PRINTF_ATTRIBUTE +#define _PRINTF_ATTRIBUTE(a1, a2) PRINTF_ATTRIBUTE(a1, a2) +/* This file was automatically generated by mkproto.pl. DO NOT EDIT */ + +#ifndef _PUBLIC_ +#define _PUBLIC_ +#endif + + +/* The following definitions come from lib/util/wrap_xattr.c */ + +_PUBLIC_ ssize_t wrap_fgetxattr(int fd, const char *name, void *value, size_t size); +_PUBLIC_ ssize_t wrap_getxattr(const char *path, const char *name, void *value, size_t size); +_PUBLIC_ int wrap_fsetxattr(int fd, const char *name, void *value, size_t size, int flags); +_PUBLIC_ int wrap_setxattr(const char *path, const char *name, void *value, size_t size, int flags); +_PUBLIC_ int wrap_fremovexattr(int fd, const char *name); +_PUBLIC_ int wrap_removexattr(const char *path, const char *name); +#undef _PRINTF_ATTRIBUTE +#define _PRINTF_ATTRIBUTE(a1, a2) + +#endif /* __LIB_UTIL_WRAP_XATTR_H__ */ + Modified: branches/SAMBA_4_0/source/ntvfs/posix/config.m4 =================================================================== --- branches/SAMBA_4_0/source/ntvfs/posix/config.m4 2006-06-05 20:38:21 UTC (rev 16050) +++ branches/SAMBA_4_0/source/ntvfs/posix/config.m4 2006-06-05 21:48:29 UTC (rev 16051) @@ -21,38 +21,6 @@ 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) Modified: branches/SAMBA_4_0/source/ntvfs/posix/config.mk =================================================================== --- branches/SAMBA_4_0/source/ntvfs/posix/config.mk 2006-06-05 20:38:21 UTC (rev 16050) +++ branches/SAMBA_4_0/source/ntvfs/posix/config.mk 2006-06-05 21:48:29 UTC (rev 16051) @@ -32,6 +32,6 @@ 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 ################################################ Modified: branches/SAMBA_4_0/source/ntvfs/posix/xattr_system.c =================================================================== --- branches/SAMBA_4_0/source/ntvfs/posix/xattr_system.c 2006-06-05 20:38:21 UTC (rev 16050) +++ branches/SAMBA_4_0/source/ntvfs/posix/xattr_system.c 2006-06-05 21:48:29 UTC (rev 16051) @@ -22,77 +22,8 @@ #include "includes.h" #include "vfs_posix.h" +#include "lib/util/wrap_xattr.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 - /* pull a xattr as a blob, from either a file or a file descriptor */ @@ -113,9 +44,9 @@ 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 @@ 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 @@ 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); Modified: branches/SAMBA_4_0/source/utils/config.mk =================================================================== --- branches/SAMBA_4_0/source/utils/config.mk 2006-06-05 20:38:21 UTC (rev 16050) +++ branches/SAMBA_4_0/source/utils/config.mk 2006-06-05 21:48:29 UTC (rev 16051) @@ -47,7 +47,7 @@ LIBSAMBA-CONFIG \ LIBSAMBA-UTIL \ NDR_XATTR \ - XATTR + WRAP_XATTR # End BINARY getntacl ################################# Modified: branches/SAMBA_4_0/source/utils/getntacl.c =================================================================== --- branches/SAMBA_4_0/source/utils/getntacl.c 2006-06-05 20:38:21 UTC (rev 16050) +++ branches/SAMBA_4_0/source/utils/getntacl.c 2006-06-05 21:48:29 UTC (rev 16051) @@ -23,9 +23,8 @@ #include "includes.h" #include "system/filesys.h" #include "librpc/gen_ndr/ndr_xattr.h" +#include "lib/util/wrap_xattr.h" -#if HAVE_XATTR_SUPPORT - static void ntacl_print_debug_helper(struct ndr_print *ndr, const char *format, ...) PRINTF_ATTRIBUTE(2,3); static void ntacl_print_debug_helper(struct ndr_print *ndr, const char *format, ...) @@ -57,7 +56,7 @@ *ntacl = talloc(NULL, struct xattr_NTACL); - size = getxattr(filename, XATTR_NTACL_NAME, NULL, 0); + size = wrap_getxattr(filename, XATTR_NTACL_NAME, NULL, 0); if (size < 0) { fprintf(stderr, "get_ntacl: %s\n", strerror(errno)); @@ -65,7 +64,7 @@ } blob.data = talloc_size(*ntacl, size); - size = getxattr(filename, XATTR_NTACL_NAME, blob.data, size); + size = wrap_getxattr(filename, XATTR_NTACL_NAME, blob.data, size); if (size < 0) { fprintf(stderr, "get_ntacl: %s\n", strerror(errno)); return NT_STATUS_INTERNAL_ERROR; @@ -109,14 +108,3 @@ return 0; } - -#else - -int main(int argc, char *argv[]) -{ - printf("getntacl: not compiled with xattr support!\n"); - return 1; - -} - -#endif