#include "str.h"
#include "strescape.h"
#include "time-util.h"
+#include "process-title.h"
#include "master-service-private.h"
#include "login-server.h"
#include "login-server-auth.h"
char *postlogin_socket_path;
unsigned int postlogin_timeout_secs;
+ bool update_proctitle:1;
bool stopping:1;
};
login_server_stop(server);
}
+static void login_server_proctitle_refresh(struct login_server *server)
+{
+ /* This function assumes that client_limit=1. With a higher limit
+ it just returns the first client's state, which isn't too bad
+ either. */
+ if (server->conns == NULL)
+ process_title_set("[idling]");
+ else if (server->conns->requests == NULL)
+ process_title_set("[waiting on client]");
+ else if (server->conns->requests->postlogin_request == NULL)
+ process_title_set("[auth lookup]");
+ else
+ process_title_set("[post-login script]");
+}
+
struct login_server *
login_server_init(struct master_service *service,
const struct login_server_settings *set)
set->request_auth_token);
server->postlogin_socket_path = i_strdup(set->postlogin_socket_path);
server->postlogin_timeout_secs = set->postlogin_timeout_secs;
+ server->update_proctitle = set->update_proctitle;
master_service_add_stop_new_connections_callback(service,
login_server_stop_new_connections, server);
int fd;
ssize_t ret;
+ if (request->conn->server->update_proctitle)
+ process_title_set("[post-login script]");
+
fd = net_connect_unix_with_retries(socket_path, 1000);
if (fd == -1) {
e_error(request->conn->event, "net_connect_unix(%s) failed: %m%s",
i_assert(request->postlogin_request == NULL);
request->postlogin_request = pl;
+
+ login_server_proctitle_refresh(server);
return 0;
}
memcpy(request->data, data+i, req.data_size);
conn->refcount++;
DLLIST_PREPEND(&conn->requests, request);
+ login_server_proctitle_refresh(conn->server);
login_server_auth_request(server->auth, &req,
login_server_auth_callback, request);
event_set_log_message_callback(conn->event, login_server_event_log_callback, conn);
DLLIST_PREPEND(&server->conns, conn);
+ login_server_proctitle_refresh(server);
/* NOTE: currently there's a separate connection for each request. */
}
o_stream_unref(&conn->output);
DLLIST_REMOVE(&conn->server->conns, conn);
+ login_server_proctitle_refresh(conn->server);
if (!conn->login_success)
master_service_client_connection_destroyed(conn->server->service);