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 */
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);
{ 'u', NULL, "user" },
{ 'n', NULL, "username" },
{ 'd', NULL, "domain" },
+
{ 's', NULL, "service" },
{ 'h', NULL, "home" },
{ 'l', NULL, "lip" },
{ '\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 }
};
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;
}
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 */
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);
}
}
}