mirror of
https://github.com/samba-team/samba.git
synced 2025-02-03 13:47:25 +03:00
r395: BUG 1232: patch from landonf@opendarwin.org (Landon Fuller) to fix
user/group enumeration on systems whose libc does not call setgrent() before trying to enumerate users (i.e. FreeBSD 5.2)
This commit is contained in:
parent
6fcb8e5a48
commit
8106d80972
@ -46,6 +46,8 @@ struct winbindd_cli_state {
|
||||
|
||||
struct winbindd_request request; /* Request from client */
|
||||
struct winbindd_response response; /* Respose to client */
|
||||
BOOL getpwent_initialized; /* Has getpwent_state been initialized? */
|
||||
BOOL getgrent_initialized; /* Has getgrent_state been initialized? */
|
||||
struct getent_state *getpwent_state; /* State for getpwent() */
|
||||
struct getent_state *getgrent_state; /* State for getgrent() */
|
||||
};
|
||||
|
@ -472,6 +472,8 @@ enum winbindd_result winbindd_setgrent(struct winbindd_cli_state *state)
|
||||
DLIST_ADD(state->getgrent_state, domain_state);
|
||||
}
|
||||
|
||||
state->getgrent_initialized = True;
|
||||
|
||||
return WINBINDD_OK;
|
||||
}
|
||||
|
||||
@ -482,6 +484,7 @@ enum winbindd_result winbindd_endgrent(struct winbindd_cli_state *state)
|
||||
DEBUG(3, ("[%5lu]: endgrent\n", (unsigned long)state->pid));
|
||||
|
||||
free_getent_state(state->getgrent_state);
|
||||
state->getgrent_initialized = False;
|
||||
state->getgrent_state = NULL;
|
||||
|
||||
return WINBINDD_OK;
|
||||
@ -632,6 +635,9 @@ enum winbindd_result winbindd_getgrent(struct winbindd_cli_state *state)
|
||||
|
||||
group_list = (struct winbindd_gr *)state->response.extra_data;
|
||||
|
||||
if (!state->getgrent_initialized)
|
||||
winbindd_setgrent(state);
|
||||
|
||||
if (!(ent = state->getgrent_state))
|
||||
return WINBINDD_ERROR;
|
||||
|
||||
|
@ -360,6 +360,8 @@ enum winbindd_result winbindd_setpwent(struct winbindd_cli_state *state)
|
||||
DLIST_ADD(state->getpwent_state, domain_state);
|
||||
}
|
||||
|
||||
state->getpwent_initialized = True;
|
||||
|
||||
return WINBINDD_OK;
|
||||
}
|
||||
|
||||
@ -370,6 +372,7 @@ enum winbindd_result winbindd_endpwent(struct winbindd_cli_state *state)
|
||||
DEBUG(3, ("[%5lu]: endpwent\n", (unsigned long)state->pid));
|
||||
|
||||
free_getent_state(state->getpwent_state);
|
||||
state->getpwent_initialized = False;
|
||||
state->getpwent_state = NULL;
|
||||
|
||||
return WINBINDD_OK;
|
||||
@ -501,6 +504,9 @@ enum winbindd_result winbindd_getpwent(struct winbindd_cli_state *state)
|
||||
sizeof(struct winbindd_pw));
|
||||
|
||||
user_list = (struct winbindd_pw *)state->response.extra_data;
|
||||
|
||||
if (!state->getpwent_initialized)
|
||||
winbindd_setpwent(state);
|
||||
|
||||
if (!(ent = state->getpwent_state))
|
||||
return WINBINDD_ERROR;
|
||||
|
Loading…
x
Reference in New Issue
Block a user