Mercurial > dovecot > original-hg > dovecot-1.2
changeset 4108:e1774d677536 HEAD
Added auth_master_user_separator setting which allows giving the master username inside the normal username.
author | Timo Sirainen <timo.sirainen@movial.fi> |
---|---|
date | Mon, 27 Mar 2006 15:54:24 +0300 |
parents | d29677c59dc5 |
children | 988a8ef1deea |
files | dovecot-example.conf src/auth/auth-request.c src/auth/auth.c src/auth/auth.h src/master/auth-process.c src/master/master-settings.c src/master/master-settings.h |
diffstat | 7 files changed, 34 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/dovecot-example.conf Sat Mar 25 13:09:17 2006 +0200 +++ b/dovecot-example.conf Mon Mar 27 15:54:24 2006 +0300 @@ -604,6 +604,13 @@ # that '#' and '/' characters are translated to '@'. #auth_username_translation = +# If you want to allow master users to log in by specifying the master +# username within the normal username string (ie. not using SASL mechanism's +# support for it), you can specify the separator character here. The format +# is then <username><separator><master username>. UW-IMAP uses "*" as the +# separator, so that could be a good choice. +#auth_master_user_separator = + # Username to use for users logging in with ANONYMOUS SASL mechanism #auth_anonymous_username = anonymous
--- a/src/auth/auth-request.c Sat Mar 25 13:09:17 2006 +0200 +++ b/src/auth/auth-request.c Mon Mar 27 15:54:24 2006 +0300 @@ -562,6 +562,8 @@ bool auth_request_set_username(struct auth_request *request, const char *username, const char **error_r) { + const char *p; + if (request->original_username == NULL) { /* the username may change later, but we need to use this username when verifying at least DIGEST-MD5 password */ @@ -573,6 +575,18 @@ return TRUE; } + if (request->auth->master_user_separator != '\0') { + /* check if the username contains a master user */ + p = strchr(username, request->auth->master_user_separator); + if (p != NULL) { + /* it does, set it. */ + if (!auth_request_set_login_username(request, p+1, + error_r)) + return FALSE; + username = t_strdup_until(username, p); + } + } + if (*username == '\0') { /* Some PAM plugins go nuts with empty usernames */ *error_r = "Empty username";
--- a/src/auth/auth.c Sat Mar 25 13:09:17 2006 +0200 +++ b/src/auth/auth.c Mon Mar 27 15:54:24 2006 +0300 @@ -243,6 +243,10 @@ auth->username_translation[(int)(uint8_t)*env] = env[1]; } + env = getenv("MASTER_USER_SEPARATOR"); + if (env != NULL) + auth->master_user_separator = env[0]; + auth->ssl_require_client_cert = getenv("SSL_REQUIRE_CLIENT_CERT") != NULL; auth->ssl_username_from_cert =
--- a/src/auth/auth.h Sat Mar 25 13:09:17 2006 +0200 +++ b/src/auth/auth.h Mon Mar 27 15:54:24 2006 +0300 @@ -44,7 +44,8 @@ const char *default_realm; const char *anonymous_username; char username_chars[256]; - char username_translation[256]; + char username_translation[256]; + char master_user_separator; bool ssl_require_client_cert; bool ssl_username_from_cert;
--- a/src/master/auth-process.c Sat Mar 25 13:09:17 2006 +0200 +++ b/src/master/auth-process.c Mon Mar 27 15:54:24 2006 +0300 @@ -418,8 +418,10 @@ env_put(t_strconcat("USERNAME_CHARS=", set->username_chars, NULL)); env_put(t_strconcat("USERNAME_TRANSLATION=", set->username_translation, NULL)); - env_put(t_strconcat("ANONYMOUS_USERNAME=", - set->anonymous_username, NULL)); + env_put(t_strconcat("USERNAME_TRANSLATION=", + set->username_translation, NULL)); + env_put(t_strconcat("MASTER_USER_SEPARATOR=", + set->master_user_separator, NULL)); env_put(t_strdup_printf("CACHE_SIZE=%u", set->cache_size)); env_put(t_strdup_printf("CACHE_TTL=%u", set->cache_ttl));
--- a/src/master/master-settings.c Sat Mar 25 13:09:17 2006 +0200 +++ b/src/master/master-settings.c Mon Mar 27 15:54:24 2006 +0300 @@ -167,6 +167,7 @@ DEF(SET_STR, chroot), DEF(SET_STR, username_chars), DEF(SET_STR, username_translation), + DEF(SET_STR, master_user_separator), DEF(SET_STR, anonymous_username), DEF(SET_STR, krb5_keytab), @@ -375,6 +376,7 @@ MEMBER(chroot) NULL, MEMBER(username_chars) "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@", MEMBER(username_translation) "", + MEMBER(master_user_separator) NULL, MEMBER(anonymous_username) "anonymous", MEMBER(krb5_keytab) NULL,
--- a/src/master/master-settings.h Sat Mar 25 13:09:17 2006 +0200 +++ b/src/master/master-settings.h Mon Mar 27 15:54:24 2006 +0300 @@ -172,6 +172,7 @@ const char *chroot; const char *username_chars; const char *username_translation; + const char *master_user_separator; const char *anonymous_username; const char *krb5_keytab;