[dovecot-cvs] dovecot/src/auth auth-master-connection.c, 1.4, 1.5 mech.c, 1.18, 1.19 mech.h, 1.13, 1.14 passdb-ldap.c, 1.8, 1.9 passdb-mysql.c, 1.1, 1.2 passdb-pgsql.c, 1.3, 1.4 userdb-ldap.c, 1.13, 1.14 userdb-mysql.c, 1.1, 1.2 userdb-passwd-file.c, 1.6, 1.7 userdb-passwd.c, 1.7, 1.8 userdb-pgsql.c, 1.5, 1.6 userdb-static.c, 1.5, 1.6 userdb-vpopmail.c, 1.8, 1.9 userdb.h, 1.8, 1.9

cras at procontrol.fi cras at procontrol.fi
Tue May 25 01:33:53 EEST 2004


Update of /home/cvs/dovecot/src/auth
In directory talvi:/tmp/cvs-serv15693/src/auth

Modified Files:
	auth-master-connection.c mech.c mech.h passdb-ldap.c 
	passdb-mysql.c passdb-pgsql.c userdb-ldap.c userdb-mysql.c 
	userdb-passwd-file.c userdb-passwd.c userdb-pgsql.c 
	userdb-static.c userdb-vpopmail.c userdb.h 
Log Message:
Fixed var_expand() to take a table of variables rather than a few predefined
ones. Added support for modifiers.



Index: auth-master-connection.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/auth-master-connection.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- a/auth-master-connection.c	21 Sep 2003 16:21:36 -0000	1.4
+++ b/auth-master-connection.c	24 May 2004 22:33:50 -0000	1.5
@@ -149,7 +149,7 @@
 		master_request->tag = request->tag;
 
 		conn->refcount++;
-		userdb->lookup(auth_request->user, userdb_callback,
+		userdb->lookup(auth_request, userdb_callback,
 			       master_request);
 
 		/* the auth request is finished, we don't need it anymore */

Index: mech.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/mech.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -d -r1.18 -r1.19
--- a/mech.c	17 May 2004 01:32:16 -0000	1.18
+++ b/mech.c	24 May 2004 22:33:50 -0000	1.19
@@ -5,6 +5,7 @@
 #include "buffer.h"
 #include "hash.h"
 #include "mech.h"
+#include "var-expand.h"
 #include "auth-client-connection.h"
 
 #include <stdlib.h>
@@ -225,6 +226,48 @@
 	return FALSE;
 }
 
+static const char *escape_none(const char *str)
+{
+	return str;
+}
+
+const struct var_expand_table *
+auth_request_get_var_expand_table(const struct auth_request *auth_request,
+				  const char *(*escape_func)(const char *))
+{
+	static struct var_expand_table static_tab[] = {
+		{ 'u', NULL },
+		{ 'n', NULL },
+		{ 'd', NULL },
+		{ 'p', NULL },
+		{ '\0', NULL }
+	};
+	struct var_expand_table *tab;
+
+	if (escape_func == NULL)
+		escape_func = escape_none;
+
+	tab = t_malloc(sizeof(static_tab));
+	memcpy(tab, static_tab, sizeof(static_tab));
+
+	tab[0].value = escape_func(auth_request->user);
+	tab[1].value = escape_func(t_strcut(auth_request->user, '@'));
+	tab[2].value = strchr(auth_request->user, '@');
+	if (tab[2].value != NULL)
+		tab[2].value = escape_func(tab[2].value+1);
+
+	switch (auth_request->protocol) {
+	case AUTH_PROTOCOL_IMAP:
+		tab[3].value = "IMAP";
+		break;
+	case AUTH_PROTOCOL_POP3:
+		tab[3].value = "POP3";
+		break;
+	}
+
+	return tab;
+}
+
 extern struct mech_module mech_plain;
 extern struct mech_module mech_cram_md5;
 extern struct mech_module mech_digest_md5;

Index: mech.h
===================================================================
RCS file: /home/cvs/dovecot/src/auth/mech.h,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- a/mech.h	17 May 2004 01:32:16 -0000	1.13
+++ b/mech.h	24 May 2004 22:33:50 -0000	1.14
@@ -75,6 +75,10 @@
 void auth_request_ref(struct auth_request *request);
 int auth_request_unref(struct auth_request *request);
 
+const struct var_expand_table *
+auth_request_get_var_expand_table(const struct auth_request *auth_request,
+				  const char *(*escape_func)(const char *));
+
 void mech_init(void);
 void mech_deinit(void);
 

Index: passdb-ldap.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/passdb-ldap.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- a/passdb-ldap.c	22 Aug 2003 04:57:49 -0000	1.8
+++ b/passdb-ldap.c	24 May 2004 22:33:50 -0000	1.9
@@ -141,16 +141,18 @@
 			     struct ldap_request *ldap_request)
 {
 	struct ldap_connection *conn = passdb_ldap_conn->conn;
-	const char *user, *filter;
+	const char *filter;
 	string_t *str;
 
-	user = ldap_escape(auth_request->user);
 	if (conn->set.pass_filter == NULL) {
 		filter = t_strdup_printf("(&(objectClass=posixAccount)(%s=%s))",
-			passdb_ldap_conn->attr_names[ATTR_VIRTUAL_USER], user);
+			passdb_ldap_conn->attr_names[ATTR_VIRTUAL_USER],
+			ldap_escape(auth_request->user));
 	} else {
 		str = t_str_new(512);
-		var_expand(str, conn->set.pass_filter, user, NULL);
+		var_expand(str, conn->set.pass_filter,
+			   auth_request_get_var_expand_table(auth_request,
+							     ldap_escape));
 		filter = str_c(str);
 	}
 

Index: passdb-mysql.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/passdb-mysql.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- a/passdb-mysql.c	10 May 2004 01:47:09 -0000	1.1
+++ b/passdb-mysql.c	24 May 2004 22:33:50 -0000	1.2
@@ -108,7 +108,8 @@
 
 	str = t_str_new(512);
 	var_expand(str, conn->set.password_query,
-		   str_escape(auth_request->user), NULL);
+		   auth_request_get_var_expand_table(auth_request,
+						     str_escape));
 	query = str_c(str);
 
 	mysql_request->callback = mysql_handle_request;

Index: passdb-pgsql.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/passdb-pgsql.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- a/passdb-pgsql.c	26 Apr 2004 21:20:15 -0000	1.3
+++ b/passdb-pgsql.c	24 May 2004 22:33:50 -0000	1.4
@@ -105,7 +105,8 @@
 
 	str = t_str_new(512);
 	var_expand(str, conn->set.password_query,
-		   db_pgsql_escape(auth_request->user), NULL);
+		   auth_request_get_var_expand_table(auth_request,
+						     db_pgsql_escape));
 	query = str_c(str);
 
 	pgsql_request->callback = pgsql_handle_request;

Index: userdb-ldap.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/userdb-ldap.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- a/userdb-ldap.c	24 Aug 2003 05:55:05 -0000	1.13
+++ b/userdb-ldap.c	24 May 2004 22:33:50 -0000	1.14
@@ -149,21 +149,23 @@
 	t_pop();
 }
 
-static void userdb_ldap_lookup(const char *user, userdb_callback_t *callback,
-			       void *context)
+static void userdb_ldap_lookup(struct auth_request *auth_request,
+			       userdb_callback_t *callback, void *context)
 {
 	struct ldap_connection *conn = userdb_ldap_conn->conn;
 	struct userdb_ldap_request *request;
 	const char *filter;
 	string_t *str;
 
-	user = ldap_escape(user);
 	if (conn->set.user_filter == NULL) {
 		filter = t_strdup_printf("(&(objectClass=posixAccount)(%s=%s))",
-			userdb_ldap_conn->attr_names[ATTR_VIRTUAL_USER], user);
+			userdb_ldap_conn->attr_names[ATTR_VIRTUAL_USER],
+			ldap_escape(auth_request->user));
 	} else {
 		str = t_str_new(512);
-		var_expand(str, conn->set.user_filter, user, NULL);
+		var_expand(str, conn->set.user_filter,
+			   auth_request_get_var_expand_table(auth_request,
+							     ldap_escape));
 		filter = str_c(str);
 	}
 

Index: userdb-mysql.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/userdb-mysql.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- a/userdb-mysql.c	10 May 2004 01:47:09 -0000	1.1
+++ b/userdb-mysql.c	24 May 2004 22:33:50 -0000	1.2
@@ -114,8 +114,8 @@
 	}
 }
 
-static void userdb_mysql_lookup(const char *user, userdb_callback_t *callback,
-				void *context)
+static void userdb_mysql_lookup(struct auth_request *auth_request,
+				userdb_callback_t *callback, void *context)
 {
 	struct mysql_connection *conn = userdb_mysql_conn->conn;
 	struct userdb_mysql_request *request;
@@ -123,14 +123,17 @@
 	string_t *str;
 
 	str = t_str_new(512);
-	var_expand(str, conn->set.user_query, str_escape(user), NULL);
+	var_expand(str, conn->set.user_query,
+		   auth_request_get_var_expand_table(auth_request,
+						     str_escape));
 	query = str_c(str);
 
-	request = i_malloc(sizeof(struct userdb_mysql_request) + strlen(user));
+	request = i_malloc(sizeof(struct userdb_mysql_request) +
+			   strlen(auth_request->user));
 	request->request.callback = mysql_handle_request;
 	request->request.context = context;
 	request->userdb_callback = callback;
-	strcpy(request->username, user);
+	strcpy(request->username, auth_request->user);
 
 	db_mysql_query(conn, query, &request->request);
 }

Index: userdb-passwd-file.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/userdb-passwd-file.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- a/userdb-passwd-file.c	8 May 2003 04:28:30 -0000	1.6
+++ b/userdb-passwd-file.c	24 May 2004 22:33:50 -0000	1.7
@@ -11,13 +11,13 @@
 
 struct passwd_file *userdb_pwf = NULL;
 
-static void passwd_file_lookup(const char *user, userdb_callback_t *callback,
-			       void *context)
+static void passwd_file_lookup(struct auth_request *auth_request,
+			       userdb_callback_t *callback, void *context)
 {
 	struct user_data data;
 	struct passwd_user *pu;
 
-	pu = db_passwd_file_lookup(userdb_pwf, user);
+	pu = db_passwd_file_lookup(userdb_pwf, auth_request->user);
 	if (pu == NULL) {
 		callback(NULL, context);
 		return;
@@ -27,7 +27,7 @@
 	data.uid = pu->uid;
 	data.gid = pu->gid;
 
-	data.virtual_user = user;
+	data.virtual_user = auth_request->user;
 	data.home = pu->home;
 	data.mail = pu->mail;
 

Index: userdb-passwd.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/userdb-passwd.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- a/userdb-passwd.c	12 May 2003 06:04:04 -0000	1.7
+++ b/userdb-passwd.c	24 May 2004 22:33:50 -0000	1.8
@@ -10,16 +10,16 @@
 
 #include <pwd.h>
 
-static void passwd_lookup(const char *user, userdb_callback_t *callback,
-			  void *context)
+static void passwd_lookup(struct auth_request *auth_request,
+			  userdb_callback_t *callback, void *context)
 {
 	struct user_data data;
 	struct passwd *pw;
 
-	pw = getpwnam(user);
+	pw = getpwnam(auth_request->user);
 	if (pw == NULL) {
 		if (verbose)
-			i_info("passwd(%s): unknown user", user);
+			i_info("passwd(%s): unknown user", auth_request->user);
 		callback(NULL, context);
 		return;
 	}

Index: userdb-pgsql.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/userdb-pgsql.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- a/userdb-pgsql.c	26 Apr 2004 21:20:15 -0000	1.5
+++ b/userdb-pgsql.c	24 May 2004 22:33:50 -0000	1.6
@@ -84,8 +84,8 @@
 	}
 }
 
-static void userdb_pgsql_lookup(const char *user, userdb_callback_t *callback,
-				void *context)
+static void userdb_pgsql_lookup(struct auth_request *auth_request,
+				userdb_callback_t *callback, void *context)
 {
 	struct pgsql_connection *conn = userdb_pgsql_conn->conn;
 	struct userdb_pgsql_request *request;
@@ -93,14 +93,17 @@
 	string_t *str;
 
 	str = t_str_new(512);
-	var_expand(str, conn->set.user_query, db_pgsql_escape(user), NULL);
+	var_expand(str, conn->set.user_query,
+		   auth_request_get_var_expand_table(auth_request,
+						     db_pgsql_escape));
 	query = str_c(str);
 
-	request = i_malloc(sizeof(struct userdb_pgsql_request) + strlen(user));
+	request = i_malloc(sizeof(struct userdb_pgsql_request) +
+			   strlen(auth_request->user));
 	request->request.callback = pgsql_handle_request;
 	request->request.context = context;
 	request->userdb_callback = callback;
-	strcpy(request->username, user);
+	strcpy(request->username, auth_request->user);
 
 	db_pgsql_query(conn, query, &request->request);
 }

Index: userdb-static.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/userdb-static.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- a/userdb-static.c	20 Oct 2003 04:15:16 -0000	1.5
+++ b/userdb-static.c	24 May 2004 22:33:50 -0000	1.6
@@ -16,8 +16,8 @@
 static gid_t static_gid;
 static char *static_home_template;
 
-static void static_lookup(const char *user, userdb_callback_t *callback,
-			  void *context)
+static void static_lookup(struct auth_request *auth_request,
+			  userdb_callback_t *callback, void *context)
 {
 	struct user_data data;
 	string_t *str;
@@ -26,10 +26,11 @@
 	data.uid = static_uid;
 	data.gid = static_gid;
 
-	data.virtual_user = data.system_user = user;
+	data.virtual_user = data.system_user = auth_request->user;
 
 	str = t_str_new(256);
-	var_expand(str, static_home_template, user, NULL);
+	var_expand(str, static_home_template,
+		   auth_request_get_var_expand_table(auth_request, NULL));
 	data.home = str_c(str);
 
 	callback(&data, context);

Index: userdb-vpopmail.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/userdb-vpopmail.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- a/userdb-vpopmail.c	24 May 2004 11:22:41 -0000	1.8
+++ b/userdb-vpopmail.c	24 May 2004 22:33:50 -0000	1.9
@@ -46,8 +46,8 @@
 
 #ifdef USERDB_VPOPMAIL
 
-static void vpopmail_lookup(const char *user, userdb_callback_t *callback,
-			    void *context)
+static void vpopmail_lookup(struct auth_request *auth_request,
+			    userdb_callback_t *callback, void *context)
 {
 	char vpop_user[VPOPMAIL_LIMIT], vpop_domain[VPOPMAIL_LIMIT];
 	struct vqpasswd *vpw;
@@ -56,7 +56,7 @@
 	gid_t gid;
 	pool_t pool;
 
-	vpw = vpopmail_lookup_vqp(user, vpop_user, vpop_domain);
+	vpw = vpopmail_lookup_vqp(auth_request->user, vpop_user, vpop_domain);
 	if (vpw == NULL) {
 		callback(NULL, context);
 		return;
@@ -67,7 +67,7 @@
 	if (vget_assign(vpop_domain, NULL, 0, &uid, &gid) == NULL) {
 		if (verbose) {
 			i_info("vpopmail(%s): vget_assign(%s) failed",
-			       user, vpop_domain);
+			       auth_request->user, vpop_domain);
 		}
 		callback(NULL, context);
 		return;
@@ -77,12 +77,12 @@
 		/* user's homedir doesn't exist yet, create it */
 		if (verbose) {
 			i_info("vpopmail(%s): pw_dir isn't set, creating",
-			       user);
+			       auth_request->user);
 		}
 
 		if (make_user_dir(vpop_user, vpop_domain, uid, gid) == NULL) {
 			i_error("vpopmail(%s): make_user_dir(%s, %s) failed",
-				user, vpop_user, vpop_domain);
+				auth_request->user, vpop_user, vpop_domain);
 			callback(NULL, context);
 			return;
 		}

Index: userdb.h
===================================================================
RCS file: /home/cvs/dovecot/src/auth/userdb.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- a/userdb.h	10 May 2004 01:47:09 -0000	1.8
+++ b/userdb.h	24 May 2004 22:33:50 -0000	1.9
@@ -1,6 +1,8 @@
 #ifndef __USERDB_H
 #define __USERDB_H
 
+#include "mech.h"
+
 struct user_data {
 	const char *virtual_user;
 	const char *home;
@@ -17,8 +19,8 @@
 	void (*init)(const char *args);
 	void (*deinit)(void);
 
-	void (*lookup)(const char *user, userdb_callback_t *callback,
-		       void *context);
+	void (*lookup)(struct auth_request *auth_request,
+		       userdb_callback_t *callback, void *context);
 };
 
 extern struct userdb_module *userdb;



More information about the dovecot-cvs mailing list