/*
open a sidmap context - use talloc_free to close
*/
-struct sidmap_context *sidmap_open(TALLOC_CTX *mem_ctx)
+_PUBLIC_ struct sidmap_context *sidmap_open(TALLOC_CTX *mem_ctx)
{
struct sidmap_context *sidmap;
sidmap = talloc(mem_ctx, struct sidmap_context);
/*
map a sid to a unix uid
*/
-NTSTATUS sidmap_sid_to_unixuid(struct sidmap_context *sidmap,
- struct dom_sid *sid, uid_t *uid)
+_PUBLIC_ NTSTATUS sidmap_sid_to_unixuid(struct sidmap_context *sidmap,
+ struct dom_sid *sid, uid_t *uid)
{
const char *attrs[] = { "sAMAccountName", "unixID",
"unixName", "sAMAccountType", NULL };
/*
map a sid to a unix gid
*/
-NTSTATUS sidmap_sid_to_unixgid(struct sidmap_context *sidmap,
- struct dom_sid *sid, gid_t *gid)
+_PUBLIC_ NTSTATUS sidmap_sid_to_unixgid(struct sidmap_context *sidmap,
+ struct dom_sid *sid, gid_t *gid)
{
const char *attrs[] = { "sAMAccountName", "unixID",
"unixName", "sAMAccountType", NULL };
map a unix uid to a dom_sid
the returned sid is allocated in the supplied mem_ctx
*/
-NTSTATUS sidmap_uid_to_sid(struct sidmap_context *sidmap,
- TALLOC_CTX *mem_ctx,
- uid_t uid, struct dom_sid **sid)
+_PUBLIC_ NTSTATUS sidmap_uid_to_sid(struct sidmap_context *sidmap,
+ TALLOC_CTX *mem_ctx,
+ uid_t uid, struct dom_sid **sid)
{
const char *attrs[] = { "sAMAccountName", "objectSid", "sAMAccountType", NULL };
int ret, i;
map a unix gid to a dom_sid
the returned sid is allocated in the supplied mem_ctx
*/
-NTSTATUS sidmap_gid_to_sid(struct sidmap_context *sidmap,
- TALLOC_CTX *mem_ctx,
- gid_t gid, struct dom_sid **sid)
+_PUBLIC_ NTSTATUS sidmap_gid_to_sid(struct sidmap_context *sidmap,
+ TALLOC_CTX *mem_ctx,
+ gid_t gid, struct dom_sid **sid)
{
const char *attrs[] = { "sAMAccountName", "objectSid", "sAMAccountType", NULL };
int ret, i;
check if a sid is in the range of auto-allocated SIDs from our primary domain,
and if it is, then return the name and atype
*/
-NTSTATUS sidmap_allocated_sid_lookup(struct sidmap_context *sidmap,
- TALLOC_CTX *mem_ctx,
- const struct dom_sid *sid,
- const char **name,
- uint32_t *atype)
+_PUBLIC_ NTSTATUS sidmap_allocated_sid_lookup(struct sidmap_context *sidmap,
+ TALLOC_CTX *mem_ctx,
+ const struct dom_sid *sid,
+ const char **name,
+ uint32_t *atype)
{
NTSTATUS status;
struct dom_sid *domain_sid;
samdb/samdb.o \
samdb/samdb_privilege.o \
samdb/cracknames.o \
+ common/sidmap.o \
common/flag_mapping.o
#
# End SUBSYSTEM SAMDB
################################################
-# Start MODULE ntvfs_common
-[MODULE::ntvfs_common]
-SUBSYSTEM = ntvfs
+# Start LIBRARY ntvfs_common
+[LIBRARY::ntvfs_common]
PRIVATE_PROTO_HEADER = proto.h
+VERSION = 0.0.1
+SO_VERSION = 0
+DESCRIPTION = Generic Code for use in NTVFS modules
OBJ_FILES = \
+ init.o \
brlock.o \
opendb.o \
- notify.o \
- sidmap.o
-REQUIRED_SUBSYSTEMS =
-# End MODULE ntvfs_common
+ notify.o
+REQUIRED_SUBSYSTEMS = NDR_OPENDB NDR_NOTIFY sys_notify
+# End LIBRARY ntvfs_common
################################################
--- /dev/null
+/*
+ Unix SMB/CIFS implementation.
+
+ Copyright (C) Stefan Metzmacher 2006
+
+ 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.
+*/
+
+/*
+ this is the change notify database. It implements mechanisms for
+ storing current change notify waiters in a tdb, and checking if a
+ given event matches any of the stored notify waiiters.
+*/
+
+#include "includes.h"
+#include "ntvfs/sysdep/sys_notify.h"
+
+_PUBLIC_ NTSTATUS ntvfs_common_init(void)
+{
+ return sys_notify_init();
+}
messaging_register(notify->messaging_ctx, notify,
MSG_PVFS_NOTIFY, notify_handler);
- notify->sys_notify_ctx = sys_notify_init(snum, notify, ev);
+ notify->sys_notify_ctx = sys_notify_context_create(snum, notify, ev);
return notify;
}
ipc/vfs_ipc.o \
ipc/ipc_rap.o \
ipc/rap_server.o
-REQUIRED_SUBSYSTEMS = DCERPC_COMMON dcerpc_server
+REQUIRED_SUBSYSTEMS = dcerpc_server
# End MODULE ntvfs_ipc
################################################
-
################################################
# Start MODULE ntvfs_nbench
[MODULE::ntvfs_nbench]
ntvfs_generic.o \
ntvfs_interface.o \
ntvfs_util.o
-REQUIRED_SUBSYSTEMS = NDR_OPENDB NDR_NOTIFY
+REQUIRED_SUBSYSTEMS =
#
# End SUBSYSTEM NTVFS
################################################
pvfs_notify.o \
xattr_system.o \
xattr_tdb.o
-REQUIRED_SUBSYSTEMS = NDR_XATTR EXT_LIB_XATTR EXT_LIB_BLKID
+REQUIRED_SUBSYSTEMS = NDR_XATTR EXT_LIB_XATTR EXT_LIB_BLKID ntvfs_common
# End MODULE ntvfs_posix
################################################
ops.name = "default";
ret = ntvfs_register(&ops);
+ if (!NT_STATUS_IS_OK(ret)) {
+ DEBUG(0,("Failed to register POSIX backend as '%s'!\n", ops.name));
+ }
+
ops.name = "posix";
ret = ntvfs_register(&ops);
if (!NT_STATUS_IS_OK(ret)) {
- DEBUG(0,("Failed to register POSIX backend!\n"));
+ DEBUG(0,("Failed to register POSIX backend as '%s'!\n", ops.name));
+ }
+
+ if (NT_STATUS_IS_OK(ret)) {
+ ret = ntvfs_common_init();
}
return ret;
#include "system/filesys.h"
#include "ntvfs/ntvfs.h"
#include "ntvfs/common/proto.h"
+#include "dsdb/samdb/samdb.h"
/* this is the private structure for the posix vfs backend. It is used
to hold per-connection (per tree connect) state information */
AC_CHECK_HEADERS(linux/inotify.h asm/unistd.h)
AC_CHECK_FUNC(inotify_init)
-SMB_ENABLE(ntvfs_inotify, NO)
+SMB_ENABLE(sys_notify_inotify, NO)
if test x"$ac_cv_header_linux_inotify_h" = x"yes"; then
- SMB_ENABLE(ntvfs_inotify, YES)
+ SMB_ENABLE(sys_notify_inotify, YES)
fi
################################################
-# Start MODULE ntvfs_sys_notify
-[MODULE::ntvfs_sys_notify]
-SUBSYSTEM = ntvfs
+# Start MODULE sys_notify_inotify
+[MODULE::sys_notify_inotify]
+SUBSYSTEM = sys_notify
+INIT_FUNCTION = sys_notify_inotify_init
OBJ_FILES = \
- sys_notify.o
-# End MODULE ntvfs_sys_notify
+ inotify.o
+# End MODULE sys_notify_inotify
################################################
-
################################################
-# Start MODULE ntvfs_inotify
-[MODULE::ntvfs_inotify]
-SUBSYSTEM = ntvfs
-INIT_FUNCTION = ntvfs_inotify_init
+# Start SUBSYSTEM sys_notify
+[LIBRARY::sys_notify]
+PUBLIC_HEADERS = sys_notify.h
+VERSION = 0.0.1
+SO_VERSION = 0
+DESCRIPTION = File System Notify Abstraction Layer
OBJ_FILES = \
- inotify.o
-# End MODULE ntvfs_inotify
+ sys_notify.o
+REQUIRED_SUBSYSTEMS =
+# End SUBSYSTEM sys_notify
################################################
-
/*
initialialise the inotify module
*/
-NTSTATUS ntvfs_inotify_init(void)
+NTSTATUS sys_notify_inotify_init(void)
{
/* register ourselves as a system inotify module */
return sys_notify_register(&inotify);
#include "ntvfs/sysdep/sys_notify.h"
#include "lib/events/events.h"
#include "dlinklist.h"
+#include "build.h"
/* list of registered backends */
static struct sys_notify_backend *backends;
/*
initialise a system change notify backend
*/
-struct sys_notify_context *sys_notify_init(int snum,
- TALLOC_CTX *mem_ctx,
- struct event_context *ev)
+struct sys_notify_context *sys_notify_context_create(int snum,
+ TALLOC_CTX *mem_ctx,
+ struct event_context *ev)
{
struct sys_notify_context *ctx;
const char *bname;
num_backends++;
return NT_STATUS_OK;
}
+
+NTSTATUS sys_notify_init(void)
+{
+ static BOOL initialized = False;
+
+ init_module_fn static_init[] = STATIC_sys_notify_MODULES;
+ init_module_fn *shared_init;
+
+ if (initialized) return NT_STATUS_OK;
+ initialized = True;
+
+ shared_init = load_samba_modules(NULL, "sys_notify");
+
+ run_init_functions(static_init);
+ run_init_functions(shared_init);
+
+ talloc_free(shared_init);
+
+ return NT_STATUS_OK;
+}
void *, struct notify_event *ev);
typedef NTSTATUS (*notify_watch_t)(struct sys_notify_context *ctx,
- struct notify_event *e,
+ struct notify_entry *e,
sys_notify_callback_t callback, void *private,
void **handle);
};
NTSTATUS sys_notify_register(struct sys_notify_backend *backend);
-struct sys_notify_context *sys_notify_init(int snum,
- TALLOC_CTX *mem_ctx,
- struct event_context *ev);
+struct sys_notify_context *sys_notify_context_create(int snum,
+ TALLOC_CTX *mem_ctx,
+ struct event_context *ev);
NTSTATUS sys_notify_watch(struct sys_notify_context *ctx, struct notify_entry *e,
sys_notify_callback_t callback, void *private,
void **handle);
+NTSTATUS sys_notify_init(void);
SUBSYSTEM = ntvfs
OBJ_FILES = \
vfs_unixuid.o
+REQUIRED_SUBSYSTEMS = SAMDB
# End MODULE ntvfs_unixuid
################################################
#include "system/passwd.h"
#include "auth/auth.h"
#include "ntvfs/ntvfs.h"
-#include "ntvfs/common/proto.h"
+#include "dsdb/samdb/samdb.h"
struct unixuid_private {
struct sidmap_context *sidmap;
#include "libcli/security/security.h"
#include "libcli/auth/libcli_auth.h"
#include "librpc/gen_ndr/ndr_security.h"
-#include "ntvfs/ntvfs.h"
#include "passdb/secrets.h"
#include "db_wrap.h"
-#include "ntvfs/common/proto.h"
/*
this type allows us to distinguish handle types
#include "rpc_server/common/common.h"
#include "librpc/gen_ndr/ndr_unixinfo.h"
#include "lib/events/events.h"
-#include "ntvfs/ntvfs.h"
-#include "ntvfs/common/proto.h"
+#include "dsdb/samdb/samdb.h"
#include <sys/types.h>
#include <pwd.h>