dovecot-2.2: *-login: Added %{orig_user}, %{orig_username} and %...
dovecot at dovecot.org
dovecot at dovecot.org
Sun Sep 22 01:40:42 EEST 2013
details: http://hg.dovecot.org/dovecot-2.2/rev/a32eea97afc1
changeset: 16802:a32eea97afc1
user: Timo Sirainen <tss at iki.fi>
date: Sun Sep 22 01:40:11 2013 +0300
description:
*-login: Added %{orig_user}, %{orig_username} and %{orig_domain} variables.
The original username is what the client sent to server before any
translations.
diffstat:
src/auth/auth-request-handler.c | 5 +++++
src/login-common/client-common.c | 18 ++++++++++++++++++
src/login-common/client-common.h | 2 +-
src/login-common/sasl-server.c | 9 +++++++++
4 files changed, 33 insertions(+), 1 deletions(-)
diffs (105 lines):
diff -r 56be613e8ece -r a32eea97afc1 src/auth/auth-request-handler.c
--- a/src/auth/auth-request-handler.c Sun Sep 22 01:09:32 2013 +0300
+++ b/src/auth/auth-request-handler.c Sun Sep 22 01:40:11 2013 +0300
@@ -173,6 +173,11 @@
auth_fields_append(request->extra_fields, dest,
AUTH_FIELD_FLAG_HIDDEN, 0);
+ if (strcmp(request->original_username, request->user) != 0) {
+ auth_str_add_keyvalue(dest, "original_user",
+ request->original_username);
+ }
+
if (!request->auth_only &&
auth_fields_exists(request->extra_fields, "proxy")) {
/* we're proxying */
diff -r 56be613e8ece -r a32eea97afc1 src/login-common/client-common.c
--- a/src/login-common/client-common.c Sun Sep 22 01:09:32 2013 +0300
+++ b/src/login-common/client-common.c Sun Sep 22 01:40:11 2013 +0300
@@ -272,6 +272,7 @@
i_free(client->proxy_user);
i_free(client->proxy_master_user);
i_free(client->virtual_user);
+ i_free(client->virtual_user_orig);
i_free(client->auth_mech_name);
i_free(client->master_data_prefix);
pool_unref(&client->pool);
@@ -453,6 +454,7 @@
{ 'u', NULL, "user" },
{ 'n', NULL, "username" },
{ 'd', NULL, "domain" },
+
{ 's', NULL, "service" },
{ 'h', NULL, "home" },
{ 'l', NULL, "lip" },
@@ -469,6 +471,9 @@
{ '\0', NULL, "real_rip" },
{ '\0', NULL, "real_lport" },
{ '\0', NULL, "real_rport" },
+ { '\0', NULL, "orig_user" },
+ { '\0', NULL, "orig_username" },
+ { '\0', NULL, "orig_domain" },
{ '\0', NULL, NULL }
};
@@ -522,6 +527,19 @@
tab[16].value = net_ip2addr(&client->real_remote_ip);
tab[17].value = dec2str(client->real_local_port);
tab[18].value = dec2str(client->real_remote_port);
+ if (client->virtual_user_orig == NULL) {
+ tab[19].value = tab[0].value;
+ tab[20].value = tab[1].value;
+ tab[21].value = tab[2].value;
+ } else {
+ tab[19].value = client->virtual_user_orig;
+ tab[20].value = t_strcut(client->virtual_user_orig, '@');
+ tab[21].value = strchr(client->virtual_user_orig, '@');
+ if (tab[21].value != NULL) tab[21].value++;
+
+ for (i = 0; i < 3; i++)
+ tab[i].value = str_sanitize(tab[i].value, 80);
+ }
return tab;
}
diff -r 56be613e8ece -r a32eea97afc1 src/login-common/client-common.h
--- a/src/login-common/client-common.h Sun Sep 22 01:09:32 2013 +0300
+++ b/src/login-common/client-common.h Sun Sep 22 01:40:11 2013 +0300
@@ -141,7 +141,7 @@
unsigned int auth_attempts, auth_successes;
pid_t mail_pid;
- char *virtual_user;
+ char *virtual_user, *virtual_user_orig;
unsigned int destroyed:1;
unsigned int input_blocked:1;
unsigned int login_success:1;
diff -r 56be613e8ece -r a32eea97afc1 src/login-common/sasl-server.c
--- a/src/login-common/sasl-server.c Sun Sep 22 01:09:32 2013 +0300
+++ b/src/login-common/sasl-server.c Sun Sep 22 01:40:11 2013 +0300
@@ -239,7 +239,11 @@
for (i = 0; args[i] != NULL; i++) {
if (strncmp(args[i], "user=", 5) == 0) {
i_free(client->virtual_user);
+ i_free_and_null(client->virtual_user_orig);
client->virtual_user = i_strdup(args[i] + 5);
+ } else if (strncmp(args[i], "original_user=", 14) == 0) {
+ i_free(client->virtual_user_orig);
+ client->virtual_user_orig = i_strdup(args[i] + 14);
} else if (strcmp(args[i], "nologin") == 0 ||
strcmp(args[i], "proxy") == 0) {
/* user can't login */
@@ -271,8 +275,13 @@
for (i = 0; args[i] != NULL; i++) {
if (strncmp(args[i], "user=", 5) == 0) {
i_free(client->virtual_user);
+ i_free_and_null(client->virtual_user_orig);
client->virtual_user =
i_strdup(args[i] + 5);
+ } else if (strncmp(args[i], "original_user=", 14) == 0) {
+ i_free(client->virtual_user_orig);
+ client->virtual_user_orig =
+ i_strdup(args[i] + 14);
}
}
}
More information about the dovecot-cvs
mailing list