mirror of
https://github.com/samba-team/samba.git
synced 2025-01-11 05:18:09 +03:00
r22204: Workaround to quickly close bug #4508
This hack makes thing work, but we will need to try again to make the getpw* calls fully async, that's the real fix.
This commit is contained in:
parent
6b0a8cbbb8
commit
2552859b3d
@ -84,6 +84,24 @@ static struct idmap_alloc_methods *get_alloc_methods(struct idmap_alloc_backend
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* part of a quick hack to avoid loops, need to be sorted out correctly later on */
|
||||
static BOOL idmap_in_own_child;
|
||||
|
||||
static BOOL idmap_is_in_own_child(void)
|
||||
{
|
||||
return idmap_in_own_child;
|
||||
}
|
||||
|
||||
void reset_idmap_in_own_child(void)
|
||||
{
|
||||
idmap_in_own_child = False;
|
||||
}
|
||||
|
||||
void set_idmap_in_own_child(void)
|
||||
{
|
||||
idmap_in_own_child = True;
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
Allow a module to register itself as a method.
|
||||
**********************************************************************/
|
||||
@ -801,12 +819,17 @@ static NTSTATUS idmap_new_mapping(TALLOC_CTX *ctx, struct id_map *map)
|
||||
if ( ! NT_STATUS_IS_OK(ret)) {
|
||||
return NT_STATUS_NONE_MAPPED;
|
||||
}
|
||||
|
||||
/* by default calls to winbindd are disabled
|
||||
the following call will not recurse so this is safe */
|
||||
winbind_on();
|
||||
wbret = winbind_lookup_sid(ctx, map->sid, &domname, &name, &sid_type);
|
||||
winbind_off();
|
||||
|
||||
/* quick hack to make things work, will need proper fix later on */
|
||||
if (idmap_is_in_own_child()) {
|
||||
/* by default calls to winbindd are disabled
|
||||
the following call will not recurse so this is safe */
|
||||
winbind_on();
|
||||
wbret = winbind_lookup_sid(ctx, map->sid, &domname, &name, &sid_type);
|
||||
winbind_off();
|
||||
} else {
|
||||
wbret = winbindd_lookup_name_by_sid(ctx, map->sid, &domname, &name, &sid_type);
|
||||
}
|
||||
|
||||
/* check if this is a valid SID and then map it */
|
||||
if (wbret) {
|
||||
@ -1395,3 +1418,4 @@ char *idmap_fetch_secret(const char *backend, bool alloc,
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1010,6 +1010,9 @@ int main(int argc, char **argv, char **envp)
|
||||
|
||||
namecache_enable();
|
||||
|
||||
/* quick hack to avoid a loop in idmap, proper fix later */
|
||||
reset_idmap_in_own_child();
|
||||
|
||||
/* Winbind daemon initialisation */
|
||||
|
||||
if ( ! NT_STATUS_IS_OK(idmap_init_cache()) ) {
|
||||
|
@ -921,6 +921,9 @@ static BOOL fork_domain_child(struct winbindd_child *child)
|
||||
child);
|
||||
}
|
||||
|
||||
/* quick hack to avoid a loop in idmap, proper fix later */
|
||||
set_idmap_in_own_child();
|
||||
|
||||
while (1) {
|
||||
|
||||
int ret;
|
||||
|
Loading…
Reference in New Issue
Block a user