s:Fix uid_to_sid mapping when the idmap cache is empty.
authorMichael Adam <obnox@samba.org>
Wed, 1 Oct 2008 06:30:15 +0000 (08:30 +0200)
committerMichael Adam <obnox@samba.org>
Thu, 25 Dec 2008 11:14:02 +0000 (12:14 +0100)
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 <obnox@samba.org>
source3/winbindd/idmap.c

index aaba7e53eed4cef688dc2796107b1fc4dfc03fc2..38cc0d0c0abdeb36df77c2249ffe5c9bd85ea824 100644 (file)
@@ -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);