[systemd-commits] 8 commits - TODO src/core src/libsystemd src/shared units/org.freedesktop.resolve1.busname units/org.freedesktop.systemd1.busname units/systemd-resolved.service.in

Lennart Poettering lennart at kemper.freedesktop.org
Wed Jan 7 14:46:18 PST 2015


 TODO                                   |    8 -
 src/core/load-fragment-gperf.gperf.m4  |    2 
 src/core/load-fragment.c               |  147 ++++++++++++++++++++-------------
 src/core/load-fragment.h               |    1 
 src/core/service.c                     |  111 ++++++++++++++----------
 src/libsystemd/sd-bus/bus-util.c       |    1 
 src/shared/conf-parser.c               |    4 
 src/shared/conf-parser.h               |   11 +-
 src/shared/util.c                      |    2 
 units/org.freedesktop.resolve1.busname |    5 +
 units/org.freedesktop.systemd1.busname |    2 
 units/systemd-resolved.service.in      |    5 +
 12 files changed, 178 insertions(+), 121 deletions(-)

New commits:
commit 3c4230a5afb27faec2176d4642c0e2e145971b5c
Author: Lennart Poettering <lennart at poettering.net>
Date:   Wed Jan 7 23:02:08 2015 +0100

    util: upgrade default $TERM from vt102 to vt220 if we have no idea about the connected terminal
    
    So far, if we had no knowledge about the correct $TERM we defaulted to
    v102, as a safe, conservative choice. However, the terminfo data for
    vt102 is not aware of pageup/pagedown, which makes "less" much harder
    work with than necessary. Setting vt220 allows them to work correctly.
    
    "vt220" should be a sufficiently safe choice too, given that xterm,
    gnome-terminal and the linux console all strive to implement vt220 as
    baseline, already to pass pageup/pagedown correctly to apps.
    
    Effectively, with this change "journalctl -e" run inside a
    "systemd-nspawn" terminal will now run a pager where pageup/pagedown
    works, which is quite an improvement of usability for containers.

diff --git a/src/shared/util.c b/src/shared/util.c
index 6405906..6293e96 100644
--- a/src/shared/util.c
+++ b/src/shared/util.c
@@ -4005,7 +4005,7 @@ bool tty_is_vc_resolve(const char *tty) {
 const char *default_term_for_tty(const char *tty) {
         assert(tty);
 
-        return tty_is_vc_resolve(tty) ? "TERM=linux" : "TERM=vt102";
+        return tty_is_vc_resolve(tty) ? "TERM=linux" : "TERM=vt220";
 }
 
 bool dirent_is_file(const struct dirent *de) {

commit 2efe2438fd65ddda79551f97bf85160e520d52d8
Author: Lennart Poettering <lennart at poettering.net>
Date:   Wed Jan 7 22:51:48 2015 +0100

    bus-util: fix error number output when waiting for job

diff --git a/src/libsystemd/sd-bus/bus-util.c b/src/libsystemd/sd-bus/bus-util.c
index 86b83db..bb08e38 100644
--- a/src/libsystemd/sd-bus/bus-util.c
+++ b/src/libsystemd/sd-bus/bus-util.c
@@ -1760,6 +1760,7 @@ int bus_wait_for_jobs(BusWaitForJobs *d, bool quiet) {
                         if (q < 0 && r == 0)
                                 r = q;
 
+                        errno = 0;
                         log_debug_errno(q, "Got result %s/%m for job %s", strna(d->result), strna(d->name));
                 }
 

commit 1a4873c499aa01478ee2e3b9c0bc967a961d7645
Author: Lennart Poettering <lennart at poettering.net>
Date:   Wed Jan 7 22:19:59 2015 +0100

    update TODO

diff --git a/TODO b/TODO
index 7a7e4df..16395e4 100644
--- a/TODO
+++ b/TODO
@@ -334,18 +334,10 @@ Features:
 * sd-bus:
   - kdbus: process fd=-1 for incoming msgs
   - make dsrt happy, and change userspace header for kdbus to yyyyuta{tv}v
-  - kdbus: PID/TID goes missing for method calls from outside the PID namespace?
-  - kdbus: the kernel should not allow messages to be delivered that have a reply serial != 0, reply-expect unset, but no appropriate window
-  - kdbus: timestamps on kernel's NameOwnerChanged messages?
-  - kdbus' busnames.target should get pulled in by basic.target
-  - Ignore .busname units on classic D-Bus boots, systemd-resolved cannot be started on kdbus
-    without the active policy and should get a Wants=org.freedesktop.resolve1.busname to
-    pull-in the policy.
   - port to sd-resolve for connecting to TCP dbus servers
   - kdbus: maybe add controlling tty metadata fields
   - see if we can introduce a new sd_bus_get_owner_machine_id() call to retrieve the machine ID of the machine of the bus itself
   - when kdbus does not take our message without memfds, try again with memfds
-  - introduce sd_bus_emit_object_added()/sd_bus_emit_object_removed() that automatically includes the build-in interfaces in the list
   - see if we can drop more message validation on the sending side
   - add API to clone sd_bus_message objects
   - make AddMatch calls on dbus1 transports async?

commit 78ad7cf1b9d0379f1ccc516f2555cb1476ca60bd
Author: Lennart Poettering <lennart at poettering.net>
Date:   Wed Jan 7 22:19:02 2015 +0100

    units: make resolved pull in its own .busname unit, but only on kdbus systems
    
    The daemon requires the busname unit to operate, since it contains the
    policy that allows it to acquire its service name.

diff --git a/units/org.freedesktop.resolve1.busname b/units/org.freedesktop.resolve1.busname
index 02588fb..5b7a7fe 100644
--- a/units/org.freedesktop.resolve1.busname
+++ b/units/org.freedesktop.resolve1.busname
@@ -10,6 +10,11 @@ Description=Network Name Resolution Service Bus Name
 Documentation=man:systemd-resolved.service(8)
 Documentation=http://www.freedesktop.org/wiki/Software/systemd/resolved
 
+# This is pulled in by systemd-resolved.service, since it cannot run
+# without its policy set. However, let's conditionalize this unit on
+# non-kdbus system.
+ConditionPathExists=/sys/fs/kdbus/0-system/
+
 [BusName]
 Service=systemd-resolved.service
 AllowWorld=talk
diff --git a/units/systemd-resolved.service.in b/units/systemd-resolved.service.in
index 0133621..e068684 100644
--- a/units/systemd-resolved.service.in
+++ b/units/systemd-resolved.service.in
@@ -10,6 +10,11 @@ Description=Network Name Resolution
 Documentation=man:systemd-resolved.service(8)
 After=systemd-networkd.service network.service
 
+# On kdbus systems we pull in the busname explicitly, because it
+# carries policy that allows the daemon to acquire its name.
+Wants=org.freedesktop.resolve1.busname
+After=org.freedesktop.resolve1.busname
+
 [Service]
 Type=notify
 Restart=always

commit 8545f7ceaa57734236e54614897d40b673a16795
Author: Lennart Poettering <lennart at poettering.net>
Date:   Wed Jan 7 22:08:25 2015 +0100

    service: automatically create After= dependency from services to their .busname units, if BusName= is set

diff --git a/src/core/service.c b/src/core/service.c
index 26b9b56..120510c 100644
--- a/src/core/service.c
+++ b/src/core/service.c
@@ -495,8 +495,7 @@ static int service_add_default_dependencies(Service *s) {
                 return r;
 
         /* Second, activate normal shutdown */
-        r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, NULL, true);
-        return r;
+        return unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, NULL, true);
 }
 
 static void service_fix_output(Service *s) {
@@ -517,6 +516,67 @@ static void service_fix_output(Service *s) {
                 s->exec_context.std_output = UNIT(s)->manager->default_std_output;
 }
 
+static int service_add_extras(Service *s) {
+        int r;
+
+        assert(s);
+
+        if (s->type == _SERVICE_TYPE_INVALID) {
+                /* Figure out a type automatically */
+                if (s->bus_name)
+                        s->type = SERVICE_DBUS;
+                else if (s->exec_command[SERVICE_EXEC_START])
+                        s->type = SERVICE_SIMPLE;
+                else
+                        s->type = SERVICE_ONESHOT;
+        }
+
+        /* Oneshot services have disabled start timeout by default */
+        if (s->type == SERVICE_ONESHOT && !s->start_timeout_defined)
+                s->timeout_start_usec = 0;
+
+        service_fix_output(s);
+
+        r = unit_patch_contexts(UNIT(s));
+        if (r < 0)
+                return r;
+
+        r = unit_add_exec_dependencies(UNIT(s), &s->exec_context);
+        if (r < 0)
+                return r;
+
+        r = unit_add_default_slice(UNIT(s), &s->cgroup_context);
+        if (r < 0)
+                return r;
+
+        if (s->type == SERVICE_NOTIFY && s->notify_access == NOTIFY_NONE)
+                s->notify_access = NOTIFY_MAIN;
+
+        if (s->watchdog_usec > 0 && s->notify_access == NOTIFY_NONE)
+                s->notify_access = NOTIFY_MAIN;
+
+        if (s->bus_name) {
+                const char *n;
+
+                r = unit_watch_bus_name(UNIT(s), s->bus_name);
+                if (r < 0)
+                        return r;
+
+                n = strappenda(s->bus_name, ".busname");
+                r = unit_add_dependency_by_name(UNIT(s), UNIT_AFTER, n, NULL, true);
+                if (r < 0)
+                        return r;
+        }
+
+        if (UNIT(s)->default_dependencies) {
+                r = service_add_default_dependencies(s);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
 static int service_load(Unit *u) {
         Service *s = SERVICE(u);
         int r;
@@ -541,52 +601,11 @@ static int service_load(Unit *u) {
                 if (r < 0)
                         return r;
 
-                if (s->type == _SERVICE_TYPE_INVALID) {
-                        /* Figure out a type automatically */
-                        if (s->bus_name)
-                                s->type = SERVICE_DBUS;
-                        else if (s->exec_command[SERVICE_EXEC_START])
-                                s->type = SERVICE_SIMPLE;
-                        else
-                                s->type = SERVICE_ONESHOT;
-                }
-
-                /* Oneshot services have disabled start timeout by default */
-                if (s->type == SERVICE_ONESHOT && !s->start_timeout_defined)
-                        s->timeout_start_usec = 0;
-
-                service_fix_output(s);
-
-                r = unit_patch_contexts(u);
-                if (r < 0)
-                        return r;
-
-                r = unit_add_exec_dependencies(u, &s->exec_context);
+                /* This is a new unit? Then let's add in some
+                 * extras */
+                r = service_add_extras(s);
                 if (r < 0)
                         return r;
-
-                r = unit_add_default_slice(u, &s->cgroup_context);
-                if (r < 0)
-                        return r;
-
-                if (s->type == SERVICE_NOTIFY && s->notify_access == NOTIFY_NONE)
-                        s->notify_access = NOTIFY_MAIN;
-
-                if (s->watchdog_usec > 0 && s->notify_access == NOTIFY_NONE)
-                        s->notify_access = NOTIFY_MAIN;
-
-                if (s->bus_name) {
-                        r = unit_watch_bus_name(u, s->bus_name);
-                        if (r < 0)
-                                return r;
-                }
-
-                if (u->default_dependencies) {
-                        r = service_add_default_dependencies(s);
-                        if (r < 0)
-
-                                return r;
-                }
         }
 
         return service_verify(s);

commit b02cb41c78c61c27bf1432e19f241a3c3d47a419
Author: Lennart Poettering <lennart at poettering.net>
Date:   Wed Jan 7 22:07:09 2015 +0100

    conf-parse: don't accept invalid bus names as BusName= arguments in service units

diff --git a/src/core/load-fragment-gperf.gperf.m4 b/src/core/load-fragment-gperf.gperf.m4
index 9e87d91..5305984 100644
--- a/src/core/load-fragment-gperf.gperf.m4
+++ b/src/core/load-fragment-gperf.gperf.m4
@@ -225,7 +225,7 @@ Service.RestartForceExitStatus,  config_parse_set_status,            0,
 Service.SuccessExitStatus,       config_parse_set_status,            0,                             offsetof(Service, success_status)
 Service.SysVStartPriority,       config_parse_warn_compat,           DISABLED_LEGACY,               0
 Service.NonBlocking,             config_parse_bool,                  0,                             offsetof(Service, exec_context.non_blocking)
-Service.BusName,                 config_parse_unit_string_printf,    0,                             offsetof(Service, bus_name)
+Service.BusName,                 config_parse_bus_name,              0,                             offsetof(Service, bus_name)
 Service.FileDescriptorStoreMax,  config_parse_unsigned,              0,                             offsetof(Service, n_fd_store_max)
 Service.NotifyAccess,            config_parse_notify_access,         0,                             offsetof(Service, notify_access)
 Service.Sockets,                 config_parse_service_sockets,       0,                             0
diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
index e9659ca..eea4158 100644
--- a/src/core/load-fragment.c
+++ b/src/core/load-fragment.c
@@ -60,6 +60,7 @@
 #include "errno-list.h"
 #include "af-list.h"
 #include "cap-list.h"
+#include "bus-internal.h"
 
 #ifdef HAVE_SECCOMP
 #include "seccomp-util.h"
@@ -142,19 +143,20 @@ int config_parse_unit_deps(const char *unit,
         return 0;
 }
 
-int config_parse_unit_string_printf(const char *unit,
-                                    const char *filename,
-                                    unsigned line,
-                                    const char *section,
-                                    unsigned section_line,
-                                    const char *lvalue,
-                                    int ltype,
-                                    const char *rvalue,
-                                    void *data,
-                                    void *userdata) {
+int config_parse_unit_string_printf(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
 
-        Unit *u = userdata;
         _cleanup_free_ char *k = NULL;
+        Unit *u = userdata;
         int r;
 
         assert(filename);
@@ -163,12 +165,12 @@ int config_parse_unit_string_printf(const char *unit,
         assert(u);
 
         r = unit_full_printf(u, rvalue, &k);
-        if (r < 0)
-                log_syntax(unit, LOG_ERR, filename, line, -r,
-                           "Failed to resolve unit specifiers on %s, ignoring: %s", rvalue, strerror(-r));
+        if (r < 0) {
+                log_syntax(unit, LOG_ERR, filename, line, r, "Failed to resolve unit specifiers on %s, ignoring: %m", rvalue);
+                return 0;
+        }
 
-        return config_parse_string(unit, filename, line, section, section_line, lvalue, ltype,
-                                   k ? k : rvalue, data, userdata);
+        return config_parse_string(unit, filename, line, section, section_line, lvalue, ltype, k, data, userdata);
 }
 
 int config_parse_unit_strv_printf(const char *unit,
@@ -1565,16 +1567,17 @@ int config_parse_path_spec(const char *unit,
         return 0;
 }
 
-int config_parse_socket_service(const char *unit,
-                                const char *filename,
-                                unsigned line,
-                                const char *section,
-                                unsigned section_line,
-                                const char *lvalue,
-                                int ltype,
-                                const char *rvalue,
-                                void *data,
-                                void *userdata) {
+int config_parse_socket_service(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
 
         _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
         Socket *s = data;
@@ -1589,21 +1592,18 @@ int config_parse_socket_service(const char *unit,
 
         r = unit_name_printf(UNIT(s), rvalue, &p);
         if (r < 0) {
-                log_syntax(unit, LOG_ERR, filename, line, -r,
-                           "Failed to resolve specifiers, ignoring: %s", rvalue);
+                log_syntax(unit, LOG_ERR, filename, line, r, "Failed to resolve specifiers, ignoring: %s", rvalue);
                 return 0;
         }
 
         if (!endswith(p, ".service")) {
-                log_syntax(unit, LOG_ERR, filename, line, EINVAL,
-                           "Unit must be of type service, ignoring: %s", rvalue);
+                log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Unit must be of type service, ignoring: %s", rvalue);
                 return 0;
         }
 
         r = manager_load_unit(UNIT(s)->manager, p, NULL, &error, &x);
         if (r < 0) {
-                log_syntax(unit, LOG_ERR, filename, line, -r,
-                           "Failed to load unit %s, ignoring: %s", rvalue, bus_error_message(&error, r));
+                log_syntax(unit, LOG_ERR, filename, line, -r, "Failed to load unit %s, ignoring: %s", rvalue, bus_error_message(&error, r));
                 return 0;
         }
 
@@ -1612,21 +1612,22 @@ int config_parse_socket_service(const char *unit,
         return 0;
 }
 
-int config_parse_service_sockets(const char *unit,
-                                 const char *filename,
-                                 unsigned line,
-                                 const char *section,
-                                 unsigned section_line,
-                                 const char *lvalue,
-                                 int ltype,
-                                 const char *rvalue,
-                                 void *data,
-                                 void *userdata) {
+int config_parse_service_sockets(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
 
         Service *s = data;
-        int r;
         const char *word, *state;
         size_t l;
+        int r;
 
         assert(filename);
         assert(lvalue);
@@ -1641,33 +1642,65 @@ int config_parse_service_sockets(const char *unit,
                         return log_oom();
 
                 r = unit_name_printf(UNIT(s), t, &k);
-                if (r < 0)
-                        log_syntax(unit, LOG_ERR, filename, line, -r,
-                                   "Failed to resolve specifiers, ignoring: %s", strerror(-r));
+                if (r < 0) {
+                        log_syntax(unit, LOG_ERR, filename, line, r, "Failed to resolve specifiers, ignoring: %m");
+                        continue;
+                }
 
-                if (!endswith(k ?: t, ".socket")) {
-                        log_syntax(unit, LOG_ERR, filename, line, EINVAL,
-                                   "Unit must be of type socket, ignoring: %s", k ?: t);
+                if (!endswith(k, ".socket")) {
+                        log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Unit must be of type socket, ignoring: %s", k);
                         continue;
                 }
 
-                r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_WANTS, UNIT_AFTER, k ?: t, NULL, true);
+                r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_WANTS, UNIT_AFTER, k, NULL, true);
                 if (r < 0)
-                        log_syntax(unit, LOG_ERR, filename, line, -r,
-                                   "Failed to add dependency on %s, ignoring: %s",
-                                   k ?: t, strerror(-r));
+                        log_syntax(unit, LOG_ERR, filename, line, r, "Failed to add dependency on %s, ignoring: %m", k);
 
-                r = unit_add_dependency_by_name(UNIT(s), UNIT_TRIGGERED_BY, k ?: t, NULL, true);
+                r = unit_add_dependency_by_name(UNIT(s), UNIT_TRIGGERED_BY, k, NULL, true);
                 if (r < 0)
-                        return r;
+                        log_syntax(unit, LOG_ERR, filename, line, r, "Failed to add dependency on %s, ignoring: %m", k);
         }
         if (!isempty(state))
-                log_syntax(unit, LOG_ERR, filename, line, EINVAL,
-                           "Trailing garbage, ignoring.");
+                log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Trailing garbage, ignoring.");
 
         return 0;
 }
 
+int config_parse_bus_name(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_free_ char *k = NULL;
+        Unit *u = userdata;
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+        assert(u);
+
+        r = unit_full_printf(u, rvalue, &k);
+        if (r < 0) {
+                log_syntax(unit, LOG_ERR, filename, line, r, "Failed to resolve unit specifiers on %s, ignoring: %m", rvalue);
+                return 0;
+        }
+
+        if (!service_name_is_valid(k)) {
+                log_syntax(unit, LOG_ERR, filename, line, r, "Invalid bus name %s, ignoring.", k);
+                return 0;
+        }
+
+        return config_parse_string(unit, filename, line, section, section_line, lvalue, ltype, k, data, userdata);
+}
+
 int config_parse_service_timeout(const char *unit,
                                  const char *filename,
                                  unsigned line,
diff --git a/src/core/load-fragment.h b/src/core/load-fragment.h
index 21e0871..ce10d03 100644
--- a/src/core/load-fragment.h
+++ b/src/core/load-fragment.h
@@ -103,6 +103,7 @@ int config_parse_no_new_privileges(const char *unit, const char *filename, unsig
 int config_parse_cpu_quota(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
 int config_parse_protect_home(const char* unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
 int config_parse_protect_system(const char* unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
+int config_parse_bus_name(const char* unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
 
 /* gperf prototypes */
 const struct ConfigPerfItem* load_fragment_gperf_lookup(const char *key, unsigned length);

commit 978553ce5e85a57a203be8256e59f304c8c46f3d
Author: Lennart Poettering <lennart at poettering.net>
Date:   Wed Jan 7 22:05:20 2015 +0100

    conf-parse: make syntax logging functions behave more like other log functons
    
    In particular, don't patch the error number to EINVAL if 0, and don't
    negate it.
    
    (Also, add do {} while (false) around multi-line macro)

diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c
index 5fe983a..a1a94da 100644
--- a/src/shared/conf-parser.c
+++ b/src/shared/conf-parser.c
@@ -61,7 +61,7 @@ int log_syntax_internal(
 
         if (unit)
                 r = log_struct_internal(level,
-                                        error > 0 ? error : EINVAL,
+                                        error,
                                         file, line, func,
                                         getpid() == 1 ? "UNIT=%s" : "USER_UNIT=%s", unit,
                                         LOG_MESSAGE_ID(SD_MESSAGE_CONFIG_ERROR),
@@ -71,7 +71,7 @@ int log_syntax_internal(
                                         NULL);
         else
                 r = log_struct_internal(level,
-                                        error > 0 ? error : EINVAL,
+                                        error,
                                         file, line, func,
                                         LOG_MESSAGE_ID(SD_MESSAGE_CONFIG_ERROR),
                                         "CONFIG_FILE=%s", config_file,
diff --git a/src/shared/conf-parser.h b/src/shared/conf-parser.h
index 2507a44..7a2f855 100644
--- a/src/shared/conf-parser.h
+++ b/src/shared/conf-parser.h
@@ -136,11 +136,12 @@ int log_syntax_internal(
                             config_file, config_line,                   \
                             error, __VA_ARGS__)
 
-#define log_invalid_utf8(unit, level, config_file, config_line, error, rvalue) { \
-        _cleanup_free_ char *__p = utf8_escape_invalid(rvalue);                  \
-        log_syntax(unit, level, config_file, config_line, error,                 \
-                   "String is not UTF-8 clean, ignoring assignment: %s", __p);   \
-        }
+#define log_invalid_utf8(unit, level, config_file, config_line, error, rvalue) \
+        do {                                                            \
+                _cleanup_free_ char *_p = utf8_escape_invalid(rvalue);  \
+                log_syntax(unit, level, config_file, config_line, error, \
+                           "String is not UTF-8 clean, ignoring assignment: %s", strna(_p)); \
+        } while(false)
 
 #define DEFINE_CONFIG_PARSE_ENUM(function,name,type,msg)                \
         int function(const char *unit,                                  \

commit 1535ef321f9f62c0825e811ebd25c09b88aab852
Author: Lennart Poettering <lennart at poettering.net>
Date:   Wed Jan 7 21:54:31 2015 +0100

    units: improve Description= for systemd's own busname unit

diff --git a/units/org.freedesktop.systemd1.busname b/units/org.freedesktop.systemd1.busname
index bbd4e20..9ec055e 100644
--- a/units/org.freedesktop.systemd1.busname
+++ b/units/org.freedesktop.systemd1.busname
@@ -6,7 +6,7 @@
 #  (at your option) any later version.
 
 [Unit]
-Description=systemd busname unit
+Description=System and Service Manager Bus Name
 Documentation=man:systemd(1)
 Documentation=http://www.freedesktop.org/wiki/Software/systemd
 



More information about the systemd-commits mailing list