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;