#include "lib-signals.h"
#include "ioloop.h"
#include "array.h"
+#include "strescape.h"
#include "env-util.h"
#include "home-expand.h"
#include "process-title.h"
value = getenv("SSL_SOCKET_COUNT");
if (value != NULL)
service->ssl_socket_count = atoi(value);
+ value = getenv("SOCKET_NAMES");
+ if (value != NULL) {
+ service->listener_names =
+ p_strsplit_tabescaped(default_pool, value);
+ service->listener_names_count =
+ str_array_length((void *)service->listener_names);
+ }
/* set up some kind of logging until we know exactly how and where
we want to log */
l->fd = -1;
}
conn.ssl = l->ssl;
+ conn.name = l->name;
net_set_nonblock(conn.fd, TRUE);
master_service_client_connection_created(service);
l->service = service;
l->fd = MASTER_LISTEN_FD_FIRST + i;
+ l->name = i < service->listener_names_count ?
+ service->listener_names[i] : "";
if (i >= service->socket_count - service->ssl_socket_count)
l->ssl = TRUE;
#include "base64.h"
#include "hash.h"
#include "str.h"
+#include "strescape.h"
#include "llist.h"
#include "hostpid.h"
#include "env-util.h"
{
struct service_listener *const *listeners;
ARRAY_TYPE(dup2) dups;
+ string_t *listener_names;
unsigned int i, count, n = 0, socket_listener_count, ssl_socket_count;
/* stdin/stdout is already redirected to /dev/null. Other master fds
socket_listener_count = 0;
listeners = array_get(&service->listeners, &count);
t_array_init(&dups, count + 10);
+ listener_names = t_str_new(256);
switch (service->type) {
case SERVICE_TYPE_LOG:
break;
}
+ /* anvil/log fds have no names */
+ for (i = MASTER_LISTEN_FD_FIRST; i < n; i++)
+ str_append_c(listener_names, '\t');
+
/* first add non-ssl listeners */
for (i = 0; i < count; i++) {
if (listeners[i]->fd != -1 &&
(listeners[i]->type != SERVICE_LISTENER_INET ||
!listeners[i]->set.inetset.set->ssl)) {
+ str_tabescape_write(listener_names, listeners[i]->name);
+ str_append_c(listener_names, '\t');
dup2_append(&dups, listeners[i]->fd,
MASTER_LISTEN_FD_FIRST + n);
n++; socket_listener_count++;
if (listeners[i]->fd != -1 &&
listeners[i]->type == SERVICE_LISTENER_INET &&
listeners[i]->set.inetset.set->ssl) {
+ str_tabescape_write(listener_names, listeners[i]->name);
+ str_append_c(listener_names, '\t');
dup2_append(&dups, listeners[i]->fd,
MASTER_LISTEN_FD_FIRST + n);
n++; socket_listener_count++;
env_put(t_strdup_printf("SOCKET_COUNT=%d", socket_listener_count));
env_put(t_strdup_printf("SSL_SOCKET_COUNT=%d", ssl_socket_count));
+ env_put(t_strdup_printf("SOCKET_NAMES=%s", str_c(listener_names)));
}
static void
l->type = type;
l->fd = -1;
l->set.fileset.set = set;
+ l->name = strrchr(set->path, '/');
+ if (l->name != NULL)
+ l->name++;
+ else
+ l->name = set->path;
if (get_uidgid(set->user, &l->set.fileset.uid, &gid, error_r) < 0)
set_name = "user";
l->set.inetset.set = set;
l->set.inetset.ip = *ip;
l->inet_address = p_strdup(service->list->pool, address);
+ l->name = set->name;
if (set->port > 65535) {
*error_r = t_strdup_printf("Invalid port: %u", set->port);