diff options
author | Simon McVittie <smcv@debian.org> | 2016-07-20 10:04:50 +0100 |
---|---|---|
committer | Simon McVittie <smcv@debian.org> | 2016-09-30 19:36:50 +0100 |
commit | 1c807207bb96e3634fed2fde72237f7f37bf3cd9 (patch) | |
tree | f5742df10169615c27599c98fedd052b957da74f | |
parent | 2c472b839852ff44c01f223c4e2d4cc1bdebf277 (diff) | |
download | dbus-1c807207bb96e3634fed2fde72237f7f37bf3cd9.tar.gz |
dbus-daemon: add --syslog, --nosyslog, --syslog-only
Like --fork and --nofork, these override what the configuration says.
Use --syslog-only to force the systemd services to log to the Journal
(via syslog, which means we see the severity metadata) instead of
testing sd_booted() in the configuration implementation.
Signed-off-by: Simon McVittie <smcv@debian.org>
-rw-r--r-- | bus/bus.c | 33 | ||||
-rw-r--r-- | bus/bus.h | 5 | ||||
-rw-r--r-- | bus/dbus.service.in | 2 | ||||
-rw-r--r-- | bus/main.c | 18 | ||||
-rw-r--r-- | bus/systemd-user/dbus.service.in | 2 | ||||
-rw-r--r-- | doc/dbus-daemon.1.xml.in | 37 |
6 files changed, 76 insertions, 21 deletions
@@ -47,10 +47,6 @@ #include <signal.h> #endif -#ifdef HAVE_SYSTEMD -#include <systemd/sd-daemon.h> -#endif - struct BusContext { int refcount; @@ -285,6 +281,7 @@ process_config_first_time_only (BusContext *context, DBusList **auth_mechanisms_list; int len; dbus_bool_t retval; + DBusLogFlags log_flags = DBUS_LOG_FLAGS_STDERR; _DBUS_ASSERT_ERROR_IS_CLEAR (error); @@ -292,26 +289,28 @@ process_config_first_time_only (BusContext *context, auth_mechanisms = NULL; pidfile = NULL; - context->syslog = bus_config_parser_get_syslog (parser); + if (flags & BUS_CONTEXT_FLAG_SYSLOG_ALWAYS) + { + context->syslog = TRUE; + log_flags |= DBUS_LOG_FLAGS_SYSTEM_LOG; - if (context->syslog) + if (flags & BUS_CONTEXT_FLAG_SYSLOG_ONLY) + log_flags &= ~DBUS_LOG_FLAGS_STDERR; + } + else if (flags & BUS_CONTEXT_FLAG_SYSLOG_NEVER) { -#ifdef HAVE_SYSTEMD - /* If running under systemd, we don't want to log to both stderr and - * syslog, because our stderr is probably connected to journald too, - * so we'd duplicate all our messages. */ - if (sd_booted () > 0) - _dbus_init_system_log ("dbus-daemon", DBUS_LOG_FLAGS_SYSTEM_LOG); - else -#endif - _dbus_init_system_log ("dbus-daemon", - DBUS_LOG_FLAGS_SYSTEM_LOG | DBUS_LOG_FLAGS_STDERR); + context->syslog = FALSE; } else { - _dbus_init_system_log ("dbus-daemon", DBUS_LOG_FLAGS_STDERR); + context->syslog = bus_config_parser_get_syslog (parser); + + if (context->syslog) + log_flags |= DBUS_LOG_FLAGS_SYSTEM_LOG; } + _dbus_init_system_log ("dbus-daemon", log_flags); + if (flags & BUS_CONTEXT_FLAG_SYSTEMD_ACTIVATION) context->systemd_activation = TRUE; else @@ -72,7 +72,10 @@ typedef enum BUS_CONTEXT_FLAG_FORK_ALWAYS = (1 << 1), BUS_CONTEXT_FLAG_FORK_NEVER = (1 << 2), BUS_CONTEXT_FLAG_WRITE_PID_FILE = (1 << 3), - BUS_CONTEXT_FLAG_SYSTEMD_ACTIVATION = (1 << 4) + BUS_CONTEXT_FLAG_SYSTEMD_ACTIVATION = (1 << 4), + BUS_CONTEXT_FLAG_SYSLOG_ALWAYS = (1 << 5), + BUS_CONTEXT_FLAG_SYSLOG_NEVER = (1 << 6), + BUS_CONTEXT_FLAG_SYSLOG_ONLY = (1 << 7) } BusContextFlags; BusContext* bus_context_new (const DBusString *config_file, diff --git a/bus/dbus.service.in b/bus/dbus.service.in index 3bc4726a..ca0b7e96 100644 --- a/bus/dbus.service.in +++ b/bus/dbus.service.in @@ -4,6 +4,6 @@ Documentation=man:dbus-daemon(1) Requires=dbus.socket [Service] -ExecStart=@EXPANDED_BINDIR@/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation +ExecStart=@EXPANDED_BINDIR@/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only ExecReload=@EXPANDED_BINDIR@/dbus-send --print-reply --system --type=method_call --dest=org.freedesktop.DBus / org.freedesktop.DBus.ReloadConfig OOMScoreAdjust=-900 @@ -146,6 +146,9 @@ usage (void) " [--introspect]" " [--address=ADDRESS]" " [--nopidfile]" + " [--nosyslog]" + " [--syslog]" + " [--syslog-only]" " [--nofork]" #ifdef DBUS_UNIX " [--fork]" @@ -441,6 +444,21 @@ main (int argc, char **argv) { introspect (); } + else if (strcmp (arg, "--nosyslog") == 0) + { + flags &= ~BUS_CONTEXT_FLAG_SYSLOG_ALWAYS; + flags |= BUS_CONTEXT_FLAG_SYSLOG_NEVER; + } + else if (strcmp (arg, "--syslog") == 0) + { + flags &= ~BUS_CONTEXT_FLAG_SYSLOG_NEVER; + flags |= BUS_CONTEXT_FLAG_SYSLOG_ALWAYS; + } + else if (strcmp (arg, "--syslog-only") == 0) + { + flags &= ~BUS_CONTEXT_FLAG_SYSLOG_NEVER; + flags |= (BUS_CONTEXT_FLAG_SYSLOG_ALWAYS|BUS_CONTEXT_FLAG_SYSLOG_ONLY); + } else if (strcmp (arg, "--nofork") == 0) { flags &= ~BUS_CONTEXT_FLAG_FORK_ALWAYS; diff --git a/bus/systemd-user/dbus.service.in b/bus/systemd-user/dbus.service.in index 4355d728..7ceffbee 100644 --- a/bus/systemd-user/dbus.service.in +++ b/bus/systemd-user/dbus.service.in @@ -4,5 +4,5 @@ Documentation=man:dbus-daemon(1) Requires=dbus.socket [Service] -ExecStart=@EXPANDED_BINDIR@/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation +ExecStart=@EXPANDED_BINDIR@/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only ExecReload=@EXPANDED_BINDIR@/dbus-send --print-reply --session --type=method_call --dest=org.freedesktop.DBus / org.freedesktop.DBus.ReloadConfig diff --git a/doc/dbus-daemon.1.xml.in b/doc/dbus-daemon.1.xml.in index df67a907..f2170377 100644 --- a/doc/dbus-daemon.1.xml.in +++ b/doc/dbus-daemon.1.xml.in @@ -29,6 +29,9 @@ <arg choice='opt'><arg choice='plain'>--print-address </arg><arg choice='opt'><replaceable>=DESCRIPTOR</replaceable></arg></arg> <arg choice='opt'><arg choice='plain'>--print-pid </arg><arg choice='opt'><replaceable>=DESCRIPTOR</replaceable></arg></arg> <arg choice='opt'>--fork </arg> + <arg choice='opt'>--nosyslog </arg> + <arg choice='opt'>--syslog </arg> + <arg choice='opt'>--syslog-only </arg> <sbr/> </cmdsynopsis> </refsynopsisdiv> @@ -164,6 +167,36 @@ files.</para> </listitem> </varlistentry> + + <varlistentry> + <term><option>--syslog</option></term> + <listitem> + <para>Force the message bus to use the system log for messages, + in addition to writing to standard error, even if the configuration + file does not specify that it should. On Unix, this uses + the syslog; on Windows, this uses OutputDebugString().</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><option>--syslog-only</option></term> + <listitem> + <para>Force the message bus to use the system log for messages, + and <emphasis>not</emphasis> duplicate them to standard error. + On Unix, this uses the syslog; on Windows, this uses + OutputDebugString().</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><option>--nosyslog</option></term> + <listitem> + <para>Force the message bus to use only standard error for messages, + even if the configuration file specifies that it should use + the system log.</para> + </listitem> + </varlistentry> + </variablelist> </refsect1> @@ -325,7 +358,9 @@ This may be useful to avoid affecting the behavior of child processes.</para> </itemizedlist> -<para>If present, the bus daemon will log to syslog.</para> +<para>If present, the bus daemon will log to syslog. The + --syslog, --syslog-only and --nosyslog command-line options take precedence + over this setting.</para> <itemizedlist remap='TP'> |