From 73d73ce6805a50b230c63b5e0fcb27cfb75699f2 Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Fri, 5 Apr 2013 14:07:37 +0200 Subject: [PATCH 1/2] BUG 9139: Fix the username map optimization. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If we successfully map a user. We call set_last_from_to(user_in, unixname); in the while loop reading the map file. After a successfull map we don't stop and continue the loop to check all other mappings in the username mapfile. But when we hit the end of the file and leave the loop we call: set_last_from_to(user_in, user_in); This overwrites the successful mapping, and the next time we call map_username() we skip the username and no mapping is done. Signed-off-by: Andreas Schneider Reviewed-by: Günther Deschner --- source3/auth/user_util.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/source3/auth/user_util.c b/source3/auth/user_util.c index d982c74..0ef0eb5 100644 --- a/source3/auth/user_util.c +++ b/source3/auth/user_util.c @@ -425,12 +425,16 @@ bool map_username(TALLOC_CTX *ctx, const char *user_in, char **p_user_out) x_fclose(f); /* - * Setup the last_from and last_to as an optimization so + * If we didn't successfully map a user in the loop above, + * setup the last_from and last_to as an optimization so * that we don't scan the file again for the same user. */ - - set_last_from_to(user_in, user_in); - store_map_in_gencache(ctx, user_in, user_in); + if (!mapped_user) { + DEBUG(8, ("The user '%s' has no mapping. " + "Skip it next time.\n", user_in)); + set_last_from_to(user_in, user_in); + store_map_in_gencache(ctx, user_in, user_in); + } return mapped_user; } -- 1.8.2