changeset 3724:d22c883021da HEAD

Added syslog_facility setting to config file.
author Timo Sirainen <tss@iki.fi>
date Fri, 02 Dec 2005 14:53:21 +0200
parents 17492616f363
children cf8933dabc95
files dovecot-example.conf src/auth/main.c src/imap/main.c src/login-common/main.c src/master/Makefile.am src/master/main.c src/master/master-settings.c src/master/master-settings.h src/pop3/main.c
diffstat 9 files changed, 53 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/dovecot-example.conf	Fri Dec 02 13:30:45 2005 +0200
+++ b/dovecot-example.conf	Fri Dec 02 14:53:21 2005 +0200
@@ -75,6 +75,11 @@
 # format.
 #log_timestamp = "%b %d %H:%M:%S "
 
+# Syslog facility to use if you're logging to syslog. Usually if you don't
+# want to use "mail", you'll use local0..local7. Also other standard
+# facilities are supported.
+#syslog_facility = mail
+
 ##
 ## Login processes
 ##
--- a/src/auth/main.c	Fri Dec 02 13:30:45 2005 +0200
+++ b/src/auth/main.c	Fri Dec 02 14:53:21 2005 +0200
@@ -45,14 +45,18 @@
 
 static void open_logfile(void)
 {
+	const char *env;
+
 	if (getenv("LOG_TO_MASTER") != NULL) {
 		i_set_failure_internal();
 		return;
 	}
 
-	if (getenv("USE_SYSLOG") != NULL)
-		i_set_failure_syslog("dovecot-auth", LOG_NDELAY, LOG_MAIL);
-	else {
+	if (getenv("USE_SYSLOG") != NULL) {
+		env = getenv("SYSLOG_FACILITY");
+		i_set_failure_syslog("dovecot-auth", LOG_NDELAY,
+				     env == NULL ? LOG_MAIL : atoi(env));
+	} else {
 		/* log to file or stderr */
 		i_set_failure_file(getenv("LOGFILE"), "dovecot-auth");
 	}
--- a/src/imap/main.c	Fri Dec 02 13:30:45 2005 +0200
+++ b/src/imap/main.c	Fri Dec 02 14:53:21 2005 +0200
@@ -104,9 +104,11 @@
 	}
 	i_snprintf(log_prefix, sizeof(log_prefix), "imap(%s)", user);
 
-	if (getenv("USE_SYSLOG") != NULL)
-		i_set_failure_syslog(log_prefix, LOG_NDELAY, LOG_MAIL);
-	else {
+	if (getenv("USE_SYSLOG") != NULL) {
+		const char *env = getenv("SYSLOG_FACILITY");
+		i_set_failure_syslog(log_prefix, LOG_NDELAY,
+				     env == NULL ? LOG_MAIL : atoi(env));
+	} else {
 		/* log to file or stderr */
 		i_set_failure_file(getenv("LOGFILE"), log_prefix);
 	}
--- a/src/login-common/main.c	Fri Dec 02 13:30:45 2005 +0200
+++ b/src/login-common/main.c	Fri Dec 02 14:53:21 2005 +0200
@@ -147,7 +147,9 @@
 		i_set_failure_internal();
 	else {
 		/* log to syslog */
-		i_set_failure_syslog(process_name, LOG_NDELAY, LOG_MAIL);
+		env = getenv("SYSLOG_FACILITY");
+		i_set_failure_syslog(process_name, LOG_NDELAY,
+				     env == NULL ? LOG_MAIL : atoi(env));
 
 		/* if we don't chroot, we must chdir */
 		env = getenv("LOGIN_DIR");
--- a/src/master/Makefile.am	Fri Dec 02 13:30:45 2005 +0200
+++ b/src/master/Makefile.am	Fri Dec 02 14:53:21 2005 +0200
@@ -23,6 +23,7 @@
 	mail-process.c \
 	main.c \
 	master-settings.c \
+	syslog-util.c \
 	ssl-init.c \
 	ssl-init-gnutls.c \
 	ssl-init-openssl.c
@@ -35,4 +36,5 @@
 	mail-process.h \
 	master-login-interface.h \
 	master-settings.h \
+	syslog-util.h \
 	ssl-init.h
--- a/src/master/main.c	Fri Dec 02 13:30:45 2005 +0200
+++ b/src/master/main.c	Fri Dec 02 14:53:21 2005 +0200
@@ -11,6 +11,7 @@
 #include "auth-process.h"
 #include "login-process.h"
 #include "mail-process.h"
+#include "syslog-util.h"
 #include "ssl-init.h"
 #include "log.h"
 
@@ -61,6 +62,8 @@
 
 void child_process_init_env(void)
 {
+	int facility;
+
 	/* remove all environment, we don't need them */
 	env_clean();
 
@@ -69,6 +72,11 @@
 	if (env_tz != NULL)
 		env_put(t_strconcat("TZ=", env_tz, NULL));
 
+	if (!syslog_facility_find(settings_root->defaults->syslog_facility,
+				  &facility))
+		facility = LOG_MAIL;
+	env_put(t_strdup_printf("SYSLOG_FACILITY=%d", facility));
+
 #ifdef DEBUG
 	if (gdb) env_put("GDB=1");
 #endif
@@ -95,9 +103,14 @@
 
 static void set_logfile(struct settings *set)
 {
-	if (set->log_path == NULL)
-		i_set_failure_syslog("dovecot", LOG_NDELAY, LOG_MAIL);
-	else {
+	int facility;
+
+	if (set->log_path == NULL) {
+		if (!syslog_facility_find(set->syslog_facility, &facility))
+			facility = LOG_MAIL;
+
+		i_set_failure_syslog("dovecot", LOG_NDELAY, facility);
+	} else {
 		/* log to file or stderr */
 		i_set_failure_file(set->log_path, "dovecot");
 	}
--- a/src/master/master-settings.c	Fri Dec 02 13:30:45 2005 +0200
+++ b/src/master/master-settings.c	Fri Dec 02 14:53:21 2005 +0200
@@ -4,6 +4,7 @@
 #include "istream.h"
 #include "safe-mkdir.h"
 #include "unlink-directory.h"
+#include "syslog-util.h"
 #include "settings.h"
 
 #include <stdio.h>
@@ -47,6 +48,7 @@
 	DEF(SET_STR, log_path),
 	DEF(SET_STR, info_log_path),
 	DEF(SET_STR, log_timestamp),
+	DEF(SET_STR, syslog_facility),
 
 	/* general */
 	DEF(SET_STR, protocols),
@@ -239,6 +241,7 @@
 	MEMBER(log_path) NULL,
 	MEMBER(info_log_path) NULL,
 	MEMBER(log_timestamp) DEFAULT_FAILURE_STAMP_FORMAT,
+	MEMBER(syslog_facility) "mail",
 
 	/* general */
 	MEMBER(protocols) "imap imaps",
@@ -511,6 +514,7 @@
 static int settings_verify(struct settings *set)
 {
 	const char *dir;
+	int facility;
 
 	if (!get_login_uid(set))
 		return FALSE;
@@ -553,6 +557,11 @@
 		}
 	}
 
+	if (!syslog_facility_find(set->syslog_facility, &facility)) {
+		i_error("Unknown syslog_facility '%s'", set->syslog_facility);
+		return FALSE;
+	}
+
 #ifdef HAVE_SSL
 	if (!set->ssl_disable) {
 		if (set->ssl_ca_file != NULL &&
--- a/src/master/master-settings.h	Fri Dec 02 13:30:45 2005 +0200
+++ b/src/master/master-settings.h	Fri Dec 02 14:53:21 2005 +0200
@@ -18,6 +18,7 @@
 	const char *log_path;
 	const char *info_log_path;
 	const char *log_timestamp;
+	const char *syslog_facility;
 
 	/* general */
 	const char *protocols;
--- a/src/pop3/main.c	Fri Dec 02 13:30:45 2005 +0200
+++ b/src/pop3/main.c	Fri Dec 02 14:53:21 2005 +0200
@@ -119,9 +119,11 @@
 	}
 	i_snprintf(log_prefix, sizeof(log_prefix), "pop3(%s)", user);
 
-	if (getenv("USE_SYSLOG") != NULL)
-		i_set_failure_syslog(log_prefix, LOG_NDELAY, LOG_MAIL);
-	else {
+	if (getenv("USE_SYSLOG") != NULL) {
+		const char *env = getenv("SYSLOG_FACILITY");
+		i_set_failure_syslog(log_prefix, LOG_NDELAY,
+				     env == NULL ? LOG_MAIL : atoi(env));
+	} else {
 		/* log to file or stderr */
 		i_set_failure_file(getenv("LOGFILE"), log_prefix);
 	}