summaryrefslogtreecommitdiffstats
path: root/source3/winbindd
diff options
context:
space:
mode:
authorAndreas Schneider <asn@samba.org>2011-11-14 10:01:31 +0100
committerAndreas Schneider <asn@cryptomilk.org>2011-11-15 16:52:04 +0100
commit10b285ccc29b106f164a6c18116e237634867717 (patch)
tree308eae798063afcec2575b01111d595ae6b3718c /source3/winbindd
parent2fe5cd20b463cce5cef4c2376de817bffd78e457 (diff)
downloadsamba-10b285ccc29b106f164a6c18116e237634867717.tar.gz
samba-10b285ccc29b106f164a6c18116e237634867717.tar.xz
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
Diffstat (limited to 'source3/winbindd')
-rw-r--r--source3/winbindd/wb_next_pwent.c20
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;