I'm using vpopmail's POP-before-SMTP auth, but dovecot don't support it, so I'm wrote this patch ============================================================== diff -Naur dovecot-0.99.10.5/src/auth/auth-login-interface.h dovecot-0.99.10.5-patched/src/auth/auth-login-interface.h --- dovecot-0.99.10.5/src/auth/auth-login-interface.h Sun May 18 16:26:28 2003 +++ dovecot-0.99.10.5-patched/src/auth/auth-login-interface.h Mon Jun 14 13:18:15 2004 @@ -1,6 +1,10 @@ #ifndef __AUTH_LOGIN_INTERFACE_H #define __AUTH_LOGIN_INTERFACE_H +#ifdef PASSDB_VPOPMAIL +#include "network.h" +#endif + /* max. size for auth_login_request_continue.data[] */ #define AUTH_LOGIN_MAX_REQUEST_DATA_SIZE 4096 @@ -50,6 +54,10 @@ enum auth_mech mech; enum auth_protocol protocol; + +#ifdef PASSDB_VPOPMAIL + struct ip_addr client_ip; +#endif }; /* Continue authentication request */ diff -Naur dovecot-0.99.10.5/src/auth/mech.c dovecot-0.99.10.5-patched/src/auth/mech.c --- dovecot-0.99.10.5/src/auth/mech.c Sun May 18 16:26:28 2003 +++ dovecot-0.99.10.5-patched/src/auth/mech.c Mon Jun 14 13:27:33 2004 @@ -98,7 +98,10 @@ auth_request->conn = conn; auth_request->id = request->id; auth_request->protocol = request->protocol; - +#ifdef PASSDB_VPOPMAIL + auth_request->client_ip = request->client_ip; +#endif + hash_insert(conn->auth_requests, POINTER_CAST(request->id), auth_request); } diff -Naur dovecot-0.99.10.5/src/auth/mech.h dovecot-0.99.10.5-patched/src/auth/mech.h --- dovecot-0.99.10.5/src/auth/mech.h Sun May 18 16:26:28 2003 +++ dovecot-0.99.10.5-patched/src/auth/mech.h Mon Jun 14 13:26:29 2004 @@ -19,6 +19,10 @@ enum auth_protocol protocol; mech_callback_t *callback; +#ifdef PASSDB_VPOPMAIL + struct ip_addr client_ip; +#endif + int (*auth_continue)(struct auth_request *auth_request, struct auth_login_request_continue *request, const unsigned char *data, diff -Naur dovecot-0.99.10.5/src/auth/passdb-vpopmail.c dovecot-0.99.10.5-patched/src/auth/passdb-vpopmail.c --- dovecot-0.99.10.5/src/auth/passdb-vpopmail.c Thu Feb 20 03:46:51 2003 +++ dovecot-0.99.10.5-patched/src/auth/passdb-vpopmail.c Mon Jun 14 13:29:49 2004 @@ -14,6 +14,8 @@ #include "userdb-vpopmail.h" +#include "env-util.h" + static void vpopmail_verify_plain(struct auth_request *request, const char *password, verify_plain_callback_t *callback) @@ -21,6 +23,7 @@ char vpop_user[VPOPMAIL_LIMIT], vpop_domain[VPOPMAIL_LIMIT]; struct vqpasswd *vpw; int result; + const char *ip_addr_fe; vpw = vpopmail_lookup_vqp(request->user, vpop_user, vpop_domain); @@ -57,6 +60,15 @@ return; } + /* it is needed for open smtp relay */ + + ip_addr_fe = net_ip2addr(&request->client_ip); + if (ip_addr_fe == NULL) + ip_addr_fe = "??"; + + env_put(t_strconcat("TCPREMOTEIP=", ip_addr_fe, NULL)); + open_smtp_relay(); + callback(PASSDB_RESULT_OK, request); } diff -Naur dovecot-0.99.10.5/src/login-common/auth-connection.c dovecot-0.99.10.5-patched/src/login-common/auth-connection.c --- dovecot-0.99.10.5/src/login-common/auth-connection.c Mon May 26 19:27:13 2003 +++ dovecot-0.99.10.5-patched/src/login-common/auth-connection.c Mon Jun 14 13:21:22 2004 @@ -298,6 +298,9 @@ struct auth_connection *conn; struct auth_request *request; struct auth_login_request_new auth_request; +#ifdef PASSDB_VPOPMAIL + struct client *_client = context; +#endif if (auth_reconnect) auth_connect_missing(); @@ -325,6 +328,9 @@ auth_request.protocol = protocol; auth_request.mech = request->mech; auth_request.id = request->id; +#ifdef PASSDB_VPOPMAIL + auth_request.client_ip = _client->ip; +#endif if (o_stream_send(request->conn->output, &auth_request, sizeof(auth_request)) < 0) { errno = request->conn->output->stream_errno;