From f9b7cd53b9fe253b122cb545c2dd1be073ab0592 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 1 Jun 2012 13:41:46 +1000 Subject: s4-xattr: Use libreplace xattr functions directly --- lib/replace/wscript | 6 ++ lib/util/wrap_xattr.c | 120 ---------------------------- lib/util/wrap_xattr.h | 33 -------- lib/util/wscript_build | 9 --- lib/util/wscript_configure | 5 -- source4/ntvfs/posix/python/pyposix_eadb.c | 1 - source4/ntvfs/posix/python/pyxattr_native.c | 8 +- source4/ntvfs/posix/python/pyxattr_tdb.c | 1 - source4/ntvfs/posix/wscript_build | 4 +- source4/ntvfs/posix/xattr_system.c | 13 ++- 10 files changed, 18 insertions(+), 182 deletions(-) delete mode 100644 lib/util/wrap_xattr.c delete mode 100644 lib/util/wrap_xattr.h diff --git a/lib/replace/wscript b/lib/replace/wscript index fc0cb00ae2..1d1480caec 100644 --- a/lib/replace/wscript +++ b/lib/replace/wscript @@ -231,6 +231,12 @@ fremoveea fsetea getea listea removeea setea ''', 'attr', checklibc=True) + if (conf.CONFIG_SET('HAVE_ATTR_LISTF') or + conf.CONFIG_SET('HAVE_EXTATTR_LIST_FD') or + conf.CONFIG_SET('HAVE_FLISTEA') or + conf.CONFIG_SET('HAVE_FLISTXATTR')): + conf.DEFINE('HAVE_XATTR_SUPPORT', 1) + # Darwin has extra options to xattr-family functions conf.CHECK_CODE('getxattr(0, 0, 0, 0, 0, 0);', 'XATTR_ADD_OPT', diff --git a/lib/util/wrap_xattr.c b/lib/util/wrap_xattr.c deleted file mode 100644 index b7e69c3676..0000000000 --- a/lib/util/wrap_xattr.c +++ /dev/null @@ -1,120 +0,0 @@ -/* - 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 3 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, see . -*/ - -#include "includes.h" -#include "system/filesys.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 - -_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); -} - diff --git a/lib/util/wrap_xattr.h b/lib/util/wrap_xattr.h deleted file mode 100644 index 745b93d764..0000000000 --- a/lib/util/wrap_xattr.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - 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 3 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, see . -*/ - -#ifndef __LIB_UTIL_WRAP_XATTR_H__ -#define __LIB_UTIL_WRAP_XATTR_H__ - -ssize_t wrap_fgetxattr(int fd, const char *name, void *value, size_t size); -ssize_t wrap_getxattr(const char *path, const char *name, void *value, size_t size); -int wrap_fsetxattr(int fd, const char *name, void *value, size_t size, int flags); -int wrap_setxattr(const char *path, const char *name, void *value, size_t size, int flags); -int wrap_fremovexattr(int fd, const char *name); -int wrap_removexattr(const char *path, const char *name); - -#endif /* __LIB_UTIL_WRAP_XATTR_H__ */ - diff --git a/lib/util/wscript_build b/lib/util/wscript_build index 2fa402396c..1cefe2d642 100755 --- a/lib/util/wscript_build +++ b/lib/util/wscript_build @@ -38,15 +38,6 @@ bld.SAMBA_SUBSYSTEM('UNIX_PRIVS', ) -bld.SAMBA_LIBRARY('wrap_xattr', - source='wrap_xattr.c', - public_deps='attr', - deps='talloc', - local_include=False, - private_library=True - ) - - bld.SAMBA_LIBRARY('util_tdb', source='util_tdb.c', local_include=False, diff --git a/lib/util/wscript_configure b/lib/util/wscript_configure index 28199272f2..d5c9f743d0 100644 --- a/lib/util/wscript_configure +++ b/lib/util/wscript_configure @@ -10,17 +10,12 @@ conf.CHECK_FUNCS_IN('backtrace backtrace_symbols', 'execinfo', checklibc=True, h conf.CHECK_FUNCS('sigprocmask sigblock sigaction') xattr_headers='sys/attributes.h attr/xattr.h sys/xattr.h' -conf.CHECK_FUNCS_IN('flistxattr', 'attr', checklibc=True, headers=xattr_headers) conf.CHECK_CODE('getxattr(NULL, NULL, NULL, 0, 0, 0)', headers=xattr_headers, local_include=False, define='XATTR_ADDITIONAL_OPTIONS', msg='Checking for darwin xattr api') -if conf.CONFIG_SET('HAVE_FLISTXATTR'): - conf.DEFINE('HAVE_XATTR_SUPPORT', 1) - - conf.CHECK_STRUCTURE_MEMBER('struct statvfs', 'f_frsize', define='HAVE_FRSIZE', headers='sys/statvfs.h') diff --git a/source4/ntvfs/posix/python/pyposix_eadb.c b/source4/ntvfs/posix/python/pyposix_eadb.c index 226160f88d..48310cc016 100644 --- a/source4/ntvfs/posix/python/pyposix_eadb.c +++ b/source4/ntvfs/posix/python/pyposix_eadb.c @@ -24,7 +24,6 @@ #include "tdb_compat.h" #include "lib/tdb_wrap/tdb_wrap.h" #include "librpc/ndr/libndr.h" -#include "lib/util/wrap_xattr.h" #include "ntvfs/posix/posix_eadb.h" #include "libcli/util/pyerrors.h" #include "param/pyparam.h" diff --git a/source4/ntvfs/posix/python/pyxattr_native.c b/source4/ntvfs/posix/python/pyxattr_native.c index caec115c05..4f610a01f5 100644 --- a/source4/ntvfs/posix/python/pyxattr_native.c +++ b/source4/ntvfs/posix/python/pyxattr_native.c @@ -21,7 +21,7 @@ #include #include "includes.h" #include "librpc/ndr/libndr.h" -#include "lib/util/wrap_xattr.h" +#include "system/filesys.h" void initxattr_native(void); @@ -46,7 +46,7 @@ static PyObject *py_wrap_setxattr(PyObject *self, PyObject *args) return NULL; blob.length = blobsize; - ret = wrap_setxattr(filename, attribute, blob.data, blob.length, 0); + ret = setxattr(filename, attribute, blob.data, blob.length, 0); if( ret < 0 ) { if (errno == ENOTSUP) { PyErr_SetFromErrno(PyExc_IOError); @@ -68,7 +68,7 @@ static PyObject *py_wrap_getxattr(PyObject *self, PyObject *args) if (!PyArg_ParseTuple(args, "ss", &filename, &attribute)) return NULL; mem_ctx = talloc_new(NULL); - len = wrap_getxattr(filename,attribute,NULL,0); + len = getxattr(filename,attribute,NULL,0); if( len < 0 ) { if (errno == ENOTSUP) { PyErr_SetFromErrno(PyExc_IOError); @@ -80,7 +80,7 @@ static PyObject *py_wrap_getxattr(PyObject *self, PyObject *args) } /* check length ... */ buf = talloc_zero_array(mem_ctx, char, len); - len = wrap_getxattr(filename, attribute, buf, len); + len = getxattr(filename, attribute, buf, len); if( len < 0 ) { if (errno == ENOTSUP) { PyErr_SetFromErrno(PyExc_IOError); diff --git a/source4/ntvfs/posix/python/pyxattr_tdb.c b/source4/ntvfs/posix/python/pyxattr_tdb.c index 1df9897e9a..b5109317dd 100644 --- a/source4/ntvfs/posix/python/pyxattr_tdb.c +++ b/source4/ntvfs/posix/python/pyxattr_tdb.c @@ -24,7 +24,6 @@ #include "tdb_compat.h" #include "lib/tdb_wrap/tdb_wrap.h" #include "librpc/ndr/libndr.h" -#include "lib/util/wrap_xattr.h" #include "ntvfs/posix/posix_eadb.h" #include "libcli/util/pyerrors.h" #include "param/pyparam.h" diff --git a/source4/ntvfs/posix/wscript_build b/source4/ntvfs/posix/wscript_build index 6ac22e1e84..ee0ef2494c 100644 --- a/source4/ntvfs/posix/wscript_build +++ b/source4/ntvfs/posix/wscript_build @@ -35,14 +35,14 @@ bld.SAMBA_MODULE('ntvfs_posix', autoproto='vfs_posix_proto.h', subsystem='ntvfs', init_function='ntvfs_posix_init', - deps='NDR_XATTR wrap_xattr ntvfs_common MESSAGING LIBWBCLIENT_OLD pvfs_acl pvfs_aio posix_eadb', + deps='NDR_XATTR attr ntvfs_common MESSAGING LIBWBCLIENT_OLD pvfs_acl pvfs_aio posix_eadb', internal_module=True ) bld.SAMBA_PYTHON('python_xattr_native', source='python/pyxattr_native.c', - deps='ndr ldb samdb samba-credentials pyparam_util wrap_xattr attr', + deps='ndr ldb samdb samba-credentials pyparam_util attr', realname='samba/xattr_native.so' ) diff --git a/source4/ntvfs/posix/xattr_system.c b/source4/ntvfs/posix/xattr_system.c index f22c0e9ea4..ebb2010e38 100644 --- a/source4/ntvfs/posix/xattr_system.c +++ b/source4/ntvfs/posix/xattr_system.c @@ -21,7 +21,6 @@ #include "includes.h" #include "vfs_posix.h" -#include "../lib/util/wrap_xattr.h" /* pull a xattr as a blob, from either a file or a file descriptor @@ -43,9 +42,9 @@ NTSTATUS pull_xattr_blob_system(struct pvfs_state *pvfs, again: if (fd != -1) { - ret = wrap_fgetxattr(fd, attr_name, blob->data, estimated_size); + ret = fgetxattr(fd, attr_name, blob->data, estimated_size); } else { - ret = wrap_getxattr(fname, attr_name, blob->data, estimated_size); + ret = getxattr(fname, attr_name, blob->data, estimated_size); } if (ret == -1 && errno == ERANGE) { estimated_size *= 2; @@ -104,9 +103,9 @@ NTSTATUS push_xattr_blob_system(struct pvfs_state *pvfs, int ret; if (fd != -1) { - ret = wrap_fsetxattr(fd, attr_name, blob->data, blob->length, 0); + ret = fsetxattr(fd, attr_name, blob->data, blob->length, 0); } else { - ret = wrap_setxattr(fname, attr_name, blob->data, blob->length, 0); + ret = setxattr(fname, attr_name, blob->data, blob->length, 0); } if (ret == -1) { return pvfs_map_errno(pvfs, errno); @@ -125,9 +124,9 @@ NTSTATUS delete_xattr_system(struct pvfs_state *pvfs, const char *attr_name, int ret; if (fd != -1) { - ret = wrap_fremovexattr(fd, attr_name); + ret = fremovexattr(fd, attr_name); } else { - ret = wrap_removexattr(fname, attr_name); + ret = removexattr(fname, attr_name); } if (ret == -1) { return pvfs_map_errno(pvfs, errno); -- cgit