]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: mail-user: Added more information about the client connection.
authorStephan Bosch <stephan.bosch@dovecot.fi>
Sat, 9 Dec 2017 01:09:35 +0000 (02:09 +0100)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 11 Dec 2017 13:44:18 +0000 (15:44 +0200)
Submission service will need it to pass to the backend MTA in XCLIENT and for creating the "Received:" header.

src/imap/main.c
src/lib-storage/mail-storage-service.c
src/lib-storage/mail-storage-service.h
src/lib-storage/mail-user.h
src/lmtp/client.c
src/lmtp/lmtp-local.c
src/pop3/main.c

index 4f67b5a9c1b5fe467f07ba4bc232dee8124d3d70..f9961af5adc3ce095e965162a06ab3b5622c7760 100644 (file)
@@ -319,16 +319,22 @@ login_client_connected(const struct master_login_client *login_client,
 #define MSG_BYE_INTERNAL_ERROR "* BYE "MAIL_ERRSTR_CRITICAL_MSG"\r\n"
        struct mail_storage_service_input input;
        struct client *client;
-       enum mail_auth_request_flags flags;
+       enum mail_auth_request_flags flags = login_client->auth_req.flags;
        const char *error;
 
        i_zero(&input);
        input.module = input.service = "imap";
        input.local_ip = login_client->auth_req.local_ip;
        input.remote_ip = login_client->auth_req.remote_ip;
+       input.local_port = login_client->auth_req.local_port;
+       input.remote_port = login_client->auth_req.remote_port;
        input.username = username;
        input.userdb_fields = extra_fields;
        input.session_id = login_client->session_id;
+       if ((flags & MAIL_AUTH_REQUEST_FLAG_CONN_SECURED) != 0)
+               input.conn_secured = TRUE;
+       if ((flags & MAIL_AUTH_REQUEST_FLAG_CONN_SSL_SECURED) != 0)
+               input.conn_ssl_secured = TRUE;
 
        if (client_create_from_input(&input, login_client->fd, login_client->fd,
                                     &client, &error) < 0) {
@@ -344,7 +350,6 @@ login_client_connected(const struct master_login_client *login_client,
                master_service_client_connection_destroyed(master_service);
                return;
        }
-       flags = login_client->auth_req.flags;
        if ((flags & MAIL_AUTH_REQUEST_FLAG_TLS_COMPRESSION) != 0)
                client->tls_compression = TRUE;
        client_add_input_capability(client, login_client->data,
index dd77032eb60a9d16bf3f692116a691ad90f9ee47..3ddc306f3a50648feb3572d3054d5a947d6ba3b5 100644 (file)
@@ -666,6 +666,10 @@ mail_storage_service_init_post(struct mail_storage_service_ctx *ctx,
        i_zero(&conn_data);
        conn_data.local_ip = &user->input.local_ip;
        conn_data.remote_ip = &user->input.remote_ip;
+       conn_data.local_port = user->input.local_port;
+       conn_data.remote_port = user->input.remote_port;
+       conn_data.secured = user->input.conn_secured;
+       conn_data.ssl_secured = user->input.conn_ssl_secured;
 
        /* NOTE: if more user initialization is added, add it also to
           mail_user_dup() */
index e02e09ef9099fbc195f48653319ad4fa0b8d2155..9bbb304ec00f467a1b63d6fc671a45671cf36aac 100644 (file)
@@ -62,6 +62,10 @@ struct mail_storage_service_input {
        bool no_userdb_lookup:1;
        /* Enable auth_debug=yes for this lookup */
        bool debug:1;
+       /* Connection is secure (SSL or just trusted) */
+       bool conn_secured:1;
+       /* Connection is secured using SSL specifically */
+       bool conn_ssl_secured:1;
 };
 
 extern struct module *mail_storage_service_modules;
index 9529242f83f6bc8b173ebc9495f104f315b5c050..410707eccb3cc7ccfeb6e90510fd55955ec87c33 100644 (file)
@@ -19,6 +19,10 @@ struct mail_user_vfuncs {
 
 struct mail_user_connection_data {
        struct ip_addr *local_ip, *remote_ip;
+       in_port_t local_port, remote_port;
+
+       bool secured:1;
+       bool ssl_secured:1;
 };
 
 struct mail_user {
index 734a5fc43beaf1675981a2a4254b8b86b548c518..61b5ce486aadd575e807214038ada111d5d0a36b 100644 (file)
@@ -99,7 +99,13 @@ static void client_read_settings(struct client *client)
        input.module = input.service = "lmtp";
        input.local_ip = client->local_ip;
        input.remote_ip = client->remote_ip;
+       input.local_port = client->local_port;
+       input.remote_port = client->remote_port;
        input.username = "";
+       input.conn_ssl_secured =
+               smtp_server_connection_is_ssl_secured(client->conn);
+       input.conn_secured = input.conn_ssl_secured ||
+               smtp_server_connection_is_trusted(client->conn);
 
        if (mail_storage_service_read_settings(storage_service, &input,
                                               client->pool,
index 7b969e15ff043a50455d7b8d83fd9be7ac89534b..fda021166301c3fb101a5820ab3b72f30f815b20 100644 (file)
@@ -344,6 +344,10 @@ int lmtp_local_rcpt(struct client *client,
        input.local_port = client->local_port;
        input.remote_port = client->remote_port;
        input.session_id = session_id;
+       input.conn_ssl_secured =
+               smtp_server_connection_is_ssl_secured(client->conn);
+       input.conn_secured = input.conn_ssl_secured ||
+               smtp_server_connection_is_trusted(client->conn);
 
        ret = mail_storage_service_lookup(storage_service, &input,
                                          &service_user, &error);
index daf91d9cee3330c3e7d80e92a58e4caf4de6f42c..cb1b6d72edb62027c648a84030976f37ddba33eb 100644 (file)
@@ -257,6 +257,7 @@ login_client_connected(const struct master_login_client *login_client,
 {
        struct client *client;
        struct mail_storage_service_input input;
+       enum mail_auth_request_flags flags = login_client->auth_req.flags;
        const char *error;
        buffer_t input_buf;
 
@@ -264,9 +265,15 @@ login_client_connected(const struct master_login_client *login_client,
        input.module = input.service = "pop3";
        input.local_ip = login_client->auth_req.local_ip;
        input.remote_ip = login_client->auth_req.remote_ip;
+       input.local_port = login_client->auth_req.local_port;
+       input.remote_port = login_client->auth_req.remote_port;
        input.username = username;
        input.userdb_fields = extra_fields;
        input.session_id = login_client->session_id;
+       if ((flags & MAIL_AUTH_REQUEST_FLAG_CONN_SECURED) != 0)
+               input.conn_secured = TRUE;
+       if ((flags & MAIL_AUTH_REQUEST_FLAG_CONN_SSL_SECURED) != 0)
+               input.conn_ssl_secured = TRUE;
 
        buffer_create_from_const_data(&input_buf, login_client->data,
                                      login_client->auth_req.data_size);