]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: Replace auth_master_log_error() with e_error()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 31 Oct 2019 14:14:09 +0000 (16:14 +0200)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Fri, 12 Mar 2021 12:18:13 +0000 (12:18 +0000)
src/auth/auth-master-connection.c
src/auth/auth-master-connection.h
src/auth/auth-request-handler.c

index 967b929967d7f45f5ddb54bffbf4755bcec469d4..100054c66f5138d45dead3c723da8cf82702a8f8 100644 (file)
@@ -84,22 +84,21 @@ void auth_master_request_callback(const char *reply, struct auth_master_connecti
        o_stream_nsendv(conn->output, iov, 2);
 }
 
-void auth_master_log_error(struct auth_master_connection *conn,
-                          const char *fmt, ...)
+static const char *
+auth_master_event_log_callback(struct auth_master_connection *conn,
+                              enum log_type log_type ATTR_UNUSED,
+                              const char *message)
 {
-       va_list args;
        string_t *str = t_str_new(128);
 
-       str_printfa(str, "created %d msecs ago",
+       str_printfa(str, "auth-master client: %s (created %d msecs ago", message,
                    timeval_diff_msecs(&ioloop_timeval, &conn->create_time));
        if (conn->handshake_time.tv_sec != 0) {
                str_printfa(str, ", handshake %d msecs ago",
                            timeval_diff_msecs(&ioloop_timeval, &conn->create_time));
        }
-
-       va_start(args, fmt);
-       i_error("%s (%s)", t_strdup_vprintf(fmt, args), str_c(str));
-       va_end(args);
+       str_append_c(str, ')');
+       return str_c(str);
 }
 
 static bool
@@ -117,34 +116,33 @@ master_input_request(struct auth_master_connection *conn, const char *args)
            str_to_uint(list[0], &id) < 0 ||
            str_to_uint(list[1], &client_pid) < 0 ||
            str_to_uint(list[2], &client_id) < 0) {
-               auth_master_log_error(conn, "BUG: Master sent broken REQUEST");
+               e_error(conn->event, "BUG: Master sent broken REQUEST");
                return FALSE;
        }
 
        buffer_create_from_data(&buf, cookie, sizeof(cookie));
        if (hex_to_binary(list[3], &buf) < 0) {
-               auth_master_log_error(conn,
-                       "BUG: Master sent broken REQUEST cookie");
+               e_error(conn->event, "BUG: Master sent broken REQUEST cookie");
                return FALSE;
        }
        params = list + 4;
 
        client_conn = auth_client_connection_lookup(client_pid);
        if (client_conn == NULL) {
-               auth_master_log_error(conn,
+               e_error(conn->event,
                        "Master requested auth for nonexistent client %u",
                        client_pid);
                o_stream_nsend_str(conn->output,
                                   t_strdup_printf("FAIL\t%u\n", id));
        } else if (!mem_equals_timing_safe(client_conn->cookie, cookie, sizeof(cookie))) {
-               auth_master_log_error(conn,
+               e_error(conn->event,
                        "Master requested auth for client %u with invalid cookie",
                        client_pid);
                o_stream_nsend_str(conn->output,
                                   t_strdup_printf("FAIL\t%u\n", id));
        } else if (!auth_request_handler_master_request(
                        client_conn->request_handler, conn, id, client_id, params)) {
-               auth_master_log_error(conn,
+               e_error(conn->event,
                        "Master requested auth for non-login client %u",
                        client_pid);
                o_stream_nsend_str(conn->output,
@@ -162,8 +160,7 @@ master_input_cache_flush(struct auth_master_connection *conn, const char *args)
        /* <id> [<user> [<user> [..]] */
        list = t_strsplit_tabescaped(args);
        if (list[0] == NULL) {
-               auth_master_log_error(conn,
-                       "BUG: doveadm sent broken CACHE-FLUSH");
+               e_error(conn->event, "BUG: doveadm sent broken CACHE-FLUSH");
                return FALSE;
        }
 
@@ -194,7 +191,7 @@ master_input_auth_request(struct auth_master_connection *conn, const char *args,
        list = t_strsplit_tabescaped(args);
        if (list[0] == NULL || list[1] == NULL ||
            str_to_uint(list[0], &id) < 0) {
-               auth_master_log_error(conn, "BUG: Master sent broken %s", cmd);
+               e_error(conn->event, "BUG: Master sent broken %s", cmd);
                return -1;
        }
 
@@ -218,7 +215,7 @@ master_input_auth_request(struct auth_master_connection *conn, const char *args,
        }
 
        if (auth_request->fields.service == NULL) {
-               auth_master_log_error(conn,
+               e_error(conn->event,
                        "BUG: Master sent %s request without service", cmd);
                auth_request_unref(&auth_request);
                auth_master_connection_unref(&conn);
@@ -553,13 +550,13 @@ master_input_list(struct auth_master_connection *conn, const char *args)
        /* <id> [<parameters>] */
        list = t_strsplit_tabescaped(args);
        if (list[0] == NULL || str_to_uint(list[0], &id) < 0) {
-               auth_master_log_error(conn, "BUG: Master sent broken LIST");
+               e_error(conn->event, "BUG: Master sent broken LIST");
                return FALSE;
        }
        list++;
 
        if (conn->iter_ctx != NULL) {
-               auth_master_log_error(conn,
+               e_error(conn->event,
                        "Auth client is already iterating users");
                str = t_strdup_printf("DONE\t%u\tfail\n", id);
                o_stream_nsend_str(conn->output, str);
@@ -567,7 +564,7 @@ master_input_list(struct auth_master_connection *conn, const char *args)
        }
 
        if (conn->userdb_restricted_uid != 0) {
-               auth_master_log_error(conn,
+               e_error(conn->event,
                        "Auth client doesn't have permissions to list users: %s",
                        auth_restricted_reason(conn));
                str = t_strdup_printf("DONE\t%u\tfail\n", id);
@@ -578,7 +575,7 @@ master_input_list(struct auth_master_connection *conn, const char *args)
        while (userdb != NULL && userdb->userdb->iface->iterate_init == NULL)
                userdb = userdb->next;
        if (userdb == NULL) {
-               auth_master_log_error(conn,
+               e_error(conn->event,
                        "Trying to iterate users, but userdbs don't support it");
                str = t_strdup_printf("DONE\t%u\tfail\n", id);
                o_stream_nsend_str(conn->output, str);
@@ -648,14 +645,14 @@ auth_master_input_line(struct auth_master_connection *conn, const char *line)
                if (str_begins(line, "CACHE-FLUSH\t"))
                        return master_input_cache_flush(conn, line + 12);
                if (str_begins(line, "CPID\t")) {
-                       auth_master_log_error(conn,
+                       e_error(conn->event,
                                "Authentication client trying to connect to "
                                "master socket");
                        return FALSE;
                }
        }
 
-       auth_master_log_error(conn, "BUG: Unknown command in %s socket: %s",
+       e_error(conn->event, "BUG: Unknown command in %s socket: %s",
                conn->userdb_only ? "userdb" : "master",
                str_sanitize(line, 80));
        return FALSE;
@@ -675,8 +672,7 @@ static void master_input(struct auth_master_connection *conn)
                return;
        case -2:
                /* buffer full */
-               auth_master_log_error(conn,
-                       "BUG: Master sent us more than %d bytes",
+               e_error(conn->event, "BUG: Master sent us more than %d bytes",
                        (int)MAX_INBUF_SIZE);
                 auth_master_connection_destroy(&conn);
                return;
@@ -691,7 +687,7 @@ static void master_input(struct auth_master_connection *conn)
                if (!str_begins(line, "VERSION\t") ||
                    !str_uint_equals(t_strcut(line + 8, '\t'),
                                     AUTH_MASTER_PROTOCOL_MAJOR_VERSION)) {
-                       auth_master_log_error(conn,
+                       e_error(conn->event,
                                "Master not compatible with this server "
                                "(mixed old and new binaries?)");
                        auth_master_connection_destroy(&conn);
@@ -746,7 +742,7 @@ auth_master_connection_set_permissions(struct auth_master_connection *conn,
        }
 
        if (net_getunixcred(conn->fd, &cred) < 0) {
-               auth_master_log_error(conn,
+               e_error(conn->event,
                        "userdb connection: Failed to get peer's credentials");
                return -1;
        }
@@ -784,6 +780,8 @@ auth_master_connection_create(struct auth *auth, int fd,
        o_stream_set_flush_callback(conn->output, master_output, conn);
        conn->io = io_add(fd, IO_READ, master_input, conn);
        conn->userdb_only = userdb_only;
+       conn->event = event_create(auth_event);
+       event_set_log_message_callback(conn->event, auth_master_event_log_callback, conn);
 
        line = t_strdup_printf("VERSION\t%u\t%u\nSPID\t%s\n",
                               AUTH_MASTER_PROTOCOL_MAJOR_VERSION,
@@ -841,6 +839,7 @@ void auth_master_connection_unref(struct auth_master_connection **_conn)
        i_stream_unref(&conn->input);
        o_stream_unref(&conn->output);
 
+       event_unref(&conn->event);
        i_free(conn->path);
        i_free(conn);
 }
index 20d52ac7aaf606a36b7f5c47b47d75c00f478b5a..c2a5dd5f8ca74fdc45e3b68dbc7c0911467db5b3 100644 (file)
@@ -7,6 +7,7 @@ struct auth_stream_reply;
 struct auth_master_connection {
        struct auth_master_connection *prev, *next;
        struct auth *auth;
+       struct event *event;
        int refcount;
 
        struct timeval create_time, handshake_time;
@@ -27,9 +28,6 @@ struct auth_master_connection {
        bool userdb_only:1;
 };
 
-void auth_master_log_error(struct auth_master_connection *conn,
-                          const char *fmt, ...) ATTR_FORMAT(2, 3);
-
 struct auth_master_connection *
 auth_master_connection_create(struct auth *auth, int fd,
                              const char *path, const struct stat *socket_st,
index 9bf692438174427dc78098f0f20546e1fe5ac636..f104d14557c95e6d6cbabffdd5baf83a35c7f67c 100644 (file)
@@ -834,7 +834,7 @@ bool auth_request_handler_master_request(struct auth_request_handler *handler,
 
        request = hash_table_lookup(handler->requests, POINTER_CAST(client_id));
        if (request == NULL) {
-               auth_master_log_error(master, "Master request %u.%u not found",
+               e_error(master->event, "Master request %u.%u not found",
                        handler->client_pid, client_id);
                return auth_master_request_failed(handler, master, id);
        }
@@ -860,7 +860,7 @@ bool auth_request_handler_master_request(struct auth_request_handler *handler,
        if (request->session_pid != (pid_t)-1 &&
            net_getunixcred(master->fd, &cred) == 0 &&
            cred.pid != (pid_t)-1 && request->session_pid != cred.pid) {
-               auth_master_log_error(master,
+               e_error(master->event,
                        "Session pid %ld provided by master for request %u.%u "
                        "did not match peer credentials (pid=%ld, uid=%ld)",
                        (long)request->session_pid,
@@ -871,7 +871,7 @@ bool auth_request_handler_master_request(struct auth_request_handler *handler,
 
        if (request->state != AUTH_REQUEST_STATE_FINISHED ||
            !request->fields.successful) {
-               auth_master_log_error(master,
+               e_error(master->event,
                        "Master requested unfinished authentication request "
                        "%u.%u", handler->client_pid, client_id);
                handler->master_callback(t_strdup_printf("FAIL\t%u", id),