]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
r22812: Fix bug #3024 (and also the group varient). Patch from
authorJeremy Allison <jra@samba.org>
Sat, 12 May 2007 01:08:09 +0000 (01:08 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:22:00 +0000 (12:22 -0500)
Johann Hanne <jhml@gmx.net> and also Kaya Bekiro?lu <kaya.bekiroglu@isilon.com>
Jeremy.

source/nsswitch/winbindd_group.c
source/nsswitch/winbindd_user.c

index 21ad73a70e1380c2e12983b692b74ab21ffcdab8..1500324583d4b95e933544d2c8eb9c5178eb1cf1 100644 (file)
@@ -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;
index 5e1ce8d13700d62c8aebe4d70dfdd329319917ff..48b470cdd0dae54f012e23ed95d69e38062adee4 100644 (file)
@@ -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 */