master-auth.c revision fd05c47210cad1f6d8effbda5cba7f7d938ca9a0
5f90993426fa2bdc3b3d994c9e85e0805bb92bbcSimo Sorce/* Copyright (c) 2005-2014 Dovecot authors, see the included COPYING file */
5f90993426fa2bdc3b3d994c9e85e0805bb92bbcSimo Sorce#define MASTER_AUTH_REQUEST_TIMEOUT_MSECS (MASTER_LOGIN_TIMEOUT_SECS/2*1000)
5f90993426fa2bdc3b3d994c9e85e0805bb92bbcSimo Sorce unsigned int tag;
5f90993426fa2bdc3b3d994c9e85e0805bb92bbcSimo Sorce unsigned int buf_pos;
5f90993426fa2bdc3b3d994c9e85e0805bb92bbcSimo Sorce const char *path;
5f90993426fa2bdc3b3d994c9e85e0805bb92bbcSimo Sorce HASH_TABLE(void *, struct master_auth_connection *) connections;
5f90993426fa2bdc3b3d994c9e85e0805bb92bbcSimo Sorcemaster_auth_init(struct master_service *service, const char *path)
5f90993426fa2bdc3b3d994c9e85e0805bb92bbcSimo Sorce pool = pool_alloconly_create("master auth", 1024);
5f90993426fa2bdc3b3d994c9e85e0805bb92bbcSimo Sorce hash_table_create_direct(&auth->connections, pool, 0);
581de96fc30b7fe44070f17a8a73f3374d38d6ffLukas Slebodnikmaster_auth_connection_deinit(struct master_auth_connection **_conn)
31c47cacc7f9453153e57319474909d23122883fPavel Březina i_fatal("close(%s) failed: %m", conn->auth->path);
9028706a00da1bc48547e74aa872c825ac15adb2Michal Zidekvoid master_auth_deinit(struct master_auth **_auth)
5f90993426fa2bdc3b3d994c9e85e0805bb92bbcSimo Sorce iter = hash_table_iterate_init(auth->connections);
5f90993426fa2bdc3b3d994c9e85e0805bb92bbcSimo Sorce while (hash_table_iterate(iter, auth->connections, &key, &conn)) {
5f90993426fa2bdc3b3d994c9e85e0805bb92bbcSimo Sorcestatic void master_auth_connection_input(struct master_auth_connection *conn)
581de96fc30b7fe44070f17a8a73f3374d38d6ffLukas Slebodnik i_error("read(%s) failed: Remote closed connection "
5f90993426fa2bdc3b3d994c9e85e0805bb92bbcSimo Sorce "(service's process_limit reached?)",
5f90993426fa2bdc3b3d994c9e85e0805bb92bbcSimo Sorce i_error("read(%s) failed: %m", conn->auth->path);
5f90993426fa2bdc3b3d994c9e85e0805bb92bbcSimo Sorce /* reply is now read */
c3ef027218fe9a7d16a70ca9d2f53e3d995e369fSimo Sorce i_error("master(%s): Received reply with unknown tag %u",
c3ef027218fe9a7d16a70ca9d2f53e3d995e369fSimo Sorce /* request aborted */
225dc6914cdc8920b02a129b98ece1ed97b99c03Lukas Slebodnikstatic void master_auth_connection_timeout(struct master_auth_connection *conn)
39b31427e2d11ca318df11fd48db33a7cc610aa7Lukas Slebodnik i_error("master(%s): Auth request timed out (received %u/%u bytes)",
5f90993426fa2bdc3b3d994c9e85e0805bb92bbcSimo Sorcevoid master_auth_request(struct master_auth *auth, int fd,
5f90993426fa2bdc3b3d994c9e85e0805bb92bbcSimo Sorce const unsigned char *data,
if (ret < 0)
if (ret < 0) {