pvfs: create a pvfs_acl subsystem
authorStefan Metzmacher <metze@samba.org>
Sat, 28 Jun 2008 08:28:15 +0000 (10:28 +0200)
committerStefan Metzmacher <metze@samba.org>
Sat, 28 Jun 2008 08:30:25 +0000 (10:30 +0200)
That means that the pvfs_acl implementations no longer register
as ntvfs modules (which was wrong)

metze

source/ntvfs/ntvfs_base.c
source/ntvfs/posix/config.mk
source/ntvfs/posix/pvfs_acl.c
source/ntvfs/posix/vfs_posix.c
source/ntvfs/posix/vfs_posix.h

index 6de13e4a0a0446cec572b85b551fe70534bb86aa..1385481bbc68224fac5fcc61aec9a1ad727bb060 100644 (file)
@@ -209,8 +209,6 @@ NTSTATUS ntvfs_init(struct loadparm_context *lp_ctx)
        extern NTSTATUS ntvfs_nbench_init(void);
        extern NTSTATUS ntvfs_unixuid_init(void);
        extern NTSTATUS ntvfs_ipc_init(void);
-       extern NTSTATUS pvfs_acl_nfs4_init(void);
-       extern NTSTATUS pvfs_acl_xattr_init(void);
        extern NTSTATUS ntvfs_print_init(void);
        extern NTSTATUS ntvfs_simple_init(void);
        extern NTSTATUS ntvfs_cifs_posix_init(void);
index 11fa067068eb5957a7ecb7e856904127b86872ea..1ea4e8f97d8bc7df7964691a30b1f9581a3a6908 100644 (file)
@@ -1,9 +1,16 @@
+
+[SUBSYSTEM::pvfs_acl]
+
+pvfs_acl_OBJ_FILES = $(ntvfssrcdir)/posix/pvfs_acl.o
+
+$(eval $(call proto_header_template,$(ntvfssrcdir)/posix/vfs_acl_proto.h,$(pvfs_acl_OBJ_FILES:.o=.c)))
+
 ################################################
 # Start MODULE pvfs_acl_xattr
 [MODULE::pvfs_acl_xattr]
 INIT_FUNCTION = pvfs_acl_xattr_init 
-SUBSYSTEM = ntvfs
-PRIVATE_DEPENDENCIES = NDR_XATTR ntvfs_posix
+SUBSYSTEM = pvfs_acl
+PRIVATE_DEPENDENCIES = NDR_XATTR
 # End MODULE pvfs_acl_xattr
 ################################################
 
@@ -13,8 +20,8 @@ pvfs_acl_xattr_OBJ_FILES = $(ntvfssrcdir)/posix/pvfs_acl_xattr.o
 # Start MODULE pvfs_acl_nfs4
 [MODULE::pvfs_acl_nfs4]
 INIT_FUNCTION = pvfs_acl_nfs4_init 
-SUBSYSTEM = ntvfs
-PRIVATE_DEPENDENCIES = NDR_NFS4ACL SAMDB ntvfs_posix
+SUBSYSTEM = pvfs_acl
+PRIVATE_DEPENDENCIES = NDR_NFS4ACL SAMDB
 # End MODULE pvfs_acl_nfs4
 ################################################
 
@@ -34,8 +41,8 @@ SUBSYSTEM = ntvfs
 OUTPUT_TYPE = MERGED_OBJ
 INIT_FUNCTION = ntvfs_posix_init 
 #PRIVATE_DEPENDENCIES = pvfs_acl_xattr pvfs_acl_nfs4
-PRIVATE_DEPENDENCIES = NDR_XATTR WRAP_XATTR BLKID ntvfs_common MESSAGING pvfs_aio \
-                                          LIBWBCLIENT
+PRIVATE_DEPENDENCIES = NDR_XATTR WRAP_XATTR BLKID ntvfs_common MESSAGING \
+                       LIBWBCLIENT pvfs_acl pvfs_aio
 # End MODULE ntvfs_posix
 ################################################
 
@@ -64,7 +71,6 @@ ntvfs_posix_OBJ_FILES = $(addprefix $(ntvfssrcdir)/posix/, \
                pvfs_ioctl.o \
                pvfs_xattr.o \
                pvfs_streams.o \
-               pvfs_acl.o \
                pvfs_notify.o \
                xattr_system.o \
                xattr_tdb.o)
index 9a9200e4f0739615c0a5baf15f511c62cd64fb9e..57a463aba6d8a485ce9b7f56b58363585a4dd86b 100644 (file)
@@ -24,6 +24,7 @@
 #include "vfs_posix.h"
 #include "librpc/gen_ndr/xattr.h"
 #include "libcli/security/security.h"
+#include "param/param.h"
 
 
 /* the list of currently registered ACL backends */
@@ -79,6 +80,27 @@ const struct pvfs_acl_ops *pvfs_acl_backend_byname(const char *name)
        return NULL;
 }
 
+NTSTATUS pvfs_acl_init(struct loadparm_context *lp_ctx)
+{
+       static bool initialized = false;
+       extern NTSTATUS pvfs_acl_nfs4_init(void);
+       extern NTSTATUS pvfs_acl_xattr_init(void);
+       init_module_fn static_init[] = { STATIC_pvfs_acl_MODULES };
+       init_module_fn *shared_init;
+
+       if (initialized) return NT_STATUS_OK;
+       initialized = true;
+
+       shared_init = load_samba_modules(NULL, lp_ctx, "pvfs_acl");
+
+       run_init_functions(static_init);
+       run_init_functions(shared_init);
+
+       talloc_free(shared_init);
+
+       return NT_STATUS_OK;
+}
+
 
 /*
   map a single access_mask from generic to specific bits for files/dirs
index b5dd270346122ab5b169d28fdcf601fbce50d8ca..ce0da7033dc83c91782ec04e5595562c6d46f41a 100644 (file)
@@ -176,6 +176,13 @@ static NTSTATUS pvfs_connect(struct ntvfs_module_context *ntvfs,
        char *base_directory;
        NTSTATUS status;
 
+       /*
+        * TODO: call this from ntvfs_posix_init()
+        *       but currently we don't have a lp_ctx there
+        */
+       status = pvfs_acl_init(ntvfs->ctx->lp_ctx);
+       NT_STATUS_NOT_OK_RETURN(status);
+
        pvfs = talloc_zero(ntvfs, struct pvfs_state);
        NT_STATUS_HAVE_NO_MEMORY(pvfs);
 
index cf39bcf0ac0db318f0246dec8a65638b71f105db..1a54b57d6317ff62a8f167e1bfaadb1ae4e0db4a 100644 (file)
@@ -283,6 +283,7 @@ struct pvfs_acl_ops {
 };
 
 #include "ntvfs/posix/vfs_posix_proto.h"
+#include "ntvfs/posix/vfs_acl_proto.h"
 
 NTSTATUS pvfs_aio_pread(struct ntvfs_request *req, union smb_read *rd,
                        struct pvfs_file *f, uint32_t maxcnt);