From cafba3d7a772385da36f7571690ba2ce2262cef5 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Sat, 3 Apr 2010 14:16:19 +0200 Subject: winbindd: Fill in num_entries where available The server implementation of WINBINDD_LIST_USERS, WINBINDD_LIST_GROUPS and WINBINDD_LIST_TRUSTDOM knows the number of entries returned. Bump up the version number so that a newer lib does not rely on something an older winbind does not do. --- nsswitch/winbind_struct_protocol.h | 3 ++- source3/winbindd/winbindd_list_groups.c | 2 ++ source3/winbindd/winbindd_list_users.c | 2 ++ source3/winbindd/winbindd_misc.c | 2 ++ 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/nsswitch/winbind_struct_protocol.h b/nsswitch/winbind_struct_protocol.h index 70fc477039..b0f99a30a5 100644 --- a/nsswitch/winbind_struct_protocol.h +++ b/nsswitch/winbind_struct_protocol.h @@ -50,8 +50,9 @@ typedef char fstring[FSTRING_LEN]; * 22: added WINBINDD_PING_DC * 23: added session_key to ccache_ntlm_auth response * added WINBINDD_CCACHE_SAVE + * 24: Fill in num_entries WINBINDD_LIST_USERS and WINBINDD_LIST_GROUPS */ -#define WINBIND_INTERFACE_VERSION 23 +#define WINBIND_INTERFACE_VERSION 24 /* Have to deal with time_t being 4 or 8 bytes due to structure alignment. On a 64bit Linux box, we have to support a constant structure size diff --git a/source3/winbindd/winbindd_list_groups.c b/source3/winbindd/winbindd_list_groups.c index 3c9ff20b85..7331e9da1e 100644 --- a/source3/winbindd/winbindd_list_groups.c +++ b/source3/winbindd/winbindd_list_groups.c @@ -161,6 +161,7 @@ NTSTATUS winbindd_list_groups_recv(struct tevent_req *req, } len = 0; + response->data.num_entries = 0; for (i=0; inum_domains; i++) { struct winbindd_list_groups_domstate *d = &state->domains[i]; @@ -171,6 +172,7 @@ NTSTATUS winbindd_list_groups_recv(struct tevent_req *req, True); len += strlen(name)+1; } + response->data.num_entries += d->groups.num_principals; } result = talloc_array(response, char, len+1); diff --git a/source3/winbindd/winbindd_list_users.c b/source3/winbindd/winbindd_list_users.c index 19232b7b11..124e71b039 100644 --- a/source3/winbindd/winbindd_list_users.c +++ b/source3/winbindd/winbindd_list_users.c @@ -161,6 +161,7 @@ NTSTATUS winbindd_list_users_recv(struct tevent_req *req, } len = 0; + response->data.num_entries = 0; for (i=0; inum_domains; i++) { struct winbindd_list_users_domstate *d = &state->domains[i]; @@ -171,6 +172,7 @@ NTSTATUS winbindd_list_users_recv(struct tevent_req *req, True); len += strlen(name)+1; } + response->data.num_entries += d->users.num_userinfos; } result = talloc_array(response, char, len+1); diff --git a/source3/winbindd/winbindd_misc.c b/source3/winbindd/winbindd_misc.c index ac8f1a7dfd..e6be28079d 100644 --- a/source3/winbindd/winbindd_misc.c +++ b/source3/winbindd/winbindd_misc.c @@ -130,6 +130,8 @@ void winbindd_list_trusted_domains(struct winbindd_cli_state *state) is_online ? "Online" : "Offline" ); } + state->response->data.num_entries = num_domains; + extra_data_len = strlen(extra_data); if (extra_data_len > 0) { -- cgit