summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
Diffstat (limited to 'source3')
-rw-r--r--source3/utils/net_rpc.c60
1 files changed, 22 insertions, 38 deletions
diff --git a/source3/utils/net_rpc.c b/source3/utils/net_rpc.c
index 0d47b653c3..2554ded3c7 100644
--- a/source3/utils/net_rpc.c
+++ b/source3/utils/net_rpc.c
@@ -4559,11 +4559,9 @@ static bool get_user_sids(const char *domain, const char *user, NT_USER_TOKEN *t
static bool get_user_tokens(int *num_tokens, struct user_token **user_tokens)
{
- struct winbindd_request request;
- struct winbindd_response response;
- const char *extra_data;
- char *name;
- int i;
+ wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
+ uint32_t i, num_users;
+ const char **users;
struct user_token *result;
TALLOC_CTX *frame = NULL;
@@ -4571,58 +4569,43 @@ static bool get_user_tokens(int *num_tokens, struct user_token **user_tokens)
(opt_target_workgroup == NULL)) {
d_fprintf(stderr, "winbind use default domain = yes set, "
"please specify a workgroup\n");
- return False;
+ return false;
}
/* Send request to winbind daemon */
- ZERO_STRUCT(request);
- ZERO_STRUCT(response);
-
- if (winbindd_request_response(WINBINDD_LIST_USERS, &request, &response) !=
- NSS_STATUS_SUCCESS)
- return False;
-
- /* Look through extra data */
-
- if (!response.extra_data.data)
- return False;
-
- extra_data = (const char *)response.extra_data.data;
- *num_tokens = 0;
-
- frame = talloc_stackframe();
- while(next_token_talloc(frame, &extra_data, &name, ",")) {
- *num_tokens += 1;
+ wbc_status = wbcListUsers(NULL, &num_users, &users);
+ if (!WBC_ERROR_IS_OK(wbc_status)) {
+ DEBUG(1, ("winbind could not list users: %s\n",
+ wbcErrorString(wbc_status)));
+ return false;
}
- result = SMB_MALLOC_ARRAY(struct user_token, *num_tokens);
+ result = SMB_MALLOC_ARRAY(struct user_token, num_users);
if (result == NULL) {
DEBUG(1, ("Could not malloc sid array\n"));
- TALLOC_FREE(frame);
- return False;
+ wbcFreeMemory(users);
+ return false;
}
- extra_data = (const char *)response.extra_data.data;
- i=0;
-
- while(next_token_talloc(frame, &extra_data, &name, ",")) {
+ frame = talloc_stackframe();
+ for (i=0; i < num_users; i++) {
fstring domain, user;
char *p;
- fstrcpy(result[i].name, name);
+ fstrcpy(result[i].name, users[i]);
- p = strchr(name, *lp_winbind_separator());
+ p = strchr(users[i], *lp_winbind_separator());
- DEBUG(3, ("%s\n", name));
+ DEBUG(3, ("%s\n", users[i]));
if (p == NULL) {
fstrcpy(domain, opt_target_workgroup);
- fstrcpy(user, name);
+ fstrcpy(user, users[i]);
} else {
*p++ = '\0';
- fstrcpy(domain, name);
+ fstrcpy(domain, users[i]);
strupper_m(domain);
fstrcpy(user, p);
}
@@ -4631,11 +4614,12 @@ static bool get_user_tokens(int *num_tokens, struct user_token **user_tokens)
i+=1;
}
TALLOC_FREE(frame);
- SAFE_FREE(response.extra_data.data);
+ wbcFreeMemory(users);
+ *num_tokens = num_users;
*user_tokens = result;
- return True;
+ return true;
}
static bool get_user_tokens_from_file(FILE *f,