summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Schneider <asn@samba.org>2013-04-05 14:07:37 +0200
committerGünther Deschner <gd@samba.org>2013-04-09 14:34:38 +0200
commitb7c0330b7429ce1b9cda8b1c2446b3a21cbd29db (patch)
tree068616f2662f60c59f41c15db2c9011e080ab6e7
parent243278a2c5ec29c153fa7d66678452a97e6edbc0 (diff)
downloadsamba-b7c0330b7429ce1b9cda8b1c2446b3a21cbd29db.tar.gz
samba-b7c0330b7429ce1b9cda8b1c2446b3a21cbd29db.tar.bz2
samba-b7c0330b7429ce1b9cda8b1c2446b3a21cbd29db.zip
BUG 9139: Fix the username map optimization.
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 <asn@samba.org> Reviewed-by: Günther Deschner <gd@samba.org>
-rw-r--r--source3/auth/user_util.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/source3/auth/user_util.c b/source3/auth/user_util.c
index 4842192051..082c885f7a 100644
--- a/source3/auth/user_util.c
+++ b/source3/auth/user_util.c
@@ -427,12 +427,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;
}