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:
parent
5b1a495e96
commit
2e894625e7
@ -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;
|
@ -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
|
||||||
|
@ -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
|
|
||||||
################################################
|
################################################
|
||||||
|
33
source4/ntvfs/common/init.c
Normal file
33
source4/ntvfs/common/init.c
Normal 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();
|
||||||
|
}
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
################################################
|
################################################
|
||||||
|
@ -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
|
||||||
################################################
|
################################################
|
||||||
|
@ -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;
|
||||||
|
@ -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 */
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
################################################
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
@ -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);
|
||||||
|
@ -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
|
||||||
################################################
|
################################################
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user