mirror of
https://github.com/samba-team/samba.git
synced 2025-02-24 13:57:43 +03:00
s4-xattr: Use libreplace xattr functions directly
This commit is contained in:
parent
c290cdb934
commit
f9b7cd53b9
@ -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',
|
||||
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#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);
|
||||
}
|
||||
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#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__ */
|
||||
|
@ -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,
|
||||
|
@ -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')
|
||||
|
||||
|
@ -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"
|
||||
|
@ -21,7 +21,7 @@
|
||||
#include <Python.h>
|
||||
#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);
|
||||
|
@ -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"
|
||||
|
@ -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'
|
||||
)
|
||||
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user