mirror of
https://github.com/samba-team/samba.git
synced 2025-12-09 00:23:50 +03:00
r6367: Slim down pdb_interface.c a bit. next_entry and search_end are function
pointers now. Yes, Jeremy, this is about re-inventing C++... :-) Volker
This commit is contained in:
committed by
Gerald (Jerry) Carter
parent
0c4058c073
commit
a831e54738
@@ -254,6 +254,9 @@ struct pdb_search {
|
|||||||
ssize_t cache_size;
|
ssize_t cache_size;
|
||||||
BOOL search_ended;
|
BOOL search_ended;
|
||||||
void *private;
|
void *private;
|
||||||
|
BOOL (*next_entry)(struct pdb_search *search,
|
||||||
|
struct samr_displayentry *entry);
|
||||||
|
void (*search_end)(struct pdb_search *search);
|
||||||
};
|
};
|
||||||
|
|
||||||
/*****************************************************************
|
/*****************************************************************
|
||||||
@@ -378,11 +381,6 @@ typedef struct pdb_context
|
|||||||
BOOL (*pdb_search_aliases)(struct pdb_context *context,
|
BOOL (*pdb_search_aliases)(struct pdb_context *context,
|
||||||
struct pdb_search *search,
|
struct pdb_search *search,
|
||||||
const DOM_SID *sid);
|
const DOM_SID *sid);
|
||||||
BOOL (*pdb_search_next_entry)(struct pdb_context *context,
|
|
||||||
struct pdb_search *search,
|
|
||||||
struct samr_displayentry *entry);
|
|
||||||
void (*pdb_search_end)(struct pdb_context *context,
|
|
||||||
struct pdb_search *search);
|
|
||||||
|
|
||||||
void (*free_fn)(struct pdb_context **);
|
void (*free_fn)(struct pdb_context **);
|
||||||
|
|
||||||
@@ -496,11 +494,6 @@ typedef struct pdb_methods
|
|||||||
BOOL (*search_aliases)(struct pdb_methods *methods,
|
BOOL (*search_aliases)(struct pdb_methods *methods,
|
||||||
struct pdb_search *search,
|
struct pdb_search *search,
|
||||||
const DOM_SID *sid);
|
const DOM_SID *sid);
|
||||||
BOOL (*search_next_entry)(struct pdb_methods *methods,
|
|
||||||
struct pdb_search *search,
|
|
||||||
struct samr_displayentry *entry);
|
|
||||||
void (*search_end)(struct pdb_methods *methods,
|
|
||||||
struct pdb_search *search);
|
|
||||||
|
|
||||||
void *private_data; /* Private data of some kind */
|
void *private_data; /* Private data of some kind */
|
||||||
|
|
||||||
|
|||||||
@@ -702,31 +702,6 @@ static BOOL context_search_aliases(struct pdb_context *context,
|
|||||||
search, sid);
|
search, sid);
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL context_search_next_entry(struct pdb_context *context,
|
|
||||||
struct pdb_search *search,
|
|
||||||
struct samr_displayentry *entry)
|
|
||||||
{
|
|
||||||
if ((!context) || (!context->pdb_methods)) {
|
|
||||||
DEBUG(0, ("invalid pdb_context specified!\n"));
|
|
||||||
return False;
|
|
||||||
}
|
|
||||||
|
|
||||||
return context->pdb_methods->search_next_entry(context->pdb_methods,
|
|
||||||
search, entry);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void context_search_end(struct pdb_context *context,
|
|
||||||
struct pdb_search *search)
|
|
||||||
{
|
|
||||||
if ((!context) || (!context->pdb_methods)) {
|
|
||||||
DEBUG(0, ("invalid pdb_context specified!\n"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
context->pdb_methods->search_end(context->pdb_methods, search);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
Free and cleanup a pdb context, any associated data and anything
|
Free and cleanup a pdb context, any associated data and anything
|
||||||
that the attached modules might have associated.
|
that the attached modules might have associated.
|
||||||
@@ -860,8 +835,6 @@ static NTSTATUS make_pdb_context(struct pdb_context **context)
|
|||||||
(*context)->pdb_search_users = context_search_users;
|
(*context)->pdb_search_users = context_search_users;
|
||||||
(*context)->pdb_search_groups = context_search_groups;
|
(*context)->pdb_search_groups = context_search_groups;
|
||||||
(*context)->pdb_search_aliases = context_search_aliases;
|
(*context)->pdb_search_aliases = context_search_aliases;
|
||||||
(*context)->pdb_search_next_entry = context_search_next_entry;
|
|
||||||
(*context)->pdb_search_end = context_search_end;
|
|
||||||
|
|
||||||
(*context)->free_fn = free_pdb_context;
|
(*context)->free_fn = free_pdb_context;
|
||||||
|
|
||||||
@@ -1600,6 +1573,10 @@ static struct pdb_search *pdb_search_init(enum pdb_search_type type)
|
|||||||
result->cache_size = 0;
|
result->cache_size = 0;
|
||||||
result->search_ended = False;
|
result->search_ended = False;
|
||||||
|
|
||||||
|
/* Segfault appropriately if not initialized */
|
||||||
|
result->next_entry = NULL;
|
||||||
|
result->search_end = NULL;
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1634,37 +1611,7 @@ struct user_search {
|
|||||||
uint16 acct_flags;
|
uint16 acct_flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
static BOOL pdb_default_search_users(struct pdb_methods *methods,
|
static BOOL next_entry_users(struct pdb_search *s,
|
||||||
struct pdb_search *search,
|
|
||||||
uint16 acct_flags)
|
|
||||||
{
|
|
||||||
struct user_search *state;
|
|
||||||
|
|
||||||
if (user_search_in_progress) {
|
|
||||||
DEBUG(1, ("user search in progress\n"));
|
|
||||||
return False;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!pdb_setsampwent(False, acct_flags)) {
|
|
||||||
DEBUG(5, ("Could not start search\n"));
|
|
||||||
return False;
|
|
||||||
}
|
|
||||||
|
|
||||||
user_search_in_progress = True;
|
|
||||||
|
|
||||||
state = TALLOC_P(search->mem_ctx, struct user_search);
|
|
||||||
if (state == NULL) {
|
|
||||||
DEBUG(0, ("talloc failed\n"));
|
|
||||||
return False;
|
|
||||||
}
|
|
||||||
|
|
||||||
state->acct_flags = acct_flags;
|
|
||||||
|
|
||||||
search->private = state;
|
|
||||||
return True;
|
|
||||||
}
|
|
||||||
|
|
||||||
static BOOL pdb_search_next_entry_users(struct pdb_search *s,
|
|
||||||
struct samr_displayentry *entry)
|
struct samr_displayentry *entry)
|
||||||
{
|
{
|
||||||
struct user_search *state = s->private;
|
struct user_search *state = s->private;
|
||||||
@@ -1698,40 +1645,50 @@ static BOOL pdb_search_next_entry_users(struct pdb_search *s,
|
|||||||
return True;
|
return True;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pdb_search_end_users(struct pdb_search *search)
|
static void search_end_users(struct pdb_search *search)
|
||||||
{
|
{
|
||||||
pdb_endsampwent();
|
pdb_endsampwent();
|
||||||
user_search_in_progress = False;
|
user_search_in_progress = False;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static BOOL pdb_default_search_users(struct pdb_methods *methods,
|
||||||
|
struct pdb_search *search,
|
||||||
|
uint16 acct_flags)
|
||||||
|
{
|
||||||
|
struct user_search *state;
|
||||||
|
|
||||||
|
if (user_search_in_progress) {
|
||||||
|
DEBUG(1, ("user search in progress\n"));
|
||||||
|
return False;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!pdb_setsampwent(False, acct_flags)) {
|
||||||
|
DEBUG(5, ("Could not start search\n"));
|
||||||
|
return False;
|
||||||
|
}
|
||||||
|
|
||||||
|
user_search_in_progress = True;
|
||||||
|
|
||||||
|
state = TALLOC_P(search->mem_ctx, struct user_search);
|
||||||
|
if (state == NULL) {
|
||||||
|
DEBUG(0, ("talloc failed\n"));
|
||||||
|
return False;
|
||||||
|
}
|
||||||
|
|
||||||
|
state->acct_flags = acct_flags;
|
||||||
|
|
||||||
|
search->private = state;
|
||||||
|
search->next_entry = next_entry_users;
|
||||||
|
search->search_end = search_end_users;
|
||||||
|
return True;
|
||||||
|
}
|
||||||
|
|
||||||
struct group_search {
|
struct group_search {
|
||||||
GROUP_MAP *groups;
|
GROUP_MAP *groups;
|
||||||
int num_groups, current_group;
|
int num_groups, current_group;
|
||||||
};
|
};
|
||||||
|
|
||||||
static BOOL pdb_default_search_groups(struct pdb_methods *methods,
|
static BOOL next_entry_groups(struct pdb_search *s,
|
||||||
struct pdb_search *search)
|
|
||||||
{
|
|
||||||
struct group_search *state;
|
|
||||||
|
|
||||||
state = TALLOC_P(search->mem_ctx, struct group_search);
|
|
||||||
if (state == NULL) {
|
|
||||||
DEBUG(0, ("talloc failed\n"));
|
|
||||||
return False;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!pdb_enum_group_mapping(SID_NAME_DOM_GRP, &state->groups,
|
|
||||||
&state->num_groups, True)) {
|
|
||||||
DEBUG(0, ("Could not enum groups\n"));
|
|
||||||
return False;
|
|
||||||
}
|
|
||||||
|
|
||||||
state->current_group = 0;
|
|
||||||
search->private = state;
|
|
||||||
return True;
|
|
||||||
}
|
|
||||||
|
|
||||||
static BOOL pdb_search_next_entry_group(struct pdb_search *s,
|
|
||||||
struct samr_displayentry *entry)
|
struct samr_displayentry *entry)
|
||||||
{
|
{
|
||||||
struct group_search *state = s->private;
|
struct group_search *state = s->private;
|
||||||
@@ -1750,135 +1707,55 @@ static BOOL pdb_search_next_entry_group(struct pdb_search *s,
|
|||||||
return True;
|
return True;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pdb_search_end_groups(struct pdb_search *search)
|
static void search_end_groups(struct pdb_search *search)
|
||||||
{
|
{
|
||||||
struct group_search *state = search->private;
|
struct group_search *state = search->private;
|
||||||
SAFE_FREE(state->groups);
|
SAFE_FREE(state->groups);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct alias_search {
|
static BOOL pdb_search_grouptype(struct pdb_search *search,
|
||||||
GROUP_MAP *aliases;
|
enum SID_NAME_USE type)
|
||||||
int num_aliases, current_alias;
|
|
||||||
};
|
|
||||||
|
|
||||||
static BOOL pdb_default_search_aliases(struct pdb_methods *methods,
|
|
||||||
struct pdb_search *search,
|
|
||||||
const DOM_SID *sid)
|
|
||||||
{
|
{
|
||||||
struct alias_search *state;
|
struct group_search *state;
|
||||||
enum SID_NAME_USE type = SID_NAME_UNKNOWN;
|
|
||||||
|
|
||||||
if (sid_equal(sid, get_global_sam_sid()))
|
state = TALLOC_P(search->mem_ctx, struct group_search);
|
||||||
type = SID_NAME_ALIAS;
|
|
||||||
|
|
||||||
if (sid_equal(sid, &global_sid_Builtin))
|
|
||||||
type = SID_NAME_WKN_GRP;
|
|
||||||
|
|
||||||
if (type == SID_NAME_UNKNOWN) {
|
|
||||||
DEBUG(3, ("unknown domain sid: %s\n", sid_string_static(sid)));
|
|
||||||
return False;
|
|
||||||
}
|
|
||||||
|
|
||||||
state = TALLOC_P(search->mem_ctx, struct alias_search);
|
|
||||||
if (state == NULL) {
|
if (state == NULL) {
|
||||||
DEBUG(0, ("talloc failed\n"));
|
DEBUG(0, ("talloc failed\n"));
|
||||||
return False;
|
return False;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!pdb_enum_group_mapping(type, &state->aliases,
|
if (!pdb_enum_group_mapping(type, &state->groups, &state->num_groups,
|
||||||
&state->num_aliases, False)) {
|
True)) {
|
||||||
DEBUG(0, ("Could not enum aliases\n"));
|
DEBUG(0, ("Could not enum groups\n"));
|
||||||
return False;
|
return False;
|
||||||
}
|
}
|
||||||
|
|
||||||
state->current_alias = 0;
|
state->current_group = 0;
|
||||||
search->private = state;
|
search->private = state;
|
||||||
|
search->next_entry = next_entry_groups;
|
||||||
|
search->search_end = search_end_groups;
|
||||||
return True;
|
return True;
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL pdb_search_next_entry_alias(struct pdb_search *s,
|
static BOOL pdb_default_search_groups(struct pdb_methods *methods,
|
||||||
struct samr_displayentry *entry)
|
|
||||||
{
|
|
||||||
struct alias_search *state = s->private;
|
|
||||||
uint32 rid;
|
|
||||||
GROUP_MAP *map = &state->aliases[state->current_alias];
|
|
||||||
|
|
||||||
if (state->current_alias == state->num_aliases)
|
|
||||||
return False;
|
|
||||||
|
|
||||||
sid_peek_rid(&map->sid, &rid);
|
|
||||||
|
|
||||||
fill_displayentry(s->mem_ctx, rid, 0, map->nt_name, NULL, map->comment,
|
|
||||||
entry);
|
|
||||||
|
|
||||||
state->current_alias += 1;
|
|
||||||
return True;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void pdb_search_end_aliases(struct pdb_search *search)
|
|
||||||
{
|
|
||||||
struct alias_search *state = search->private;
|
|
||||||
SAFE_FREE(state->aliases);
|
|
||||||
}
|
|
||||||
|
|
||||||
static BOOL pdb_default_search_next_entry(struct pdb_methods *pdb_methods,
|
|
||||||
struct pdb_search *search,
|
|
||||||
struct samr_displayentry *entry)
|
|
||||||
{
|
|
||||||
BOOL result = False;
|
|
||||||
switch (search->type) {
|
|
||||||
case PDB_USER_SEARCH:
|
|
||||||
result = pdb_search_next_entry_users(search, entry);
|
|
||||||
break;
|
|
||||||
case PDB_GROUP_SEARCH:
|
|
||||||
result = pdb_search_next_entry_group(search, entry);
|
|
||||||
break;
|
|
||||||
case PDB_ALIAS_SEARCH:
|
|
||||||
result = pdb_search_next_entry_alias(search, entry);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
DEBUG(0, ("unknown search type: %d\n", search->type));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
static BOOL pdb_search_next_entry(struct pdb_search *search,
|
|
||||||
struct samr_displayentry *entry)
|
|
||||||
{
|
|
||||||
struct pdb_context *pdb_context = pdb_get_static_context(False);
|
|
||||||
|
|
||||||
if (pdb_context == NULL) return False;
|
|
||||||
|
|
||||||
return pdb_context->pdb_search_next_entry(pdb_context, search, entry);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void pdb_default_search_end(struct pdb_methods *pdb_methods,
|
|
||||||
struct pdb_search *search)
|
struct pdb_search *search)
|
||||||
{
|
{
|
||||||
switch (search->type) {
|
return pdb_search_grouptype(search, SID_NAME_DOM_GRP);
|
||||||
case PDB_USER_SEARCH:
|
|
||||||
pdb_search_end_users(search);
|
|
||||||
break;
|
|
||||||
case PDB_GROUP_SEARCH:
|
|
||||||
pdb_search_end_groups(search);
|
|
||||||
break;
|
|
||||||
case PDB_ALIAS_SEARCH:
|
|
||||||
pdb_search_end_aliases(search);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
DEBUG(0, ("unknown search type: %d\n", search->type));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pdb_search_end(struct pdb_search *search)
|
static BOOL pdb_default_search_aliases(struct pdb_methods *methods,
|
||||||
|
struct pdb_search *search,
|
||||||
|
const DOM_SID *sid)
|
||||||
{
|
{
|
||||||
struct pdb_context *pdb_context = pdb_get_static_context(False);
|
|
||||||
|
|
||||||
if (pdb_context == NULL) return;
|
if (sid_equal(sid, get_global_sam_sid()))
|
||||||
|
return pdb_search_grouptype(search, SID_NAME_ALIAS);
|
||||||
|
|
||||||
pdb_context->pdb_search_end(pdb_context, search);
|
if (sid_equal(sid, &global_sid_Builtin))
|
||||||
|
return pdb_search_grouptype(search, SID_NAME_WKN_GRP);
|
||||||
|
|
||||||
|
DEBUG(3, ("unknown domain sid: %s\n", sid_string_static(sid)));
|
||||||
|
return False;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct samr_displayentry *pdb_search_getentry(struct pdb_search *search,
|
static struct samr_displayentry *pdb_search_getentry(struct pdb_search *search,
|
||||||
@@ -1893,8 +1770,8 @@ static struct samr_displayentry *pdb_search_getentry(struct pdb_search *search,
|
|||||||
while (idx >= search->num_entries) {
|
while (idx >= search->num_entries) {
|
||||||
struct samr_displayentry entry;
|
struct samr_displayentry entry;
|
||||||
|
|
||||||
if (!pdb_search_next_entry(search, &entry)) {
|
if (!search->next_entry(search, &entry)) {
|
||||||
pdb_search_end(search);
|
search->search_end(search);
|
||||||
search->search_ended = True;
|
search->search_ended = True;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1987,7 +1864,7 @@ void pdb_search_destroy(struct pdb_search *search)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if (!search->search_ended)
|
if (!search->search_ended)
|
||||||
pdb_search_end(search);
|
search->search_end(search);
|
||||||
|
|
||||||
talloc_destroy(search->mem_ctx);
|
talloc_destroy(search->mem_ctx);
|
||||||
}
|
}
|
||||||
@@ -2034,8 +1911,6 @@ NTSTATUS make_pdb_methods(TALLOC_CTX *mem_ctx, PDB_METHODS **methods)
|
|||||||
(*methods)->search_users = pdb_default_search_users;
|
(*methods)->search_users = pdb_default_search_users;
|
||||||
(*methods)->search_groups = pdb_default_search_groups;
|
(*methods)->search_groups = pdb_default_search_groups;
|
||||||
(*methods)->search_aliases = pdb_default_search_aliases;
|
(*methods)->search_aliases = pdb_default_search_aliases;
|
||||||
(*methods)->search_next_entry = pdb_default_search_next_entry;
|
|
||||||
(*methods)->search_end = pdb_default_search_end;
|
|
||||||
|
|
||||||
return NT_STATUS_OK;
|
return NT_STATUS_OK;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3463,8 +3463,7 @@ static BOOL ldapsam_search_nextpage(struct pdb_search *search)
|
|||||||
return True;
|
return True;
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL ldapsam_search_next_entry(struct pdb_methods *methods,
|
static BOOL ldapsam_search_next_entry(struct pdb_search *search,
|
||||||
struct pdb_search *search,
|
|
||||||
struct samr_displayentry *entry)
|
struct samr_displayentry *entry)
|
||||||
{
|
{
|
||||||
struct ldap_search_state *state = search->private;
|
struct ldap_search_state *state = search->private;
|
||||||
@@ -3501,8 +3500,7 @@ static BOOL ldapsam_search_next_entry(struct pdb_methods *methods,
|
|||||||
return True;
|
return True;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ldapsam_search_end(struct pdb_methods *methods,
|
static void ldapsam_search_end(struct pdb_search *search)
|
||||||
struct pdb_search *search)
|
|
||||||
{
|
{
|
||||||
struct ldap_search_state *state = search->private;
|
struct ldap_search_state *state = search->private;
|
||||||
int rc;
|
int rc;
|
||||||
@@ -3656,6 +3654,8 @@ static BOOL ldapsam_search_users(struct pdb_methods *methods,
|
|||||||
}
|
}
|
||||||
|
|
||||||
search->private = state;
|
search->private = state;
|
||||||
|
search->next_entry = ldapsam_search_next_entry;
|
||||||
|
search->search_end = ldapsam_search_end;
|
||||||
|
|
||||||
return ldapsam_search_firstpage(search);
|
return ldapsam_search_firstpage(search);
|
||||||
}
|
}
|
||||||
@@ -3761,6 +3761,8 @@ static BOOL ldapsam_search_grouptype(struct pdb_methods *methods,
|
|||||||
}
|
}
|
||||||
|
|
||||||
search->private = state;
|
search->private = state;
|
||||||
|
search->next_entry = ldapsam_search_next_entry;
|
||||||
|
search->search_end = ldapsam_search_end;
|
||||||
|
|
||||||
return ldapsam_search_firstpage(search);
|
return ldapsam_search_firstpage(search);
|
||||||
}
|
}
|
||||||
@@ -3845,11 +3847,6 @@ static NTSTATUS pdb_init_ldapsam_common(PDB_CONTEXT *pdb_context, PDB_METHODS **
|
|||||||
(*pdb_method)->enum_group_members = ldapsam_enum_group_members;
|
(*pdb_method)->enum_group_members = ldapsam_enum_group_members;
|
||||||
(*pdb_method)->enum_group_memberships = ldapsam_enum_group_memberships;
|
(*pdb_method)->enum_group_memberships = ldapsam_enum_group_memberships;
|
||||||
(*pdb_method)->lookup_rids = ldapsam_lookup_rids;
|
(*pdb_method)->lookup_rids = ldapsam_lookup_rids;
|
||||||
(*pdb_method)->search_users = ldapsam_search_users;
|
|
||||||
(*pdb_method)->search_groups = ldapsam_search_groups;
|
|
||||||
(*pdb_method)->search_aliases = ldapsam_search_aliases;
|
|
||||||
(*pdb_method)->search_next_entry = ldapsam_search_next_entry;
|
|
||||||
(*pdb_method)->search_end = ldapsam_search_end;
|
|
||||||
|
|
||||||
/* TODO: Setup private data and free */
|
/* TODO: Setup private data and free */
|
||||||
|
|
||||||
@@ -3941,6 +3938,9 @@ NTSTATUS pdb_init_ldapsam(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, co
|
|||||||
(*pdb_method)->del_aliasmem = ldapsam_del_aliasmem;
|
(*pdb_method)->del_aliasmem = ldapsam_del_aliasmem;
|
||||||
(*pdb_method)->enum_aliasmem = ldapsam_enum_aliasmem;
|
(*pdb_method)->enum_aliasmem = ldapsam_enum_aliasmem;
|
||||||
(*pdb_method)->enum_alias_memberships = ldapsam_alias_memberships;
|
(*pdb_method)->enum_alias_memberships = ldapsam_alias_memberships;
|
||||||
|
(*pdb_method)->search_users = ldapsam_search_users;
|
||||||
|
(*pdb_method)->search_groups = ldapsam_search_groups;
|
||||||
|
(*pdb_method)->search_aliases = ldapsam_search_aliases;
|
||||||
|
|
||||||
ldap_state = (*pdb_method)->private_data;
|
ldap_state = (*pdb_method)->private_data;
|
||||||
ldap_state->schema_ver = SCHEMAVER_SAMBASAMACCOUNT;
|
ldap_state->schema_ver = SCHEMAVER_SAMBASAMACCOUNT;
|
||||||
|
|||||||
Reference in New Issue
Block a user