diff options
author | Jeremy Allison <jra@samba.org> | 2007-05-12 01:08:09 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2007-05-12 01:08:09 +0000 |
commit | fb94792fbcc4bedc0cb8d7070219a3dde96ec61c (patch) | |
tree | c2c41ca29d134c6ed105d01eee1998dffe91af84 | |
parent | e030c0e0b7fc84b041e4f9b9f8f11b54e843a9ce (diff) | |
download | samba-fb94792fbcc4bedc0cb8d7070219a3dde96ec61c.tar.gz samba-fb94792fbcc4bedc0cb8d7070219a3dde96ec61c.tar.xz samba-fb94792fbcc4bedc0cb8d7070219a3dde96ec61c.zip |
r22812: Fix bug #3024 (and also the group varient). Patch from
Johann Hanne <jhml@gmx.net> and also Kaya Bekiro?lu <kaya.bekiroglu@isilon.com>
Jeremy.
-rw-r--r-- | source/nsswitch/winbindd_group.c | 9 | ||||
-rw-r--r-- | source/nsswitch/winbindd_user.c | 14 |
2 files changed, 17 insertions, 6 deletions
diff --git a/source/nsswitch/winbindd_group.c b/source/nsswitch/winbindd_group.c index 21ad73a70e1..1500324583d 100644 --- a/source/nsswitch/winbindd_group.c +++ b/source/nsswitch/winbindd_group.c @@ -902,7 +902,7 @@ void winbindd_getgrent(struct winbindd_cli_state *state) { struct getent_state *ent; struct winbindd_gr *group_list = NULL; - int num_groups, group_list_ndx = 0, i, gr_mem_list_len = 0; + int num_groups, group_list_ndx, gr_mem_list_len = 0; char *gr_mem_list = NULL; DEBUG(3, ("[%5lu]: getgrent\n", (unsigned long)state->pid)); @@ -916,6 +916,11 @@ void winbindd_getgrent(struct winbindd_cli_state *state) num_groups = MIN(MAX_GETGRENT_GROUPS, state->request.data.num_entries); + if (num_groups == 0) { + request_error(state); + return; + } + if ((state->response.extra_data.data = SMB_MALLOC_ARRAY(struct winbindd_gr, num_groups)) == NULL) { request_error(state); return; @@ -938,7 +943,7 @@ void winbindd_getgrent(struct winbindd_cli_state *state) /* Start sending back groups */ - for (i = 0; i < num_groups; i++) { + for (group_list_ndx = 0; group_list_ndx < num_groups; ) { struct acct_info *name_list = NULL; fstring domain_group_name; uint32 result; diff --git a/source/nsswitch/winbindd_user.c b/source/nsswitch/winbindd_user.c index 5e1ce8d1370..48b470cdd0d 100644 --- a/source/nsswitch/winbindd_user.c +++ b/source/nsswitch/winbindd_user.c @@ -662,7 +662,7 @@ void winbindd_getpwent(struct winbindd_cli_state *state) { struct getent_state *ent; struct winbindd_pw *user_list; - int num_users, user_list_ndx = 0, i; + int num_users, user_list_ndx; DEBUG(3, ("[%5lu]: getpwent\n", (unsigned long)state->pid)); @@ -676,6 +676,11 @@ void winbindd_getpwent(struct winbindd_cli_state *state) /* Allocate space for returning a chunk of users */ num_users = MIN(MAX_GETPWENT_USERS, state->request.data.num_entries); + + if (num_users == 0) { + request_error(state); + return; + } if ((state->response.extra_data.data = SMB_MALLOC_ARRAY(struct winbindd_pw, num_users)) == NULL) { request_error(state); @@ -697,7 +702,7 @@ void winbindd_getpwent(struct winbindd_cli_state *state) /* Start sending back users */ - for (i = 0; i < num_users; i++) { + for (user_list_ndx = 0; user_list_ndx < num_users; ) { struct getpwent_user *name_list = NULL; uint32 result; @@ -740,8 +745,6 @@ void winbindd_getpwent(struct winbindd_cli_state *state) name_list[ent->sam_entry_index].shell, &user_list[user_list_ndx]); - ent->sam_entry_index++; - /* Add user to return list */ if (result) { @@ -754,6 +757,9 @@ void winbindd_getpwent(struct winbindd_cli_state *state) } else DEBUG(1, ("could not lookup domain user %s\n", name_list[ent->sam_entry_index].name)); + + ent->sam_entry_index++; + } /* Out of domains */ |