bug in source3/winbindd/winbindd_sids_to_xids.c
authorHerb Lewis <hlewis@panasas.com>
Fri, 10 Jun 2011 06:17:11 +0000 (23:17 -0700)
committerKarolin Seeger <kseeger@samba.org>
Tue, 14 Jun 2011 17:44:25 +0000 (19:44 +0200)
I'm having trouble getting my system setup to do submits right now but
I discovered a bug in the subject file that causes winbindd lookup sids
command to assign incorrect unix ids. The change to sid_peek_rid fixes
the case where you call lookup sids with sids s1 s2 s3 which cause them
to be cached. then call with s1 s2 s4 and s4 will get the unix id of s1.

The other change fixes the case where a sid that was not translated
gets a value returned instead of being listed as unmapped.

Could someone review this and push to master and 3.6 for me?

Fix bug #8216 (winbind returns wrong results with sids2xids).

source3/winbindd/winbindd_sids_to_xids.c

index 68616fa5b889ba33f7da6c453301ff7b8d7e8742..9c38b5a2a9a5fcc44db2360c9f2c00f0e9c95358 100644 (file)
@@ -201,7 +201,7 @@ static void winbindd_sids_to_xids_lookupsids_done(struct tevent_req *subreq)
                        break;
                };
                t->domain_index = n->sid_index;
-               sid_peek_rid(&state->sids[i], &t->rid);
+               sid_peek_rid(&state->non_cached[i], &t->rid);
                t->unix_id = (uint64_t)-1;
        }
 
@@ -268,6 +268,9 @@ NTSTATUS winbindd_sids_to_xids_recv(struct tevent_req *req,
                        }
                } else {
                        unix_id = state->ids.ids[num_non_cached].unix_id;
+                       if (unix_id == -1) {
+                               found = false;
+                       }
                        switch(state->ids.ids[num_non_cached].type) {
                        case WBC_ID_TYPE_UID:
                                type = 'U';