svn commit: samba r16051 - in branches/SAMBA_4_0/source: . lib/util ntvfs/posix utils

abartlet at samba.org abartlet at samba.org
Mon Jun 5 21:48:30 GMT 2006


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



More information about the samba-cvs mailing list