systemd-217-4

This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2014-11-06 20:48:24 -05:00
parent 0440dc0ca2
commit ea19761321
56 changed files with 2625 additions and 47 deletions

View File

@ -0,0 +1,23 @@
From 0ec05200ca022ef7cf38b02e7a20e7dbff6689b7 Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Tue, 28 Oct 2014 20:36:32 +0100
Subject: [PATCH] NEWS: well, it's Options= now, not Discard=
(cherry picked from commit c4ac990007cd0069bb7e76ec15dd731320f382fd)
---
NEWS | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/NEWS b/NEWS
index 84a43fd5df..82a1948a38 100644
--- a/NEWS
+++ b/NEWS
@@ -76,7 +76,7 @@ CHANGES WITH 217:
rotating media anymore, and nobody stepped up to actively
maintain this component of systemd it has now been removed.
- * Swap units can use Discard= to specify discard options.
+ * Swap units can use Options= to specify discard options.
Discard options specified for swaps in /etc/fstab are now
respected.

View File

@ -1,35 +0,0 @@
From 267edb57a744028055f0fc4f8dbd0d691e6324ed Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Fri, 31 Oct 2014 16:22:36 +0100
Subject: [PATCH] units: don't order journal flushing afte remote-fs.target
Instead, only depend on the actual file systems we need.
This should solve dep loops on setups where remote-fs.target is moved
into late boot.
[ Picked from upstream commit 919699ec301ea507edce4a619141ed22e789ac0d.
The upstream commit contains unrelated changes in nspawn by mistake.
They've been stripped in this backport. -- mschmidt ]
---
units/systemd-journal-flush.service.in | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/units/systemd-journal-flush.service.in b/units/systemd-journal-flush.service.in
index 699670b..2612220 100644
--- a/units/systemd-journal-flush.service.in
+++ b/units/systemd-journal-flush.service.in
@@ -10,8 +10,9 @@ Description=Trigger Flushing of Journal to Persistent Storage
Documentation=man:systemd-journald.service(8) man:journald.conf(5)
DefaultDependencies=no
Requires=systemd-journald.service
-After=systemd-journald.service local-fs.target remote-fs.target
+After=systemd-journald.service
Before=systemd-user-sessions.service systemd-tmpfiles-setup.service
+RequiresMountsFor=/var/log/journal
[Service]
ExecStart=@rootbindir@/journalctl --flush
--
2.1.0

View File

@ -0,0 +1,23 @@
From 0eac08a5cfa2771ad740e6e432c32daaf28b0bdc Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Wed, 29 Oct 2014 17:58:43 +0100
Subject: [PATCH] sd-bus: properly handle removals of non-existing matches
(cherry picked from commit ef7b6c0190fefaacf6d8f8e1a6dda4ba8b98091b)
---
src/libsystemd/sd-bus/bus-match.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/libsystemd/sd-bus/bus-match.c b/src/libsystemd/sd-bus/bus-match.c
index 18afe0f12a..5658c61ba7 100644
--- a/src/libsystemd/sd-bus/bus-match.c
+++ b/src/libsystemd/sd-bus/bus-match.c
@@ -537,7 +537,7 @@ static int bus_match_find_compare_value(
else if (BUS_MATCH_CAN_HASH(t))
n = hashmap_get(c->compare.children, value_str);
else {
- for (n = c->child; !value_node_same(n, t, value_u8, value_str); n = n->next)
+ for (n = c->child; n && !value_node_same(n, t, value_u8, value_str); n = n->next)
;
}

View File

@ -0,0 +1,32 @@
From 45c51a0b7f642419bf1f7cd396ab3653dcfd99a9 Mon Sep 17 00:00:00 2001
From: Dave Reisner <dreisner@archlinux.org>
Date: Wed, 29 Oct 2014 13:32:43 -0400
Subject: [PATCH] nspawn: ignore EEXIST when creating mount point
A combination of commits f3c80515c and 79d80fc14 cause nspawn to
silently fail with a commandline such as:
# systemd-nspawn -D /build/extra-x86_64 --bind=/usr
strace shows the culprit:
[pid 27868] writev(2, [{"Failed to create mount point /build/extra-x86_64/usr: File exists", 82}, {"\n", 1}], 2) = 83
(cherry picked from commit 1ab19cb167b32967556eefd8f6d3df0e3de7d67d)
---
src/nspawn/nspawn.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
index b6d9bc631c..d88987a580 100644
--- a/src/nspawn/nspawn.c
+++ b/src/nspawn/nspawn.c
@@ -758,7 +758,7 @@ static int mount_binds(const char *dest, char **l, bool ro) {
* and char devices. */
if (S_ISDIR(source_st.st_mode)) {
r = mkdir_label(where, 0755);
- if (r < 0) {
+ if (r < 0 && errno != EEXIST) {
log_error("Failed to create mount point %s: %s", where, strerror(-r));
return r;

View File

@ -0,0 +1,40 @@
From 4adcaf0458a128135a1b65777541a1d643044233 Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay@vrfy.org>
Date: Thu, 30 Oct 2014 01:18:34 +0100
Subject: [PATCH] udev: path_id - update comments
(cherry picked from commit a42cdff19f2d34f12ceca0f40707421a8aaa2c2f)
---
src/udev/udev-builtin-path_id.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/src/udev/udev-builtin-path_id.c b/src/udev/udev-builtin-path_id.c
index 0d247f6b5a..df996cb17a 100644
--- a/src/udev/udev-builtin-path_id.c
+++ b/src/udev/udev-builtin-path_id.c
@@ -548,9 +548,9 @@ static int builtin_path_id(struct udev_device *dev, int argc, char *argv[], bool
}
/*
- * Do return devices with have an unknown type of parent device, they
- * might produce conflicting IDs below multiple independent parent
- * devices.
+ * Do not return devices with an unknown parent device type. They
+ * might produce conflicting IDs if the parent does not provide a
+ * unique and predictable name.
*/
if (!supported_parent) {
free(path);
@@ -558,9 +558,9 @@ static int builtin_path_id(struct udev_device *dev, int argc, char *argv[], bool
}
/*
- * Do not return a have-only a single-parent block devices, some
- * have entire hidden buses behind it, and not create predictable
- * IDs that way.
+ * Do not return block devices without a well-known transport. Some
+ * devices do not expose their buses and do not provide a unique
+ * and predictable name that way.
*/
if (streq(udev_device_get_subsystem(dev), "block") && !supported_transport) {
free(path);

View File

@ -0,0 +1,71 @@
From 147a1201a526b3eac5ee6b0add543d5061db9943 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Wed, 29 Oct 2014 22:25:33 -0400
Subject: [PATCH] bash-completion: rework startable/restartable units once more
I tried to use 'systemctl --all list-units' to filter unit files, but
this always filters out unit files which are not loaded. We want to complete
systemctl start with those units too, so this approach is not going to work.
New version is rather slow, but hopefully correct.
(cherry picked from commit 9ff8af5460d57dfab78a1137ec743b539715e82a)
---
shell-completion/bash/systemctl.in | 27 ++++++++++++++-------------
1 file changed, 14 insertions(+), 13 deletions(-)
diff --git a/shell-completion/bash/systemctl.in b/shell-completion/bash/systemctl.in
index 1c44a8df01..9e538a9a5b 100644
--- a/shell-completion/bash/systemctl.in
+++ b/shell-completion/bash/systemctl.in
@@ -52,20 +52,23 @@ __filter_units_by_property () {
}
__get_all_units () { { __systemctl $1 list-unit-files; __systemctl $1 list-units --all; } \
- | { while read -r a b; do echo " $a"; done; }; }
+ | { while read -r a b; do [[ $a =~ @\. ]] || echo " $a"; done; }; }
__get_template_names () { __systemctl $1 list-unit-files \
| { while read -r a b; do [[ $a =~ @\. ]] && echo " ${a%%@.*}@"; done; }; }
__get_active_units () { __systemctl $1 list-units \
| { while read -r a b; do echo " $a"; done; }; }
__get_startable_units () {
- # find inactive or failed units, filter out masked and not-found
- __systemctl $1 list-units --state inactive,failed -- $( __get_all_units ) | \
- { while read -r a b c d; do [[ $b == "loaded" ]] && echo " $a"; done; }; }
+ # find startable inactive units
+ __filter_units_by_property $mode LoadState loaded $(
+ __filter_units_by_property $mode ActiveState inactive $(
+ __filter_units_by_property $mode CanStart yes $( __get_all_units )))
+}
__get_restartable_units () {
- # find !masked, filter out masked and not-found
- __systemctl $1 list-units --state active,inactive,failed -- $( __get_all_units ) | \
- { while read -r a b c d; do [[ $b == "loaded" ]] && echo " $a"; done; }; }
+ # filter out masked and not-found
+ __filter_units_by_property $mode LoadState loaded $(
+ __filter_units_by_property $mode CanStart yes $( __get_all_units ))
+}
__get_failed_units () { __systemctl $1 list-units \
| { while read -r a b c d; do [[ $c == "failed" ]] && echo " $a"; done; }; }
__get_enabled_units () { __systemctl $1 list-unit-files \
@@ -186,15 +189,13 @@ _systemctl () {
compopt -o filenames
elif __contains_word "$verb" ${VERBS[STARTABLE_UNITS]}; then
- comps=$( __filter_units_by_property $mode CanStart yes \
- $( __get_startable_units $mode);
- __get_template_names $mode)
+ comps=$( __get_startable_units $mode;
+ __get_template_names $mode)
compopt -o filenames
elif __contains_word "$verb" ${VERBS[RESTARTABLE_UNITS]}; then
- comps=$( __filter_units_by_property $mode CanStart yes \
- $( __get_restartable_units $mode); \
- __get_template_names $mode)
+ comps=$( __get_restartable_units $mode;
+ __get_template_names $mode)
compopt -o filenames
elif __contains_word "$verb" ${VERBS[STOPPABLE_UNITS]}; then

View File

@ -0,0 +1,98 @@
From 6ce0f84be6b567660fc4ad4e766ef14217392c05 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Wed, 29 Oct 2014 22:46:30 -0400
Subject: [PATCH] systemctl: let list-{units,unit-files } honour --type
The docs don't clarify what is expected, but I don't see any reason
why --type should be ignored.
Also restucture the compund conditions into separate clauses for
easier reading.
(cherry picked from commit 6c71341aeecc3d092ed90f66e1b2c481b8e260ff)
---
src/systemctl/systemctl.c | 48 ++++++++++++++++++++++++++++++++++++-----------
1 file changed, 37 insertions(+), 11 deletions(-)
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index 28eaa6a847..b71040be40 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -301,21 +301,37 @@ static int compare_unit_info(const void *a, const void *b) {
}
static bool output_show_unit(const UnitInfo *u, char **patterns) {
- const char *dot;
-
if (!strv_isempty(patterns)) {
char **pattern;
STRV_FOREACH(pattern, patterns)
if (fnmatch(*pattern, u->id, FNM_NOESCAPE) == 0)
- return true;
+ goto next;
return false;
}
- return (!arg_types || ((dot = strrchr(u->id, '.')) &&
- strv_find(arg_types, dot+1))) &&
- (arg_all || !(streq(u->active_state, "inactive")
- || u->following[0]) || u->job_id > 0);
+next:
+ if (arg_types) {
+ const char *dot;
+
+ dot = strrchr(u->id, '.');
+ if (!dot)
+ return false;
+
+ if (!strv_find(arg_types, dot+1))
+ return false;
+ }
+
+ if (arg_all)
+ return true;
+
+ if (u->job_id > 0)
+ return true;
+
+ if (streq(u->active_state, "inactive") || u->following[0])
+ return false;
+
+ return true;
}
static int output_units_list(const UnitInfo *unit_infos, unsigned c) {
@@ -1231,18 +1247,28 @@ static int compare_unit_file_list(const void *a, const void *b) {
}
static bool output_show_unit_file(const UnitFileList *u, char **patterns) {
- const char *dot;
-
if (!strv_isempty(patterns)) {
char **pattern;
STRV_FOREACH(pattern, patterns)
if (fnmatch(*pattern, basename(u->path), FNM_NOESCAPE) == 0)
- return true;
+ goto next;
return false;
}
- return !arg_types || ((dot = strrchr(u->path, '.')) && strv_find(arg_types, dot+1));
+next:
+ if (!strv_isempty(arg_types)) {
+ const char *dot;
+
+ dot = strrchr(u->path, '.');
+ if (!dot)
+ return false;
+
+ if (!strv_find(arg_types, dot+1))
+ return false;
+ }
+
+ return true;
}
static void output_unit_file_list(const UnitFileList *units, unsigned c) {

View File

@ -0,0 +1,26 @@
From 963449549e8f4225c90c13fec9ac845d7f9aed43 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Wed, 29 Oct 2014 22:51:00 -0400
Subject: [PATCH] systemctl: obey --state in list-unit-files
(cherry picked from commit fec1530e6b5b8d6dc352c7338010357126e84621)
---
src/systemctl/systemctl.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index b71040be40..8481a9b20c 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -1268,6 +1268,11 @@ next:
return false;
}
+ if (!strv_isempty(arg_states)) {
+ if (!strv_find(arg_states, unit_file_state_to_string(u->state)))
+ return false;
+ }
+
return true;
}

View File

@ -0,0 +1,40 @@
From e44731b91ad77e04bf26de21d1605bbe342577c6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Wed, 29 Oct 2014 23:06:58 -0400
Subject: [PATCH] bash-completion: use improved filtering to make things faster
(cherry picked from commit 372b221166eb586c4f767969f442ed940e21f353)
---
shell-completion/bash/systemctl.in | 16 +++++++++++-----
1 file changed, 11 insertions(+), 5 deletions(-)
diff --git a/shell-completion/bash/systemctl.in b/shell-completion/bash/systemctl.in
index 9e538a9a5b..9e98a1850e 100644
--- a/shell-completion/bash/systemctl.in
+++ b/shell-completion/bash/systemctl.in
@@ -60,14 +60,20 @@ __get_active_units () { __systemctl $1 list-units \
| { while read -r a b; do echo " $a"; done; }; }
__get_startable_units () {
# find startable inactive units
- __filter_units_by_property $mode LoadState loaded $(
- __filter_units_by_property $mode ActiveState inactive $(
- __filter_units_by_property $mode CanStart yes $( __get_all_units )))
+ __filter_units_by_property $mode ActiveState inactive $(
+ __filter_units_by_property $mode CanStart yes $(
+ __systemctl $mode list-unit-files --state enabled,disabled,static | \
+ { while read -r a b; do [[ $a =~ @\. ]] || echo " $a"; done; }
+ __systemctl $mode list-units --state inactive,failed | \
+ { while read -r a b; do echo " $a"; done; } ))
}
__get_restartable_units () {
# filter out masked and not-found
- __filter_units_by_property $mode LoadState loaded $(
- __filter_units_by_property $mode CanStart yes $( __get_all_units ))
+ __filter_units_by_property $mode CanStart yes $(
+ __systemctl $mode list-unit-files --state enabled,disabled,static | \
+ { while read -r a b; do [[ $a =~ @\. ]] || echo " $a"; done; }
+ __systemctl $mode list-units | \
+ { while read -r a b; do echo " $a"; done; } )
}
__get_failed_units () { __systemctl $1 list-units \
| { while read -r a b c d; do [[ $c == "failed" ]] && echo " $a"; done; }; }

View File

@ -0,0 +1,69 @@
From b06eb4603e2cdd45a78a2b74e19fafc2d784e906 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Wed, 29 Oct 2014 23:47:55 -0400
Subject: [PATCH] zsh-completion: update start/restart completions
Now zsh should behave the same for those two subcommands as bash.
(cherry picked from commit 81333ecf9d5497f8aa95f7fec23c67b869d5abf9)
---
shell-completion/zsh/_systemctl.in | 28 +++++++++++++++++++++-------
1 file changed, 21 insertions(+), 7 deletions(-)
diff --git a/shell-completion/zsh/_systemctl.in b/shell-completion/zsh/_systemctl.in
index 44981fe85d..7eefe53aec 100644
--- a/shell-completion/zsh/_systemctl.in
+++ b/shell-completion/zsh/_systemctl.in
@@ -141,13 +141,29 @@ _filter_units_by_property() {
done
}
-_systemctl_all_units() { { __systemctl list-unit-files; __systemctl list-units --all; } | { while read -r a b; do echo -E - " $a"; done; } }
+_systemctl_all_units() { { __systemctl list-unit-files; __systemctl list-units --all; } | { while read -r a b; do [[ $a =~ @\. ]] || echo -E - " $a"; done; } }
_systemctl_get_template_names() { __systemctl list-unit-files | { while read -r a b; do [[ $a =~ @\. ]] && echo -E - " ${a%%@.*}@"; done; } }
_systemctl_active_units() {_sys_active_units=( $(__systemctl list-units | { while read -r a b; do echo -E - " $a"; done; }) )}
-_systemctl_startable_units(){_sys_startable_units=($(__systemctl list-units --state inactive,failed -- $(_systemctl_all_units) | { while read -r a b c d; do [[ $b == "loaded" ]] && echo -E - " $a"; done; }) )}
-_systemctl_restartable_units(){_sys_restartable_units=($(__systemctl list-units --state inactive,failed,active -- $(_systemctl_all_units) | { while read -r a b c d; do [[ $b == "loaded" ]] && echo -E - " $a"; done; }) )}
+
+_systemctl_startable_units(){
+ _sys_startable_units=(_filter_units_by_property ActiveState inactive $(
+ _filter_units_by_property CanStart yes $(
+ __systemctl $mode list-unit-files --state enabled,disabled,static | \
+ { while read -r a b; do [[ $a =~ @\. ]] || echo -E - " $a"; done; }
+ __systemctl $mode list-units --state inactive,failed | \
+ { while read -r a b; do echo -E - " $a"; done; } )))
+}
+
+_systemctl_restartable_units(){
+ _sys_restartable_units=(_filter_units_by_property CanStart yes $(
+ __systemctl $mode list-unit-files --state enabled,disabled,static | \
+ { while read -r a b; do [[ $a =~ @\. ]] || echo -E - " $a"; done; }
+ __systemctl $mode list-units | \
+ { while read -r a b; do echo -E - " $a"; done; } ))
+}
+
_systemctl_failed_units() {_sys_failed_units=( $(__systemctl list-units --failed | { while read -r a b; do echo -E - " $a"; done; }) )}
_systemctl_enabled_units() {_sys_enabled_units=( $(__systemctl list-unit-files | { while read -r a b; do [[ $b == "enabled" ]] && echo -E - " $a"; done; }) )}
_systemctl_disabled_units(){_sys_disabled_units=($(__systemctl list-unit-files | { while read -r a b; do [[ $b == "disabled" ]] && echo -E - " $a"; done; }) )}
@@ -194,8 +210,7 @@ done
(( $+functions[_systemctl_start] )) || _systemctl_start()
{
_systemctl_startable_units
- compadd "$@" - $( _filter_units_by_property CanStart yes \
- ${_sys_startable_units[*]} )
+ compadd "$@" - ${_sys_startable_units[*]} $(_systemctl_get_template_names)
}
# Completion functions for STOPPABLE_UNITS
@@ -231,8 +246,7 @@ for fun in restart reload-or-restart ; do
(( $+functions[_systemctl_$fun] )) || _systemctl_$fun()
{
_systemctl_restartable_units
- compadd "$@" - $( _filter_units_by_property CanStart yes \
- ${_sys_restartable_units[*]} )
+ compadd "$@" - ${_sys_restartable_units[*]} $(_systemctl_get_template_names)
}
done

View File

@ -0,0 +1,39 @@
From 71b0b96d1ced2ab5d0fe67963e112d50c15f38e7 Mon Sep 17 00:00:00 2001
From: Hans de Goede <hdegoede@redhat.com>
Date: Thu, 30 Oct 2014 10:15:54 +0100
Subject: [PATCH] keymap: Ignore brightness keys on Dell Inspiron 1520 to avoid
double events
On the Dell Inspiron 1520 both the atkbd and acpi-video input devices report
an event for pressing the brightness up / down key-combos, resulting in user
space seeing double events and increasing / decreasing the brightness 2 steps
for each keypress.
This hwdb snippet suppresses the atkbd events, making the Inspiron 1520 work
like most modern laptops which emit brightness up / down events through
acpi-video only.
Reported by Pavel Malyshev <p.malishev@gmail.com>
https://bugzilla.redhat.com/show_bug.cgi?id=1141525
(cherry picked from commit aba248ee6b1eb10baf3d89eca2ad7569459af6ab)
---
hwdb/60-keyboard.hwdb | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
index 06caba9791..d2ca965c90 100644
--- a/hwdb/60-keyboard.hwdb
+++ b/hwdb/60-keyboard.hwdb
@@ -230,6 +230,11 @@ keyboard:dmi:bvn*:bvr*:bd*:svnDell*:pnInspiron*1110:pvr*
keyboard:dmi:bvn*:bvr*:bd*:svnDell*:pnInspiron*1210:pvr*
KEYBOARD_KEY_84=wlan
+# Dell Inspiron 1520
+keyboard:dmi:bvn*:bvr*:bd*:svnDell*:pnInspiron*1520:pvr*
+ KEYBOARD_KEY_85=unknown # Brightness Down, also emitted by acpi-video, ignore
+ KEYBOARD_KEY_86=unknown # Brightness Up, also emitted by acpi-video, ignore
+
# Latitude XT2
keyboard:dmi:bvn*:bvr*:bd*:svnDell*:pnLatitude*XT2:pvr*
KEYBOARD_KEY_9b=up # tablet rocker up

View File

@ -0,0 +1,161 @@
From 455c0ac1d254ceecb30625fa01e9fd3b47956693 Mon Sep 17 00:00:00 2001
From: Colin Guthrie <colin@mageia.org>
Date: Wed, 29 Oct 2014 14:03:41 +0000
Subject: [PATCH] sysusers: Preserve ownership and mode on /etc/passwd and
friends
When running sysusers we would clobber file ownership and permissions
on the files /etc/passwd, /etc/group and /etc/[g]shadow.
This simply preserves the ownership and mode if existing files are
found.
(cherry picked from commit e3c72c21d62aadabf4df436c3e2c7219eeeccc1c)
---
src/sysusers/sysusers.c | 61 +++++++++++++++++++++++++++++++++----------------
1 file changed, 41 insertions(+), 20 deletions(-)
diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c
index 9b9be96a0a..c133dc5f10 100644
--- a/src/sysusers/sysusers.c
+++ b/src/sysusers/sysusers.c
@@ -358,6 +358,7 @@ static int write_files(void) {
_cleanup_fclose_ FILE *passwd = NULL, *group = NULL, *shadow = NULL, *gshadow = NULL;
_cleanup_free_ char *passwd_tmp = NULL, *group_tmp = NULL, *shadow_tmp = NULL, *gshadow_tmp = NULL;
const char *passwd_path = NULL, *group_path = NULL, *shadow_path = NULL, *gshadow_path = NULL;
+ struct stat st;
bool group_changed = false;
Iterator iterator;
Item *i;
@@ -372,15 +373,17 @@ static int write_files(void) {
if (r < 0)
goto finish;
- if (fchmod(fileno(group), 0644) < 0) {
- r = -errno;
- goto finish;
- }
-
original = fopen(group_path, "re");
if (original) {
struct group *gr;
+ if (fstat(fileno(original), &st) < 0 ||
+ fchmod(fileno(group), st.st_mode & 07777) < 0 ||
+ fchown(fileno(group), st.st_uid, st.st_gid) < 0) {
+ r = -errno;
+ goto finish;
+ }
+
errno = 0;
while ((gr = fgetgrent(original))) {
/* Safety checks against name and GID
@@ -418,6 +421,9 @@ static int write_files(void) {
} else if (errno != ENOENT) {
r = -errno;
goto finish;
+ } else if (fchmod(fileno(group), 0644) < 0) {
+ r = -errno;
+ goto finish;
}
HASHMAP_FOREACH(i, todo_gids, iterator) {
@@ -449,15 +455,17 @@ static int write_files(void) {
if (r < 0)
goto finish;
- if (fchmod(fileno(gshadow), 0000) < 0) {
- r = -errno;
- goto finish;
- }
-
original = fopen(gshadow_path, "re");
if (original) {
struct sgrp *sg;
+ if (fstat(fileno(original), &st) < 0 ||
+ fchmod(fileno(gshadow), st.st_mode & 07777) < 0 ||
+ fchown(fileno(gshadow), st.st_uid, st.st_gid) < 0) {
+ r = -errno;
+ goto finish;
+ }
+
errno = 0;
while ((sg = fgetsgent(original))) {
@@ -483,6 +491,9 @@ static int write_files(void) {
} else if (errno != ENOENT) {
r = -errno;
goto finish;
+ } else if (fchmod(fileno(gshadow), 0000) < 0) {
+ r = -errno;
+ goto finish;
}
HASHMAP_FOREACH(i, todo_gids, iterator) {
@@ -513,15 +524,17 @@ static int write_files(void) {
if (r < 0)
goto finish;
- if (fchmod(fileno(passwd), 0644) < 0) {
- r = -errno;
- goto finish;
- }
-
original = fopen(passwd_path, "re");
if (original) {
struct passwd *pw;
+ if (fstat(fileno(original), &st) < 0 ||
+ fchmod(fileno(passwd), st.st_mode & 07777) < 0 ||
+ fchown(fileno(passwd), st.st_uid, st.st_gid) < 0) {
+ r = -errno;
+ goto finish;
+ }
+
errno = 0;
while ((pw = fgetpwent(original))) {
@@ -552,6 +565,9 @@ static int write_files(void) {
} else if (errno != ENOENT) {
r = -errno;
goto finish;
+ } else if (fchmod(fileno(passwd), 0644) < 0) {
+ r = -errno;
+ goto finish;
}
HASHMAP_FOREACH(i, todo_uids, iterator) {
@@ -596,15 +612,17 @@ static int write_files(void) {
if (r < 0)
goto finish;
- if (fchmod(fileno(shadow), 0000) < 0) {
- r = -errno;
- goto finish;
- }
-
original = fopen(shadow_path, "re");
if (original) {
struct spwd *sp;
+ if (fstat(fileno(original), &st) < 0 ||
+ fchmod(fileno(shadow), st.st_mode & 07777) < 0 ||
+ fchown(fileno(shadow), st.st_uid, st.st_gid) < 0) {
+ r = -errno;
+ goto finish;
+ }
+
errno = 0;
while ((sp = fgetspent(original))) {
@@ -629,6 +647,9 @@ static int write_files(void) {
} else if (errno != ENOENT) {
r = -errno;
goto finish;
+ } else if (fchmod(fileno(shadow), 0000) < 0) {
+ r = -errno;
+ goto finish;
}
lstchg = (long) (now(CLOCK_REALTIME) / USEC_PER_DAY);

View File

@ -0,0 +1,23 @@
From bf69d42ba609389fb858c872b1523df06b382c1b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Tue, 28 Oct 2014 12:36:17 -0400
Subject: [PATCH] snapshot: return error when snapshot exists
(cherry picked from commit 7cabba07745b388497e8c0fc19b61984167fd474)
---
src/core/snapshot.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/core/snapshot.c b/src/core/snapshot.c
index 5eed615a15..c2678cbe6e 100644
--- a/src/core/snapshot.c
+++ b/src/core/snapshot.c
@@ -208,7 +208,7 @@ int snapshot_create(Manager *m, const char *name, bool cleanup, sd_bus_error *e,
return sd_bus_error_setf(e, SD_BUS_ERROR_INVALID_ARGS, "Unit name %s lacks snapshot suffix.", name);
if (manager_get_unit(m, name))
- sd_bus_error_setf(e, BUS_ERROR_UNIT_EXISTS, "Snapshot %s exists already.", name);
+ return sd_bus_error_setf(e, BUS_ERROR_UNIT_EXISTS, "Snapshot %s exists already.", name);
} else {

View File

@ -0,0 +1,30 @@
From 25c530dfadb25190da84efa435102a0b525b8487 Mon Sep 17 00:00:00 2001
From: Dan Williams <dcbw@redhat.com>
Date: Thu, 30 Oct 2014 14:23:00 -0500
Subject: [PATCH] sd-dhcp-client: clean up raw socket sd_event_source when
creating new UDP socket
The raw socket sd_event_source used for DHCP server solicitations
was simply dropped on the floor when creating the new UDP socket
after a lease has been acquired. Clean it up properly so we're
not still listening and responding to events on it.
(cherry picked from commit affaa94fc38a980a70534f70f6a6c58a4129b062)
---
src/libsystemd-network/sd-dhcp-client.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src/libsystemd-network/sd-dhcp-client.c b/src/libsystemd-network/sd-dhcp-client.c
index 0eba4c379d..1f7f238ca0 100644
--- a/src/libsystemd-network/sd-dhcp-client.c
+++ b/src/libsystemd-network/sd-dhcp-client.c
@@ -1269,6 +1269,9 @@ static int client_handle_message(sd_dhcp_client *client, DHCPMessage *message,
if (r >= 0) {
client->timeout_resend =
sd_event_source_unref(client->timeout_resend);
+ client->receive_message =
+ sd_event_source_unref(client->receive_message);
+ client->fd = asynchronous_close(client->fd);
if (IN_SET(client->state, DHCP_STATE_REQUESTING,
DHCP_STATE_REBOOTING))

View File

@ -0,0 +1,54 @@
From cac66621b23029e0dbab0cbcf8720e602e92eafd Mon Sep 17 00:00:00 2001
From: Ronny Chevalier <chevalier.ronny@gmail.com>
Date: Thu, 25 Sep 2014 22:46:37 +0200
Subject: [PATCH] remove references of readahead
(cherry picked from commit cb607ecb84b3cb7299438ca6f7fab705b0a6de45)
---
.gitignore | 1 -
README | 1 -
TODO | 7 -------
3 files changed, 9 deletions(-)
diff --git a/.gitignore b/.gitignore
index 0b71f0973b..14f169135d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -101,7 +101,6 @@
/systemd-quotacheck
/systemd-random-seed
/systemd-rc-local-generator
-/systemd-readahead
/systemd-remount-api-vfs
/systemd-remount-fs
/systemd-reply-password
diff --git a/README b/README
index 99b66a8396..144036717c 100644
--- a/README
+++ b/README
@@ -30,7 +30,6 @@ AUTHOR:
LICENSE:
LGPLv2.1+ for all code
- - except sd-readahead.[ch] which is MIT
- except src/shared/MurmurHash2.c which is Public Domain
- except src/shared/siphash24.c which is CC0 Public Domain
- except src/journal/lookup3.c which is Public Domain
diff --git a/TODO b/TODO
index b07d664715..abe89b78a0 100644
--- a/TODO
+++ b/TODO
@@ -646,13 +646,6 @@ Features:
* and a dbus call to generate target from current state
-* readahead:
- - drop /.readahead on bigger upgrades with yum
- - move readahead files into /var (look for them with .path units?)
- - readahead: use BTRFS_IOC_DEFRAG_RANGE instead of BTRFS_IOC_DEFRAG ioctl, with START_IO
- - readahead: when bumping /sys readahead variable save mtime and compare later to detect changes
- - readahead: make use of EXT4_IOC_MOVE_EXT, as used by http://e4rat.sourceforge.net/
-
* GC unreferenced jobs (such as .device jobs)
* write blog stories about:

View File

@ -0,0 +1,40 @@
From cda53bb5a56c508e7ad4e8cc1cbb1f4be1fbb2bf Mon Sep 17 00:00:00 2001
From: Ronny Chevalier <chevalier.ronny@gmail.com>
Date: Sun, 12 Oct 2014 17:59:03 +0200
Subject: [PATCH] shared: add missing includes
(cherry picked from commit 81a12ba6ec2f8514b7d35f0c39a96cc74bb14019)
---
src/shared/copy.h | 3 +++
src/shared/locale-util.h | 4 ++++
2 files changed, 7 insertions(+)
diff --git a/src/shared/copy.h b/src/shared/copy.h
index 0bf2598f60..6b93107fab 100644
--- a/src/shared/copy.h
+++ b/src/shared/copy.h
@@ -21,6 +21,9 @@
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
+#include <stdbool.h>
+#include <sys/types.h>
+
int copy_file(const char *from, const char *to, int flags, mode_t mode);
int copy_tree(const char *from, const char *to, bool merge);
int copy_bytes(int fdf, int fdt, off_t max_bytes);
diff --git a/src/shared/locale-util.h b/src/shared/locale-util.h
index d7a3e4fae6..e48aa3d9af 100644
--- a/src/shared/locale-util.h
+++ b/src/shared/locale-util.h
@@ -21,6 +21,10 @@
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
+#include <stdbool.h>
+
+#include "macro.h"
+
typedef enum LocaleVariable {
/* We don't list LC_ALL here on purpose. People should be
* using LANG instead. */

View File

@ -0,0 +1,32 @@
From 0e0f3ce5c1c3d4d112e2a4534fc895aca463e460 Mon Sep 17 00:00:00 2001
From: Ronny Chevalier <chevalier.ronny@gmail.com>
Date: Thu, 16 Oct 2014 23:22:06 +0200
Subject: [PATCH] shared: fix typo
(cherry picked from commit d3774a1b15ea86f6156269e7ed813830f0c4abb8)
---
src/shared/capability.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/shared/capability.c b/src/shared/capability.c
index d2b901337f..0226542c6c 100644
--- a/src/shared/capability.c
+++ b/src/shared/capability.c
@@ -228,7 +228,7 @@ int drop_privileges(uid_t uid, gid_t gid, uint64_t keep_capabilities) {
* which we want to avoid. */
if (setresgid(gid, gid, gid) < 0) {
- log_error("Failed change group ID: %m");
+ log_error("Failed to change group ID: %m");
return -errno;
}
@@ -244,7 +244,7 @@ int drop_privileges(uid_t uid, gid_t gid, uint64_t keep_capabilities) {
r = setresuid(uid, uid, uid);
if (r < 0) {
- log_error("Failed change user ID: %m");
+ log_error("Failed to change user ID: %m");
return -errno;
}

View File

@ -0,0 +1,37 @@
From 471a21a8647c54a0a9c7334a7dde4e6dd1712248 Mon Sep 17 00:00:00 2001
From: Dave Reisner <dreisner@archlinux.org>
Date: Thu, 30 Oct 2014 20:12:05 -0400
Subject: [PATCH] shared/install: avoid prematurely rejecting "missing" units
f7101b7368df copied some logic to prevent enabling masked units, but
also added a check which causes attempts to enable templated units to
fail. Since we know the logic beyond this check will properly handle
units which truly do not exist, we can rely on the unit file state
comparison to suffice for expressing the intent of f7101b7368df.
ref: https://bugs.archlinux.org/task/42616
(cherry picked from commit 0ffce503cd6e5a5ff5ba5cd1cc23684cfb8bb9e3)
---
src/shared/install.c | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/src/shared/install.c b/src/shared/install.c
index 035b44cc52..cab93e8dc6 100644
--- a/src/shared/install.c
+++ b/src/shared/install.c
@@ -1620,12 +1620,10 @@ int unit_file_enable(
STRV_FOREACH(i, files) {
UnitFileState state;
+ /* We only want to know if this unit is masked, so we ignore
+ * errors from unit_file_get_state, deferring other checks.
+ * This allows templated units to be enabled on the fly. */
state = unit_file_get_state(scope, root_dir, *i);
- if (state < 0) {
- log_error("Failed to get unit file state for %s: %s", *i, strerror(-state));
- return state;
- }
-
if (state == UNIT_FILE_MASKED || state == UNIT_FILE_MASKED_RUNTIME) {
log_error("Failed to enable unit: Unit %s is masked", *i);
return -ENOTSUP;

View File

@ -0,0 +1,75 @@
From 9706b7533be86dad6303cf91a886a8491d2995f7 Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Thu, 30 Oct 2014 20:53:23 +0100
Subject: [PATCH] nspawn: don't make up -1 as error code
(cherry picked from commit fddbb89c46ea5d39e52e361b390ea34a06cbb67c)
---
src/nspawn/nspawn.c | 27 +++++++++++----------------
1 file changed, 11 insertions(+), 16 deletions(-)
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
index d88987a580..7e96efd425 100644
--- a/src/nspawn/nspawn.c
+++ b/src/nspawn/nspawn.c
@@ -2931,33 +2931,30 @@ static int wait_for_container(pid_t pid, ContainerStatus *container) {
}
switch (status.si_code) {
+
case CLD_EXITED:
r = status.si_status;
if (r == 0) {
if (!arg_quiet)
- log_debug("Container %s exited successfully.",
- arg_machine);
+ log_debug("Container %s exited successfully.", arg_machine);
*container = CONTAINER_TERMINATED;
- } else {
- log_error("Container %s failed with error code %i.",
- arg_machine, status.si_status);
- }
+ } else
+ log_error("Container %s failed with error code %i.", arg_machine, status.si_status);
+
break;
case CLD_KILLED:
if (status.si_status == SIGINT) {
if (!arg_quiet)
- log_info("Container %s has been shut down.",
- arg_machine);
+ log_info("Container %s has been shut down.", arg_machine);
*container = CONTAINER_TERMINATED;
r = 0;
break;
} else if (status.si_status == SIGHUP) {
if (!arg_quiet)
- log_info("Container %s is being rebooted.",
- arg_machine);
+ log_info("Container %s is being rebooted.", arg_machine);
*container = CONTAINER_REBOOTED;
r = 0;
@@ -2966,15 +2963,13 @@ static int wait_for_container(pid_t pid, ContainerStatus *container) {
/* CLD_KILLED fallthrough */
case CLD_DUMPED:
- log_error("Container %s terminated by signal %s.",
- arg_machine, signal_to_string(status.si_status));
- r = -1;
+ log_error("Container %s terminated by signal %s.", arg_machine, signal_to_string(status.si_status));
+ r = -EIO;
break;
default:
- log_error("Container %s failed due to unknown reason.",
- arg_machine);
- r = -1;
+ log_error("Container %s failed due to unknown reason.", arg_machine);
+ r = -EIO;
break;
}

View File

@ -0,0 +1,114 @@
From cae7f26accc90031b04c6cedae10b54a6c854c87 Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Fri, 31 Oct 2014 16:22:36 +0100
Subject: [PATCH] units: don't order journal flushing afte remote-fs.target
Instead, only depend on the actual file systems we need.
This should solve dep loops on setups where remote-fs.target is moved
into late boot.
(cherry picked from commit 919699ec301ea507edce4a619141ed22e789ac0d)
---
src/nspawn/nspawn.c | 38 ++++++++++++++--------------------
units/systemd-journal-flush.service.in | 3 ++-
2 files changed, 18 insertions(+), 23 deletions(-)
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
index 7e96efd425..f332ade03e 100644
--- a/src/nspawn/nspawn.c
+++ b/src/nspawn/nspawn.c
@@ -2911,8 +2911,8 @@ static int change_uid_gid(char **_home) {
* container argument.
* > 0 : The program executed in the container terminated with an
* error. The exit code of the program executed in the
- * container is returned. No change is made to the container
- * argument.
+ * container is returned. The container argument has been set
+ * to CONTAINER_TERMINATED.
* 0 : The container is being rebooted, has been shut down or exited
* successfully. The container argument has been set to either
* CONTAINER_TERMINATED or CONTAINER_REBOOTED.
@@ -2921,8 +2921,8 @@ static int change_uid_gid(char **_home) {
* error is indicated by a non-zero value.
*/
static int wait_for_container(pid_t pid, ContainerStatus *container) {
- int r;
siginfo_t status;
+ int r;
r = wait_for_terminate(pid, &status);
if (r < 0) {
@@ -2933,44 +2933,38 @@ static int wait_for_container(pid_t pid, ContainerStatus *container) {
switch (status.si_code) {
case CLD_EXITED:
- r = status.si_status;
- if (r == 0) {
- if (!arg_quiet)
- log_debug("Container %s exited successfully.", arg_machine);
+ if (status.si_status == 0) {
+ log_full(arg_quiet ? LOG_DEBUG : LOG_INFO, "Container %s exited successfully.", arg_machine);
- *container = CONTAINER_TERMINATED;
} else
- log_error("Container %s failed with error code %i.", arg_machine, status.si_status);
+ log_full(arg_quiet ? LOG_DEBUG : LOG_INFO, "Container %s failed with error code %i.", arg_machine, status.si_status);
- break;
+ *container = CONTAINER_TERMINATED;
+ return status.si_status;
case CLD_KILLED:
if (status.si_status == SIGINT) {
- if (!arg_quiet)
- log_info("Container %s has been shut down.", arg_machine);
+ log_full(arg_quiet ? LOG_DEBUG : LOG_INFO, "Container %s has been shut down.", arg_machine);
*container = CONTAINER_TERMINATED;
- r = 0;
- break;
+ return 0;
+
} else if (status.si_status == SIGHUP) {
- if (!arg_quiet)
- log_info("Container %s is being rebooted.", arg_machine);
+ log_full(arg_quiet ? LOG_DEBUG : LOG_INFO, "Container %s is being rebooted.", arg_machine);
*container = CONTAINER_REBOOTED;
- r = 0;
- break;
+ return 0;
}
+
/* CLD_KILLED fallthrough */
case CLD_DUMPED:
log_error("Container %s terminated by signal %s.", arg_machine, signal_to_string(status.si_status));
- r = -EIO;
- break;
+ return -EIO;
default:
log_error("Container %s failed due to unknown reason.", arg_machine);
- r = -EIO;
- break;
+ return -EIO;
}
return r;
diff --git a/units/systemd-journal-flush.service.in b/units/systemd-journal-flush.service.in
index 699670bb4e..2612220e2e 100644
--- a/units/systemd-journal-flush.service.in
+++ b/units/systemd-journal-flush.service.in
@@ -10,8 +10,9 @@ Description=Trigger Flushing of Journal to Persistent Storage
Documentation=man:systemd-journald.service(8) man:journald.conf(5)
DefaultDependencies=no
Requires=systemd-journald.service
-After=systemd-journald.service local-fs.target remote-fs.target
+After=systemd-journald.service
Before=systemd-user-sessions.service systemd-tmpfiles-setup.service
+RequiresMountsFor=/var/log/journal
[Service]
ExecStart=@rootbindir@/journalctl --flush

View File

@ -0,0 +1,75 @@
From bc1912751bdb942cb36ccbadc823c0ba1377ec46 Mon Sep 17 00:00:00 2001
From: Marcel Holtmann <marcel@holtmann.org>
Date: Fri, 31 Oct 2014 20:37:59 +0100
Subject: [PATCH] hwdb: Update database of Bluetooth company identifiers
(cherry picked from commit 5d20fde4a5c4dff4d7c737b545fbd13582d544c1)
---
hwdb/20-bluetooth-vendor-product.hwdb | 57 +++++++++++++++++++++++++++++++++++
1 file changed, 57 insertions(+)
diff --git a/hwdb/20-bluetooth-vendor-product.hwdb b/hwdb/20-bluetooth-vendor-product.hwdb
index ee2efdff2e..58ca87d69d 100644
--- a/hwdb/20-bluetooth-vendor-product.hwdb
+++ b/hwdb/20-bluetooth-vendor-product.hwdb
@@ -1166,3 +1166,60 @@ bluetooth:v0181*
bluetooth:v0182*
ID_VENDOR_FROM_DATABASE=HOP Ubiquitous
+
+bluetooth:v0183*
+ ID_VENDOR_FROM_DATABASE=To Be Assigned
+
+bluetooth:v0184*
+ ID_VENDOR_FROM_DATABASE=Nectar
+
+bluetooth:v0185*
+ ID_VENDOR_FROM_DATABASE=bel'apps LLC
+
+bluetooth:v0186*
+ ID_VENDOR_FROM_DATABASE=CORE Lighting Ltd
+
+bluetooth:v0187*
+ ID_VENDOR_FROM_DATABASE=Seraphim Sense Ltd
+
+bluetooth:v0188*
+ ID_VENDOR_FROM_DATABASE=Unico RBC
+
+bluetooth:v0189*
+ ID_VENDOR_FROM_DATABASE=Physical Enterprises Inc.
+
+bluetooth:v018A*
+ ID_VENDOR_FROM_DATABASE=Able Trend Technology Limited
+
+bluetooth:v018B*
+ ID_VENDOR_FROM_DATABASE=Konica Minolta, Inc.
+
+bluetooth:v018C*
+ ID_VENDOR_FROM_DATABASE=Wilo SE
+
+bluetooth:v018D*
+ ID_VENDOR_FROM_DATABASE=Extron Design Services
+
+bluetooth:v018E*
+ ID_VENDOR_FROM_DATABASE=Fitbit, Inc.
+
+bluetooth:v018F*
+ ID_VENDOR_FROM_DATABASE=Fireflies Systems
+
+bluetooth:v0190*
+ ID_VENDOR_FROM_DATABASE=Intelletto Technologies Inc.
+
+bluetooth:v0191*
+ ID_VENDOR_FROM_DATABASE=FDK CORPORATION
+
+bluetooth:v0192*
+ ID_VENDOR_FROM_DATABASE=Cloudleaf, Inc
+
+bluetooth:v0193*
+ ID_VENDOR_FROM_DATABASE=Maveric Automation LLC
+
+bluetooth:v0194*
+ ID_VENDOR_FROM_DATABASE=Acoustic Stream Corporation
+
+bluetooth:v0195*
+ ID_VENDOR_FROM_DATABASE=Zuli

View File

@ -0,0 +1,60 @@
From 84ba1738e89859f02e6d333337afb3b80cb44cdb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Sat, 1 Nov 2014 11:32:44 -0400
Subject: [PATCH] libudev: modernization
This brings udev logging style a bit closer to normal systemd convention.
(cherry picked from commit fe756ed9ec2c0fa33c30b1d9a33d745dc1593aed)
---
src/libudev/libudev.c | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/src/libudev/libudev.c b/src/libudev/libudev.c
index e2ab960d55..7803863b2e 100644
--- a/src/libudev/libudev.c
+++ b/src/libudev/libudev.c
@@ -119,7 +119,7 @@ _public_ struct udev *udev_new(void)
{
struct udev *udev;
const char *env;
- FILE *f;
+ _cleanup_free_ FILE *f = NULL;
udev = new0(struct udev, 1);
if (udev == NULL)
@@ -132,7 +132,7 @@ _public_ struct udev *udev_new(void)
f = fopen("/etc/udev/udev.conf", "re");
if (f != NULL) {
char line[UTIL_LINE_SIZE];
- int line_nr = 0;
+ unsigned line_nr = 0;
while (fgets(line, sizeof(line), f)) {
size_t len;
@@ -153,7 +153,7 @@ _public_ struct udev *udev_new(void)
/* split key/value */
val = strchr(key, '=');
if (val == NULL) {
- udev_err(udev, "missing <key>=<value> in /etc/udev/udev.conf[%i]; skip line\n", line_nr);
+ udev_err(udev, "/etc/udev/udev.conf:%u: missing assignment, skipping line.\n", line_nr);
continue;
}
val[0] = '\0';
@@ -185,7 +185,7 @@ _public_ struct udev *udev_new(void)
/* unquote */
if (val[0] == '"' || val[0] == '\'') {
if (val[len-1] != val[0]) {
- udev_err(udev, "inconsistent quoting in /etc/udev/udev.conf[%i]; skip line\n", line_nr);
+ udev_err(udev, "/etc/udev/udev.conf:%u: inconsistent quoting, skipping line.\n", line_nr);
continue;
}
val[len-1] = '\0';
@@ -197,7 +197,6 @@ _public_ struct udev *udev_new(void)
continue;
}
}
- fclose(f);
}
/* environment overrides config */

View File

@ -0,0 +1,72 @@
From bedfb81393f6718d07dc7857bd94ddf0c9e17d67 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Sat, 1 Nov 2014 12:06:41 -0400
Subject: [PATCH] libudev: do not accept invalid log levels
Invalid log levels lead to a assert failure later on.
https://bugs.freedesktop.org/show_bug.cgi?id=85657
(cherry picked from commit ee7122c0ec6aa11f02e9e8d94254b353f12d2c14)
---
src/libudev/libudev-util.c | 10 +++++++---
src/libudev/libudev.c | 19 ++++++++++++++++---
2 files changed, 23 insertions(+), 6 deletions(-)
diff --git a/src/libudev/libudev-util.c b/src/libudev/libudev-util.c
index f3fdf3b5aa..0bc10f3470 100644
--- a/src/libudev/libudev-util.c
+++ b/src/libudev/libudev-util.c
@@ -159,9 +159,13 @@ int util_log_priority(const char *priority)
char *endptr;
int prio;
- prio = strtol(priority, &endptr, 10);
- if (endptr[0] == '\0' || isspace(endptr[0]))
- return prio;
+ prio = strtoul(priority, &endptr, 10);
+ if (endptr[0] == '\0' || isspace(endptr[0])) {
+ if (prio >= 0 && prio <= 7)
+ return prio;
+ else
+ return -ERANGE;
+ }
return log_level_from_string(priority);
}
diff --git a/src/libudev/libudev.c b/src/libudev/libudev.c
index 7803863b2e..8464427651 100644
--- a/src/libudev/libudev.c
+++ b/src/libudev/libudev.c
@@ -193,7 +193,13 @@ _public_ struct udev *udev_new(void)
}
if (streq(key, "udev_log")) {
- udev_set_log_priority(udev, util_log_priority(val));
+ int prio;
+
+ prio = util_log_priority(val);
+ if (prio < 0)
+ udev_err(udev, "/etc/udev/udev.conf:%u: invalid logging level '%s', ignoring.\n", line_nr, val);
+ else
+ udev_set_log_priority(udev, prio);
continue;
}
}
@@ -201,8 +207,15 @@ _public_ struct udev *udev_new(void)
/* environment overrides config */
env = secure_getenv("UDEV_LOG");
- if (env != NULL)
- udev_set_log_priority(udev, util_log_priority(env));
+ if (env != NULL) {
+ int prio;
+
+ prio = util_log_priority(env);
+ if (prio < 0)
+ udev_err(udev, "$UDEV_LOG specifies invalid logging level '%s', ignoring.\n", env);
+ else
+ udev_set_log_priority(udev, prio);
+ }
return udev;
}

View File

@ -0,0 +1,33 @@
From c2c2394e0c29458ce9ed3c990c8978fafdc1a97b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Sat, 1 Nov 2014 14:36:29 -0400
Subject: [PATCH] man: describe all log levels in udevadm(8)
https://bugs.freedesktop.org/show_bug.cgi?id=85657
(cherry picked from commit e03234a16047dc635d13f7118fc9fcf243744b51)
---
man/udevadm.xml | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/man/udevadm.xml b/man/udevadm.xml
index b85d9a9249..fd17f40be3 100644
--- a/man/udevadm.xml
+++ b/man/udevadm.xml
@@ -368,9 +368,14 @@
<term><option>-l</option></term>
<term><option>--log-priority=<replaceable>value</replaceable></option></term>
<listitem>
- <para>Set the internal log level of systemd-udevd. Valid values are the numerical
- syslog priorities or their textual representations: <option>err</option>,
- <option>info</option> and <option>debug</option>.</para>
+ <para>Set the internal log level of
+ <filename>systemd-udevd</filename>. Valid values are the
+ numerical syslog priorities or their textual
+ representations: <option>emerg</option>,
+ <option>alert</option>, <option>crit</option>,
+ <option>err</option>, <option>warning</option>,
+ <option>notice</option>, <option>info</option>, and
+ <option>debug</option>.</para>
</listitem>
</varlistentry>
<varlistentry>

View File

@ -0,0 +1,50 @@
From 87c237865b445906e3df7873b0fcd0a9f8483f13 Mon Sep 17 00:00:00 2001
From: Dan Williams <dcbw@redhat.com>
Date: Fri, 31 Oct 2014 12:20:21 -0500
Subject: [PATCH] sd-dhcp6-client: fix off-by-two error in DUID length
The duid data passed by the caller does not include the DUID type,
but sd_dhcp6_client_set_duid() was treating it like it did.
(cherry picked from commit 393b6f28ecec537f05567c4ec8af8c499d0ea226)
---
src/libsystemd-network/sd-dhcp6-client.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/src/libsystemd-network/sd-dhcp6-client.c b/src/libsystemd-network/sd-dhcp6-client.c
index fa4f9b5dc2..dbec1a2a8b 100644
--- a/src/libsystemd-network/sd-dhcp6-client.c
+++ b/src/libsystemd-network/sd-dhcp6-client.c
@@ -200,19 +200,19 @@ int sd_dhcp6_client_set_duid(sd_dhcp6_client *client, uint16_t type, uint8_t *du
switch (type) {
case DHCP6_DUID_LLT:
- if (duid_len <= sizeof(client->duid.llt))
+ if (duid_len <= sizeof(client->duid.llt) - 2)
return -EINVAL;
break;
case DHCP6_DUID_EN:
- if (duid_len != sizeof(client->duid.en))
+ if (duid_len != sizeof(client->duid.en) - 2)
return -EINVAL;
break;
case DHCP6_DUID_LL:
- if (duid_len <= sizeof(client->duid.ll))
+ if (duid_len <= sizeof(client->duid.ll) - 2)
return -EINVAL;
break;
case DHCP6_DUID_UUID:
- if (duid_len != sizeof(client->duid.uuid))
+ if (duid_len != sizeof(client->duid.uuid) - 2)
return -EINVAL;
break;
default:
@@ -222,7 +222,7 @@ int sd_dhcp6_client_set_duid(sd_dhcp6_client *client, uint16_t type, uint8_t *du
client->duid.raw.type = htobe16(type);
memcpy(&client->duid.raw.data, duid, duid_len);
- client->duid_len = duid_len;
+ client->duid_len = duid_len + 2; /* +2 for sizeof(type) */
return 0;
}

View File

@ -0,0 +1,47 @@
From 7400d7681c4cb18c2d7f993165f60558e509275a Mon Sep 17 00:00:00 2001
From: Jan Synacek <jsynacek@redhat.com>
Date: Fri, 31 Oct 2014 10:16:45 +0100
Subject: [PATCH] core: improve error message when machine id is missing
(cherry picked from commit 86fb9ca7ae49790880d4b3ce523988b01b13d9ae)
---
src/core/machine-id-setup.c | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/src/core/machine-id-setup.c b/src/core/machine-id-setup.c
index efb074fcbd..ce6d8e02d0 100644
--- a/src/core/machine-id-setup.c
+++ b/src/core/machine-id-setup.c
@@ -162,7 +162,7 @@ static int generate(char id[34], const char *root) {
int machine_id_setup(const char *root) {
const char *etc_machine_id, *run_machine_id;
_cleanup_close_ int fd = -1;
- bool writable = false;
+ bool writable = true;
struct stat st;
char id[34]; /* 32 + \n + \0 */
int r;
@@ -186,12 +186,19 @@ int machine_id_setup(const char *root) {
mkdir_parents(etc_machine_id, 0755);
fd = open(etc_machine_id, O_RDWR|O_CREAT|O_CLOEXEC|O_NOCTTY, 0444);
- if (fd >= 0)
- writable = true;
- else {
+ if (fd < 0) {
+ int old_errno = errno;
+
fd = open(etc_machine_id, O_RDONLY|O_CLOEXEC|O_NOCTTY);
if (fd < 0) {
- log_error("Cannot open %s: %m", etc_machine_id);
+ if (old_errno == EROFS && errno == ENOENT)
+ log_error("System cannot boot: Missing /etc/machine-id and /etc is mounted read-only.\n"
+ "Booting up is supported only when:\n"
+ "1) /etc/machine-id exists and is populated.\n"
+ "2) /etc/machine-id exists and is empty.\n"
+ "3) /etc/machine-id is missing and /etc is writable.\n");
+ else
+ log_error("Cannot open %s: %m", etc_machine_id);
return -errno;
}

View File

@ -0,0 +1,42 @@
From 0ad235ddb0640251e6be5a7250ee2b9236571521 Mon Sep 17 00:00:00 2001
From: Umut Tezduyar Lindskog <umut.tezduyar@axis.com>
Date: Wed, 29 Oct 2014 11:20:02 +0100
Subject: [PATCH] man: explain journalctl --flush correctly
(cherry picked from commit 2a97b03b3b087e724867e7501ae0c1535ee35031)
---
NEWS | 4 ++++
man/journalctl.xml | 4 ++--
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/NEWS b/NEWS
index 82a1948a38..d8770a0fcf 100644
--- a/NEWS
+++ b/NEWS
@@ -7,6 +7,10 @@ CHANGES WITH 217:
show log timestamps in the UTC timezone. journalctl now also
accepts -n/--lines=all to disable line capping in a pager.
+ * journalctl gained a new switch, --flush, that flushes
+ logs from /run/log/journal to /var/log/journal if
+ persistent storage is enabled.
+
* Services can notify the manager before they start a reload
(by sending RELOADING=1) or shutdown (by sending
STOPPING=1). This allows the manager to track and show the
diff --git a/man/journalctl.xml b/man/journalctl.xml
index db2a1e142b..0ed3ca3bc8 100644
--- a/man/journalctl.xml
+++ b/man/journalctl.xml
@@ -883,9 +883,9 @@
<listitem><para>Asks the Journal
daemon to flush any log data stored in
- <filename>/run/systemd/log</filename>
+ <filename>/run/log/journal</filename>
into
- <filename>/var/systemd/log</filename>,
+ <filename>/var/log/journal</filename>,
if persistent storage is enabled. This
call does not return until the
operation is

View File

@ -0,0 +1,45 @@
From 48a8d6bbdb6132ee4086e380437fac74457738d7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Sat, 1 Nov 2014 13:52:14 -0400
Subject: [PATCH] systemd-journal-flush.service: remove "trigger" from
description
This service is now synchronous, so "trigger" is misleading.
(cherry picked from commit a65b82457735df2ef58736a55846f400124a8dc0)
---
NEWS | 7 ++++---
units/systemd-journal-flush.service.in | 2 +-
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/NEWS b/NEWS
index d8770a0fcf..0ed03daa21 100644
--- a/NEWS
+++ b/NEWS
@@ -7,9 +7,10 @@ CHANGES WITH 217:
show log timestamps in the UTC timezone. journalctl now also
accepts -n/--lines=all to disable line capping in a pager.
- * journalctl gained a new switch, --flush, that flushes
- logs from /run/log/journal to /var/log/journal if
- persistent storage is enabled.
+ * journalctl gained a new switch, --flush, that synchronously
+ flushes logs from /run/log/journal to /var/log/journal if
+ persistent storage is enabled. systemd-journal-flush.service
+ now waits until the operation is complete.
* Services can notify the manager before they start a reload
(by sending RELOADING=1) or shutdown (by sending
diff --git a/units/systemd-journal-flush.service.in b/units/systemd-journal-flush.service.in
index 2612220e2e..fa290897d6 100644
--- a/units/systemd-journal-flush.service.in
+++ b/units/systemd-journal-flush.service.in
@@ -6,7 +6,7 @@
# (at your option) any later version.
[Unit]
-Description=Trigger Flushing of Journal to Persistent Storage
+Description=Flush Journal to Persistent Storage
Documentation=man:systemd-journald.service(8) man:journald.conf(5)
DefaultDependencies=no
Requires=systemd-journald.service

View File

@ -0,0 +1,38 @@
From c21b1d4f483825ccfae22f5ea384bb14eb86be49 Mon Sep 17 00:00:00 2001
From: Michael Chapman <mike@very.puzzling.org>
Date: Wed, 29 Oct 2014 11:54:07 +1100
Subject: [PATCH] kernel-install/90-loaderentry.install: fix cmdline parsing
A recent commit (2f3a215) changed the parsing of /proc/cmdline to use a
shell array. Unfortunately, this introduced a bug: "read -ar line"
populates the shell variable $r, not $line. This breaks installation of
new loader entries:
# kernel-install add 3.17.1-304.fc21.x86_64 \
/boot/vmlinuz-3.17.1-304.fc21.x86_64
Could not determine the kernel command line parameters.
Please specify the kernel command line in /etc/kernel/cmdline!
This commit alters the read command to correctly populate the $line
array instead.
(cherry picked from commit c008f6ee8df9aa36782378d1a3767543b3635a54)
https://bugzilla.redhat.com/show_bug.cgi?id=1158035
---
src/kernel-install/90-loaderentry.install | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install
index 6f032b5a4b..d433e00a5c 100644
--- a/src/kernel-install/90-loaderentry.install
+++ b/src/kernel-install/90-loaderentry.install
@@ -47,7 +47,7 @@ if [[ -f /etc/kernel/cmdline ]]; then
fi
if ! [[ ${BOOT_OPTIONS[*]} ]]; then
- read -ar line < /proc/cmdline
+ read -a line -r < /proc/cmdline
for i in "${line[@]}"; do
[[ "${i#initrd=*}" != "$i" ]] && continue
BOOT_OPTIONS[${#BOOT_OPTIONS[@]}]="$i"

View File

@ -0,0 +1,27 @@
From 98ec0eb525d2091a88f5226ec96c23a7407d276e Mon Sep 17 00:00:00 2001
From: Joe Lawrence <joe.lawrence@stratus.com>
Date: Sat, 1 Nov 2014 12:18:08 -0400
Subject: [PATCH] scsi_id: fix usage spelling
s/threat/treat/g
(cherry picked from commit 85f13fce322e6303e7e4e55cb43104f81827f36b)
---
src/udev/scsi_id/scsi_id.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/udev/scsi_id/scsi_id.c b/src/udev/scsi_id/scsi_id.c
index 4d9378a5c0..48c6cf7dba 100644
--- a/src/udev/scsi_id/scsi_id.c
+++ b/src/udev/scsi_id/scsi_id.c
@@ -317,8 +317,8 @@ static void help(void) {
" -f,--config= location of config file\n"
" -p,--page=0x80|0x83|pre-spc3-83 SCSI page (0x80, 0x83, pre-spc3-83)\n"
" -s,--sg-version=3|4 use SGv3 or SGv4\n"
- " -b,--blacklisted threat device as blacklisted\n"
- " -g,--whitelisted threat device as whitelisted\n"
+ " -b,--blacklisted treat device as blacklisted\n"
+ " -g,--whitelisted treat device as whitelisted\n"
" -u,--replace-whitespace replace all whitespace by underscores\n"
" -v,--verbose verbose logging\n"
" --version print version\n"

View File

@ -0,0 +1,28 @@
From 7410911917e8b2ffef4ee0c9644632c382bd1aef Mon Sep 17 00:00:00 2001
From: Colin Walters <walters@verbum.org>
Date: Sat, 1 Nov 2014 15:49:53 -0400
Subject: [PATCH] libudev: Use correct free function
FILE * wants cleanup_fclose().
Spotted by udev hwdb segfaulting in gnome-continuous' buildroot
construction.
(cherry picked from commit ea55caa60c6860e33fa4f1a216c003ff666e9c68)
---
src/libudev/libudev.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/libudev/libudev.c b/src/libudev/libudev.c
index 8464427651..05f3b479fa 100644
--- a/src/libudev/libudev.c
+++ b/src/libudev/libudev.c
@@ -119,7 +119,7 @@ _public_ struct udev *udev_new(void)
{
struct udev *udev;
const char *env;
- _cleanup_free_ FILE *f = NULL;
+ _cleanup_fclose_ FILE *f = NULL;
udev = new0(struct udev, 1);
if (udev == NULL)

View File

@ -0,0 +1,40 @@
From bf50845d2c7ebba254ae91b280086701503cf7b9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Sun, 2 Nov 2014 12:10:42 -0500
Subject: [PATCH] Raise level of 'Found dependency...' lines
This way they always show up together with 'Found ordering cycle...'.
Ordering cycles are a serious error and a major pain to debug. If
quiet is enabled, only the first and the last line of output are
shown:
systemd[1]: Found ordering cycle on basic.target/start
systemd[1]: Breaking ordering cycle by deleting job timers.target/start
systemd[1]: Job timers.target/start deleted to break ordering cycle starting with basic.target/start
which isn't particularly enlightening. So just show the whole message
at the same level.
https://bugzilla.redhat.com/show_bug.cgi?id=1158206
(cherry picked from commit 14fe721b5f6d8457cc8737fa75f2ed79e7fa534b)
---
src/core/transaction.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/core/transaction.c b/src/core/transaction.c
index dbb4133fe3..91f5ee18df 100644
--- a/src/core/transaction.c
+++ b/src/core/transaction.c
@@ -377,9 +377,9 @@ static int transaction_verify_order_one(Transaction *tr, Job *j, Job *from, unsi
for (k = from; k; k = ((k->generation == generation && k->marker != k) ? k->marker : NULL)) {
/* logging for j not k here here to provide consistent narrative */
- log_info_unit(j->unit->id,
- "Found dependency on %s/%s",
- k->unit->id, job_type_to_string(k->type));
+ log_warning_unit(j->unit->id,
+ "Found dependency on %s/%s",
+ k->unit->id, job_type_to_string(k->type));
if (!delete && hashmap_get(tr->jobs, k->unit) &&
!unit_matters_to_anchor(k->unit, k)) {

View File

@ -0,0 +1,124 @@
From 1034fff7872e864bc6a7e091724b85a44f34474f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Sun, 2 Nov 2014 12:19:38 -0500
Subject: [PATCH] manager: do not print timing when running in test mode
(cherry picked from commit 56dacdbc1ca95cef8bf8c97c0d7af761a71eaab3)
---
src/core/manager.c | 84 ++++++++++++++++++++++++++++++------------------------
1 file changed, 46 insertions(+), 38 deletions(-)
diff --git a/src/core/manager.c b/src/core/manager.c
index d427d88d4e..ff29ae1d9d 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
@@ -2584,45 +2584,13 @@ bool manager_unit_inactive_or_pending(Manager *m, const char *name) {
return unit_inactive_or_pending(u);
}
-void manager_check_finished(Manager *m) {
+static void manager_notify_finished(Manager *m) {
char userspace[FORMAT_TIMESPAN_MAX], initrd[FORMAT_TIMESPAN_MAX], kernel[FORMAT_TIMESPAN_MAX], sum[FORMAT_TIMESPAN_MAX];
usec_t firmware_usec, loader_usec, kernel_usec, initrd_usec, userspace_usec, total_usec;
- Unit *u = NULL;
- Iterator i;
- assert(m);
-
- if (m->n_running_jobs == 0)
- m->jobs_in_progress_event_source = sd_event_source_unref(m->jobs_in_progress_event_source);
-
- if (hashmap_size(m->jobs) > 0) {
-
- if (m->jobs_in_progress_event_source)
- sd_event_source_set_time(m->jobs_in_progress_event_source, now(CLOCK_MONOTONIC) + JOBS_IN_PROGRESS_WAIT_USEC);
-
- return;
- }
-
- manager_flip_auto_status(m, false);
-
- /* Notify Type=idle units that we are done now */
- m->idle_pipe_event_source = sd_event_source_unref(m->idle_pipe_event_source);
- manager_close_idle_pipe(m);
-
- /* Turn off confirm spawn now */
- m->confirm_spawn = false;
-
- /* No need to update ask password status when we're going non-interactive */
- manager_close_ask_password(m);
-
- /* This is no longer the first boot */
- manager_set_first_boot(m, false);
-
- if (dual_timestamp_is_set(&m->finish_timestamp))
+ if (m->test_run)
return;
- dual_timestamp_get(&m->finish_timestamp);
-
if (m->running_as == SYSTEMD_SYSTEM && detect_container(NULL) <= 0) {
/* Note that m->kernel_usec.monotonic is always at 0,
@@ -2677,10 +2645,6 @@ void manager_check_finished(Manager *m) {
NULL);
}
- SET_FOREACH(u, m->startup_units, i)
- if (u->cgroup_path)
- cgroup_context_apply(unit_get_cgroup_context(u), unit_get_cgroup_mask(u), u->cgroup_path, manager_state(m));
-
bus_manager_send_finished(m, firmware_usec, loader_usec, kernel_usec, initrd_usec, userspace_usec, total_usec);
sd_notifyf(false,
@@ -2689,6 +2653,50 @@ void manager_check_finished(Manager *m) {
format_timespan(sum, sizeof(sum), total_usec, USEC_PER_MSEC));
}
+void manager_check_finished(Manager *m) {
+ Unit *u = NULL;
+ Iterator i;
+
+ assert(m);
+
+ if (m->n_running_jobs == 0)
+ m->jobs_in_progress_event_source = sd_event_source_unref(m->jobs_in_progress_event_source);
+
+ if (hashmap_size(m->jobs) > 0) {
+
+ if (m->jobs_in_progress_event_source)
+ sd_event_source_set_time(m->jobs_in_progress_event_source, now(CLOCK_MONOTONIC) + JOBS_IN_PROGRESS_WAIT_USEC);
+
+ return;
+ }
+
+ manager_flip_auto_status(m, false);
+
+ /* Notify Type=idle units that we are done now */
+ m->idle_pipe_event_source = sd_event_source_unref(m->idle_pipe_event_source);
+ manager_close_idle_pipe(m);
+
+ /* Turn off confirm spawn now */
+ m->confirm_spawn = false;
+
+ /* No need to update ask password status when we're going non-interactive */
+ manager_close_ask_password(m);
+
+ /* This is no longer the first boot */
+ manager_set_first_boot(m, false);
+
+ if (dual_timestamp_is_set(&m->finish_timestamp))
+ return;
+
+ dual_timestamp_get(&m->finish_timestamp);
+
+ manager_notify_finished(m);
+
+ SET_FOREACH(u, m->startup_units, i)
+ if (u->cgroup_path)
+ cgroup_context_apply(unit_get_cgroup_context(u), unit_get_cgroup_mask(u), u->cgroup_path, manager_state(m));
+}
+
static int create_generator_dir(Manager *m, char **generator, const char *name) {
char *p;
int r;

View File

@ -0,0 +1,58 @@
From 0b0aec3a3418f2562805416f1f8ced5cd245c894 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Sun, 2 Nov 2014 11:39:17 -0500
Subject: [PATCH] unit: do not order timers.target before basic.target
Since commit 19f8d037833f2 'timer: order OnCalendar units after
timer-sync.target if DefaultDependencies=no' timers might get a
dependency on time-sync.target, which does not really belong in early
boot. If ntp is enabled, time-sync.target might be delayed until a
network connection is established.
It turns out that majority of timer units found in the wild do not
need to be started in early boot. Out of the timer units available in
Fedora 21, only systemd-readahead-done.timer and mdadm-last-resort@.timer
should be started early, but they both have DefaultDependencies=no,
so are not part of timers.target anyway. All the rest look like they
will be fine with being started a bit later (and the majority even
much later, since they run daily or weekly).
Let timers.target be pulled in by basic.target, but without the
temporal dependency. This means timer units are started on a "best
effort" schedule.
https://bugzilla.redhat.com/show_bug.cgi?id=1158206
(cherry picked from commit 3b0217036040a6013faeab4eb9da7469e3bbcfb3)
---
units/basic.target | 5 ++++-
units/timers.target | 3 +++
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/units/basic.target b/units/basic.target
index 228f62c4b1..eee3e6b774 100644
--- a/units/basic.target
+++ b/units/basic.target
@@ -8,8 +8,11 @@
[Unit]
Description=Basic System
Documentation=man:systemd.special(7)
+
Requires=sysinit.target
+After=sysinit.target
Wants=sockets.target timers.target paths.target slices.target
-After=sysinit.target sockets.target timers.target paths.target slices.target
+After=sockets.target paths.target slices.target
+
JobTimeoutSec=15min
JobTimeoutAction=poweroff-force
diff --git a/units/timers.target b/units/timers.target
index 07fda3d9d0..251fa68065 100644
--- a/units/timers.target
+++ b/units/timers.target
@@ -8,3 +8,6 @@
[Unit]
Description=Timers
Documentation=man:systemd.special(7)
+
+DefaultDependencies=no
+Conflicts=shutdown.target

View File

@ -0,0 +1,28 @@
From ce5c8ab64093246bd0cdd2037789e947d80551ca Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Sun, 2 Nov 2014 21:45:42 -0500
Subject: [PATCH] units: order sd-journal-flush after sd-remount-fs
Otherwise we could attempt to flush the journal while /var/log/ was
still ro, and silently skip journal flushing.
The way that errors in flushing are handled should still be changed to
be more transparent and robust.
(cherry picked from commit 1f1926aa5e836caa3bd6df43704aecd606135103)
---
units/systemd-journal-flush.service.in | 1 +
1 file changed, 1 insertion(+)
diff --git a/units/systemd-journal-flush.service.in b/units/systemd-journal-flush.service.in
index fa290897d6..98c91b4bc5 100644
--- a/units/systemd-journal-flush.service.in
+++ b/units/systemd-journal-flush.service.in
@@ -11,6 +11,7 @@ Documentation=man:systemd-journald.service(8) man:journald.conf(5)
DefaultDependencies=no
Requires=systemd-journald.service
After=systemd-journald.service
+After=systemd-remount-fs.service
Before=systemd-user-sessions.service systemd-tmpfiles-setup.service
RequiresMountsFor=/var/log/journal

View File

@ -0,0 +1,23 @@
From be463cec86a08f14b565f5c7324fc5b8696a0161 Mon Sep 17 00:00:00 2001
From: Tom Gundersen <teg@jklm.no>
Date: Mon, 3 Nov 2014 15:58:30 +0100
Subject: [PATCH] man: sd_event_add_post - fix typo
(cherry picked from commit f49481d0ca170ea567b46fde6c1c089b1dbb49cb)
---
man/sd_event_add_defer.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/man/sd_event_add_defer.xml b/man/sd_event_add_defer.xml
index 442600a93e..dcc76cd48f 100644
--- a/man/sd_event_add_defer.xml
+++ b/man/sd_event_add_defer.xml
@@ -104,7 +104,7 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
default, the handler will be called once
(<constant>SD_EVENT_ONESHOT</constant>).</para>
- <para><function>sd_event_add_defer()</function> adds a new event
+ <para><function>sd_event_add_post()</function> adds a new event
source that will "fire" if any event handlers are invoked whenever
the event loop is run. By default, the source is enabled
permanently (<constant>SD_EVENT_ON</constant>).</para>

View File

@ -0,0 +1,22 @@
From db1bd7139d53e7417ce1ed992c08ba52b83dfb0a Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Mon, 3 Nov 2014 21:11:16 +0100
Subject: [PATCH] journald: fix minor memory leak
(cherry picked from commit 99d0966e75a984bed4f117c888ecc93e16e7b7b6)
---
src/journal/journald-server.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c
index 12735c4b81..08b143b630 100644
--- a/src/journal/journald-server.c
+++ b/src/journal/journald-server.c
@@ -1655,6 +1655,7 @@ void server_done(Server *s) {
free(s->buffer);
free(s->tty_path);
free(s->cgroup_root);
+ free(s->hostname_field);
if (s->mmap)
mmap_cache_unref(s->mmap);

View File

@ -0,0 +1,27 @@
From a2e4c94df3d38cd2af73546ffd2623d9d1b20baa Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Mon, 3 Nov 2014 23:10:34 +0100
Subject: [PATCH] journald: fix memory leak on error path
(cherry picked from commit 26d8ff04914a5208d029e899682cd314b7714bf0)
---
src/journal/journal-vacuum.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/journal/journal-vacuum.c b/src/journal/journal-vacuum.c
index 7699482a77..226af82da7 100644
--- a/src/journal/journal-vacuum.c
+++ b/src/journal/journal-vacuum.c
@@ -275,7 +275,11 @@ int journal_directory_vacuum(
patch_realtime(directory, p, &st, &realtime);
- GREEDY_REALLOC(list, n_allocated, n_list + 1);
+ if (!GREEDY_REALLOC(list, n_allocated, n_list + 1)) {
+ free(p);
+ r = -ENOMEM;
+ goto finish;
+ }
list[n_list].filename = p;
list[n_list].usage = 512UL * (uint64_t) st.st_blocks;

View File

@ -0,0 +1,26 @@
From f4dab44d63124d6753a9c168442f70ab6a745e2c Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Tue, 4 Nov 2014 00:28:33 +0100
Subject: [PATCH] journal: when dumping log data with missing COMM fields, show
"unknown" instead
A small readability improvement...
(cherry picked from commit 1248e84008028ae54326c565fcc65dcbce3556ad)
---
src/shared/logs-show.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c
index 04e1165191..e33824be4a 100644
--- a/src/shared/logs-show.c
+++ b/src/shared/logs-show.c
@@ -365,7 +365,7 @@ static int output_short(
fprintf(f, " %.*s", (int) comm_len, comm);
n += comm_len + 1;
} else
- fputc(' ', f);
+ fputs(" unknown", f);
if (pid && shall_print(pid, pid_len, flags)) {
fprintf(f, "[%.*s]", (int) pid_len, pid);

View File

@ -0,0 +1,31 @@
From 34f01b8f564d8b0b15bfaa50f4c89ac8cebcf291 Mon Sep 17 00:00:00 2001
From: Jan Synacek <jsynacek@redhat.com>
Date: Mon, 3 Nov 2014 14:01:04 +0100
Subject: [PATCH] localectl: fix localectl set-x11-keymap syntax description
This complements the fix in:
commit cd4c6fb12598435fe24431f1dd616f9582f0e3bd
Author: Jan Synacek <jsynacek@redhat.com>
Date: Mon Oct 20 12:43:39 2014 +0200
man: fix localectl set-x11-keymap syntax description
(cherry picked from commit 31cf921abbeafc9dae2d5c777f3e2285e6f4c19d)
---
src/locale/localectl.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/locale/localectl.c b/src/locale/localectl.c
index 3690f9fc89..d4a2d29aea 100644
--- a/src/locale/localectl.c
+++ b/src/locale/localectl.c
@@ -505,7 +505,7 @@ static void help(void) {
" list-locales Show known locales\n"
" set-keymap MAP [MAP] Set virtual console keyboard mapping\n"
" list-keymaps Show known virtual console keyboard mappings\n"
- " set-x11-keymap LAYOUT [MODEL] [VARIANT] [OPTIONS]\n"
+ " set-x11-keymap LAYOUT [MODEL [VARIANT [OPTIONS]]]\n"
" Set X11 keyboard mapping\n"
" list-x11-keymap-models Show known X11 keyboard mapping models\n"
" list-x11-keymap-layouts Show known X11 keyboard mapping layouts\n"

View File

@ -0,0 +1,25 @@
From 328d74f857bcba139289654a88e66693cc24013f Mon Sep 17 00:00:00 2001
From: Jan Synacek <jsynacek@redhat.com>
Date: Tue, 4 Nov 2014 13:38:59 +0100
Subject: [PATCH] man/tmpfiles.d: fix typo
(cherry picked from commit ff8d1aba5378949c352147cf348aaeafd7221716)
---
man/tmpfiles.d.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml
index f2360ba9a4..1b14d69a91 100644
--- a/man/tmpfiles.d.xml
+++ b/man/tmpfiles.d.xml
@@ -108,8 +108,8 @@
filename in lexicographic order, regardless of which
of the directories they reside in. If multiple files
specify the same path, the entry in the file with the
- lexicographically earliest name will be applied, all
- all other conflicting entries will be logged as
+ lexicographically earliest name will be applied.
+ All other conflicting entries will be logged as
errors. When two lines are prefix and suffix of each
other, then the prefix is always processed first, the
suffix later. Otherwise, the files/directories are

View File

@ -1,4 +1,4 @@
From ec2b7ebedde908aed11e6504b58a7712d052344b Mon Sep 17 00:00:00 2001
From 5793666dcea38a768af843c6dcd60029a8c43026 Mon Sep 17 00:00:00 2001
From: Michal Schmidt <mschmidt@redhat.com>
Date: Tue, 4 Nov 2014 20:28:08 +0100
Subject: [PATCH] units: make systemd-journald.service Type=notify
@ -11,14 +11,16 @@ it has its signal handlers set up.
https://bugs.freedesktop.org/show_bug.cgi?id=85871
https://bugzilla.redhat.com/show_bug.cgi?id=1159641
(cherry picked from commit a87a38c20196a4aeb56b6ba71d688eefd0b21c30)
(from upstream commit 87a38c20196a4aeb56b6ba71d688eefd0b21c30)
Conflicts:
units/systemd-journald.service.in
---
units/systemd-journald.service.in | 1 +
1 file changed, 1 insertion(+)
diff --git a/units/systemd-journald.service.in b/units/systemd-journald.service.in
index 4de38fa..441d5b1 100644
index 4de38fad59..441d5b1f96 100644
--- a/units/systemd-journald.service.in
+++ b/units/systemd-journald.service.in
@@ -14,6 +14,7 @@ After=systemd-journald.socket systemd-journald-dev-log.socket syslog.socket
@ -29,6 +31,3 @@ index 4de38fa..441d5b1 100644
Sockets=systemd-journald.socket systemd-journald-dev-log.socket
ExecStart=@rootlibexecdir@/systemd-journald
Restart=always
--
2.1.0

View File

@ -0,0 +1,22 @@
From 28ad915f797e29462533011ec886640db58884c8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cristian=20Rodr=C3=ADguez?= <crrodriguez@opensuse.org>
Date: Tue, 4 Nov 2014 20:48:08 -0300
Subject: [PATCH] buildsys: test-util needs -lm for fabs()
(cherry picked from commit 01acf6c3b7390e8c47b7a5cd7cae4bcbd2846634)
---
Makefile.am | 1 +
1 file changed, 1 insertion(+)
diff --git a/Makefile.am b/Makefile.am
index c80d25df29..a94578a9a7 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1527,6 +1527,7 @@ test_util_SOURCES = \
src/test/test-util.c
test_util_LDADD = \
+ -lm \
libsystemd-core.la
test_uid_range_SOURCES = \

View File

@ -0,0 +1,26 @@
From 86e00bfef3a221d032d2dfdf4592cea152548b16 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Tue, 4 Nov 2014 23:45:15 +0000
Subject: [PATCH] udev: Fix parsing of udev.event-timeout kernel parameter.
(cherry picked from commit f671774f52838d35d78e62ddcb781b5b65b3373f)
---
src/udev/udevd.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/udev/udevd.c b/src/udev/udevd.c
index 2e6c71352f..193702cd28 100644
--- a/src/udev/udevd.c
+++ b/src/udev/udevd.c
@@ -994,9 +994,9 @@ static void kernel_cmdline_options(struct udev *udev) {
if (r < 0)
log_warning("Invalid udev.exec-delay ignored: %s", opt + 16);
} else if (startswith(opt, "udev.event-timeout=")) {
- r = safe_atou64(opt + 16, &arg_event_timeout_usec);
+ r = safe_atou64(opt + 19, &arg_event_timeout_usec);
if (r < 0) {
- log_warning("Invalid udev.event-timeout ignored: %s", opt + 16);
+ log_warning("Invalid udev.event-timeout ignored: %s", opt + 19);
break;
}
arg_event_timeout_usec *= USEC_PER_SEC;

View File

@ -0,0 +1,62 @@
From d135b3c6e1bcded6080f83d787254eb0ece25027 Mon Sep 17 00:00:00 2001
From: David Herrmann <dh.herrmann@gmail.com>
Date: Wed, 5 Nov 2014 12:56:49 +0100
Subject: [PATCH] udev: avoid magic constants in kernel-cmdline parsers
Lets recognize the fact that startswith() returns a pointer to the tail on
success. Use it instead of hard-coding string-lengths as magic constants.
(cherry picked from commit cfe2061add5479710f6597899d632e64c54e62ef)
---
src/udev/udevd.c | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/src/udev/udevd.c b/src/udev/udevd.c
index 193702cd28..65d086e9ee 100644
--- a/src/udev/udevd.c
+++ b/src/udev/udevd.c
@@ -967,7 +967,7 @@ static void kernel_cmdline_options(struct udev *udev) {
return;
FOREACH_WORD_QUOTED(word, l, line, state) {
- char *s, *opt;
+ char *s, *opt, *value;
s = strndup(word, l);
if (!s)
@@ -979,24 +979,24 @@ static void kernel_cmdline_options(struct udev *udev) {
else
opt = s;
- if (startswith(opt, "udev.log-priority=")) {
+ if ((value = startswith(opt, "udev.log-priority="))) {
int prio;
- prio = util_log_priority(opt + 18);
+ prio = util_log_priority(value);
log_set_max_level(prio);
udev_set_log_priority(udev, prio);
- } else if (startswith(opt, "udev.children-max=")) {
- r = safe_atoi(opt + 18, &arg_children_max);
+ } else if ((value = startswith(opt, "udev.children-max="))) {
+ r = safe_atoi(value, &arg_children_max);
if (r < 0)
- log_warning("Invalid udev.children-max ignored: %s", opt + 18);
- } else if (startswith(opt, "udev.exec-delay=")) {
- r = safe_atoi(opt + 16, &arg_exec_delay);
+ log_warning("Invalid udev.children-max ignored: %s", value);
+ } else if ((value = startswith(opt, "udev.exec-delay="))) {
+ r = safe_atoi(value, &arg_exec_delay);
if (r < 0)
- log_warning("Invalid udev.exec-delay ignored: %s", opt + 16);
- } else if (startswith(opt, "udev.event-timeout=")) {
- r = safe_atou64(opt + 19, &arg_event_timeout_usec);
+ log_warning("Invalid udev.exec-delay ignored: %s", value);
+ } else if ((value = startswith(opt, "udev.event-timeout="))) {
+ r = safe_atou64(value, &arg_event_timeout_usec);
if (r < 0) {
- log_warning("Invalid udev.event-timeout ignored: %s", opt + 19);
+ log_warning("Invalid udev.event-timeout ignored: %s", value);
break;
}
arg_event_timeout_usec *= USEC_PER_SEC;

View File

@ -0,0 +1,48 @@
From de1a1440dd81857ae679672ae1d757bfbdd2e112 Mon Sep 17 00:00:00 2001
From: Colin Guthrie <colin@mageia.org>
Date: Sun, 2 Nov 2014 13:33:16 +0000
Subject: [PATCH] manager: Ensure user's systemd runtime directory exists.
This mirrors code in dbus.c when creating the private socket and
avoids error messages like:
systemd[1353]: bind(/run/user/603/systemd/notify) failed: No such file or directory
systemd[1353]: Failed to fully start up daemon: No such file or directory
(cherry picked from commit 0c3f25e0c1f028d4da9cc5253abf0322230e6835)
---
src/core/manager.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/src/core/manager.c b/src/core/manager.c
index ff29ae1d9d..47e23ba80e 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
@@ -662,9 +662,11 @@ static int manager_setup_notify(Manager *m) {
return -errno;
}
- if (m->running_as == SYSTEMD_SYSTEM)
+ if (m->running_as == SYSTEMD_SYSTEM) {
m->notify_socket = strdup("/run/systemd/notify");
- else {
+ if (!m->notify_socket)
+ return log_oom();
+ } else {
const char *e;
e = getenv("XDG_RUNTIME_DIR");
@@ -674,9 +676,11 @@ static int manager_setup_notify(Manager *m) {
}
m->notify_socket = strappend(e, "/systemd/notify");
+ if (!m->notify_socket)
+ return log_oom();
+
+ mkdir_parents_label(m->notify_socket, 0755);
}
- if (!m->notify_socket)
- return log_oom();
strncpy(sa.un.sun_path, m->notify_socket, sizeof(sa.un.sun_path)-1);
r = bind(fd, &sa.sa, offsetof(struct sockaddr_un, sun_path) + strlen(sa.un.sun_path));

View File

@ -0,0 +1,62 @@
From af49e1e5c7ff8e30035c1880ee42225f2d15bfd9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Wed, 5 Nov 2014 09:16:58 -0500
Subject: [PATCH] units: disable job timeouts
For boot, we might kill fsck in the middle, with likely catastrophic
consequences.
On shutdown there might be other jobs, like downloading of updates for
installation, and other custom jobs. It seems better to schedule an
individual timeout on each one separately, when it is known what
timeout is useful.
Disable the timeouts for now, until we have a clearer picture of how
we can deal with long-running jobs.
(cherry picked from commit 038193efa6c00e852110f17383ef2786136f4f81)
https://bugzilla.redhat.com/show_bug.cgi?id=1152220
---
units/basic.target | 3 ---
units/poweroff.target | 2 --
units/reboot.target | 2 --
3 files changed, 7 deletions(-)
diff --git a/units/basic.target b/units/basic.target
index eee3e6b774..abb63ec560 100644
--- a/units/basic.target
+++ b/units/basic.target
@@ -13,6 +13,3 @@ Requires=sysinit.target
After=sysinit.target
Wants=sockets.target timers.target paths.target slices.target
After=sockets.target paths.target slices.target
-
-JobTimeoutSec=15min
-JobTimeoutAction=poweroff-force
diff --git a/units/poweroff.target b/units/poweroff.target
index dd92d816ca..71871033a5 100644
--- a/units/poweroff.target
+++ b/units/poweroff.target
@@ -12,8 +12,6 @@ DefaultDependencies=no
Requires=systemd-poweroff.service
After=systemd-poweroff.service
AllowIsolate=yes
-JobTimeoutSec=30min
-JobTimeoutAction=poweroff-force
[Install]
Alias=ctrl-alt-del.target
diff --git a/units/reboot.target b/units/reboot.target
index 668b98d9e4..dec8f56796 100644
--- a/units/reboot.target
+++ b/units/reboot.target
@@ -12,8 +12,6 @@ DefaultDependencies=no
Requires=systemd-reboot.service
After=systemd-reboot.service
AllowIsolate=yes
-JobTimeoutSec=30min
-JobTimeoutAction=reboot-force
[Install]
Alias=ctrl-alt-del.target

View File

@ -0,0 +1,59 @@
From 4d4eff2436b63f19811fa39ef26fa1e2ca31a54a Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Wed, 5 Nov 2014 08:30:52 -0500
Subject: [PATCH] login: rerun vconsole-setup when switching from vgacon to
fbcon
The initialization performed by systemd-vconsole-setup is reset
when changing console drivers (say from vgacon to fbcon), so we
need to run it in that case.
See
http://lists.freedesktop.org/archives/systemd-devel/2014-October/023919.html
http://lists.freedesktop.org/archives/systemd-devel/2014-October/024423.html
http://lists.freedesktop.org/archives/systemd-devel/2014-November/024881.html
This commit adds a udev rule to make systemd-vconsole-setup get run when
the fbcon device becomes available.
(david: moved into new file 90-vconsole.rules instead of 71-seats.rules;
build-failures are on me, not on Ray)
(cherry picked from commit f6ba8671d83f9fce9a00045d8fa399a1c07ba7fc)
---
Makefile.am | 3 +++
src/vconsole/90-vconsole.rules | 11 +++++++++++
2 files changed, 14 insertions(+)
create mode 100644 src/vconsole/90-vconsole.rules
diff --git a/Makefile.am b/Makefile.am
index a94578a9a7..22fd306c81 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -4403,6 +4403,9 @@ rootlibexec_PROGRAMS += \
nodist_systemunit_DATA += \
units/systemd-vconsole-setup.service
+dist_udevrules_DATA += \
+ src/vconsole/90-vconsole.rules
+
SYSINIT_TARGET_WANTS += \
systemd-vconsole-setup.service
endif
diff --git a/src/vconsole/90-vconsole.rules b/src/vconsole/90-vconsole.rules
new file mode 100644
index 0000000000..bf6a9efaa5
--- /dev/null
+++ b/src/vconsole/90-vconsole.rules
@@ -0,0 +1,11 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+# Kernel resets vconsole state when changing console drivers so run
+# systemd-vconsole-setup when fbcon loads
+
+ACTION=="add", SUBSYSTEM=="graphics", KERNEL=="fbcon", RUN+="/usr/lib/systemd/systemd-vconsole-setup"

View File

@ -0,0 +1,72 @@
From 2203c07490c8b64286cf2d04dbb110f4173912a1 Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Thu, 6 Nov 2014 14:37:12 +0100
Subject: [PATCH] hostnamed: introduce new "embedded" chassis type
We really don't want to get lost in adding fridge, car, plane, drone, or
whatever else, hence add a generic term "embedded" cover all the cases
where the computer is just part of something bigger, and not at the
focus of things.
(cherry picked from commit 25fa306ed58b0b7fe30ca9be37c66a7b3b2de70e)
---
man/hostnamectl.xml | 3 ++-
shell-completion/bash/hostnamectl | 2 +-
shell-completion/zsh/_hostnamectl | 2 +-
src/hostname/hostnamed.c | 3 ++-
4 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/man/hostnamectl.xml b/man/hostnamectl.xml
index 128d92f576..ffae5e6b06 100644
--- a/man/hostnamectl.xml
+++ b/man/hostnamectl.xml
@@ -217,7 +217,8 @@
<literal>server</literal>,
<literal>tablet</literal>,
<literal>handset</literal>,
- <literal>watch</literal>, as well as
+ <literal>watch</literal>,
+ <literal>embedded</literal> as well as
the special chassis types
<literal>vm</literal> and
<literal>container</literal> for
diff --git a/shell-completion/bash/hostnamectl b/shell-completion/bash/hostnamectl
index a5e34600c8..7a0850dbe4 100644
--- a/shell-completion/bash/hostnamectl
+++ b/shell-completion/bash/hostnamectl
@@ -52,7 +52,7 @@ _hostnamectl() {
if [[ -z $verb ]]; then
comps=${VERBS[*]}
elif __contains_word "$verb" ${VERBS[CHASSIS]}; then
- comps='desktop laptop server tablet handset watch vm container'
+ comps='desktop laptop server tablet handset watch embedded vm container'
elif __contains_word "$verb" ${VERBS[STANDALONE]} ${VERBS[ICONS]} ${VERBS[NAME]}; then
comps=''
fi
diff --git a/shell-completion/zsh/_hostnamectl b/shell-completion/zsh/_hostnamectl
index e02f6de30e..a7217a1999 100644
--- a/shell-completion/zsh/_hostnamectl
+++ b/shell-completion/zsh/_hostnamectl
@@ -18,7 +18,7 @@ _hostnamectl_set-icon-name() {
_hostnamectl_set-chassis() {
if (( CURRENT <= 3 )); then
- _chassis=( desktop laptop server tablet handset watch vm container )
+ _chassis=( desktop laptop server tablet handset watch embedded vm container )
_describe chassis _chassis
else
_message "no more options"
diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c
index a449610bb8..0123922c4a 100644
--- a/src/hostname/hostnamed.c
+++ b/src/hostname/hostnamed.c
@@ -138,7 +138,8 @@ static bool valid_chassis(const char *chassis) {
"server\0"
"tablet\0"
"handset\0"
- "watch\0",
+ "watch\0"
+ "embedded\0",
chassis);
}

View File

@ -0,0 +1,33 @@
From fe357da5e638f97081099a28b477d59cc6991189 Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Thu, 6 Nov 2014 15:20:29 +0100
Subject: [PATCH] systemctl: when invokes as "reboot -f", sync()
We do this in the clean shutdown path in shutdown.c, hence we should do
is for "reboot -f", too.
(cherry picked from commit 4a3ad39957399c4a30fc472a804e72907ecaa4f9)
---
src/systemctl/systemctl.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index 8481a9b20c..207a5e78dc 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -6948,8 +6948,13 @@ done:
static int halt_now(enum action a) {
-/* Make sure C-A-D is handled by the kernel from this
- * point on... */
+ /* The kernel will automaticall flush ATA disks and suchlike
+ * on reboot(), but the file systems need to be synce'd
+ * explicitly in advance. */
+ sync();
+
+ /* Make sure C-A-D is handled by the kernel from this point
+ * on... */
reboot(RB_ENABLE_CAD);
switch (a) {

View File

@ -0,0 +1,41 @@
From 70a3ef63810ef3c7970871c1b1e1e060110ecfa6 Mon Sep 17 00:00:00 2001
From: Harald Hoyer <harald@redhat.com>
Date: Wed, 3 Sep 2014 13:31:25 +0200
Subject: [PATCH] switch_root: do not fail, if base_filesystem_create() failed
Not all switch roots are like base_filesystem_create() wants them
to look like. They might even boot, if they are RO and don't have the FS
layout. Just ignore the error and switch_root nevertheless.
base_filesystem_create() should have logged, what went wrong.
(cherry picked from commit 6d0f91bf551464c57bc12f99deccd515fb3f628d)
---
src/shared/switch-root.c | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/src/shared/switch-root.c b/src/shared/switch-root.c
index bac0e5c349..1a558b897b 100644
--- a/src/shared/switch-root.c
+++ b/src/shared/switch-root.c
@@ -47,7 +47,6 @@ int switch_root(const char *new_root, const char *oldroot, bool detach_oldroot,
struct stat new_root_stat;
bool old_root_remove;
const char *i, *temporary_old_root;
- int r;
if (path_equal(new_root, "/"))
return 0;
@@ -103,11 +102,7 @@ int switch_root(const char *new_root, const char *oldroot, bool detach_oldroot,
}
}
- r = base_filesystem_create(new_root);
- if (r < 0) {
- log_error("Failed to create the base filesystem: %s", strerror(-r));
- return r;
- }
+ (void) base_filesystem_create(new_root);
if (chdir(new_root) < 0) {
log_error("Failed to change directory to %s: %m", new_root);

View File

@ -0,0 +1,42 @@
From f37f36832bafdb4c8566298c554e335f55d23152 Mon Sep 17 00:00:00 2001
From: Michal Schmidt <mschmidt@redhat.com>
Date: Thu, 6 Nov 2014 16:48:11 +0100
Subject: [PATCH] shared: create files even if the SELinux policy has no
context for them
The SELinux policy defines no context for some files. E.g.:
$ matchpathcon /run/lock/subsys /dev/mqueue
/run/lock/subsys <<none>>
/dev/mqueue <<none>>
We still need to be able to create them.
In this case selabel_lookup_raw() returns ENOENT. We should then skip
setfscreatecon(), but still return success.
It was broken since c34255bdb2 ("label: unify code to make directories,
symlinks").
(cherry picked from commit 2d58aa4692e9fc47911bff5d064ba3e328c35369)
---
src/shared/selinux-util.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/src/shared/selinux-util.c b/src/shared/selinux-util.c
index 1eddd17d27..6bd3bf1c80 100644
--- a/src/shared/selinux-util.c
+++ b/src/shared/selinux-util.c
@@ -332,9 +332,13 @@ int mac_selinux_create_file_prepare(const char *path, mode_t mode) {
r = selabel_lookup_raw(label_hnd, &filecon, newpath, mode);
}
- if (r < 0 && errno != ENOENT)
+ /* No context specified by the policy? Proceed without setting it. */
+ if (r < 0 && errno == ENOENT)
+ return 0;
+
+ if (r < 0)
r = -errno;
- else if (r == 0) {
+ else {
r = setfscreatecon(filecon);
if (r < 0) {
log_enforcing("Failed to set SELinux security context %s for %s: %m", filecon, path);

View File

@ -0,0 +1,27 @@
From 8051be0e4a82590a76e2d76662a57ca624ddc89c Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Thu, 6 Nov 2014 20:00:01 +0100
Subject: [PATCH] switch-root: explain why we don't care about
base_filesystem_create() failing
(cherry picked from commit 64e18fd626838c3500e28b4dbf86ed62206fff47)
---
src/shared/switch-root.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/src/shared/switch-root.c b/src/shared/switch-root.c
index 1a558b897b..3adb8463c5 100644
--- a/src/shared/switch-root.c
+++ b/src/shared/switch-root.c
@@ -102,6 +102,11 @@ int switch_root(const char *new_root, const char *oldroot, bool detach_oldroot,
}
}
+ /* Do not fail, if base_filesystem_create() fails. Not all
+ * switch roots are like base_filesystem_create() wants them
+ * to look like. They might even boot, if they are RO and
+ * don't have the FS layout. Just ignore the error and
+ * switch_root() nevertheless. */
(void) base_filesystem_create(new_root);
if (chdir(new_root) < 0) {

View File

@ -0,0 +1,67 @@
From e47a9f972749544d28cffede77de13e9d8af4d2b Mon Sep 17 00:00:00 2001
From: Michal Schmidt <mschmidt@redhat.com>
Date: Thu, 6 Nov 2014 22:24:13 +0100
Subject: [PATCH] shutdown: fix arguments to /run/initramfs/shutdown
Our initrd interface specifies that the verb is in argv[1].
This is where systemd passes it to systemd-shutdown, but getopt
permutes argv[]. This confuses dracut's shutdown script:
Shutdown called with argument '--log-level'. Rebooting!
getopt can be convinced to not permute argv[] by having '-' as the first
character of optstring. Let's use it. This requires changing the way
non-option arguments (in our case, the verb) are processed.
This fixes a bug where the system would reboot instead of powering off.
(cherry picked from commit 4b5d8d0f22ae61ceb45a25391354ba53b43ee992)
---
src/core/shutdown.c | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/src/core/shutdown.c b/src/core/shutdown.c
index 20cf526ba2..03cfddc543 100644
--- a/src/core/shutdown.c
+++ b/src/core/shutdown.c
@@ -75,7 +75,9 @@ static int parse_argv(int argc, char *argv[]) {
assert(argc >= 1);
assert(argv);
- while ((c = getopt_long(argc, argv, "", options, NULL)) >= 0)
+ /* "-" prevents getopt from permuting argv[] and moving the verb away
+ * from argv[1]. Our interface to initrd promises it'll be there. */
+ while ((c = getopt_long(argc, argv, "-", options, NULL)) >= 0)
switch (c) {
case ARG_LOG_LEVEL:
@@ -113,6 +115,13 @@ static int parse_argv(int argc, char *argv[]) {
break;
+ case '\001':
+ if (!arg_verb)
+ arg_verb = optarg;
+ else
+ log_error("Excess arguments, ignoring");
+ break;
+
case '?':
return -EINVAL;
@@ -120,15 +129,11 @@ static int parse_argv(int argc, char *argv[]) {
assert_not_reached("Unhandled option code.");
}
- if (optind >= argc) {
+ if (!arg_verb) {
log_error("Verb argument missing.");
return -EINVAL;
}
- arg_verb = argv[optind];
-
- if (optind + 1 < argc)
- log_error("Excess arguments, ignoring");
return 0;
}

View File

@ -0,0 +1,41 @@
From bfb4c47dddd3c7aeaa07eb733bb50b62eff2e082 Mon Sep 17 00:00:00 2001
From: Michael Chapman <mike@very.puzzling.org>
Date: Thu, 6 Nov 2014 19:47:02 +1100
Subject: [PATCH] timer: reenable TIMER_ACTIVE timers when restarted
A timer configured with OnActiveSec will start its associated unit again
if the timer is stopped, then started. However, if the timer unit is
restarted -- with "systemctl restart", say -- this does not occur.
This commit ensures that TIMER_ACTIVE timers are re-enabled whenever the
timer is started, even if that's within a restart job.
(cherry picked from commit 779042e772d2459f7649b34a164902dc456f1bab)
---
src/core/timer.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/src/core/timer.c b/src/core/timer.c
index a3713e2140..5c4e9f995a 100644
--- a/src/core/timer.c
+++ b/src/core/timer.c
@@ -521,6 +521,7 @@ fail:
static int timer_start(Unit *u) {
Timer *t = TIMER(u);
+ TimerValue *v;
assert(t);
assert(t->state == TIMER_DEAD || t->state == TIMER_FAILED);
@@ -530,6 +531,11 @@ static int timer_start(Unit *u) {
t->last_trigger = DUAL_TIMESTAMP_NULL;
+ /* Reenable all timers that depend on unit activation time */
+ LIST_FOREACH(value, v, t->values)
+ if (v->base == TIMER_ACTIVE)
+ v->disabled = false;
+
if (t->stamp_path) {
struct stat st;

View File

@ -16,7 +16,7 @@
Name: systemd
Url: http://www.freedesktop.org/wiki/Software/systemd
Version: 217
Release: 3%{?gitcommit:.git%{gitcommit}}%{?dist}
Release: 4%{?gitcommit:.git%{gitcommit}}%{?dist}
# For a breakdown of the licensing, see README
License: LGPLv2+ and MIT and GPLv2+
Summary: A System and Service Manager
@ -36,12 +36,63 @@ Source4: yum-protect-systemd.conf
Source5: inittab
Source6: sysctl.conf.README
# Patch series is available from http://cgit.freedesktop.org/systemd/systemd-stable/log/?h=v215-stable
# GIT_DIR=~/src/systemd/.git git format-patch-ab -M -N --no-signature v216..master
# Patch series is available from http://cgit.freedesktop.org/systemd/systemd-stable/log/?h=v217-stable
# GIT_DIR=~/src/systemd/.git git format-patch-ab -M -N --no-signature v217..v217-stable
# i=1; for p in 0*patch;do printf "Patch%04d: %s\n" $i $p; ((i++));done
Patch0001: 0001-units-don-t-order-journal-flushing-afte-remote-fs.ta.patch
Patch0002: 0002-units-make-systemd-journald.service-Type-notify.patch
Patch0001: 0001-NEWS-well-it-s-Options-now-not-Discard.patch
Patch0002: 0002-sd-bus-properly-handle-removals-of-non-existing-matc.patch
Patch0003: 0003-nspawn-ignore-EEXIST-when-creating-mount-point.patch
Patch0004: 0004-udev-path_id-update-comments.patch
Patch0005: 0005-bash-completion-rework-startable-restartable-units-o.patch
Patch0006: 0006-systemctl-let-list-units-unit-files-honour-type.patch
Patch0007: 0007-systemctl-obey-state-in-list-unit-files.patch
Patch0008: 0008-bash-completion-use-improved-filtering-to-make-thing.patch
Patch0009: 0009-zsh-completion-update-start-restart-completions.patch
Patch0010: 0010-keymap-Ignore-brightness-keys-on-Dell-Inspiron-1520-.patch
Patch0011: 0011-sysusers-Preserve-ownership-and-mode-on-etc-passwd-a.patch
Patch0012: 0012-snapshot-return-error-when-snapshot-exists.patch
Patch0013: 0013-sd-dhcp-client-clean-up-raw-socket-sd_event_source-w.patch
Patch0014: 0014-remove-references-of-readahead.patch
Patch0015: 0015-shared-add-missing-includes.patch
Patch0016: 0016-shared-fix-typo.patch
Patch0017: 0017-shared-install-avoid-prematurely-rejecting-missing-u.patch
Patch0018: 0018-nspawn-don-t-make-up-1-as-error-code.patch
Patch0019: 0019-units-don-t-order-journal-flushing-afte-remote-fs.ta.patch
Patch0020: 0020-hwdb-Update-database-of-Bluetooth-company-identifier.patch
Patch0021: 0021-libudev-modernization.patch
Patch0022: 0022-libudev-do-not-accept-invalid-log-levels.patch
Patch0023: 0023-man-describe-all-log-levels-in-udevadm-8.patch
Patch0024: 0024-sd-dhcp6-client-fix-off-by-two-error-in-DUID-length.patch
Patch0025: 0025-core-improve-error-message-when-machine-id-is-missin.patch
Patch0026: 0026-man-explain-journalctl-flush-correctly.patch
Patch0027: 0027-systemd-journal-flush.service-remove-trigger-from-de.patch
Patch0028: 0028-kernel-install-90-loaderentry.install-fix-cmdline-pa.patch
Patch0029: 0029-scsi_id-fix-usage-spelling.patch
Patch0030: 0030-libudev-Use-correct-free-function.patch
Patch0031: 0031-Raise-level-of-Found-dependency.-lines.patch
Patch0032: 0032-manager-do-not-print-timing-when-running-in-test-mod.patch
Patch0033: 0033-unit-do-not-order-timers.target-before-basic.target.patch
Patch0034: 0034-units-order-sd-journal-flush-after-sd-remount-fs.patch
Patch0035: 0035-man-sd_event_add_post-fix-typo.patch
Patch0036: 0036-journald-fix-minor-memory-leak.patch
Patch0037: 0037-journald-fix-memory-leak-on-error-path.patch
Patch0038: 0038-journal-when-dumping-log-data-with-missing-COMM-fiel.patch
Patch0039: 0039-localectl-fix-localectl-set-x11-keymap-syntax-descri.patch
Patch0040: 0040-man-tmpfiles.d-fix-typo.patch
Patch0041: 0041-units-make-systemd-journald.service-Type-notify.patch
Patch0042: 0042-buildsys-test-util-needs-lm-for-fabs.patch
Patch0043: 0043-udev-Fix-parsing-of-udev.event-timeout-kernel-parame.patch
Patch0044: 0044-udev-avoid-magic-constants-in-kernel-cmdline-parsers.patch
Patch0045: 0045-manager-Ensure-user-s-systemd-runtime-directory-exis.patch
Patch0046: 0046-units-disable-job-timeouts.patch
Patch0047: 0047-login-rerun-vconsole-setup-when-switching-from-vgaco.patch
Patch0048: 0048-hostnamed-introduce-new-embedded-chassis-type.patch
Patch0049: 0049-systemctl-when-invokes-as-reboot-f-sync.patch
Patch0050: 0050-switch_root-do-not-fail-if-base_filesystem_create-fa.patch
Patch0051: 0051-shared-create-files-even-if-the-SELinux-policy-has-n.patch
Patch0052: 0052-switch-root-explain-why-we-don-t-care-about-base_fil.patch
Patch0053: 0053-shutdown-fix-arguments-to-run-initramfs-shutdown.patch
Patch0054: 0054-timer-reenable-TIMER_ACTIVE-timers-when-restarted.patch
Patch0998: fedora-disable-resolv.conf-symlink.patch
Patch0999: fedora-add-bridge-sysctl-configuration.patch
@ -825,6 +876,19 @@ getent passwd systemd-journal-upload >/dev/null 2>&1 || useradd -r -l -g systemd
%{_datadir}/systemd/gatewayd
%changelog
* Thu Nov 06 2014 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 217-4
- Change libgudev1 to only require systemd-libs (#727499), there's
no need to require full systemd stack.
- Fixes for bugs #1159448, #1152220, #1158035.
- Bash completions updates to allow propose more units for start/restart,
and completions for set-default,get-default.
- Again allow systemctl enable of instances.
- Hardware database update and fixes.
- Udev crash on invalid options and kernel commandline timeout parsing are fixed.
- Add "embedded" chassis type.
- Sync before 'reboot -f'.
- Fix restarting of timer units.
* Wed Nov 05 2014 Michal Schmidt <mschmidt@redhat.com> - 217-3
- Fix hanging journal flush (#1159641)