summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2010-04-03 14:16:19 +0200
committerVolker Lendecke <vl@samba.org>2010-04-19 14:27:18 +0200
commitcafba3d7a772385da36f7571690ba2ce2262cef5 (patch)
treee4a9e6a6fee0adc982d20ce5dc5f6dc78d89cd99
parente80d0ecf8b716ddb1d5bdeeb641bfee10e35c345 (diff)
downloadsamba-cafba3d7a772385da36f7571690ba2ce2262cef5.tar.gz
samba-cafba3d7a772385da36f7571690ba2ce2262cef5.tar.bz2
samba-cafba3d7a772385da36f7571690ba2ce2262cef5.zip
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.
-rw-r--r--nsswitch/winbind_struct_protocol.h3
-rw-r--r--source3/winbindd/winbindd_list_groups.c2
-rw-r--r--source3/winbindd/winbindd_list_users.c2
-rw-r--r--source3/winbindd/winbindd_misc.c2
4 files changed, 8 insertions, 1 deletions
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; i<state->num_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; i<state->num_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) {