1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-02 09:47:23 +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
*/
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);
@ -124,8 +124,8 @@ static NTSTATUS sidmap_primary_domain_sid(struct sidmap_context *sidmap,
/*
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 };
@ -220,8 +220,8 @@ allocated_sid:
/*
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 };
@ -313,9 +313,9 @@ allocated_sid:
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;
@ -411,9 +411,9 @@ allocate_sid:
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;
@ -508,11 +508,11 @@ allocate_sid:
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;

View File

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

View File

@ -1,13 +1,15 @@
################################################
# 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
################################################

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,
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;
}

View File

@ -48,12 +48,11 @@ OBJ_FILES = \
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]
@ -78,7 +77,7 @@ OBJ_FILES = \
ntvfs_generic.o \
ntvfs_interface.o \
ntvfs_util.o
REQUIRED_SUBSYSTEMS = NDR_OPENDB NDR_NOTIFY
REQUIRED_SUBSYSTEMS =
#
# End SUBSYSTEM NTVFS
################################################

View File

@ -32,6 +32,6 @@ OBJ_FILES = \
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
################################################

View File

@ -332,11 +332,19 @@ NTSTATUS ntvfs_posix_init(void)
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;

View File

@ -27,6 +27,7 @@
#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 */

View File

@ -1,7 +1,7 @@
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

View File

@ -1,20 +1,22 @@
################################################
# Start MODULE ntvfs_sys_notify
[MODULE::ntvfs_sys_notify]
SUBSYSTEM = ntvfs
OBJ_FILES = \
sys_notify.o
# End MODULE ntvfs_sys_notify
################################################
################################################
# Start MODULE ntvfs_inotify
[MODULE::ntvfs_inotify]
SUBSYSTEM = ntvfs
INIT_FUNCTION = ntvfs_inotify_init
# Start MODULE sys_notify_inotify
[MODULE::sys_notify_inotify]
SUBSYSTEM = sys_notify
INIT_FUNCTION = sys_notify_inotify_init
OBJ_FILES = \
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
*/
NTSTATUS ntvfs_inotify_init(void)
NTSTATUS sys_notify_inotify_init(void)
{
/* register ourselves as a system inotify module */
return sys_notify_register(&inotify);

View File

@ -28,6 +28,7 @@
#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;
@ -36,9 +37,9 @@ static uint32_t num_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;
@ -115,3 +116,23 @@ NTSTATUS sys_notify_register(struct sys_notify_backend *backend)
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;
}

View File

@ -26,7 +26,7 @@ typedef void (*sys_notify_callback_t)(struct sys_notify_context *,
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);
@ -43,9 +43,10 @@ struct sys_notify_backend {
};
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);

View File

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

View File

@ -26,7 +26,7 @@
#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;

View File

@ -30,10 +30,8 @@
#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

View File

@ -25,8 +25,7 @@
#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>