1
0
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:
Simo Sorce 2007-04-12 21:10:06 +00:00 committed by Gerald (Jerry) Carter
parent 6b0a8cbbb8
commit 2552859b3d
3 changed files with 36 additions and 6 deletions

View File

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

View File

@ -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()) ) {

View File

@ -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;