[systemd/f17] Fixes from upstream v195+

Michal Schmidt michich at fedoraproject.org
Fri Oct 26 15:18:15 UTC 2012


commit 2d46fe66c308afbe144b30852710c487f675a0c6
Author: Michal Schmidt <mschmidt at redhat.com>
Date:   Fri Oct 26 17:15:14 2012 +0200

    Fixes from upstream v195+
    
    - Don't forbid ExecReload in oneshot units.
    - various fixes
    - Resolves: #866346, #868603, #869779, fdo#52580

 ...emctl-don-t-mangle-name-when-it-is-a-path.patch |   35 ++++++++
 ...-Type-oneshot-services-to-have-ExecReload.patch |   40 ++++++++++
 ...ppend-.service-when-unit-does-not-have-va.patch |   45 +++++++++++
 ...-try-to-initialize-extra-deps-for-mount-u.patch |   83 ++++++++++++++++++++
 ...t-multiple-entries-for-ENV-SYSTEMD_ALIAS-.patch |   77 ++++++++++++++++++
 ...andle-device-aliases-used-as-dependencies.patch |   45 +++++++++++
 0575-readahead-fix-fd-validity-check.patch         |   24 ++++++
 ...sure-m-where-is-set-before-unit_add_exec_.patch |   63 +++++++++++++++
 ...ecursion-into-transaction-code-from-job-c.patch |   46 +++++++++++
 0578-sysctl-parse-all-keys-in-a-config-file.patch  |   24 ++++++
 systemd.spec                                       |   18 ++++-
 11 files changed, 499 insertions(+), 1 deletions(-)
---
diff --git a/0569-systemctl-don-t-mangle-name-when-it-is-a-path.patch b/0569-systemctl-don-t-mangle-name-when-it-is-a-path.patch
new file mode 100644
index 0000000..a4b65fb
--- /dev/null
+++ b/0569-systemctl-don-t-mangle-name-when-it-is-a-path.patch
@@ -0,0 +1,35 @@
+From 11a2fb31c2dcd7465240d01b6b5471a140abe008 Mon Sep 17 00:00:00 2001
+From: Lukas Nykryn <lnykryn at redhat.com>
+Date: Mon, 15 Oct 2012 14:51:27 +0200
+Subject: [PATCH] systemctl: don't mangle name when it is a path
+
+systemctl enable, disable, ... can also accept full path and in this case
+we don't need to alter it.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=866346
+(cherry picked from commit 44386fc156bfa2d623567ff7f7c8f313cfafb9bc)
+---
+ src/systemctl/systemctl.c | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
+index 23977ac..0bf57ad 100644
+--- a/src/systemctl/systemctl.c
++++ b/src/systemctl/systemctl.c
+@@ -4105,7 +4105,15 @@ static int mangle_names(char **original_names, char ***mangled_names) {
+ 
+         i = l;
+         STRV_FOREACH(name, original_names) {
+-                *i = unit_name_mangle(*name);
++
++                /* When enabling units qualified path names are OK,
++                 * too, hence allow them explicitly. */
++
++                if (is_path(*name))
++                        *i = strdup(*name);
++                else
++                        *i = unit_name_mangle(*name);
++
+                 if (!*i) {
+                         strv_free(l);
+                         return -ENOMEM;
diff --git a/0570-core-allow-Type-oneshot-services-to-have-ExecReload.patch b/0570-core-allow-Type-oneshot-services-to-have-ExecReload.patch
new file mode 100644
index 0000000..0aa07a2
--- /dev/null
+++ b/0570-core-allow-Type-oneshot-services-to-have-ExecReload.patch
@@ -0,0 +1,40 @@
+From 0a56ef568ab927317ded9fb927a92d03b64cd3da Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Mantas=20Mikul=C4=97nas?= <grawity at gmail.com>
+Date: Wed, 10 Oct 2012 20:18:42 +0300
+Subject: [PATCH] core: allow Type=oneshot services to have ExecReload
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Use cases:
+
+ * iptables.service – atomically reload rules without having to flush
+   them beforehand (which may leave the system insecure if reload fails)
+
+ * rpc-nfsd.service – reexport filesystems after /etc/exports update
+   without completely stopping and restarting nfsd
+
+(In both cases, the actual service is provided by a kernel module and
+does not have any associated user-space processes, thus Type=oneshot.)
+(cherry picked from commit 2abba39d759bacebd7461f7370bb108f48dcce92)
+---
+ src/core/service.c | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/src/core/service.c b/src/core/service.c
+index d0369da..f4c5d1c 100644
+--- a/src/core/service.c
++++ b/src/core/service.c
+@@ -1154,12 +1154,6 @@ static int service_verify(Service *s) {
+                 return -EINVAL;
+         }
+ 
+-        if (s->type == SERVICE_ONESHOT &&
+-            s->exec_command[SERVICE_EXEC_RELOAD]) {
+-                log_error("%s has an ExecReload setting, which is not allowed for Type=oneshot services. Refusing.", UNIT(s)->id);
+-                return -EINVAL;
+-        }
+-
+         if (s->type == SERVICE_DBUS && !s->bus_name) {
+                 log_error("%s is of type D-Bus but no D-Bus service name has been specified. Refusing.", UNIT(s)->id);
+                 return -EINVAL;
diff --git a/0571-systemctl-append-.service-when-unit-does-not-have-va.patch b/0571-systemctl-append-.service-when-unit-does-not-have-va.patch
new file mode 100644
index 0000000..e0f3469
--- /dev/null
+++ b/0571-systemctl-append-.service-when-unit-does-not-have-va.patch
@@ -0,0 +1,45 @@
+From e0c373c6dd9ff77e5eab862299fff4042e027194 Mon Sep 17 00:00:00 2001
+From: Lukas Nykryn <lnykryn at redhat.com>
+Date: Tue, 16 Oct 2012 11:01:29 +0200
+Subject: [PATCH] systemctl: append .service when unit does not have valid
+ suffix
+
+systemctl status a and systemctl status a.service lead to same output but
+systemctl status a.b and systemctl status a.b.service do not.
+(cherry picked from commit 696c245a23d55e4249651573eb9c61b68e61580c)
+---
+ src/shared/unit-name.c | 7 +------
+ 1 file changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/src/shared/unit-name.c b/src/shared/unit-name.c
+index 90f5842..0f3c571 100644
+--- a/src/shared/unit-name.c
++++ b/src/shared/unit-name.c
+@@ -469,7 +469,6 @@ char *unit_dbus_path_from_name(const char *name) {
+ char *unit_name_mangle(const char *name) {
+         char *r, *t;
+         const char *f;
+-        bool dot = false;
+ 
+         assert(name);
+ 
+@@ -491,10 +490,6 @@ char *unit_name_mangle(const char *name) {
+                 return NULL;
+ 
+         for (f = name, t = r; *f; f++) {
+-
+-                if (*f == '.')
+-                        dot = true;
+-
+                 if (*f == '/')
+                         *(t++) = '-';
+                 else if (!strchr("@" VALID_CHARS, *f))
+@@ -503,7 +498,7 @@ char *unit_name_mangle(const char *name) {
+                         *(t++) = *f;
+         }
+ 
+-        if (!dot)
++        if (unit_name_to_type(name) < 0)
+                 strcpy(t, ".service");
+         else
+                 *t = 0;
diff --git a/0572-mount-don-t-try-to-initialize-extra-deps-for-mount-u.patch b/0572-mount-don-t-try-to-initialize-extra-deps-for-mount-u.patch
new file mode 100644
index 0000000..aec8351
--- /dev/null
+++ b/0572-mount-don-t-try-to-initialize-extra-deps-for-mount-u.patch
@@ -0,0 +1,83 @@
+From 64d56941422d305c0fcddef7fe52218ce5dea17a Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Tue, 16 Oct 2012 19:50:26 +0200
+Subject: [PATCH] mount: don't try to initialize extra deps for mount units
+ before initializing their basic fields
+
+Under some circumstances this could lead to a segfault since we we
+half-initialized a mount unit, then tried to hook it into the network of
+things and while doing that recursively ended up looking at our
+half-initialized mount unit again assuming it was fully initialized.
+(cherry picked from commit b87705cdd2f791f8520edb78791d3e6f78afd481)
+---
+ src/core/mount.c  | 14 +++++++++++---
+ src/core/socket.c |  9 ++++++---
+ 2 files changed, 17 insertions(+), 6 deletions(-)
+
+diff --git a/src/core/mount.c b/src/core/mount.c
+index 86bf16c..4f9fa77 100644
+--- a/src/core/mount.c
++++ b/src/core/mount.c
+@@ -1470,6 +1470,7 @@ static int mount_add_one(
+         bool delete;
+         char *e, *w = NULL, *o = NULL, *f = NULL;
+         MountParameters *p;
++        bool load_extras = false;
+ 
+         assert(m);
+         assert(what);
+@@ -1525,9 +1526,10 @@ static int mount_add_one(
+                 if (u->load_state == UNIT_ERROR) {
+                         u->load_state = UNIT_LOADED;
+                         u->load_error = 0;
+-                        r = mount_add_extras(MOUNT(u));
+-                        if (r < 0)
+-                                goto fail;
++
++                        /* Load in the extras later on, after we
++                         * finished initialization of the unit */
++                        load_extras = true;
+                 }
+         }
+ 
+@@ -1564,6 +1566,12 @@ static int mount_add_one(
+ 
+         p->passno = passno;
+ 
++        if (load_extras) {
++                r = mount_add_extras(MOUNT(u));
++                if (r < 0)
++                        goto fail;
++        }
++
+         unit_add_to_dbus_queue(u);
+ 
+         return 0;
+diff --git a/src/core/socket.c b/src/core/socket.c
+index 2b1cf52..23e8932 100644
+--- a/src/core/socket.c
++++ b/src/core/socket.c
+@@ -263,7 +263,8 @@ int socket_add_one_mount_link(Socket *s, Mount *m) {
+         if (!socket_needs_mount(s, m->where))
+                 return 0;
+ 
+-        if ((r = unit_add_two_dependencies(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, UNIT(m), true)) < 0)
++        r = unit_add_two_dependencies(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, UNIT(m), true);
++        if (r < 0)
+                 return r;
+ 
+         return 0;
+@@ -275,9 +276,11 @@ static int socket_add_mount_links(Socket *s) {
+ 
+         assert(s);
+ 
+-        LIST_FOREACH(units_by_type, other, UNIT(s)->manager->units_by_type[UNIT_MOUNT])
+-                if ((r = socket_add_one_mount_link(s, MOUNT(other))) < 0)
++        LIST_FOREACH(units_by_type, other, UNIT(s)->manager->units_by_type[UNIT_MOUNT]) {
++                r = socket_add_one_mount_link(s, MOUNT(other));
++                if (r < 0)
+                         return r;
++        }
+ 
+         return 0;
+ }
diff --git a/0573-udev-support-multiple-entries-for-ENV-SYSTEMD_ALIAS-.patch b/0573-udev-support-multiple-entries-for-ENV-SYSTEMD_ALIAS-.patch
new file mode 100644
index 0000000..8036b86
--- /dev/null
+++ b/0573-udev-support-multiple-entries-for-ENV-SYSTEMD_ALIAS-.patch
@@ -0,0 +1,77 @@
+From d0f1cceb57f25cfed3b2852adaee95db6443839d Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay at vrfy.org>
+Date: Tue, 9 Oct 2012 00:16:50 +0200
+Subject: [PATCH] udev: support multiple entries for ENV{SYSTEMD_ALIAS} and
+ ENV{SYSTEM_WANTS} (cherry picked from commit
+ 07845c142b41083bc759a18e601123aa5f6864f1)
+
+[ F17: only the systemd part ]
+
+Conflicts:
+	src/udev/udev-rules.c
+---
+ src/core/device.c | 35 +++++++++++++++++++++++++++--------
+ 1 file changed, 27 insertions(+), 8 deletions(-)
+
+diff --git a/src/core/device.c b/src/core/device.c
+index d5df752..4502f9a 100644
+--- a/src/core/device.c
++++ b/src/core/device.c
+@@ -251,30 +251,49 @@ static int device_update_unit(Manager *m, struct udev_device *dev, const char *p
+                  * interpret for the main object */
+                 const char *wants, *alias;
+ 
+-                if ((alias = udev_device_get_property_value(dev, "SYSTEMD_ALIAS"))) {
+-                        if (!is_path(alias))
+-                                log_warning("SYSTEMD_ALIAS for %s is not a path, ignoring: %s", sysfs, alias);
+-                        else {
+-                                if ((r = device_add_escaped_name(u, alias)) < 0)
++                alias = udev_device_get_property_value(dev, "SYSTEMD_ALIAS");
++                if (alias) {
++                        char *state, *w;
++                        size_t l;
++
++                        FOREACH_WORD_QUOTED(w, l, alias, state) {
++                                char *e;
++
++                                e = strndup(w, l);
++                                if (!e) {
++                                        r = -ENOMEM;
+                                         goto fail;
++                                }
++
++                                if (!is_path(e)) {
++                                        log_warning("SYSTEMD_ALIAS for %s is not a path, ignoring: %s", sysfs, e);
++                                        free(e);
++                                } else {
++
++                                        r = device_add_escaped_name(u, e);
++                                        free(e);
++                                        if (r < 0)
++                                                goto fail;
++                                }
+                         }
+                 }
+ 
+-                if ((wants = udev_device_get_property_value(dev, "SYSTEMD_WANTS"))) {
++                wants = udev_device_get_property_value(dev, "SYSTEMD_WANTS");
++                if (wants) {
+                         char *state, *w;
+                         size_t l;
+ 
+                         FOREACH_WORD_QUOTED(w, l, wants, state) {
+                                 char *e;
+ 
+-                                if (!(e = strndup(w, l))) {
++                                e = strndup(w, l);
++                                if (!e) {
+                                         r = -ENOMEM;
+                                         goto fail;
+                                 }
+ 
+                                 r = unit_add_dependency_by_name(u, UNIT_WANTS, e, NULL, true);
+                                 free(e);
+-
+                                 if (r < 0)
+                                         goto fail;
+                         }
diff --git a/0574-Properly-handle-device-aliases-used-as-dependencies.patch b/0574-Properly-handle-device-aliases-used-as-dependencies.patch
new file mode 100644
index 0000000..3600133
--- /dev/null
+++ b/0574-Properly-handle-device-aliases-used-as-dependencies.patch
@@ -0,0 +1,45 @@
+From ccb91ca18924663a6088865cfab642c38332cacf Mon Sep 17 00:00:00 2001
+From: Eelco Dolstra <eelco.dolstra at logicblox.com>
+Date: Wed, 10 Oct 2012 16:43:10 -0400
+Subject: [PATCH] Properly handle device aliases used as dependencies
+
+If a device unit has aliases defined in udev rules, and there are
+other units that depend on that alias, as in
+
+  BindTo=sys-subsystem-net-devices-eth0.device
+
+then systemd will fail the start the alias, and any dependent units
+will time out.  See
+
+  https://bugs.freedesktop.org/show_bug.cgi?id=52580
+
+This is because unit_add_name() in device_add_escaped_name() will
+return EEXIST.
+
+The solution taken here is to call device_update_unit() on the alias
+name.  Thus if a unit with the alias name already exists, we reuse it;
+otherwise a new unit is created.  Creating multiple units for a single
+device is perhaps suboptimal, but it's consistent with the treatment
+of udev symlinks in device_process_new_device().
+(cherry picked from commit 22349cee29b31cde7ef8582b4882475f553af97a)
+---
+ src/core/device.c | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+diff --git a/src/core/device.c b/src/core/device.c
+index 4502f9a..a7c695b 100644
+--- a/src/core/device.c
++++ b/src/core/device.c
+@@ -269,11 +269,8 @@ static int device_update_unit(Manager *m, struct udev_device *dev, const char *p
+                                         log_warning("SYSTEMD_ALIAS for %s is not a path, ignoring: %s", sysfs, e);
+                                         free(e);
+                                 } else {
+-
+-                                        r = device_add_escaped_name(u, e);
++                                        device_update_unit(m, dev, e, false);
+                                         free(e);
+-                                        if (r < 0)
+-                                                goto fail;
+                                 }
+                         }
+                 }
diff --git a/0575-readahead-fix-fd-validity-check.patch b/0575-readahead-fix-fd-validity-check.patch
new file mode 100644
index 0000000..3f6997c
--- /dev/null
+++ b/0575-readahead-fix-fd-validity-check.patch
@@ -0,0 +1,24 @@
+From cb99229d9622cf49a04667cc004851a1568c93f8 Mon Sep 17 00:00:00 2001
+From: Michal Schmidt <mschmidt at redhat.com>
+Date: Mon, 22 Oct 2012 22:07:31 +0200
+Subject: [PATCH] readahead: fix fd validity check
+
+https://bugzilla.redhat.com/show_bug.cgi?id=868603
+(cherry picked from commit c4b996bd8748d14d4bb298462a29fbd977fa6fef)
+---
+ src/readahead/readahead-collect.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/readahead/readahead-collect.c b/src/readahead/readahead-collect.c
+index b8825a6..2bc0379 100644
+--- a/src/readahead/readahead-collect.c
++++ b/src/readahead/readahead-collect.c
+@@ -461,7 +461,7 @@ static int collect(const char *root) {
+                                 log_warning("readlink(%s) failed: %s", fn, strerror(-k));
+ 
+                 next_iteration:
+-                        if (m->fd)
++                        if (m->fd >= 0)
+                                 close_nointr_nofail(m->fd);
+                 }
+         }
diff --git a/0576-mount-make-sure-m-where-is-set-before-unit_add_exec_.patch b/0576-mount-make-sure-m-where-is-set-before-unit_add_exec_.patch
new file mode 100644
index 0000000..f51b1e6
--- /dev/null
+++ b/0576-mount-make-sure-m-where-is-set-before-unit_add_exec_.patch
@@ -0,0 +1,63 @@
+From c0a4e5dd415c28fbedde59d37ce2ae6f52159ff9 Mon Sep 17 00:00:00 2001
+From: Will Woods <wwoods at redhat.com>
+Date: Tue, 16 Oct 2012 17:04:34 -0400
+Subject: [PATCH] mount: make sure m->where is set before
+ unit_add_exec_dependencies()
+
+If you enter unit_add_exec_dependencies with m->where = NULL, you'll
+very likely end up aborting somewhere under socket_needs_mount.
+
+(When systemd goes to check to see if the journald socket requires your
+mount, it'll do path_startswith(path, m->where)... *kaboom*)
+
+This patch should ensure that:
+
+    a) both branches in mount_add_one() set m->where, and
+    b) mount_add_extras() calls unit_add_exec_dependencies() *after*
+       setting m->where.
+(cherry picked from commit bcbd5405b1b6d9d219259e3be2c3ec4d92812bcb)
+---
+ src/core/mount.c | 16 ++++++++++++----
+ 1 file changed, 12 insertions(+), 4 deletions(-)
+
+diff --git a/src/core/mount.c b/src/core/mount.c
+index 4f9fa77..5eba12c 100644
+--- a/src/core/mount.c
++++ b/src/core/mount.c
+@@ -594,10 +594,6 @@ static int mount_add_extras(Mount *m) {
+         Unit *u = UNIT(m);
+         int r;
+ 
+-        r = unit_add_exec_dependencies(u, &m->exec_context);
+-        if (r < 0)
+-                return r;
+-
+         if (UNIT(m)->fragment_path)
+                 m->from_fragment = true;
+ 	else if (m->from_etc_fstab)
+@@ -614,6 +610,10 @@ static int mount_add_extras(Mount *m) {
+ 
+         path_kill_slashes(m->where);
+ 
++        r = unit_add_exec_dependencies(u, &m->exec_context);
++        if (r < 0)
++                return r;
++
+         if (!UNIT(m)->description) {
+                 r = unit_set_description(u, m->where);
+                 if (r < 0)
+@@ -1523,6 +1523,14 @@ static int mount_add_one(
+                 delete = false;
+                 free(e);
+ 
++                if (!MOUNT(u)->where) {
++                        MOUNT(u)->where = strdup(where);
++                        if (!MOUNT(u)->where) {
++                                r = -ENOMEM;
++                                goto fail;
++                        }
++                }
++
+                 if (u->load_state == UNIT_ERROR) {
+                         u->load_state = UNIT_LOADED;
+                         u->load_error = 0;
diff --git a/0577-job-avoid-recursion-into-transaction-code-from-job-c.patch b/0577-job-avoid-recursion-into-transaction-code-from-job-c.patch
new file mode 100644
index 0000000..ae443d3
--- /dev/null
+++ b/0577-job-avoid-recursion-into-transaction-code-from-job-c.patch
@@ -0,0 +1,46 @@
+From 38012e20ada9a6d0eef38ce4abe6e18403c1e9dc Mon Sep 17 00:00:00 2001
+From: Michal Schmidt <mschmidt at redhat.com>
+Date: Thu, 25 Oct 2012 02:31:49 +0200
+Subject: [PATCH] job: avoid recursion into transaction code from job
+ cancelation
+
+I hit an "assert(j->installed)" failure in transaction_apply(). Looking
+into the backtrace I saw what happened:
+1. The system was booting. var.mount/start was an installed job.
+2. I pressed Ctrl+Alt+Del.
+3. reboot.target was going to be isolated.
+4. transaction_apply() proceeded to install a var.mount/stop job.
+5. job_install() canceled the conflicting start job.
+6. Depending jobs ended recursively with JOB_DEPENDENCY, among them was
+   local-fs.target/start.
+7. Its OnFailure action triggered - emergency.target was now going to be
+   isolated.
+8. We recursed back into transaction_apply() where the half-installed
+   var.mount/stop job confused us.
+
+Recursing from job installation back into the transaction code cannot be
+a good idea. Avoid the problem by canceling the conflicting job
+non-recursively in job_install(). I don't think we'll miss anything by
+not recursing here. After all, we are called from transaction_apply().
+We will not be installing just this one job, but all jobs from a
+transaction. All requirement dependencies will be included in it and
+will be installed separately. Every transaction job will get a chance
+to cancel its own conflicting installed job.
+(cherry picked from commit 1abc85b8d026a2d72442b0edaee5213d0ee73c1f)
+---
+ src/core/job.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/core/job.c b/src/core/job.c
+index 020fe4d..1fff653 100644
+--- a/src/core/job.c
++++ b/src/core/job.c
+@@ -178,7 +178,7 @@ Job* job_install(Job *j) {
+ 
+         if (uj) {
+                 if (j->type != JOB_NOP && job_type_is_conflicting(uj->type, j->type))
+-                        job_finish_and_invalidate(uj, JOB_CANCELED, true);
++                        job_finish_and_invalidate(uj, JOB_CANCELED, false);
+                 else {
+                         /* not conflicting, i.e. mergeable */
+ 
diff --git a/0578-sysctl-parse-all-keys-in-a-config-file.patch b/0578-sysctl-parse-all-keys-in-a-config-file.patch
new file mode 100644
index 0000000..9d93304
--- /dev/null
+++ b/0578-sysctl-parse-all-keys-in-a-config-file.patch
@@ -0,0 +1,24 @@
+From 96e928617e53f12f668dc56df4dd651f6001a657 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta at redhat.com>
+Date: Thu, 25 Oct 2012 16:16:19 +0200
+Subject: [PATCH] sysctl: parse all keys in a config file
+
+https://bugzilla.redhat.com/show_bug.cgi?id=869779
+(cherry picked from commit 91b32fa987a4a50faf3d8561b28b6c9d5150adef)
+---
+ src/sysctl/sysctl.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/sysctl/sysctl.c b/src/sysctl/sysctl.c
+index e64aea7..c3f7a50 100644
+--- a/src/sysctl/sysctl.c
++++ b/src/sysctl/sysctl.c
+@@ -180,7 +180,7 @@ static int parse_file(const char *path, bool ignore_enoent) {
+ 
+                         free(property);
+                         free(new_value);
+-                        if (r != -EEXIST)
++                        if (r != 0)
+                                 goto finish;
+                 }
+         }
diff --git a/systemd.spec b/systemd.spec
index 0a1cba7..7e8c03d 100644
--- a/systemd.spec
+++ b/systemd.spec
@@ -3,7 +3,7 @@
 Name:           systemd
 Url:            http://www.freedesktop.org/wiki/Software/systemd
 Version:        44
-Release:        20%{?gitcommit:.git%{gitcommit}}%{?dist}
+Release:        21%{?gitcommit:.git%{gitcommit}}%{?dist}
 License:        GPLv2+
 Group:          System Environment/Base
 Summary:        A System and Service Manager
@@ -628,6 +628,16 @@ Patch0565:      0565-rules-only-mark-MD-disks-not-partitions-with-SYSTEMD.patch
 Patch0566:      0566-tmpfiles-restore-previous-behavior-for-F-f.patch
 Patch0567:      0567-shared-fail-mkdir_p-if-the-target-exists-and-is-not-.patch
 Patch0568:      0568-sysctl-avoiding-exiting-with-error-on-EEXIST.patch
+Patch0569:      0569-systemctl-don-t-mangle-name-when-it-is-a-path.patch
+Patch0570:      0570-core-allow-Type-oneshot-services-to-have-ExecReload.patch
+Patch0571:      0571-systemctl-append-.service-when-unit-does-not-have-va.patch
+Patch0572:      0572-mount-don-t-try-to-initialize-extra-deps-for-mount-u.patch
+Patch0573:      0573-udev-support-multiple-entries-for-ENV-SYSTEMD_ALIAS-.patch
+Patch0574:      0574-Properly-handle-device-aliases-used-as-dependencies.patch
+Patch0575:      0575-readahead-fix-fd-validity-check.patch
+Patch0576:      0576-mount-make-sure-m-where-is-set-before-unit_add_exec_.patch
+Patch0577:      0577-job-avoid-recursion-into-transaction-code-from-job-c.patch
+Patch0578:      0578-sysctl-parse-all-keys-in-a-config-file.patch
 
 # For sysvinit tools
 Obsoletes:      SysVinit < 2.86-24, sysvinit < 2.86-24
@@ -1016,6 +1026,12 @@ mv /etc/systemd/system/default.target.save /etc/systemd/system/default.target >/
 %{_bindir}/systemd-analyze
 
 %changelog
+* Fri Oct 26 2012 Michal Schmidt <mschmidt at redhat.com> - 44-21
+- Fixes from upstream v195+:
+- Don't forbid ExecReload in oneshot units.
+- various fixes
+- Resolves: #866346, #868603, #869779, fdo#52580
+
 * Fri Oct 12 2012 Michal Schmidt <mschmidt at redhat.com> - 44-20
 - Revert the ntp migration code. Not going to do it in F17.
 - Backports from upstream v194+:


More information about the scm-commits mailing list