[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