Commit ce55cf1b authored by Gerald Carter's avatar Gerald Carter Committed by Gerald (Jerry) Carter
Browse files

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 used to be commit 8106d8097258eae260ed834399881bf0be9b515b)
parent 37c838b3
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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() */
};
+6 −0
Original line number Diff line number Diff line
@@ -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;

+6 −0
Original line number Diff line number Diff line
@@ -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;
@@ -502,6 +505,9 @@ enum winbindd_result winbindd_getpwent(struct winbindd_cli_state *state)

	user_list = (struct winbindd_pw *)state->response.extra_data;

	if (!state->getpwent_initialized)
		winbindd_setpwent(state);
	
	if (!(ent = state->getpwent_state))
		return WINBINDD_ERROR;