]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
idmap_hash: return ID_REQUIRE_TYPE only if there's a chance to get a mapping later
authorStefan Metzmacher <metze@samba.org>
Thu, 21 Mar 2019 15:54:31 +0000 (16:54 +0100)
committerStefan Metzmacher <metze@samba.org>
Fri, 10 Mar 2023 10:38:37 +0000 (10:38 +0000)
If we are going to return ID_UNMAPPED later anyway, there's no need to
defer that decision by returning ID_REQUIRE_TYPE first.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=15319

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/winbindd/idmap_hash/idmap_hash.c

index 726338473ea77c81e6639047408ddb54e5375384..ed20a5e8bedc82860683de77bf4cd4370a89e4dd 100644 (file)
@@ -261,6 +261,24 @@ static NTSTATUS idmap_hash_sid_to_id(struct sid_hash_table *hashed_domains,
        uint32_t rid;
        uint32_t h_domain, h_rid;
 
+       id->status = ID_UNMAPPED;
+
+       sid_copy(&sid, id->sid);
+       sid_split_rid(&sid, &rid);
+
+       h_domain = hash_domain_sid(&sid);
+       h_rid = hash_rid(rid);
+
+       /* Check that both hashes are non-zero*/
+       if (h_domain == 0) {
+               /* keep ID_UNMAPPED */
+               return NT_STATUS_OK;
+       }
+       if (h_rid == 0) {
+               /* keep ID_UNMAPPED */
+               return NT_STATUS_OK;
+       }
+
        if (id->xid.type == ID_TYPE_NOT_SPECIFIED) {
                /*
                 * idmap_hash used to bounce back the requested type,
@@ -280,24 +298,6 @@ static NTSTATUS idmap_hash_sid_to_id(struct sid_hash_table *hashed_domains,
                return NT_STATUS_OK;
        }
 
-       id->status = ID_UNMAPPED;
-
-       sid_copy(&sid, id->sid);
-       sid_split_rid(&sid, &rid);
-
-       h_domain = hash_domain_sid(&sid);
-       h_rid = hash_rid(rid);
-
-       /* Check that both hashes are non-zero*/
-       if (h_domain == 0) {
-               /* keep ID_UNMAPPED */
-               return NT_STATUS_OK;
-       }
-       if (h_rid == 0) {
-               /* keep ID_UNMAPPED */
-               return NT_STATUS_OK;
-       }
-
        /*
         * idmap_hash used to bounce back the requested type,
         * which was ID_TYPE_UID, ID_TYPE_GID or