diff options
author | Andreas Schneider <asn@samba.org> | 2011-11-14 10:01:31 +0100 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2011-11-15 16:52:04 +0100 |
commit | 10b285ccc29b106f164a6c18116e237634867717 (patch) | |
tree | 308eae798063afcec2575b01111d595ae6b3718c | |
parent | 2fe5cd20b463cce5cef4c2376de817bffd78e457 (diff) | |
download | samba-10b285ccc29b106f164a6c18116e237634867717.tar.gz samba-10b285ccc29b106f164a6c18116e237634867717.tar.bz2 samba-10b285ccc29b106f164a6c18116e237634867717.zip |
s3-winbind: Don't fail on users without a uid.
This fixes bug #8608.
If you join samba with idmap_ad backend to an AD. When you try to
enumerate users with 'getent passwd' and the user doesn't have a uid
set, then getent is aborted cause of NT_STATUS_NONE_MAPPED. If we can't
map a user we should not stop but continue enumerating users.
This normally happens with the default user 'krbtgt' with idmap_ad but
could also happen with other backends.
Autobuild-User: Andreas Schneider <asn@cryptomilk.org>
Autobuild-Date: Tue Nov 15 16:52:04 CET 2011 on sn-devel-104
-rw-r--r-- | source3/winbindd/wb_next_pwent.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/source3/winbindd/wb_next_pwent.c b/source3/winbindd/wb_next_pwent.c index da4754cc9f..a52a566e7b 100644 --- a/source3/winbindd/wb_next_pwent.c +++ b/source3/winbindd/wb_next_pwent.c @@ -148,7 +148,25 @@ static void wb_next_pwent_fill_done(struct tevent_req *subreq) status = wb_fill_pwent_recv(subreq); TALLOC_FREE(subreq); - if (tevent_req_nterror(req, status)) { + /* + * When you try to enumerate users with 'getent passwd' and the user + * doesn't have a uid set we should just move on. + */ + if (NT_STATUS_EQUAL(status, NT_STATUS_NONE_MAPPED)) { + state->gstate->next_user += 1; + + subreq = wb_fill_pwent_send(state, + state->ev, + &state->gstate->users[state->gstate->next_user], + state->pw); + if (tevent_req_nomem(subreq, req)) { + tevent_req_post(req, state->ev); + return; + } + tevent_req_set_callback(subreq, wb_next_pwent_fill_done, req); + + return; + } else if (tevent_req_nterror(req, status)) { return; } state->gstate->next_user += 1; |