dovecot-2.1: Listener names are now in struct master_service_con...
dovecot at dovecot.org
dovecot at dovecot.org
Fri Dec 30 12:33:17 EET 2011
details: http://hg.dovecot.org/dovecot-2.1/rev/cdf2c63ece6a
changeset: 13877:cdf2c63ece6a
user: Timo Sirainen <tss at iki.fi>
date: Fri Dec 30 12:31:58 2011 +0200
description:
Listener names are now in struct master_service_connection.name
This allows service to use the names to figure out what type the listener
is.
diffstat:
src/lib-master/master-service-private.h | 5 ++++-
src/lib-master/master-service.c | 11 +++++++++++
src/lib-master/master-service.h | 1 +
src/master/service-process.c | 12 ++++++++++++
src/master/service.c | 6 ++++++
src/master/service.h | 1 +
6 files changed, 35 insertions(+), 1 deletions(-)
diffs (171 lines):
diff -r bc9217cb0193 -r cdf2c63ece6a src/lib-master/master-service-private.h
--- a/src/lib-master/master-service-private.h Fri Dec 30 11:54:48 2011 +0200
+++ b/src/lib-master/master-service-private.h Fri Dec 30 12:31:58 2011 +0200
@@ -9,6 +9,7 @@
int fd;
bool ssl;
struct io *io;
+ const char *name;
};
struct master_service {
@@ -28,7 +29,9 @@
int syslog_facility;
unsigned int socket_count, ssl_socket_count;
- struct master_service_listener *listeners;
+ struct master_service_listener *listeners;
+ char **listener_names;
+ unsigned int listener_names_count;
struct io *io_status_write, *io_status_error;
unsigned int service_count_left;
diff -r bc9217cb0193 -r cdf2c63ece6a src/lib-master/master-service.c
--- a/src/lib-master/master-service.c Fri Dec 30 11:54:48 2011 +0200
+++ b/src/lib-master/master-service.c Fri Dec 30 12:31:58 2011 +0200
@@ -4,6 +4,7 @@
#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"
@@ -172,6 +173,13 @@
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 */
@@ -746,6 +754,7 @@
l->fd = -1;
}
conn.ssl = l->ssl;
+ conn.name = l->name;
net_set_nonblock(conn.fd, TRUE);
master_service_client_connection_created(service);
@@ -779,6 +788,8 @@
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;
diff -r bc9217cb0193 -r cdf2c63ece6a src/lib-master/master-service.h
--- a/src/lib-master/master-service.h Fri Dec 30 11:54:48 2011 +0200
+++ b/src/lib-master/master-service.h Fri Dec 30 12:31:58 2011 +0200
@@ -28,6 +28,7 @@
struct master_service_connection {
int fd;
int listen_fd;
+ const char *name;
struct ip_addr remote_ip;
unsigned int remote_port;
diff -r bc9217cb0193 -r cdf2c63ece6a src/master/service-process.c
--- a/src/master/service-process.c Fri Dec 30 11:54:48 2011 +0200
+++ b/src/master/service-process.c Fri Dec 30 12:31:58 2011 +0200
@@ -10,6 +10,7 @@
#include "base64.h"
#include "hash.h"
#include "str.h"
+#include "strescape.h"
#include "llist.h"
#include "hostpid.h"
#include "env-util.h"
@@ -38,6 +39,7 @@
{
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
@@ -50,6 +52,7 @@
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:
@@ -73,11 +76,17 @@
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++;
@@ -89,6 +98,8 @@
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++;
@@ -147,6 +158,7 @@
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
diff -r bc9217cb0193 -r cdf2c63ece6a src/master/service.c
--- a/src/master/service.c Fri Dec 30 11:54:48 2011 +0200
+++ b/src/master/service.c Fri Dec 30 12:31:58 2011 +0200
@@ -46,6 +46,11 @@
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";
@@ -123,6 +128,7 @@
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);
diff -r bc9217cb0193 -r cdf2c63ece6a src/master/service.h
--- a/src/master/service.h Fri Dec 30 11:54:48 2011 +0200
+++ b/src/master/service.h Fri Dec 30 12:31:58 2011 +0200
@@ -21,6 +21,7 @@
int fd; /* may be -1 */
struct io *io;
+ const char *name;
const char *inet_address;
union {
More information about the dovecot-cvs
mailing list