summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <smcv@debian.org>2016-07-20 10:04:50 +0100
committerSimon McVittie <smcv@debian.org>2016-09-30 19:36:50 +0100
commit1c807207bb96e3634fed2fde72237f7f37bf3cd9 (patch)
treef5742df10169615c27599c98fedd052b957da74f
parent2c472b839852ff44c01f223c4e2d4cc1bdebf277 (diff)
downloaddbus-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.c33
-rw-r--r--bus/bus.h5
-rw-r--r--bus/dbus.service.in2
-rw-r--r--bus/main.c18
-rw-r--r--bus/systemd-user/dbus.service.in2
-rw-r--r--doc/dbus-daemon.1.xml.in37
6 files changed, 76 insertions, 21 deletions
diff --git a/bus/bus.c b/bus/bus.c
index a134dc6c..8856dab3 100644
--- a/bus/bus.c
+++ b/bus/bus.c
@@ -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
diff --git a/bus/bus.h b/bus/bus.h
index 3fab59ff..b7869b20 100644
--- a/bus/bus.h
+++ b/bus/bus.h
@@ -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
diff --git a/bus/main.c b/bus/main.c
index 0331dafa..1d36c512 100644
--- a/bus/main.c
+++ b/bus/main.c
@@ -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'>