From: Michael Adam Date: Wed, 1 Oct 2008 06:30:15 +0000 (+0200) Subject: s:Fix uid_to_sid mapping when the idmap cache is empty. X-Git-Url: http://git.samba.org/?a=commitdiff_plain;h=9a9b64dbdfce4414ada22d4f882c8c757b5813e1;p=metze%2Fsamba%2Fwip.git s: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 Signed-off-by: Michael Adam --- diff --git a/source3/winbindd/idmap.c b/source3/winbindd/idmap.c index aaba7e53eed4..38cc0d0c0abd 100644 --- a/source3/winbindd/idmap.c +++ b/source3/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);