]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: Add event with category "auth" to struct auth_request.
authorSergey Kitov <sergey.kitov@open-xchange.com>
Mon, 19 Mar 2018 11:53:33 +0000 (13:53 +0200)
committerAki Tuomi <aki.tuomi@dovecot.fi>
Tue, 7 Aug 2018 11:10:07 +0000 (14:10 +0300)
src/auth/auth-request-handler.c
src/auth/auth-request.c
src/auth/auth-request.h

index 7e64cae1d1b4112f21d3a56ee38076276d0cb45a..ae7b458c9c821d29f105eb100ac0e2bf568d3e7e 100644 (file)
@@ -517,7 +517,7 @@ bool auth_request_handler_auth_begin(struct auth_request_handler *handler,
                }
        }
 
-       request = auth_request_new(mech);
+       request = auth_request_new(mech, handler->conn->event);
        request->handler = handler;
        request->connect_uid = handler->connect_uid;
        request->client_pid = handler->client_pid;
index 5bfe122d7892c4a3b2aa72329662a87c82843d84..691b66597079befc5fc2eb0f33cb7ed8628d1e70 100644 (file)
@@ -76,25 +76,31 @@ void auth_request_lookup_credentials_policy_continue(struct auth_request *reques
 static
 void auth_request_policy_check_callback(int result, void *context);
 
-struct auth_request *
-auth_request_new(const struct mech_module *mech)
+static void auth_request_post_alloc_init(struct auth_request *request, struct event *parent_event)
 {
-       struct auth_request *request;
-
-       request = mech->auth_new();
-
        request->state = AUTH_REQUEST_STATE_NEW;
        auth_request_state_count[AUTH_REQUEST_STATE_NEW]++;
-
        request->refcount = 1;
        request->last_access = ioloop_time;
        request->session_pid = (pid_t)-1;
-
        request->set = global_auth_settings;
        request->debug = request->set->debug;
+       request->extra_fields = auth_fields_init(request->pool);
+       request->event = event_create(parent_event);
+       if (request->set->debug)
+               event_set_forced_debug(request->event, TRUE);
+       event_add_category(request->event, &event_category_auth);
+}
+
+struct auth_request *
+auth_request_new(const struct mech_module *mech, struct event *parent_event)
+{
+       struct auth_request *request;
+
+       request = mech->auth_new();
+       auth_request_post_alloc_init(request, parent_event);
        request->mech = mech;
        request->mech_name = mech->mech_name;
-       request->extra_fields = auth_fields_init(request->pool);
        return request;
 }
 
@@ -107,15 +113,7 @@ struct auth_request *auth_request_new_dummy(void)
        request = p_new(pool, struct auth_request, 1);
        request->pool = pool;
 
-       request->state = AUTH_REQUEST_STATE_NEW;
-       auth_request_state_count[AUTH_REQUEST_STATE_NEW]++;
-
-       request->refcount = 1;
-       request->last_access = ioloop_time;
-       request->session_pid = (pid_t)-1;
-       request->set = global_auth_settings;
-       request->debug = request->set->debug;
-       request->extra_fields = auth_fields_init(request->pool);
+       auth_request_post_alloc_init(request, NULL);
        return request;
 }
 
@@ -255,6 +253,7 @@ void auth_request_unref(struct auth_request **_request)
        if (--request->refcount > 0)
                return;
 
+       event_unref(&request->event);
        auth_request_stats_send(request);
        auth_request_state_count[request->state]--;
        auth_refresh_proctitle();
index d4a0eba9f49cf2bf826ebb87eed8d6cf0b324441..c23ce80c74f1f0b9ca7e20a3a0739af4c605af03 100644 (file)
@@ -33,6 +33,8 @@ struct auth_request {
        int refcount;
 
        pool_t pool;
+
+       struct event *event;
         enum auth_request_state state;
         /* user contains the user who is being authenticated.
            When master user is logging in as someone else, it gets more
@@ -173,7 +175,7 @@ extern const char auth_default_subsystems[2];
 #define AUTH_SUBSYS_MECH &auth_default_subsystems[1]
 
 struct auth_request *
-auth_request_new(const struct mech_module *mech);
+auth_request_new(const struct mech_module *mech, struct event *parent_event);
 struct auth_request *auth_request_new_dummy(void);
 void auth_request_init(struct auth_request *request);
 struct auth *auth_request_get_auth(struct auth_request *request);