idmap_cache: Only touch "sid" on success in find_xid_to_sid
authorVolker Lendecke <vl@samba.org>
Tue, 26 Feb 2019 11:46:39 +0000 (12:46 +0100)
committerKarolin Seeger <kseeger@samba.org>
Tue, 12 Mar 2019 11:25:42 +0000 (11:25 +0000)
Why? This makes the negative mapping condition (is_null_sid) more
explicit in the code.

The callers in lookup_sid initialized "psid" anyway before, and the ones
in wb_xids2sids now do as well. This is more in line with other APIs we
have: Only touch output parameters if you have something to say.

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Christof Schmitt <cs@samba.org>
Bug: https://bugzilla.samba.org/show_bug.cgi?id=13813
(cherry picked from commit 4faf3e9f6da7515fc263d79f77226d105c2f8524)

source3/lib/idmap_cache.c
source3/winbindd/wb_xids2sids.c

index 0ec23df6a05726652bd8ef69ade1cedae6611a67..cf63a229da5eac9dab7c667171ba7448517d0e98 100644 (file)
@@ -201,13 +201,11 @@ static void idmap_cache_xid2sid_parser(time_t timeout, DATA_BLOB blob,
                (struct idmap_cache_xid2sid_state *)private_data;
        char *value;
 
-       ZERO_STRUCTP(state->sid);
-       state->ret = false;
-
        if ((blob.length == 0) || (blob.data[blob.length-1] != 0)) {
                /*
                 * Not a string, can't be a valid mapping
                 */
+               state->ret = false;
                return;
        }
 
@@ -217,6 +215,7 @@ static void idmap_cache_xid2sid_parser(time_t timeout, DATA_BLOB blob,
                /*
                 * Return NULL SID, see comment to uid2sid
                 */
+               *state->sid = (struct dom_sid) {0};
                state->ret = true;
        } else {
                state->ret = string_to_sid(state->sid, value);
index 1e251d8cbeb4fb9a35b762c75041e622c5eaeaa0..766092b2664c8da1b9bae1c25453008df7a1ef85 100644 (file)
@@ -462,7 +462,7 @@ struct tevent_req *wb_xids2sids_send(TALLOC_CTX *mem_ctx,
                uint32_t i;
 
                for (i=0; i<num_xids; i++) {
-                       struct dom_sid sid;
+                       struct dom_sid sid = {0};
                        bool ok, expired;
 
                        switch (xids[i].type) {