]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: Drop postfix socketmap support
authorAki Tuomi <aki.tuomi@dovecot.fi>
Mon, 19 Nov 2018 11:22:05 +0000 (13:22 +0200)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Fri, 16 Aug 2019 14:19:19 +0000 (17:19 +0300)
It no longer works with recent postfix versions, and it's too much work to fix
it.

src/auth/Makefile.am
src/auth/auth-postfix-connection.c [deleted file]
src/auth/auth-postfix-connection.h [deleted file]
src/auth/main.c

index d4401965987725ce4662b96dee5bcd0012da83da..9792f74ecc31eef541682679d15a1f0f3a7c20ab 100644 (file)
@@ -91,7 +91,6 @@ libauth_la_SOURCES = \
        auth-client-connection.c \
        auth-master-connection.c \
        auth-policy.c \
-       auth-postfix-connection.c \
        mech-otp-skey-common.c \
        mech-plain-common.c \
        auth-penalty.c \
@@ -163,7 +162,6 @@ headers = \
        auth-client-connection.h \
        auth-common.h \
        auth-master-connection.h \
-       auth-postfix-connection.h \
        mech-otp-skey-common.h \
        mech-plain-common.h \
        auth-penalty.h \
diff --git a/src/auth/auth-postfix-connection.c b/src/auth/auth-postfix-connection.c
deleted file mode 100644 (file)
index 7c38bc0..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
-/* Copyright (c) 2011-2018 Dovecot authors, see the included COPYING file */
-
-#include "auth-common.h"
-#include "ioloop.h"
-#include "net.h"
-#include "istream.h"
-#include "ostream.h"
-#include "llist.h"
-#include "str.h"
-#include "strescape.h"
-#include "str-sanitize.h"
-#include "master-service.h"
-#include "userdb.h"
-#include "auth-postfix-connection.h"
-
-#include <unistd.h>
-
-#define MAX_INBUF_SIZE 1024
-#define MAX_OUTBUF_SIZE (1024*50)
-
-struct auth_postfix_connection {
-       struct auth_postfix_connection *prev, *next;
-       struct auth *auth;
-       int refcount;
-
-       int fd;
-       char *path;
-       struct istream *input;
-       struct ostream *output;
-       struct io *io;
-
-       bool destroyed:1;
-};
-
-static void postfix_input(struct auth_postfix_connection *conn);
-static void auth_postfix_connection_ref(struct auth_postfix_connection *conn);
-static void auth_postfix_connection_destroy(struct auth_postfix_connection **_conn);
-static void auth_postfix_connection_unref(struct auth_postfix_connection **_conn);
-
-static struct auth_postfix_connection *auth_postfix_connections;
-
-static bool
-postfix_input_auth_request(struct auth_postfix_connection *conn,
-                          const char *username,
-                          struct auth_request **request_r, const char **error_r)
-{
-       struct auth_request *auth_request;
-
-       auth_request = auth_request_new_dummy();
-       auth_request->id = 1;
-       auth_request->context = conn;
-       auth_postfix_connection_ref(conn);
-
-       (void)auth_request_import_info(auth_request, "service", "postfix");
-       auth_request_init(auth_request);
-
-       if (!auth_request_set_username(auth_request, username, error_r)) {
-               *request_r = auth_request;
-               return FALSE;
-       }
-       *request_r = auth_request;
-       return TRUE;
-}
-
-static void
-user_callback(enum userdb_result result, struct auth_request *auth_request)
-{
-       struct auth_postfix_connection *conn = auth_request->context;
-       string_t *str;
-       const char *value;
-
-       if (auth_request->userdb_lookup_tempfailed)
-               result = USERDB_RESULT_INTERNAL_FAILURE;
-
-       str = t_str_new(128);
-       switch (result) {
-       case USERDB_RESULT_INTERNAL_FAILURE:
-               if (auth_request->userdb_lookup_tempfailed)
-                       value = auth_fields_find(auth_request->userdb_reply, "reason");
-               else
-                       value = NULL;
-               str_printfa(str, "400 %s",
-                           value != NULL ? value: "Internal failure");
-               break;
-       case USERDB_RESULT_USER_UNKNOWN:
-               str_append(str, "500 User not found");
-               break;
-       case USERDB_RESULT_OK:
-               str_append(str, "200 1");
-               break;
-       }
-
-       e_debug(auth_event, "postfix out: %s", str_c(str));
-
-       str_append_c(str, '\n');
-       o_stream_nsend(conn->output, str_data(str), str_len(str));
-
-       i_assert(conn->io == NULL);
-       if (!conn->destroyed)
-               conn->io = io_add(conn->fd, IO_READ, postfix_input, conn);
-
-       auth_request_unref(&auth_request);
-       auth_postfix_connection_unref(&conn);
-}
-
-static bool
-postfix_input_user(struct auth_postfix_connection *conn, const char *username)
-{
-       struct auth_request *auth_request;
-       const char *error;
-
-       io_remove(&conn->io);
-       if (!postfix_input_auth_request(conn, username,
-                                       &auth_request, &error)) {
-               auth_request_log_info(auth_request, "postfix", "%s", error);
-               user_callback(USERDB_RESULT_USER_UNKNOWN, auth_request);
-       } else {
-               auth_request_set_state(auth_request, AUTH_REQUEST_STATE_USERDB);
-               auth_request_lookup_user(auth_request, user_callback);
-       }
-       return TRUE;
-}
-
-static bool
-auth_postfix_input_line(struct auth_postfix_connection *conn, const char *line)
-{
-       e_debug(auth_event, "postfix in: %s", line);
-
-       if (strncasecmp(line, "get ", 4) == 0)
-               return postfix_input_user(conn, line + 4);
-
-       i_error("BUG: Unknown command in postfix socket: %s",
-               str_sanitize(line, 80));
-       return FALSE;
-}
-
-static void postfix_input(struct auth_postfix_connection *conn)
-{
-       char *line;
-       bool ret;
-
-       switch (i_stream_read(conn->input)) {
-       case 0:
-               return;
-       case -1:
-               /* disconnected */
-                auth_postfix_connection_destroy(&conn);
-               return;
-       case -2:
-               /* buffer full */
-               i_error("BUG: Postfix sent us more than %d bytes",
-                       (int)MAX_INBUF_SIZE);
-                auth_postfix_connection_destroy(&conn);
-               return;
-       }
-
-       while ((line = i_stream_next_line(conn->input)) != NULL) {
-               T_BEGIN {
-                       ret = auth_postfix_input_line(conn, line);
-               } T_END;
-               if (!ret) {
-                       auth_postfix_connection_destroy(&conn);
-                       return;
-               }
-       }
-}
-
-struct auth_postfix_connection *
-auth_postfix_connection_create(struct auth *auth, int fd)
-{
-       struct auth_postfix_connection *conn;
-
-       conn = i_new(struct auth_postfix_connection, 1);
-       conn->refcount = 1;
-       conn->fd = fd;
-       conn->auth = auth;
-       conn->input = i_stream_create_fd(fd, MAX_INBUF_SIZE);
-       conn->output = o_stream_create_fd(fd, (size_t)-1);
-       o_stream_set_no_error_handling(conn->output, TRUE);
-       conn->io = io_add(fd, IO_READ, postfix_input, conn);
-       DLLIST_PREPEND(&auth_postfix_connections, conn);
-       return conn;
-}
-
-static void
-auth_postfix_connection_destroy(struct auth_postfix_connection **_conn)
-{
-        struct auth_postfix_connection *conn = *_conn;
-
-       *_conn = NULL;
-       if (conn->destroyed)
-               return;
-       conn->destroyed = TRUE;
-
-       DLLIST_REMOVE(&auth_postfix_connections, conn);
-
-       i_stream_close(conn->input);
-       o_stream_close(conn->output);
-       io_remove(&conn->io);
-       i_close_fd_path(&conn->fd, conn->path);
-
-       master_service_client_connection_destroyed(master_service);
-       auth_postfix_connection_unref(&conn);
-}
-
-static void auth_postfix_connection_ref(struct auth_postfix_connection *conn)
-{
-       i_assert(conn->refcount > 0);
-
-       conn->refcount++;
-}
-
-static void
-auth_postfix_connection_unref(struct auth_postfix_connection **_conn)
-{
-       struct auth_postfix_connection *conn = *_conn;
-
-       *_conn = NULL;
-       i_assert(conn->refcount > 0);
-
-       if (--conn->refcount > 0)
-               return;
-
-       i_stream_unref(&conn->input);
-       o_stream_unref(&conn->output);
-       i_free(conn);
-}
-
-void auth_postfix_connections_destroy_all(void)
-{
-       struct auth_postfix_connection *conn;
-
-       while (auth_postfix_connections != NULL) {
-               conn = auth_postfix_connections;
-               auth_postfix_connection_destroy(&conn);
-       }
-}
diff --git a/src/auth/auth-postfix-connection.h b/src/auth/auth-postfix-connection.h
deleted file mode 100644 (file)
index df9d862..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef AUTH_POSTFIX_CONNECTION_H
-#define AUTH_POSTFIX_CONNECTION_H
-
-struct auth_postfix_connection *
-auth_postfix_connection_create(struct auth *auth, int fd);
-
-void auth_postfix_connections_destroy_all(void);
-
-#endif
-
index 2dbf9e176bf650facdb0791a82feb4f2a289422c..8ea6d6e96b2f7a7d4fe63741d52f02c086c5e862 100644 (file)
@@ -29,7 +29,6 @@
 #include "auth-worker-client.h"
 #include "auth-master-connection.h"
 #include "auth-client-connection.h"
-#include "auth-postfix-connection.h"
 #include "auth-policy.h"
 
 #include <unistd.h>
@@ -278,7 +277,6 @@ static void main_deinit(void)
 
        auth_client_connections_destroy_all();
        auth_master_connections_destroy_all();
-       auth_postfix_connections_destroy_all();
        auth_worker_connections_destroy_all();
 
        auth_policy_deinit();
@@ -338,7 +336,7 @@ static void client_connected(struct master_service_connection *conn)
                                                    l->path, &l->st, TRUE);
                break;
        case AUTH_SOCKET_POSTFIX:
-               (void)auth_postfix_connection_create(auth, conn->fd);
+               e_error(auth_event, "postfix socketmap is no longer supported");
                break;
        case AUTH_SOCKET_LOGIN_CLIENT:
                auth_client_connection_create(auth, conn->fd, TRUE, FALSE);