From 54458d8a41a61989891dc3963a19adb49507f190 Mon Sep 17 00:00:00 2001 From: Michael Adam Date: Wed, 1 Oct 2008 08:30:15 +0200 Subject: [PATCH] Fix uid_to_sid mapping when the idmap cache is empty. This failed for backends other than passed, since idmap_backends_unixid_to_sid() always asked passdb first, which returned Success no matter whether a mapping was found or not. One effect wast that getpwuid failed after "net cache flush". Only after filling the cache with a getpwnam call it succeeded. This fix makes the behaviour of idmap_backends_unixid_to_sid() exactly the same as that of idmap_backends_sid_to_unixid() Michael (cherry picked from commit da7eb5e22e56ea718e393375085cf66a90afafc8) Signed-off-by: Michael Adam (cherry picked from commit d4bc1f8d79929dc1a1d06e92eaf85923a1848e6f) --- source/winbindd/idmap.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/source/winbindd/idmap.c b/source/winbindd/idmap.c index aaba7e53eed..38cc0d0c0ab 100644 --- a/source/winbindd/idmap.c +++ b/source/winbindd/idmap.c @@ -735,14 +735,13 @@ NTSTATUS idmap_backends_unixid_to_sid(const char *domname, struct id_map *id) maps[0] = id; maps[1] = NULL; - /* - * Always give passdb a chance first - */ - - dom = idmap_init_passdb_domain(NULL); - if ((dom != NULL) - && NT_STATUS_IS_OK(dom->methods->unixids_to_sids(dom, maps))) { - return NT_STATUS_OK; + if (sid_check_is_in_builtin(id->sid) + || (sid_check_is_in_our_domain(id->sid))) { + dom = idmap_init_passdb_domain(NULL); + if (dom == NULL) { + return NT_STATUS_NONE_MAPPED; + } + return dom->methods->unixids_to_sids(dom, maps); } dom = idmap_find_domain(domname); -- 2.11.4.GIT