1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-08 05:57:51 +03:00

r14964: - move sidmap code from ntvfs_common to SAMDB

- make ntvfs_common a library
- create sys_notify library

metze
(This used to be commit a3e1d56cf7b688c515f5d6d4d43e0b24c2261d15)
This commit is contained in:
Stefan Metzmacher 2006-04-07 13:15:46 +00:00 committed by Gerald (Jerry) Carter
parent 5b1a495e96
commit 2e894625e7
18 changed files with 125 additions and 59 deletions

View File

@ -49,7 +49,7 @@ struct sidmap_context {
/* /*
open a sidmap context - use talloc_free to close 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; struct sidmap_context *sidmap;
sidmap = talloc(mem_ctx, struct sidmap_context); sidmap = talloc(mem_ctx, struct sidmap_context);
@ -124,8 +124,8 @@ static NTSTATUS sidmap_primary_domain_sid(struct sidmap_context *sidmap,
/* /*
map a sid to a unix uid map a sid to a unix uid
*/ */
NTSTATUS sidmap_sid_to_unixuid(struct sidmap_context *sidmap, _PUBLIC_ NTSTATUS sidmap_sid_to_unixuid(struct sidmap_context *sidmap,
struct dom_sid *sid, uid_t *uid) struct dom_sid *sid, uid_t *uid)
{ {
const char *attrs[] = { "sAMAccountName", "unixID", const char *attrs[] = { "sAMAccountName", "unixID",
"unixName", "sAMAccountType", NULL }; "unixName", "sAMAccountType", NULL };
@ -220,8 +220,8 @@ allocated_sid:
/* /*
map a sid to a unix gid map a sid to a unix gid
*/ */
NTSTATUS sidmap_sid_to_unixgid(struct sidmap_context *sidmap, _PUBLIC_ NTSTATUS sidmap_sid_to_unixgid(struct sidmap_context *sidmap,
struct dom_sid *sid, gid_t *gid) struct dom_sid *sid, gid_t *gid)
{ {
const char *attrs[] = { "sAMAccountName", "unixID", const char *attrs[] = { "sAMAccountName", "unixID",
"unixName", "sAMAccountType", NULL }; "unixName", "sAMAccountType", NULL };
@ -313,9 +313,9 @@ allocated_sid:
map a unix uid to a dom_sid map a unix uid to a dom_sid
the returned sid is allocated in the supplied mem_ctx the returned sid is allocated in the supplied mem_ctx
*/ */
NTSTATUS sidmap_uid_to_sid(struct sidmap_context *sidmap, _PUBLIC_ NTSTATUS sidmap_uid_to_sid(struct sidmap_context *sidmap,
TALLOC_CTX *mem_ctx, TALLOC_CTX *mem_ctx,
uid_t uid, struct dom_sid **sid) uid_t uid, struct dom_sid **sid)
{ {
const char *attrs[] = { "sAMAccountName", "objectSid", "sAMAccountType", NULL }; const char *attrs[] = { "sAMAccountName", "objectSid", "sAMAccountType", NULL };
int ret, i; int ret, i;
@ -411,9 +411,9 @@ allocate_sid:
map a unix gid to a dom_sid map a unix gid to a dom_sid
the returned sid is allocated in the supplied mem_ctx the returned sid is allocated in the supplied mem_ctx
*/ */
NTSTATUS sidmap_gid_to_sid(struct sidmap_context *sidmap, _PUBLIC_ NTSTATUS sidmap_gid_to_sid(struct sidmap_context *sidmap,
TALLOC_CTX *mem_ctx, TALLOC_CTX *mem_ctx,
gid_t gid, struct dom_sid **sid) gid_t gid, struct dom_sid **sid)
{ {
const char *attrs[] = { "sAMAccountName", "objectSid", "sAMAccountType", NULL }; const char *attrs[] = { "sAMAccountName", "objectSid", "sAMAccountType", NULL };
int ret, i; int ret, i;
@ -508,11 +508,11 @@ allocate_sid:
check if a sid is in the range of auto-allocated SIDs from our primary domain, 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 and if it is, then return the name and atype
*/ */
NTSTATUS sidmap_allocated_sid_lookup(struct sidmap_context *sidmap, _PUBLIC_ NTSTATUS sidmap_allocated_sid_lookup(struct sidmap_context *sidmap,
TALLOC_CTX *mem_ctx, TALLOC_CTX *mem_ctx,
const struct dom_sid *sid, const struct dom_sid *sid,
const char **name, const char **name,
uint32_t *atype) uint32_t *atype)
{ {
NTSTATUS status; NTSTATUS status;
struct dom_sid *domain_sid; struct dom_sid *domain_sid;

View File

@ -12,6 +12,7 @@ OBJ_FILES = \
samdb/samdb.o \ samdb/samdb.o \
samdb/samdb_privilege.o \ samdb/samdb_privilege.o \
samdb/cracknames.o \ samdb/cracknames.o \
common/sidmap.o \
common/flag_mapping.o common/flag_mapping.o
# #
# End SUBSYSTEM SAMDB # End SUBSYSTEM SAMDB

View File

@ -1,13 +1,15 @@
################################################ ################################################
# Start MODULE ntvfs_common # Start LIBRARY ntvfs_common
[MODULE::ntvfs_common] [LIBRARY::ntvfs_common]
SUBSYSTEM = ntvfs
PRIVATE_PROTO_HEADER = proto.h PRIVATE_PROTO_HEADER = proto.h
VERSION = 0.0.1
SO_VERSION = 0
DESCRIPTION = Generic Code for use in NTVFS modules
OBJ_FILES = \ OBJ_FILES = \
init.o \
brlock.o \ brlock.o \
opendb.o \ opendb.o \
notify.o \ notify.o
sidmap.o REQUIRED_SUBSYSTEMS = NDR_OPENDB NDR_NOTIFY sys_notify
REQUIRED_SUBSYSTEMS = # End LIBRARY ntvfs_common
# End MODULE ntvfs_common
################################################ ################################################

View File

@ -0,0 +1,33 @@
/*
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();
}

View File

@ -115,7 +115,7 @@ struct notify_context *notify_init(TALLOC_CTX *mem_ctx, uint32_t server,
messaging_register(notify->messaging_ctx, notify, messaging_register(notify->messaging_ctx, notify,
MSG_PVFS_NOTIFY, notify_handler); 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; return notify;
} }

View File

@ -48,12 +48,11 @@ OBJ_FILES = \
ipc/vfs_ipc.o \ ipc/vfs_ipc.o \
ipc/ipc_rap.o \ ipc/ipc_rap.o \
ipc/rap_server.o ipc/rap_server.o
REQUIRED_SUBSYSTEMS = DCERPC_COMMON dcerpc_server REQUIRED_SUBSYSTEMS = dcerpc_server
# End MODULE ntvfs_ipc # End MODULE ntvfs_ipc
################################################ ################################################
################################################ ################################################
# Start MODULE ntvfs_nbench # Start MODULE ntvfs_nbench
[MODULE::ntvfs_nbench] [MODULE::ntvfs_nbench]
@ -78,7 +77,7 @@ OBJ_FILES = \
ntvfs_generic.o \ ntvfs_generic.o \
ntvfs_interface.o \ ntvfs_interface.o \
ntvfs_util.o ntvfs_util.o
REQUIRED_SUBSYSTEMS = NDR_OPENDB NDR_NOTIFY REQUIRED_SUBSYSTEMS =
# #
# End SUBSYSTEM NTVFS # End SUBSYSTEM NTVFS
################################################ ################################################

View File

@ -32,6 +32,6 @@ OBJ_FILES = \
pvfs_notify.o \ pvfs_notify.o \
xattr_system.o \ xattr_system.o \
xattr_tdb.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 # End MODULE ntvfs_posix
################################################ ################################################

View File

@ -332,11 +332,19 @@ NTSTATUS ntvfs_posix_init(void)
ops.name = "default"; ops.name = "default";
ret = ntvfs_register(&ops); 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"; ops.name = "posix";
ret = ntvfs_register(&ops); ret = ntvfs_register(&ops);
if (!NT_STATUS_IS_OK(ret)) { 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; return ret;

View File

@ -27,6 +27,7 @@
#include "system/filesys.h" #include "system/filesys.h"
#include "ntvfs/ntvfs.h" #include "ntvfs/ntvfs.h"
#include "ntvfs/common/proto.h" #include "ntvfs/common/proto.h"
#include "dsdb/samdb/samdb.h"
/* this is the private structure for the posix vfs backend. It is used /* this is the private structure for the posix vfs backend. It is used
to hold per-connection (per tree connect) state information */ to hold per-connection (per tree connect) state information */

View File

@ -1,7 +1,7 @@
AC_CHECK_HEADERS(linux/inotify.h asm/unistd.h) AC_CHECK_HEADERS(linux/inotify.h asm/unistd.h)
AC_CHECK_FUNC(inotify_init) 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 if test x"$ac_cv_header_linux_inotify_h" = x"yes"; then
SMB_ENABLE(ntvfs_inotify, YES) SMB_ENABLE(sys_notify_inotify, YES)
fi fi

View File

@ -1,20 +1,22 @@
################################################ ################################################
# Start MODULE ntvfs_sys_notify # Start MODULE sys_notify_inotify
[MODULE::ntvfs_sys_notify] [MODULE::sys_notify_inotify]
SUBSYSTEM = ntvfs SUBSYSTEM = sys_notify
OBJ_FILES = \ INIT_FUNCTION = sys_notify_inotify_init
sys_notify.o
# End MODULE ntvfs_sys_notify
################################################
################################################
# Start MODULE ntvfs_inotify
[MODULE::ntvfs_inotify]
SUBSYSTEM = ntvfs
INIT_FUNCTION = ntvfs_inotify_init
OBJ_FILES = \ OBJ_FILES = \
inotify.o inotify.o
# End MODULE ntvfs_inotify # End MODULE sys_notify_inotify
################################################ ################################################
################################################
# 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 = \
sys_notify.o
REQUIRED_SUBSYSTEMS =
# End SUBSYSTEM sys_notify
################################################

View File

@ -405,7 +405,7 @@ static struct sys_notify_backend inotify = {
/* /*
initialialise the inotify module initialialise the inotify module
*/ */
NTSTATUS ntvfs_inotify_init(void) NTSTATUS sys_notify_inotify_init(void)
{ {
/* register ourselves as a system inotify module */ /* register ourselves as a system inotify module */
return sys_notify_register(&inotify); return sys_notify_register(&inotify);

View File

@ -28,6 +28,7 @@
#include "ntvfs/sysdep/sys_notify.h" #include "ntvfs/sysdep/sys_notify.h"
#include "lib/events/events.h" #include "lib/events/events.h"
#include "dlinklist.h" #include "dlinklist.h"
#include "build.h"
/* list of registered backends */ /* list of registered backends */
static struct sys_notify_backend *backends; static struct sys_notify_backend *backends;
@ -36,9 +37,9 @@ static uint32_t num_backends;
/* /*
initialise a system change notify backend initialise a system change notify backend
*/ */
struct sys_notify_context *sys_notify_init(int snum, struct sys_notify_context *sys_notify_context_create(int snum,
TALLOC_CTX *mem_ctx, TALLOC_CTX *mem_ctx,
struct event_context *ev) struct event_context *ev)
{ {
struct sys_notify_context *ctx; struct sys_notify_context *ctx;
const char *bname; const char *bname;
@ -115,3 +116,23 @@ NTSTATUS sys_notify_register(struct sys_notify_backend *backend)
num_backends++; num_backends++;
return NT_STATUS_OK; 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;
}

View File

@ -26,7 +26,7 @@ typedef void (*sys_notify_callback_t)(struct sys_notify_context *,
void *, struct notify_event *ev); void *, struct notify_event *ev);
typedef NTSTATUS (*notify_watch_t)(struct sys_notify_context *ctx, 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, sys_notify_callback_t callback, void *private,
void **handle); void **handle);
@ -43,9 +43,10 @@ struct sys_notify_backend {
}; };
NTSTATUS sys_notify_register(struct sys_notify_backend *backend); NTSTATUS sys_notify_register(struct sys_notify_backend *backend);
struct sys_notify_context *sys_notify_init(int snum, struct sys_notify_context *sys_notify_context_create(int snum,
TALLOC_CTX *mem_ctx, TALLOC_CTX *mem_ctx,
struct event_context *ev); struct event_context *ev);
NTSTATUS sys_notify_watch(struct sys_notify_context *ctx, struct notify_entry *e, NTSTATUS sys_notify_watch(struct sys_notify_context *ctx, struct notify_entry *e,
sys_notify_callback_t callback, void *private, sys_notify_callback_t callback, void *private,
void **handle); void **handle);
NTSTATUS sys_notify_init(void);

View File

@ -5,5 +5,6 @@ INIT_FUNCTION = ntvfs_unixuid_init
SUBSYSTEM = ntvfs SUBSYSTEM = ntvfs
OBJ_FILES = \ OBJ_FILES = \
vfs_unixuid.o vfs_unixuid.o
REQUIRED_SUBSYSTEMS = SAMDB
# End MODULE ntvfs_unixuid # End MODULE ntvfs_unixuid
################################################ ################################################

View File

@ -26,7 +26,7 @@
#include "system/passwd.h" #include "system/passwd.h"
#include "auth/auth.h" #include "auth/auth.h"
#include "ntvfs/ntvfs.h" #include "ntvfs/ntvfs.h"
#include "ntvfs/common/proto.h" #include "dsdb/samdb/samdb.h"
struct unixuid_private { struct unixuid_private {
struct sidmap_context *sidmap; struct sidmap_context *sidmap;

View File

@ -30,10 +30,8 @@
#include "libcli/security/security.h" #include "libcli/security/security.h"
#include "libcli/auth/libcli_auth.h" #include "libcli/auth/libcli_auth.h"
#include "librpc/gen_ndr/ndr_security.h" #include "librpc/gen_ndr/ndr_security.h"
#include "ntvfs/ntvfs.h"
#include "passdb/secrets.h" #include "passdb/secrets.h"
#include "db_wrap.h" #include "db_wrap.h"
#include "ntvfs/common/proto.h"
/* /*
this type allows us to distinguish handle types this type allows us to distinguish handle types

View File

@ -25,8 +25,7 @@
#include "rpc_server/common/common.h" #include "rpc_server/common/common.h"
#include "librpc/gen_ndr/ndr_unixinfo.h" #include "librpc/gen_ndr/ndr_unixinfo.h"
#include "lib/events/events.h" #include "lib/events/events.h"
#include "ntvfs/ntvfs.h" #include "dsdb/samdb/samdb.h"
#include "ntvfs/common/proto.h"
#include <sys/types.h> #include <sys/types.h>
#include <pwd.h> #include <pwd.h>