new upstream release
This commit is contained in:
parent
8e6c340f85
commit
fc3de1f4fb
@ -1,23 +0,0 @@
|
|||||||
From 89ad78921a404dc82f22862f2354707199ea1616 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Lukas Nykryn <lnykryn@redhat.com>
|
|
||||||
Date: Fri, 13 Sep 2013 14:31:17 +0200
|
|
||||||
Subject: [PATCH] core/cgroup: first print then free
|
|
||||||
|
|
||||||
---
|
|
||||||
src/core/cgroup.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/core/cgroup.c b/src/core/cgroup.c
|
|
||||||
index 3eeb475..513450a 100644
|
|
||||||
--- a/src/core/cgroup.c
|
|
||||||
+++ b/src/core/cgroup.c
|
|
||||||
@@ -395,8 +395,8 @@ static int unit_create_cgroups(Unit *u, CGroupControllerMask mask) {
|
|
||||||
is_in_hash = true;
|
|
||||||
|
|
||||||
if (r < 0) {
|
|
||||||
- free(path);
|
|
||||||
log_error("cgroup %s exists already: %s", path, strerror(-r));
|
|
||||||
+ free(path);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
|||||||
From 0f84fab56d31f53b2970bdee64e254c4518618a7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tom Gundersen <teg@jklm.no>
|
|
||||||
Date: Fri, 13 Sep 2013 14:46:18 +0200
|
|
||||||
Subject: [PATCH] swap: fix reverse dependencies
|
|
||||||
|
|
||||||
Make sure swap.target correctly requires/wants the swap units.
|
|
||||||
|
|
||||||
This fixes https://bugs.freedesktop.org/show_bug.cgi?id=69291.
|
|
||||||
|
|
||||||
Reported-by: Hussam Al-Tayeb
|
|
||||||
---
|
|
||||||
src/core/swap.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/core/swap.c b/src/core/swap.c
|
|
||||||
index 57d15eb..3950860 100644
|
|
||||||
--- a/src/core/swap.c
|
|
||||||
+++ b/src/core/swap.c
|
|
||||||
@@ -220,7 +220,7 @@ static int swap_add_default_dependencies(Swap *s) {
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!noauto) {
|
|
||||||
- r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, (nofail ? UNIT_WANTED_BY : UNIT_REQUIRED_BY),
|
|
||||||
+ r = unit_add_two_dependencies_by_name_inverse(UNIT(s), UNIT_AFTER, (nofail ? UNIT_WANTS : UNIT_REQUIRES),
|
|
||||||
SPECIAL_SWAP_TARGET, NULL, true);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
@ -1,22 +0,0 @@
|
|||||||
From d0746c1d17407a17c18f26876d9ca0f6f20b29b0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Lennart Poettering <lennart@poettering.net>
|
|
||||||
Date: Fri, 13 Sep 2013 04:13:47 +0200
|
|
||||||
Subject: [PATCH] update TODO
|
|
||||||
|
|
||||||
---
|
|
||||||
TODO | 2 ++
|
|
||||||
1 file changed, 2 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/TODO b/TODO
|
|
||||||
index 08d4914..5354692 100644
|
|
||||||
--- a/TODO
|
|
||||||
+++ b/TODO
|
|
||||||
@@ -58,6 +58,8 @@ CGroup Rework Completion:
|
|
||||||
|
|
||||||
Features:
|
|
||||||
|
|
||||||
+* Move backlight and random-seed into /var/lib/systemd
|
|
||||||
+
|
|
||||||
* When a Type=forking service fails and needed another service that
|
|
||||||
service is not cleaned up again when it has StopWhenUnneeded=yes
|
|
||||||
http://lists.freedesktop.org/archives/systemd-devel/2013-July/012141.html
|
|
@ -1,50 +0,0 @@
|
|||||||
From d12ed80037b482f7da136abbd7abce9c9219ef8e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tom Gundersen <teg@jklm.no>
|
|
||||||
Date: Thu, 15 Aug 2013 08:47:59 +0800
|
|
||||||
Subject: [PATCH] cryptsetup-generator: don't create tmp+swap units
|
|
||||||
|
|
||||||
---
|
|
||||||
src/cryptsetup/cryptsetup-generator.c | 13 ++++++++++---
|
|
||||||
1 file changed, 10 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/cryptsetup/cryptsetup-generator.c b/src/cryptsetup/cryptsetup-generator.c
|
|
||||||
index 81b7708..967c5e6 100644
|
|
||||||
--- a/src/cryptsetup/cryptsetup-generator.c
|
|
||||||
+++ b/src/cryptsetup/cryptsetup-generator.c
|
|
||||||
@@ -72,13 +72,20 @@ static int create_disk(
|
|
||||||
|
|
||||||
_cleanup_free_ char *p = NULL, *n = NULL, *d = NULL, *u = NULL, *from = NULL, *to = NULL, *e = NULL;
|
|
||||||
_cleanup_fclose_ FILE *f = NULL;
|
|
||||||
- bool noauto, nofail;
|
|
||||||
+ bool noauto, nofail, tmp, swap;
|
|
||||||
|
|
||||||
assert(name);
|
|
||||||
assert(device);
|
|
||||||
|
|
||||||
noauto = has_option(options, "noauto");
|
|
||||||
nofail = has_option(options, "nofail");
|
|
||||||
+ tmp = has_option(options, "tmp");
|
|
||||||
+ swap = has_option(options, "swap");
|
|
||||||
+
|
|
||||||
+ if (tmp && swap) {
|
|
||||||
+ log_error("Device '%s' cannot be both 'tmp' and 'swap'. Ignoring.", name);
|
|
||||||
+ return -EINVAL;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
n = unit_name_from_path_instance("systemd-cryptsetup", name, ".service");
|
|
||||||
if (!n)
|
|
||||||
@@ -151,12 +158,12 @@ static int create_disk(
|
|
||||||
name, u, strempty(password), strempty(options),
|
|
||||||
name);
|
|
||||||
|
|
||||||
- if (has_option(options, "tmp"))
|
|
||||||
+ if (tmp)
|
|
||||||
fprintf(f,
|
|
||||||
"ExecStartPost=/sbin/mke2fs '/dev/mapper/%s'\n",
|
|
||||||
name);
|
|
||||||
|
|
||||||
- if (has_option(options, "swap"))
|
|
||||||
+ if (swap)
|
|
||||||
fprintf(f,
|
|
||||||
"ExecStartPost=/sbin/mkswap '/dev/mapper/%s'\n",
|
|
||||||
name);
|
|
@ -1,185 +0,0 @@
|
|||||||
From 61ca2800f3a1666478bdc01fc796d36c917a5032 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tom Gundersen <teg@jklm.no>
|
|
||||||
Date: Sun, 18 Aug 2013 14:59:00 +0800
|
|
||||||
Subject: [PATCH] cryptsetup-generator: allow specifying options in
|
|
||||||
/proc/cmdline
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
The main usecase for this is to make it possible to use cryptsetup in
|
|
||||||
the initrd without it having to include a host-specific /etc/crypttab.
|
|
||||||
|
|
||||||
Tested-by: Thomas Bächler <thomas@archlinux.org>
|
|
||||||
---
|
|
||||||
man/systemd-cryptsetup-generator.xml | 23 ++++++++++
|
|
||||||
src/cryptsetup/cryptsetup-generator.c | 79 +++++++++++++++++++++++++++++++++--
|
|
||||||
2 files changed, 98 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/man/systemd-cryptsetup-generator.xml b/man/systemd-cryptsetup-generator.xml
|
|
||||||
index 215ac2d..d6b7e49 100644
|
|
||||||
--- a/man/systemd-cryptsetup-generator.xml
|
|
||||||
+++ b/man/systemd-cryptsetup-generator.xml
|
|
||||||
@@ -137,6 +137,29 @@
|
|
||||||
will be activated in the initrd or the real root.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
+
|
|
||||||
+ <varlistentry>
|
|
||||||
+ <term><varname>luks.options=</varname></term>
|
|
||||||
+ <term><varname>rd.luks.options=</varname></term>
|
|
||||||
+
|
|
||||||
+ <listitem><para>Takes a LUKS super
|
|
||||||
+ block UUID followed by an '=' and a string
|
|
||||||
+ of options separated by commas as argument.
|
|
||||||
+ This will override the options for the given
|
|
||||||
+ UUID.</para>
|
|
||||||
+ <para>If only a list of options, without an
|
|
||||||
+ UUID, is specified, they apply to any UUIDs not
|
|
||||||
+ specified elsewhere, and without an entry in
|
|
||||||
+ /etc/crypttab.</para><para>
|
|
||||||
+ <varname>rd.luks.options=</varname>
|
|
||||||
+ is honored only by initial RAM disk
|
|
||||||
+ (initrd) while
|
|
||||||
+ <varname>luks.options=</varname> is
|
|
||||||
+ honored by both the main system and
|
|
||||||
+ the initrd.</para>
|
|
||||||
+ </listitem>
|
|
||||||
+ </varlistentry>
|
|
||||||
+
|
|
||||||
<varlistentry>
|
|
||||||
<term><varname>luks.key=</varname></term>
|
|
||||||
<term><varname>rd.luks.key=</varname></term>
|
|
||||||
diff --git a/src/cryptsetup/cryptsetup-generator.c b/src/cryptsetup/cryptsetup-generator.c
|
|
||||||
index 967c5e6..ba6efa6 100644
|
|
||||||
--- a/src/cryptsetup/cryptsetup-generator.c
|
|
||||||
+++ b/src/cryptsetup/cryptsetup-generator.c
|
|
||||||
@@ -240,7 +240,7 @@ static int create_disk(
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static int parse_proc_cmdline(char ***arg_proc_cmdline_disks, char **arg_proc_cmdline_keyfile) {
|
|
||||||
+static int parse_proc_cmdline(char ***arg_proc_cmdline_disks, char ***arg_proc_cmdline_options, char **arg_proc_cmdline_keyfile) {
|
|
||||||
_cleanup_free_ char *line = NULL;
|
|
||||||
char *w = NULL, *state = NULL;
|
|
||||||
int r;
|
|
||||||
@@ -307,7 +307,20 @@ static int parse_proc_cmdline(char ***arg_proc_cmdline_disks, char **arg_proc_cm
|
|
||||||
return log_oom();
|
|
||||||
}
|
|
||||||
|
|
||||||
+ } else if (startswith(word, "luks.options=")) {
|
|
||||||
+ if (strv_extend(arg_proc_cmdline_options, word + 13) < 0)
|
|
||||||
+ return log_oom();
|
|
||||||
+
|
|
||||||
+ } else if (startswith(word, "rd.luks.options=")) {
|
|
||||||
+
|
|
||||||
+ if (in_initrd()) {
|
|
||||||
+ if (strv_extend(arg_proc_cmdline_options, word + 16) < 0)
|
|
||||||
+ return log_oom();
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
} else if (startswith(word, "luks.key=")) {
|
|
||||||
+ if (*arg_proc_cmdline_keyfile)
|
|
||||||
+ free(*arg_proc_cmdline_keyfile);
|
|
||||||
*arg_proc_cmdline_keyfile = strdup(word + 9);
|
|
||||||
if (!*arg_proc_cmdline_keyfile)
|
|
||||||
return log_oom();
|
|
||||||
@@ -337,6 +350,7 @@ static int parse_proc_cmdline(char ***arg_proc_cmdline_disks, char **arg_proc_cm
|
|
||||||
int main(int argc, char *argv[]) {
|
|
||||||
_cleanup_strv_free_ char **arg_proc_cmdline_disks_done = NULL;
|
|
||||||
_cleanup_strv_free_ char **arg_proc_cmdline_disks = NULL;
|
|
||||||
+ _cleanup_strv_free_ char **arg_proc_cmdline_options = NULL;
|
|
||||||
_cleanup_free_ char *arg_proc_cmdline_keyfile = NULL;
|
|
||||||
_cleanup_fclose_ FILE *f = NULL;
|
|
||||||
unsigned n = 0;
|
|
||||||
@@ -357,7 +371,7 @@ int main(int argc, char *argv[]) {
|
|
||||||
|
|
||||||
umask(0022);
|
|
||||||
|
|
||||||
- if (parse_proc_cmdline(&arg_proc_cmdline_disks, &arg_proc_cmdline_keyfile) < 0)
|
|
||||||
+ if (parse_proc_cmdline(&arg_proc_cmdline_disks, &arg_proc_cmdline_options, &arg_proc_cmdline_keyfile) < 0)
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
|
|
||||||
if (!arg_enabled)
|
|
||||||
@@ -412,6 +426,26 @@ int main(int argc, char *argv[]) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (arg_proc_cmdline_options) {
|
|
||||||
+ /*
|
|
||||||
+ If options are specified on the kernel commandline, let them override
|
|
||||||
+ the ones from crypttab.
|
|
||||||
+ */
|
|
||||||
+ STRV_FOREACH(i, arg_proc_cmdline_options) {
|
|
||||||
+ _cleanup_free_ char *proc_uuid = NULL, *proc_options = NULL;
|
|
||||||
+ const char *p = *i;
|
|
||||||
+
|
|
||||||
+ k = sscanf(p, "%m[0-9a-fA-F-]=%ms", &proc_uuid, &proc_options);
|
|
||||||
+ if (k == 2 && streq(proc_uuid, device + 5)) {
|
|
||||||
+ if (options)
|
|
||||||
+ free(options);
|
|
||||||
+ options = strdup(p);
|
|
||||||
+ if (!proc_options)
|
|
||||||
+ return log_oom();
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
if (arg_proc_cmdline_disks) {
|
|
||||||
/*
|
|
||||||
If luks UUIDs are specified on the kernel command line, use them as a filter
|
|
||||||
@@ -452,7 +486,7 @@ next:
|
|
||||||
on the kernel command line and not yet written.
|
|
||||||
*/
|
|
||||||
|
|
||||||
- _cleanup_free_ char *name = NULL, *device = NULL;
|
|
||||||
+ _cleanup_free_ char *name = NULL, *device = NULL, *options = NULL;
|
|
||||||
const char *p = *i;
|
|
||||||
|
|
||||||
if (startswith(p, "luks-"))
|
|
||||||
@@ -467,7 +501,44 @@ next:
|
|
||||||
if (!name || !device)
|
|
||||||
return log_oom();
|
|
||||||
|
|
||||||
- if (create_disk(name, device, arg_proc_cmdline_keyfile, "timeout=0") < 0)
|
|
||||||
+ if (arg_proc_cmdline_options) {
|
|
||||||
+ /*
|
|
||||||
+ If options are specified on the kernel commandline, use them.
|
|
||||||
+ */
|
|
||||||
+ char **j;
|
|
||||||
+
|
|
||||||
+ STRV_FOREACH(j, arg_proc_cmdline_options) {
|
|
||||||
+ _cleanup_free_ char *proc_uuid = NULL, *proc_options = NULL;
|
|
||||||
+ const char *s = *j;
|
|
||||||
+ int k;
|
|
||||||
+
|
|
||||||
+ k = sscanf(s, "%m[0-9a-fA-F-]=%ms", &proc_uuid, &proc_options);
|
|
||||||
+ if (k == 2) {
|
|
||||||
+ if (streq(proc_uuid, device + 5)) {
|
|
||||||
+ if (options)
|
|
||||||
+ free(options);
|
|
||||||
+ options = strdup(proc_options);
|
|
||||||
+ if (!options)
|
|
||||||
+ return log_oom();
|
|
||||||
+ }
|
|
||||||
+ } else if (!options) {
|
|
||||||
+ /*
|
|
||||||
+ Fall back to options without a specified UUID
|
|
||||||
+ */
|
|
||||||
+ options = strdup(s);
|
|
||||||
+ if (!options)
|
|
||||||
+ return log_oom();
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (!options) {
|
|
||||||
+ options = strdup("timeout=0");
|
|
||||||
+ if (!options)
|
|
||||||
+ return log_oom();
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (create_disk(name, device, arg_proc_cmdline_keyfile, options) < 0)
|
|
||||||
r = EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
|||||||
From 091169fa11a366ab42fb6f71c22e8ed95868f804 Mon Sep 17 00:00:00 2001
|
|
||||||
From: David Mackey <tdmackey@booleanhaiku.com>
|
|
||||||
Date: Thu, 12 Sep 2013 19:45:49 -0700
|
|
||||||
Subject: [PATCH] automount: rename repeat_unmont to repeat_unmount
|
|
||||||
|
|
||||||
Trivial cleanup of repeat_unmount() spelling.
|
|
||||||
---
|
|
||||||
src/core/automount.c | 6 +++---
|
|
||||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/core/automount.c b/src/core/automount.c
|
|
||||||
index a20d534..6762392 100644
|
|
||||||
--- a/src/core/automount.c
|
|
||||||
+++ b/src/core/automount.c
|
|
||||||
@@ -66,7 +66,7 @@ static void automount_init(Unit *u) {
|
|
||||||
UNIT(a)->ignore_on_isolate = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static void repeat_unmout(const char *path) {
|
|
||||||
+static void repeat_unmount(const char *path) {
|
|
||||||
assert(path);
|
|
||||||
|
|
||||||
for (;;) {
|
|
||||||
@@ -100,7 +100,7 @@ static void unmount_autofs(Automount *a) {
|
|
||||||
if (a->where &&
|
|
||||||
(UNIT(a)->manager->exit_code != MANAGER_RELOAD &&
|
|
||||||
UNIT(a)->manager->exit_code != MANAGER_REEXECUTE))
|
|
||||||
- repeat_unmout(a->where);
|
|
||||||
+ repeat_unmount(a->where);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void automount_done(Unit *u) {
|
|
||||||
@@ -575,7 +575,7 @@ fail:
|
|
||||||
close_nointr_nofail(ioctl_fd);
|
|
||||||
|
|
||||||
if (mounted)
|
|
||||||
- repeat_unmout(a->where);
|
|
||||||
+ repeat_unmount(a->where);
|
|
||||||
|
|
||||||
log_error_unit(UNIT(a)->id,
|
|
||||||
"Failed to initialize automounter: %s", strerror(-r));
|
|
@ -1,24 +0,0 @@
|
|||||||
From 8799f0a37ef24fe2709b6e7fdb4ca2c1c9586718 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Gao feng <gaofeng@cn.fujitsu.com>
|
|
||||||
Date: Fri, 13 Sep 2013 11:17:05 +0800
|
|
||||||
Subject: [PATCH] cgroup: add the missing setting of variable's value
|
|
||||||
|
|
||||||
set the value of variable "r" to the return value
|
|
||||||
of cg_set_attribute.
|
|
||||||
---
|
|
||||||
src/core/cgroup.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/core/cgroup.c b/src/core/cgroup.c
|
|
||||||
index 513450a..9804227 100644
|
|
||||||
--- a/src/core/cgroup.c
|
|
||||||
+++ b/src/core/cgroup.c
|
|
||||||
@@ -264,7 +264,7 @@ void cgroup_context_apply(CGroupContext *c, CGroupControllerMask mask, const cha
|
|
||||||
log_error("Failed to set memory.limit_in_bytes on %s: %s", path, strerror(-r));
|
|
||||||
|
|
||||||
sprintf(buf, "%" PRIu64 "\n", c->memory_soft_limit);
|
|
||||||
- cg_set_attribute("memory", path, "memory.soft_limit_in_bytes", buf);
|
|
||||||
+ r = cg_set_attribute("memory", path, "memory.soft_limit_in_bytes", buf);
|
|
||||||
if (r < 0)
|
|
||||||
log_error("Failed to set memory.limit_in_bytes on %s: %s", path, strerror(-r));
|
|
||||||
}
|
|
@ -1,23 +0,0 @@
|
|||||||
From 9b69c0d07b0db38c181e35e52bcea0eb0dd21818 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Gao feng <gaofeng@cn.fujitsu.com>
|
|
||||||
Date: Fri, 13 Sep 2013 11:17:06 +0800
|
|
||||||
Subject: [PATCH] cgroup: correct the log information
|
|
||||||
|
|
||||||
it should be memory.soft_limit_in_bytes.
|
|
||||||
---
|
|
||||||
src/core/cgroup.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/core/cgroup.c b/src/core/cgroup.c
|
|
||||||
index 9804227..08cb64b 100644
|
|
||||||
--- a/src/core/cgroup.c
|
|
||||||
+++ b/src/core/cgroup.c
|
|
||||||
@@ -266,7 +266,7 @@ void cgroup_context_apply(CGroupContext *c, CGroupControllerMask mask, const cha
|
|
||||||
sprintf(buf, "%" PRIu64 "\n", c->memory_soft_limit);
|
|
||||||
r = cg_set_attribute("memory", path, "memory.soft_limit_in_bytes", buf);
|
|
||||||
if (r < 0)
|
|
||||||
- log_error("Failed to set memory.limit_in_bytes on %s: %s", path, strerror(-r));
|
|
||||||
+ log_error("Failed to set memory.soft_limit_in_bytes on %s: %s", path, strerror(-r));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mask & CGROUP_DEVICE) {
|
|
@ -1,43 +0,0 @@
|
|||||||
From c7e5130d5b3983986bfe95918c75e083fa90dd47 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Gao feng <gaofeng@cn.fujitsu.com>
|
|
||||||
Date: Fri, 13 Sep 2013 14:43:04 +0800
|
|
||||||
Subject: [PATCH] cgroup: fix incorrectly setting memory cgroup
|
|
||||||
|
|
||||||
If the memory_limit of unit is -1, we should write "-1"
|
|
||||||
to the file memory.limit_in_bytes. not the (unit64_t) -1.
|
|
||||||
|
|
||||||
otherwise the memory.limit_in_bytes will be set to zero.
|
|
||||||
---
|
|
||||||
src/core/cgroup.c | 15 +++++++++++----
|
|
||||||
1 file changed, 11 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/core/cgroup.c b/src/core/cgroup.c
|
|
||||||
index 08cb64b..1f41efc 100644
|
|
||||||
--- a/src/core/cgroup.c
|
|
||||||
+++ b/src/core/cgroup.c
|
|
||||||
@@ -257,14 +257,21 @@ void cgroup_context_apply(CGroupContext *c, CGroupControllerMask mask, const cha
|
|
||||||
|
|
||||||
if (mask & CGROUP_MEMORY) {
|
|
||||||
char buf[DECIMAL_STR_MAX(uint64_t) + 1];
|
|
||||||
+ if (c->memory_limit != (uint64_t) -1) {
|
|
||||||
+ sprintf(buf, "%" PRIu64 "\n", c->memory_limit);
|
|
||||||
+ r = cg_set_attribute("memory", path, "memory.limit_in_bytes", buf);
|
|
||||||
+ } else
|
|
||||||
+ r = cg_set_attribute("memory", path, "memory.limit_in_bytes", "-1");
|
|
||||||
|
|
||||||
- sprintf(buf, "%" PRIu64 "\n", c->memory_limit);
|
|
||||||
- r = cg_set_attribute("memory", path, "memory.limit_in_bytes", buf);
|
|
||||||
if (r < 0)
|
|
||||||
log_error("Failed to set memory.limit_in_bytes on %s: %s", path, strerror(-r));
|
|
||||||
|
|
||||||
- sprintf(buf, "%" PRIu64 "\n", c->memory_soft_limit);
|
|
||||||
- r = cg_set_attribute("memory", path, "memory.soft_limit_in_bytes", buf);
|
|
||||||
+ if (c->memory_soft_limit != (uint64_t) -1) {
|
|
||||||
+ sprintf(buf, "%" PRIu64 "\n", c->memory_soft_limit);
|
|
||||||
+ r = cg_set_attribute("memory", path, "memory.soft_limit_in_bytes", buf);
|
|
||||||
+ } else
|
|
||||||
+ r = cg_set_attribute("memory", path, "memory.soft_limit_in_bytes", "-1");
|
|
||||||
+
|
|
||||||
if (r < 0)
|
|
||||||
log_error("Failed to set memory.soft_limit_in_bytes on %s: %s", path, strerror(-r));
|
|
||||||
}
|
|
@ -1,22 +0,0 @@
|
|||||||
From 198884f22dc432a98e3d4423434b9e97d67f2da8 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Lukas Nykryn <lnykryn@redhat.com>
|
|
||||||
Date: Fri, 13 Sep 2013 14:12:55 +0200
|
|
||||||
Subject: [PATCH] random-seed: we should return errno of failed loop_write
|
|
||||||
|
|
||||||
---
|
|
||||||
src/random-seed/random-seed.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/random-seed/random-seed.c b/src/random-seed/random-seed.c
|
|
||||||
index 4776c07..afbd500 100644
|
|
||||||
--- a/src/random-seed/random-seed.c
|
|
||||||
+++ b/src/random-seed/random-seed.c
|
|
||||||
@@ -157,7 +157,7 @@ int main(int argc, char *argv[]) {
|
|
||||||
r = loop_write(seed_fd, buf, (size_t) k, false);
|
|
||||||
if (r <= 0) {
|
|
||||||
log_error("Failed to write new random seed file: %s", r < 0 ? strerror(-r) : "short write");
|
|
||||||
- r = k == 0 ? -EIO : (int) k;
|
|
||||||
+ r = r == 0 ? -EIO : r;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
|||||||
From f11f72532fd9a05149714229cb7559b8e3fa802a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Lennart Poettering <lennart@poettering.net>
|
|
||||||
Date: Fri, 13 Sep 2013 14:28:17 +0200
|
|
||||||
Subject: [PATCH] update TODO
|
|
||||||
|
|
||||||
---
|
|
||||||
TODO | 4 ++++
|
|
||||||
1 file changed, 4 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/TODO b/TODO
|
|
||||||
index 5354692..9943b3e 100644
|
|
||||||
--- a/TODO
|
|
||||||
+++ b/TODO
|
|
||||||
@@ -60,6 +60,10 @@ Features:
|
|
||||||
|
|
||||||
* Move backlight and random-seed into /var/lib/systemd
|
|
||||||
|
|
||||||
+* If we try to find a unit via a danglign symlink generate a clean
|
|
||||||
+ error. Currently we just ignore it and read the unit from the search
|
|
||||||
+ path anyway.
|
|
||||||
+
|
|
||||||
* When a Type=forking service fails and needed another service that
|
|
||||||
service is not cleaned up again when it has StopWhenUnneeded=yes
|
|
||||||
http://lists.freedesktop.org/archives/systemd-devel/2013-July/012141.html
|
|
@ -1,24 +0,0 @@
|
|||||||
From 3b93bf5a35b0bb7111754fbae75e7654b775506d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Lukas Nykryn <lnykryn@redhat.com>
|
|
||||||
Date: Fri, 13 Sep 2013 14:12:54 +0200
|
|
||||||
Subject: [PATCH] libudev: fix move_later comparison
|
|
||||||
|
|
||||||
At the beginning move_later is set to -1, but it is set to different
|
|
||||||
value only if expression !move_later is true.
|
|
||||||
---
|
|
||||||
src/libudev/libudev-enumerate.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/libudev/libudev-enumerate.c b/src/libudev/libudev-enumerate.c
|
|
||||||
index bc1e37d..8146f27 100644
|
|
||||||
--- a/src/libudev/libudev-enumerate.c
|
|
||||||
+++ b/src/libudev/libudev-enumerate.c
|
|
||||||
@@ -300,7 +300,7 @@ _public_ struct udev_list_entry *udev_enumerate_get_list_entry(struct udev_enume
|
|
||||||
/* skip to be delayed devices, and move the to
|
|
||||||
* the point where the prefix changes. We can
|
|
||||||
* only move one item at a time. */
|
|
||||||
- if (!move_later) {
|
|
||||||
+ if (move_later == -1) {
|
|
||||||
move_later_prefix = devices_delay_later(udev_enumerate->udev, entry->syspath);
|
|
||||||
|
|
||||||
if (move_later_prefix > 0) {
|
|
@ -1,23 +0,0 @@
|
|||||||
From 583f4eb5d443bc09502d6973f08755173db43fd8 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tom Gundersen <teg@jklm.no>
|
|
||||||
Date: Fri, 13 Sep 2013 21:03:55 +0200
|
|
||||||
Subject: [PATCH] man: document luks.options kernel commandline
|
|
||||||
|
|
||||||
This should have been part of commit 7ab064a6d
|
|
||||||
---
|
|
||||||
man/kernel-command-line.xml | 2 ++
|
|
||||||
1 file changed, 2 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/man/kernel-command-line.xml b/man/kernel-command-line.xml
|
|
||||||
index a4b7d13..cc267a3 100644
|
|
||||||
--- a/man/kernel-command-line.xml
|
|
||||||
+++ b/man/kernel-command-line.xml
|
|
||||||
@@ -250,6 +250,8 @@
|
|
||||||
<term><varname>rd.luks.crypttab=</varname></term>
|
|
||||||
<term><varname>luks.uuid=</varname></term>
|
|
||||||
<term><varname>rd.luks.uuid=</varname></term>
|
|
||||||
+ <term><varname>luks.options=</varname></term>
|
|
||||||
+ <term><varname>rd.luks.options=</varname></term>
|
|
||||||
<term><varname>luks.key=</varname></term>
|
|
||||||
<term><varname>rd.luks.key=</varname></term>
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
|||||||
From f559cb147ae336f62a9020fa909b70ea90e43886 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
|
||||||
Date: Wed, 28 Aug 2013 17:23:59 -0400
|
|
||||||
Subject: [PATCH] keymap: remove some commented out lines
|
|
||||||
|
|
||||||
---
|
|
||||||
hwdb/60-keyboard.hwdb | 6 ------
|
|
||||||
1 file changed, 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
|
|
||||||
index eca3f55..53e83ad 100644
|
|
||||||
--- a/hwdb/60-keyboard.hwdb
|
|
||||||
+++ b/hwdb/60-keyboard.hwdb
|
|
||||||
@@ -894,11 +894,6 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*200E[45]*:pvr*
|
|
||||||
# Series 5
|
|
||||||
keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700Z*:pvr*
|
|
||||||
KEYBOARD_KEY_ce=!prog1 # Fn+F1 launch settings
|
|
||||||
-#KEYBOARD_KEY_89=!brightnessdown # Fn+F2
|
|
||||||
-#KEYBOARD_KEY_88=!brightnessup # Fn+F3
|
|
||||||
-#KEYBOARD_KEY_82=!switchvideomode # Fn+F4 video output
|
|
||||||
-#KEYBOARD_KEY_f9=!f23 # Fn+F5 touchpad turn OFF
|
|
||||||
-#KEYBOARD_KEY_f7=!f22 # Fn+F5 touchpad turn ON
|
|
||||||
KEYBOARD_KEY_a0=!mute # Fn+F6 mute
|
|
||||||
KEYBOARD_KEY_ae=!volumedown # Fn+F7
|
|
||||||
KEYBOARD_KEY_b0=!volumeup # Fn+F8
|
|
||||||
@@ -906,7 +901,6 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700Z*:pvr*
|
|
||||||
KEYBOARD_KEY_96=!kbdillumup # Fn+F10 keyboard backlight up
|
|
||||||
KEYBOARD_KEY_b3=!prog3 # Fn+F11 fan/cooling mode changer
|
|
||||||
KEYBOARD_KEY_d5=!wlan # Fn+F12 wlan/airplane switch
|
|
||||||
-# KEYBOARD_KEY_ba=!ejectcd # Fn+DEL eject cd
|
|
||||||
|
|
||||||
# Series 9
|
|
||||||
keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*90X3A*:pvr*
|
|
@ -1,259 +0,0 @@
|
|||||||
From 3559039a97e1d3e28dd9b38202d3499652a58036 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
|
||||||
Date: Fri, 13 Sep 2013 19:41:52 -0400
|
|
||||||
Subject: [PATCH] Advertise hibernation only if there's enough free swap
|
|
||||||
|
|
||||||
Condition that is checked is taken from upower:
|
|
||||||
active(anon) < free swap * 0.98
|
|
||||||
|
|
||||||
This is really stupid, because the kernel knows the situation better,
|
|
||||||
e.g. there could be two swap files, and then hibernation would be
|
|
||||||
impossible despite passing this check, or the kernel could start
|
|
||||||
supporting compressed swap and/or compressed hibernation images, and
|
|
||||||
then this this check would be too stringent. Nevertheless, until
|
|
||||||
we have something better, this should at least return a true negative
|
|
||||||
if there's no swap.
|
|
||||||
|
|
||||||
Logging of capabilities in the journal is changed to not strip leading
|
|
||||||
zeros. I consider this more readable anyway.
|
|
||||||
|
|
||||||
http://cgit.freedesktop.org/upower/tree/src/up-daemon.c#n613
|
|
||||||
https://bugzilla.redhat.com/show_bug.cgi?id=1007059
|
|
||||||
---
|
|
||||||
src/shared/fileio.c | 34 ++++++++++++++++++++++++++++++++++
|
|
||||||
src/shared/fileio.h | 2 ++
|
|
||||||
src/shared/logs-show.c | 2 +-
|
|
||||||
src/shared/sleep-config.c | 45 ++++++++++++++++++++++++++++++++++++++++++++-
|
|
||||||
src/shared/util.c | 23 +----------------------
|
|
||||||
src/test/test-fileio.c | 20 ++++++++++++++++++++
|
|
||||||
src/test/test-sleep.c | 16 ++++++++--------
|
|
||||||
7 files changed, 110 insertions(+), 32 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/shared/fileio.c b/src/shared/fileio.c
|
|
||||||
index 77fd059..4e2b444 100644
|
|
||||||
--- a/src/shared/fileio.c
|
|
||||||
+++ b/src/shared/fileio.c
|
|
||||||
@@ -648,3 +648,37 @@ int executable_is_script(const char *path, char **interpreter) {
|
|
||||||
*interpreter = ans;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+/**
|
|
||||||
+ * Retrieve one field from a file like /proc/self/status.
|
|
||||||
+ * pattern should start with '\n' and end with ':'. Whitespace
|
|
||||||
+ * after ':' will be skipped. field must be freed afterwards.
|
|
||||||
+ */
|
|
||||||
+int get_status_field(const char *filename, const char *pattern, char **field) {
|
|
||||||
+ _cleanup_free_ char *status = NULL;
|
|
||||||
+ char *t;
|
|
||||||
+ size_t len;
|
|
||||||
+ int r;
|
|
||||||
+
|
|
||||||
+ assert(filename);
|
|
||||||
+ assert(field);
|
|
||||||
+
|
|
||||||
+ r = read_full_file(filename, &status, NULL);
|
|
||||||
+ if (r < 0)
|
|
||||||
+ return r;
|
|
||||||
+
|
|
||||||
+ t = strstr(status, pattern);
|
|
||||||
+ if (!t)
|
|
||||||
+ return -ENOENT;
|
|
||||||
+
|
|
||||||
+ t += strlen(pattern);
|
|
||||||
+ t += strspn(t, WHITESPACE);
|
|
||||||
+
|
|
||||||
+ len = strcspn(t, WHITESPACE);
|
|
||||||
+
|
|
||||||
+ *field = strndup(t, len);
|
|
||||||
+ if (!*field)
|
|
||||||
+ return -ENOMEM;
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
diff --git a/src/shared/fileio.h b/src/shared/fileio.h
|
|
||||||
index a0aae28..59e4150 100644
|
|
||||||
--- a/src/shared/fileio.h
|
|
||||||
+++ b/src/shared/fileio.h
|
|
||||||
@@ -37,3 +37,5 @@ int load_env_file(const char *fname, const char *separator, char ***l);
|
|
||||||
int write_env_file(const char *fname, char **l);
|
|
||||||
|
|
||||||
int executable_is_script(const char *path, char **interpreter);
|
|
||||||
+
|
|
||||||
+int get_status_field(const char *filename, const char *pattern, char **field);
|
|
||||||
diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c
|
|
||||||
index 87633e7..f50777c 100644
|
|
||||||
--- a/src/shared/logs-show.c
|
|
||||||
+++ b/src/shared/logs-show.c
|
|
||||||
@@ -201,7 +201,7 @@ static int output_short(
|
|
||||||
assert(j);
|
|
||||||
|
|
||||||
/* Set the threshold to one bigger than the actual print
|
|
||||||
- * treshold, so that if the line is actually longer than what
|
|
||||||
+ * threshold, so that if the line is actually longer than what
|
|
||||||
* we're willing to print, ellipsization will occur. This way
|
|
||||||
* we won't output a misleading line without any indication of
|
|
||||||
* truncation.
|
|
||||||
diff --git a/src/shared/sleep-config.c b/src/shared/sleep-config.c
|
|
||||||
index cd3238b..5ec7cce 100644
|
|
||||||
--- a/src/shared/sleep-config.c
|
|
||||||
+++ b/src/shared/sleep-config.c
|
|
||||||
@@ -163,6 +163,46 @@ int can_sleep_disk(char **types) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
+#define HIBERNATION_SWAP_THRESHOLD 0.98
|
|
||||||
+
|
|
||||||
+static bool enough_memory_for_hibernation(void) {
|
|
||||||
+ _cleanup_free_ char *active = NULL, *swapfree = NULL;
|
|
||||||
+ unsigned long long act, swap;
|
|
||||||
+ int r;
|
|
||||||
+
|
|
||||||
+ r = get_status_field("/proc/meminfo", "\nSwapFree:", &swapfree);
|
|
||||||
+ if (r < 0) {
|
|
||||||
+ log_error("Failed to retrieve SwapFree from /proc/meminfo: %s", strerror(-r));
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ r = safe_atollu(swapfree, &swap);
|
|
||||||
+ if (r < 0) {
|
|
||||||
+ log_error("Failed to parse SwapFree from /proc/meminfo: %s: %s",
|
|
||||||
+ swapfree, strerror(-r));
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ r = get_status_field("/proc/meminfo", "\nActive(anon):", &active);
|
|
||||||
+ if (r < 0) {
|
|
||||||
+ log_error("Failed to retrieve Active(anon) from /proc/meminfo: %s", strerror(-r));
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ r = safe_atollu(active, &act);
|
|
||||||
+ if (r < 0) {
|
|
||||||
+ log_error("Failed to parse Active(anon) from /proc/meminfo: %s: %s",
|
|
||||||
+ active, strerror(-r));
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ r = act <= swap * HIBERNATION_SWAP_THRESHOLD;
|
|
||||||
+ log_debug("Hibernation is %spossible, Active(anon)=%llu kB, SwapFree=%llu kB, threshold=%.2g%%",
|
|
||||||
+ r ? "" : "im", act, swap, 100*HIBERNATION_SWAP_THRESHOLD);
|
|
||||||
+
|
|
||||||
+ return r;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
int can_sleep(const char *verb) {
|
|
||||||
_cleanup_strv_free_ char **modes = NULL, **states = NULL;
|
|
||||||
int r;
|
|
||||||
@@ -175,5 +215,8 @@ int can_sleep(const char *verb) {
|
|
||||||
if (r < 0)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
- return can_sleep_state(states) && can_sleep_disk(modes);
|
|
||||||
+ if (!can_sleep_state(states) || !can_sleep_disk(modes))
|
|
||||||
+ return false;
|
|
||||||
+
|
|
||||||
+ return streq(verb, "suspend") || enough_memory_for_hibernation();
|
|
||||||
}
|
|
||||||
diff --git a/src/shared/util.c b/src/shared/util.c
|
|
||||||
index 9a075fa..f6f3b18 100644
|
|
||||||
--- a/src/shared/util.c
|
|
||||||
+++ b/src/shared/util.c
|
|
||||||
@@ -694,9 +694,6 @@ int is_kernel_thread(pid_t pid) {
|
|
||||||
|
|
||||||
int get_process_capeff(pid_t pid, char **capeff) {
|
|
||||||
const char *p;
|
|
||||||
- _cleanup_free_ char *status = NULL;
|
|
||||||
- char *t = NULL;
|
|
||||||
- int r;
|
|
||||||
|
|
||||||
assert(capeff);
|
|
||||||
assert(pid >= 0);
|
|
||||||
@@ -706,25 +703,7 @@ int get_process_capeff(pid_t pid, char **capeff) {
|
|
||||||
else
|
|
||||||
p = procfs_file_alloca(pid, "status");
|
|
||||||
|
|
||||||
- r = read_full_file(p, &status, NULL);
|
|
||||||
- if (r < 0)
|
|
||||||
- return r;
|
|
||||||
-
|
|
||||||
- t = strstr(status, "\nCapEff:\t");
|
|
||||||
- if (!t)
|
|
||||||
- return -ENOENT;
|
|
||||||
-
|
|
||||||
- for (t += strlen("\nCapEff:\t"); t[0] == '0'; t++)
|
|
||||||
- continue;
|
|
||||||
-
|
|
||||||
- if (t[0] == '\n')
|
|
||||||
- t--;
|
|
||||||
-
|
|
||||||
- *capeff = strndup(t, strchr(t, '\n') - t);
|
|
||||||
- if (!*capeff)
|
|
||||||
- return -ENOMEM;
|
|
||||||
-
|
|
||||||
- return 0;
|
|
||||||
+ return get_status_field(p, "\nCapEff:", capeff);
|
|
||||||
}
|
|
||||||
|
|
||||||
int get_process_exe(pid_t pid, char **name) {
|
|
||||||
diff --git a/src/test/test-fileio.c b/src/test/test-fileio.c
|
|
||||||
index 1184e7e..4a4ed79 100644
|
|
||||||
--- a/src/test/test-fileio.c
|
|
||||||
+++ b/src/test/test-fileio.c
|
|
||||||
@@ -229,9 +229,29 @@ static void test_executable_is_script(void) {
|
|
||||||
unlink(t);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void test_status_field(void) {
|
|
||||||
+ _cleanup_free_ char *t = NULL, *p = NULL, *s = NULL;
|
|
||||||
+ unsigned long long total, buffers;
|
|
||||||
+
|
|
||||||
+ assert_se(get_status_field("/proc/self/status", "\nThreads:", &t) == 0);
|
|
||||||
+ puts(t);
|
|
||||||
+ assert_se(streq(t, "1"));
|
|
||||||
+
|
|
||||||
+ assert_se(get_status_field("/proc/meminfo", "MemTotal:", &p) == 0);
|
|
||||||
+ puts(p);
|
|
||||||
+ assert_se(safe_atollu(p, &total) == 0);
|
|
||||||
+
|
|
||||||
+ assert_se(get_status_field("/proc/meminfo", "\nBuffers:", &s) == 0);
|
|
||||||
+ puts(s);
|
|
||||||
+ assert_se(safe_atollu(s, &buffers) == 0);
|
|
||||||
+
|
|
||||||
+ assert(buffers < total);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
int main(int argc, char *argv[]) {
|
|
||||||
test_parse_env_file();
|
|
||||||
test_parse_multiline_env_file();
|
|
||||||
test_executable_is_script();
|
|
||||||
+ test_status_field();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
diff --git a/src/test/test-sleep.c b/src/test/test-sleep.c
|
|
||||||
index c3cb9c5..545dfab 100644
|
|
||||||
--- a/src/test/test-sleep.c
|
|
||||||
+++ b/src/test/test-sleep.c
|
|
||||||
@@ -40,14 +40,14 @@ int main(int argc, char* argv[]) {
|
|
||||||
**shutdown = strv_new("shutdown", NULL),
|
|
||||||
**freez = strv_new("freeze", NULL);
|
|
||||||
|
|
||||||
- log_info("Can Standby: %s", yes_no(can_sleep_state(standby) > 0));
|
|
||||||
- log_info("Can Suspend: %s", yes_no(can_sleep_state(mem) > 0));
|
|
||||||
- log_info("Can Hibernate: %s", yes_no(can_sleep_state(disk) > 0));
|
|
||||||
- log_info("Can Hibernate+Suspend (Hybrid-Sleep): %s", yes_no(can_sleep_disk(suspend) > 0));
|
|
||||||
- log_info("Can Hibernate+Reboot: %s", yes_no(can_sleep_disk(reboot) > 0));
|
|
||||||
- log_info("Can Hibernate+Platform: %s", yes_no(can_sleep_disk(platform) > 0));
|
|
||||||
- log_info("Can Hibernate+Shutdown: %s", yes_no(can_sleep_disk(shutdown) > 0));
|
|
||||||
- log_info("Can Freeze: %s", yes_no(can_sleep_disk(freez) > 0));
|
|
||||||
+ log_info("Standby configured: %s", yes_no(can_sleep_state(standby) > 0));
|
|
||||||
+ log_info("Suspend configured: %s", yes_no(can_sleep_state(mem) > 0));
|
|
||||||
+ log_info("Hibernate configured: %s", yes_no(can_sleep_state(disk) > 0));
|
|
||||||
+ log_info("Hibernate+Suspend (Hybrid-Sleep) configured: %s", yes_no(can_sleep_disk(suspend) > 0));
|
|
||||||
+ log_info("Hibernate+Reboot configured: %s", yes_no(can_sleep_disk(reboot) > 0));
|
|
||||||
+ log_info("Hibernate+Platform configured: %s", yes_no(can_sleep_disk(platform) > 0));
|
|
||||||
+ log_info("Hibernate+Shutdown configured: %s", yes_no(can_sleep_disk(shutdown) > 0));
|
|
||||||
+ log_info("Freeze configured: %s", yes_no(can_sleep_state(freez) > 0));
|
|
||||||
|
|
||||||
log_info("Suspend configured and possible: %s", yes_no(can_sleep("suspend") > 0));
|
|
||||||
log_info("Hibernation configured and possible: %s", yes_no(can_sleep("hibernate") > 0));
|
|
@ -1,24 +0,0 @@
|
|||||||
From 64a94f1e45890eaeb5880dbd2044265e17023067 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Kay Sievers <kay@vrfy.org>
|
|
||||||
Date: Sun, 15 Sep 2013 07:29:25 +0200
|
|
||||||
Subject: [PATCH] README: add SCSI BSG option
|
|
||||||
|
|
||||||
---
|
|
||||||
README | 4 ++++
|
|
||||||
1 file changed, 4 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/README b/README
|
|
||||||
index a16f342..b39cd37 100644
|
|
||||||
--- a/README
|
|
||||||
+++ b/README
|
|
||||||
@@ -64,6 +64,10 @@ REQUIREMENTS:
|
|
||||||
Mount and bind mount handling might require it:
|
|
||||||
CONFIG_FHANDLE
|
|
||||||
|
|
||||||
+ Support for some SCSI devices serial number retrieval, to
|
|
||||||
+ create additional symlinks in /dev/disk/ and /dev/tape:
|
|
||||||
+ CONFIG_BLK_DEV_BSG
|
|
||||||
+
|
|
||||||
Optional but strongly recommended:
|
|
||||||
CONFIG_IPV6
|
|
||||||
CONFIG_AUTOFS4_FS
|
|
@ -1,87 +0,0 @@
|
|||||||
From c1f9c15f319f7dfb96bcbf2c3cf879f2b4457350 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tom Gundersen <teg@jklm.no>
|
|
||||||
Date: Mon, 16 Sep 2013 01:08:32 +0200
|
|
||||||
Subject: [PATCH] swap: create .wants symlink to 'auto' swap devices
|
|
||||||
|
|
||||||
As we load unit files lazily, we need to make sure something pulls in swap
|
|
||||||
units that should be started automatically, otherwise the default dependencies
|
|
||||||
will never be applied.
|
|
||||||
|
|
||||||
This partially reinstates code removed in
|
|
||||||
commit 64347fc2b983f33e7efb0fd2bb44e133fb9f30f4.
|
|
||||||
|
|
||||||
Also don't order swap devices after swap.target when they are 'nofail'.
|
|
||||||
---
|
|
||||||
src/core/swap.c | 8 ++++++--
|
|
||||||
src/fstab-generator/fstab-generator.c | 18 ++++++++++++++++--
|
|
||||||
2 files changed, 22 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/core/swap.c b/src/core/swap.c
|
|
||||||
index 3950860..76c7d45 100644
|
|
||||||
--- a/src/core/swap.c
|
|
||||||
+++ b/src/core/swap.c
|
|
||||||
@@ -220,8 +220,12 @@ static int swap_add_default_dependencies(Swap *s) {
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!noauto) {
|
|
||||||
- r = unit_add_two_dependencies_by_name_inverse(UNIT(s), UNIT_AFTER, (nofail ? UNIT_WANTS : UNIT_REQUIRES),
|
|
||||||
- SPECIAL_SWAP_TARGET, NULL, true);
|
|
||||||
+ if (nofail)
|
|
||||||
+ r = unit_add_dependency_by_name_inverse(UNIT(s),
|
|
||||||
+ UNIT_WANTS, SPECIAL_SWAP_TARGET, NULL, true);
|
|
||||||
+ else
|
|
||||||
+ r = unit_add_two_dependencies_by_name_inverse(UNIT(s),
|
|
||||||
+ UNIT_AFTER, UNIT_REQUIRES, SPECIAL_SWAP_TARGET, NULL, true);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
|
|
||||||
index 6ebe8aa..b73dfa4 100644
|
|
||||||
--- a/src/fstab-generator/fstab-generator.c
|
|
||||||
+++ b/src/fstab-generator/fstab-generator.c
|
|
||||||
@@ -66,6 +66,7 @@ static int mount_find_pri(struct mntent *me, int *ret) {
|
|
||||||
static int add_swap(const char *what, struct mntent *me) {
|
|
||||||
_cleanup_free_ char *name = NULL, *unit = NULL, *lnk = NULL, *device = NULL;
|
|
||||||
_cleanup_fclose_ FILE *f = NULL;
|
|
||||||
+ bool noauto;
|
|
||||||
int r, pri = -1;
|
|
||||||
|
|
||||||
assert(what);
|
|
||||||
@@ -77,6 +78,8 @@ static int add_swap(const char *what, struct mntent *me) {
|
|
||||||
return pri;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ noauto = !!hasmntopt(me, "noauto");
|
|
||||||
+
|
|
||||||
name = unit_name_from_path(what, ".swap");
|
|
||||||
if (!name)
|
|
||||||
return log_oom();
|
|
||||||
@@ -97,8 +100,7 @@ static int add_swap(const char *what, struct mntent *me) {
|
|
||||||
fprintf(f,
|
|
||||||
"# Automatically generated by systemd-fstab-generator\n\n"
|
|
||||||
"[Unit]\n"
|
|
||||||
- "SourcePath=/etc/fstab\n"
|
|
||||||
- "\n"
|
|
||||||
+ "SourcePath=/etc/fstab\n\n"
|
|
||||||
"[Swap]\n"
|
|
||||||
"What=%s\n",
|
|
||||||
what);
|
|
||||||
@@ -114,6 +116,18 @@ static int add_swap(const char *what, struct mntent *me) {
|
|
||||||
return -errno;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (!noauto) {
|
|
||||||
+ lnk = strjoin(arg_dest, "/" SPECIAL_SWAP_TARGET ".wants/", name, NULL);
|
|
||||||
+ if (!lnk)
|
|
||||||
+ return log_oom();
|
|
||||||
+
|
|
||||||
+ mkdir_parents_label(lnk, 0755);
|
|
||||||
+ if (symlink(unit, lnk) < 0) {
|
|
||||||
+ log_error("Failed to create symlink %s: %m", lnk);
|
|
||||||
+ return -errno;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
@ -1,22 +0,0 @@
|
|||||||
From f93999bbdbc9e16322d77bda2a4e44c20040808d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Gao feng <gaofeng@cn.fujitsu.com>
|
|
||||||
Date: Mon, 16 Sep 2013 09:57:33 +0800
|
|
||||||
Subject: [PATCH] cgroup: add missing equals for BlockIOWeight
|
|
||||||
|
|
||||||
---
|
|
||||||
src/core/cgroup.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/core/cgroup.c b/src/core/cgroup.c
|
|
||||||
index 1f41efc..9277dd6 100644
|
|
||||||
--- a/src/core/cgroup.c
|
|
||||||
+++ b/src/core/cgroup.c
|
|
||||||
@@ -92,7 +92,7 @@ void cgroup_context_dump(CGroupContext *c, FILE* f, const char *prefix) {
|
|
||||||
"%sBlockIOAccounting=%s\n"
|
|
||||||
"%sMemoryAccounting=%s\n"
|
|
||||||
"%sCPUShares=%lu\n"
|
|
||||||
- "%sBlockIOWeight%lu\n"
|
|
||||||
+ "%sBlockIOWeight=%lu\n"
|
|
||||||
"%sMemoryLimit=%" PRIu64 "\n"
|
|
||||||
"%sMemorySoftLimit=%" PRIu64 "\n"
|
|
||||||
"%sDevicePolicy=%s\n",
|
|
@ -1,50 +0,0 @@
|
|||||||
From 0fdb6640bb9de89ca739676bbbb43d3a05a42f50 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
|
||||||
Date: Sun, 15 Sep 2013 08:40:16 -0400
|
|
||||||
Subject: [PATCH] Assume that /proc/meminfo can be missing
|
|
||||||
|
|
||||||
Travis tests are failing, probably because /proc/meminfo is not available
|
|
||||||
in the test environment. The same might be true in some virtualized systems,
|
|
||||||
so just treat missing /proc/meminfo as a sign that hibernation is not
|
|
||||||
possible.
|
|
||||||
---
|
|
||||||
src/shared/sleep-config.c | 3 ++-
|
|
||||||
src/test/test-fileio.c | 6 +++++-
|
|
||||||
2 files changed, 7 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/shared/sleep-config.c b/src/shared/sleep-config.c
|
|
||||||
index 5ec7cce..148c4dc 100644
|
|
||||||
--- a/src/shared/sleep-config.c
|
|
||||||
+++ b/src/shared/sleep-config.c
|
|
||||||
@@ -172,7 +172,8 @@ static bool enough_memory_for_hibernation(void) {
|
|
||||||
|
|
||||||
r = get_status_field("/proc/meminfo", "\nSwapFree:", &swapfree);
|
|
||||||
if (r < 0) {
|
|
||||||
- log_error("Failed to retrieve SwapFree from /proc/meminfo: %s", strerror(-r));
|
|
||||||
+ log_full(r == -ENOENT ? LOG_DEBUG : LOG_WARNING,
|
|
||||||
+ "Failed to retrieve SwapFree from /proc/meminfo: %s", strerror(-r));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/src/test/test-fileio.c b/src/test/test-fileio.c
|
|
||||||
index 4a4ed79..3511f3a 100644
|
|
||||||
--- a/src/test/test-fileio.c
|
|
||||||
+++ b/src/test/test-fileio.c
|
|
||||||
@@ -232,12 +232,16 @@ static void test_executable_is_script(void) {
|
|
||||||
static void test_status_field(void) {
|
|
||||||
_cleanup_free_ char *t = NULL, *p = NULL, *s = NULL;
|
|
||||||
unsigned long long total, buffers;
|
|
||||||
+ int r;
|
|
||||||
|
|
||||||
assert_se(get_status_field("/proc/self/status", "\nThreads:", &t) == 0);
|
|
||||||
puts(t);
|
|
||||||
assert_se(streq(t, "1"));
|
|
||||||
|
|
||||||
- assert_se(get_status_field("/proc/meminfo", "MemTotal:", &p) == 0);
|
|
||||||
+ r = get_status_field("/proc/meminfo", "MemTotal:", &p);
|
|
||||||
+ if (r == -ENOENT)
|
|
||||||
+ return;
|
|
||||||
+ assert(r == 0);
|
|
||||||
puts(p);
|
|
||||||
assert_se(safe_atollu(p, &total) == 0);
|
|
||||||
|
|
@ -1,63 +0,0 @@
|
|||||||
From a38c3d5d4e94c7e11db1ca22126bb11c6b029886 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
|
||||||
Date: Sun, 15 Sep 2013 12:15:38 -0400
|
|
||||||
Subject: [PATCH] transaction.c: do not point users to logs when unit not found
|
|
||||||
|
|
||||||
The logs are unlikely to contain any useful information in this case.
|
|
||||||
|
|
||||||
Also, change "walked on cycle path" to "found dependency on", which
|
|
||||||
is less technical and indicates the direction. With the old message,
|
|
||||||
I was never sure if prior units depended on later ones, or vice versa.
|
|
||||||
|
|
||||||
https://bugzilla.redhat.com/show_bug.cgi?id=996133
|
|
||||||
https://bugzilla.redhat.com/show_bug.cgi?id=997082
|
|
||||||
---
|
|
||||||
src/core/transaction.c | 14 +++++++++++---
|
|
||||||
1 file changed, 11 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/core/transaction.c b/src/core/transaction.c
|
|
||||||
index 27efef7..203070f 100644
|
|
||||||
--- a/src/core/transaction.c
|
|
||||||
+++ b/src/core/transaction.c
|
|
||||||
@@ -344,7 +344,7 @@ static int transaction_verify_order_one(Transaction *tr, Job *j, Job *from, unsi
|
|
||||||
assert(!j->transaction_prev);
|
|
||||||
|
|
||||||
/* Does a recursive sweep through the ordering graph, looking
|
|
||||||
- * for a cycle. If we find cycle we try to break it. */
|
|
||||||
+ * for a cycle. If we find a cycle we try to break it. */
|
|
||||||
|
|
||||||
/* Have we seen this before? */
|
|
||||||
if (j->generation == generation) {
|
|
||||||
@@ -371,7 +371,7 @@ static int transaction_verify_order_one(Transaction *tr, Job *j, Job *from, unsi
|
|
||||||
|
|
||||||
/* logging for j not k here here to provide consistent narrative */
|
|
||||||
log_info_unit(j->unit->id,
|
|
||||||
- "Walked on cycle path to %s/%s",
|
|
||||||
+ "Found dependency on %s/%s",
|
|
||||||
k->unit->id, job_type_to_string(k->type));
|
|
||||||
|
|
||||||
if (!delete &&
|
|
||||||
@@ -860,7 +860,7 @@ int transaction_add_job_and_dependencies(
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (type != JOB_STOP && (unit->load_state == UNIT_ERROR || unit->load_state == UNIT_NOT_FOUND)) {
|
|
||||||
+ if (type != JOB_STOP && unit->load_state == UNIT_ERROR) {
|
|
||||||
dbus_set_error(e, BUS_ERROR_LOAD_FAILED,
|
|
||||||
"Unit %s failed to load: %s. "
|
|
||||||
"See system logs and 'systemctl status %s' for details.",
|
|
||||||
@@ -870,6 +870,14 @@ int transaction_add_job_and_dependencies(
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (type != JOB_STOP && unit->load_state == UNIT_NOT_FOUND) {
|
|
||||||
+ dbus_set_error(e, BUS_ERROR_LOAD_FAILED,
|
|
||||||
+ "Unit %s failed to load: %s.",
|
|
||||||
+ unit->id,
|
|
||||||
+ strerror(-unit->load_error));
|
|
||||||
+ return -EINVAL;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
if (type != JOB_STOP && unit->load_state == UNIT_MASKED) {
|
|
||||||
dbus_set_error(e, BUS_ERROR_MASKED, "Unit %s is masked.", unit->id);
|
|
||||||
return -EADDRNOTAVAIL;
|
|
@ -1,283 +0,0 @@
|
|||||||
From 45f0d8e103c57e9e5e9d92bba1dc2d50b49806de Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
|
||||||
Date: Sun, 15 Sep 2013 22:26:56 -0400
|
|
||||||
Subject: [PATCH] Verify validity of session name when received from outside
|
|
||||||
|
|
||||||
Only ASCII letters and digits are allowed.
|
|
||||||
---
|
|
||||||
Makefile.am | 14 +++++++++++---
|
|
||||||
TODO | 3 ---
|
|
||||||
src/login/login-shared.c | 8 ++++++++
|
|
||||||
src/login/login-shared.h | 3 +++
|
|
||||||
src/login/logind-dbus.c | 1 +
|
|
||||||
src/login/logind-session.c | 1 +
|
|
||||||
src/login/logind-session.h | 1 +
|
|
||||||
src/login/logind.c | 6 ++++++
|
|
||||||
src/login/sd-login.c | 12 +++++++-----
|
|
||||||
src/shared/cgroup-util.c | 4 +---
|
|
||||||
src/shared/def.h | 5 +++++
|
|
||||||
src/shared/env-util.c | 5 ++---
|
|
||||||
src/shared/replace-var.c | 3 ++-
|
|
||||||
src/shared/unit-name.c | 5 ++---
|
|
||||||
14 files changed, 50 insertions(+), 21 deletions(-)
|
|
||||||
create mode 100644 src/login/login-shared.c
|
|
||||||
create mode 100644 src/login/login-shared.h
|
|
||||||
|
|
||||||
diff --git a/Makefile.am b/Makefile.am
|
|
||||||
index 7b7539a..6014521 100644
|
|
||||||
--- a/Makefile.am
|
|
||||||
+++ b/Makefile.am
|
|
||||||
@@ -2324,7 +2324,10 @@ if HAVE_ACL
|
|
||||||
libudev_core_la_SOURCES += \
|
|
||||||
src/udev/udev-builtin-uaccess.c \
|
|
||||||
src/login/logind-acl.c \
|
|
||||||
- src/login/sd-login.c
|
|
||||||
+ src/login/sd-login.c \
|
|
||||||
+ src/systemd/sd-login.h \
|
|
||||||
+ src/login/login-shared.c \
|
|
||||||
+ src/login/login-shared.h
|
|
||||||
|
|
||||||
libudev_core_la_LIBADD += \
|
|
||||||
libsystemd-acl.la
|
|
||||||
@@ -3759,7 +3762,9 @@ libsystemd_logind_core_la_SOURCES = \
|
|
||||||
src/login/logind-session-dbus.c \
|
|
||||||
src/login/logind-seat-dbus.c \
|
|
||||||
src/login/logind-user-dbus.c \
|
|
||||||
- src/login/logind-acl.h
|
|
||||||
+ src/login/logind-acl.h \
|
|
||||||
+ src/login/login-shared.c \
|
|
||||||
+ src/login/login-shared.h
|
|
||||||
|
|
||||||
libsystemd_logind_core_la_CFLAGS = \
|
|
||||||
$(AM_CFLAGS) \
|
|
||||||
@@ -3860,7 +3865,10 @@ tests += \
|
|
||||||
test-login-tables
|
|
||||||
|
|
||||||
libsystemd_login_la_SOURCES = \
|
|
||||||
- src/login/sd-login.c
|
|
||||||
+ src/login/sd-login.c \
|
|
||||||
+ src/systemd/sd-login.h \
|
|
||||||
+ src/login/login-shared.c \
|
|
||||||
+ src/login/login-shared.h
|
|
||||||
|
|
||||||
libsystemd_login_la_CFLAGS = \
|
|
||||||
$(AM_CFLAGS) \
|
|
||||||
diff --git a/TODO b/TODO
|
|
||||||
index 9943b3e..bfeaa81 100644
|
|
||||||
--- a/TODO
|
|
||||||
+++ b/TODO
|
|
||||||
@@ -142,9 +142,6 @@ Features:
|
|
||||||
|
|
||||||
* journald: make sure ratelimit is actually really per-service with the new cgroup changes
|
|
||||||
|
|
||||||
-* libsystemd-logind: sd_session_is_active() and friends: verify
|
|
||||||
- validity of session name before appending it to a path
|
|
||||||
-
|
|
||||||
* gparted needs to disable auto-activation of mount units somehow, or
|
|
||||||
maybe we should stop doing auto-activation of this after boot
|
|
||||||
entirely. https://bugzilla.gnome.org/show_bug.cgi?id=701676
|
|
||||||
diff --git a/src/login/login-shared.c b/src/login/login-shared.c
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..ff13c28
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/src/login/login-shared.c
|
|
||||||
@@ -0,0 +1,8 @@
|
|
||||||
+#include "login-shared.h"
|
|
||||||
+#include "def.h"
|
|
||||||
+
|
|
||||||
+bool session_id_valid(const char *id) {
|
|
||||||
+ assert(id);
|
|
||||||
+
|
|
||||||
+ return id + strspn(id, LETTERS DIGITS) == '\0';
|
|
||||||
+}
|
|
||||||
diff --git a/src/login/login-shared.h b/src/login/login-shared.h
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..728ef00
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/src/login/login-shared.h
|
|
||||||
@@ -0,0 +1,3 @@
|
|
||||||
+#include <stdbool.h>
|
|
||||||
+
|
|
||||||
+bool session_id_valid(const char *id);
|
|
||||||
diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
|
|
||||||
index 345df9f..d052e74 100644
|
|
||||||
--- a/src/login/logind-dbus.c
|
|
||||||
+++ b/src/login/logind-dbus.c
|
|
||||||
@@ -554,6 +554,7 @@ static int bus_manager_create_session(Manager *m, DBusMessage *message) {
|
|
||||||
* the audit data and let's better register a new
|
|
||||||
* ID */
|
|
||||||
if (hashmap_get(m->sessions, id)) {
|
|
||||||
+ log_warning("Existing logind session ID %s used by new audit session, ignoring", id);
|
|
||||||
audit_id = 0;
|
|
||||||
|
|
||||||
free(id);
|
|
||||||
diff --git a/src/login/logind-session.c b/src/login/logind-session.c
|
|
||||||
index a726fb1..2d22a68 100644
|
|
||||||
--- a/src/login/logind-session.c
|
|
||||||
+++ b/src/login/logind-session.c
|
|
||||||
@@ -41,6 +41,7 @@ Session* session_new(Manager *m, const char *id) {
|
|
||||||
|
|
||||||
assert(m);
|
|
||||||
assert(id);
|
|
||||||
+ assert(session_id_valid(id));
|
|
||||||
|
|
||||||
s = new0(Session, 1);
|
|
||||||
if (!s)
|
|
||||||
diff --git a/src/login/logind-session.h b/src/login/logind-session.h
|
|
||||||
index edaae8d..9cf6485 100644
|
|
||||||
--- a/src/login/logind-session.h
|
|
||||||
+++ b/src/login/logind-session.h
|
|
||||||
@@ -29,6 +29,7 @@ typedef enum KillWho KillWho;
|
|
||||||
#include "logind.h"
|
|
||||||
#include "logind-seat.h"
|
|
||||||
#include "logind-user.h"
|
|
||||||
+#include "login-shared.h"
|
|
||||||
|
|
||||||
typedef enum SessionState {
|
|
||||||
SESSION_OPENING, /* Session scope is being created */
|
|
||||||
diff --git a/src/login/logind.c b/src/login/logind.c
|
|
||||||
index 9094567..4ef92b8 100644
|
|
||||||
--- a/src/login/logind.c
|
|
||||||
+++ b/src/login/logind.c
|
|
||||||
@@ -684,6 +684,12 @@ int manager_enumerate_sessions(Manager *m) {
|
|
||||||
if (!dirent_is_file(de))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
+ if (!session_id_valid(de->d_name)) {
|
|
||||||
+ log_warning("Invalid session file name '%s', ignoring.", de->d_name);
|
|
||||||
+ r = -EINVAL;
|
|
||||||
+ continue;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
k = manager_add_session(m, de->d_name, &s);
|
|
||||||
if (k < 0) {
|
|
||||||
log_error("Failed to add session by file name %s: %s", de->d_name, strerror(-k));
|
|
||||||
diff --git a/src/login/sd-login.c b/src/login/sd-login.c
|
|
||||||
index 8a7838d..71d8c29 100644
|
|
||||||
--- a/src/login/sd-login.c
|
|
||||||
+++ b/src/login/sd-login.c
|
|
||||||
@@ -31,6 +31,7 @@
|
|
||||||
#include "sd-login.h"
|
|
||||||
#include "strv.h"
|
|
||||||
#include "fileio.h"
|
|
||||||
+#include "login-shared.h"
|
|
||||||
|
|
||||||
_public_ int sd_pid_get_session(pid_t pid, char **session) {
|
|
||||||
if (pid < 0)
|
|
||||||
@@ -226,17 +227,19 @@ static int file_of_session(const char *session, char **_p) {
|
|
||||||
|
|
||||||
assert(_p);
|
|
||||||
|
|
||||||
- if (session)
|
|
||||||
+ if (session) {
|
|
||||||
+ if (!session_id_valid(session))
|
|
||||||
+ return -EINVAL;
|
|
||||||
+
|
|
||||||
p = strappend("/run/systemd/sessions/", session);
|
|
||||||
- else {
|
|
||||||
- char *buf;
|
|
||||||
+ } else {
|
|
||||||
+ _cleanup_free_ char *buf = NULL;
|
|
||||||
|
|
||||||
r = sd_pid_get_session(0, &buf);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
p = strappend("/run/systemd/sessions/", buf);
|
|
||||||
- free(buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!p)
|
|
||||||
@@ -255,7 +258,6 @@ _public_ int sd_session_is_active(const char *session) {
|
|
||||||
return r;
|
|
||||||
|
|
||||||
r = parse_env_file(p, NEWLINE, "ACTIVE", &s, NULL);
|
|
||||||
-
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
diff --git a/src/shared/cgroup-util.c b/src/shared/cgroup-util.c
|
|
||||||
index 1d545e0..0bffebd 100644
|
|
||||||
--- a/src/shared/cgroup-util.c
|
|
||||||
+++ b/src/shared/cgroup-util.c
|
|
||||||
@@ -1511,9 +1511,7 @@ char *cg_unescape(const char *p) {
|
|
||||||
}
|
|
||||||
|
|
||||||
#define CONTROLLER_VALID \
|
|
||||||
- "0123456789" \
|
|
||||||
- "abcdefghijklmnopqrstuvwxyz" \
|
|
||||||
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ" \
|
|
||||||
+ DIGITS LETTERS \
|
|
||||||
"_"
|
|
||||||
|
|
||||||
bool cg_controller_is_valid(const char *p, bool allow_named) {
|
|
||||||
diff --git a/src/shared/def.h b/src/shared/def.h
|
|
||||||
index 5abb544..edd0bcf 100644
|
|
||||||
--- a/src/shared/def.h
|
|
||||||
+++ b/src/shared/def.h
|
|
||||||
@@ -33,3 +33,8 @@
|
|
||||||
|
|
||||||
#define SIGNALS_CRASH_HANDLER SIGSEGV,SIGILL,SIGFPE,SIGBUS,SIGQUIT,SIGABRT
|
|
||||||
#define SIGNALS_IGNORE SIGPIPE
|
|
||||||
+
|
|
||||||
+#define DIGITS "0123456789"
|
|
||||||
+#define LOWERCASE_LETTERS "abcdefghijklmnopqrstuvwxyz"
|
|
||||||
+#define UPPERCASE_LETTERS "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
|
||||||
+#define LETTERS LOWERCASE_LETTERS UPPERCASE_LETTERS
|
|
||||||
diff --git a/src/shared/env-util.c b/src/shared/env-util.c
|
|
||||||
index 6a52fb9..5e29629 100644
|
|
||||||
--- a/src/shared/env-util.c
|
|
||||||
+++ b/src/shared/env-util.c
|
|
||||||
@@ -27,11 +27,10 @@
|
|
||||||
#include "utf8.h"
|
|
||||||
#include "util.h"
|
|
||||||
#include "env-util.h"
|
|
||||||
+#include "def.h"
|
|
||||||
|
|
||||||
#define VALID_CHARS_ENV_NAME \
|
|
||||||
- "0123456789" \
|
|
||||||
- "abcdefghijklmnopqrstuvwxyz" \
|
|
||||||
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ" \
|
|
||||||
+ DIGITS LETTERS \
|
|
||||||
"_"
|
|
||||||
|
|
||||||
#ifndef ARG_MAX
|
|
||||||
diff --git a/src/shared/replace-var.c b/src/shared/replace-var.c
|
|
||||||
index e11c57a..478fc43 100644
|
|
||||||
--- a/src/shared/replace-var.c
|
|
||||||
+++ b/src/shared/replace-var.c
|
|
||||||
@@ -24,6 +24,7 @@
|
|
||||||
#include "macro.h"
|
|
||||||
#include "util.h"
|
|
||||||
#include "replace-var.h"
|
|
||||||
+#include "def.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Generic infrastructure for replacing @FOO@ style variables in
|
|
||||||
@@ -40,7 +41,7 @@ static int get_variable(const char *b, char **r) {
|
|
||||||
if (*b != '@')
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
- k = strspn(b + 1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ_");
|
|
||||||
+ k = strspn(b + 1, UPPERCASE_LETTERS "_");
|
|
||||||
if (k <= 0 || b[k+1] != '@')
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
diff --git a/src/shared/unit-name.c b/src/shared/unit-name.c
|
|
||||||
index 1baa6eb..8f6c28e 100644
|
|
||||||
--- a/src/shared/unit-name.c
|
|
||||||
+++ b/src/shared/unit-name.c
|
|
||||||
@@ -26,11 +26,10 @@
|
|
||||||
#include "path-util.h"
|
|
||||||
#include "util.h"
|
|
||||||
#include "unit-name.h"
|
|
||||||
+#include "def.h"
|
|
||||||
|
|
||||||
#define VALID_CHARS \
|
|
||||||
- "0123456789" \
|
|
||||||
- "abcdefghijklmnopqrstuvwxyz" \
|
|
||||||
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ" \
|
|
||||||
+ DIGITS LETTERS \
|
|
||||||
":-_.\\"
|
|
||||||
|
|
||||||
static const char* const unit_type_table[_UNIT_TYPE_MAX] = {
|
|
@ -1,27 +0,0 @@
|
|||||||
From c4f1b97f45f1685c0a4bcba8c6724ce17bb6af19 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Dave Reisner <dreisner@archlinux.org>
|
|
||||||
Date: Mon, 16 Sep 2013 11:22:35 -0400
|
|
||||||
Subject: [PATCH] udev-rules: avoid erroring on trailing whitespace
|
|
||||||
|
|
||||||
https://bugs.archlinux.org/task/36950
|
|
||||||
---
|
|
||||||
src/udev/udev-rules.c | 6 ++++++
|
|
||||||
1 file changed, 6 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c
|
|
||||||
index f14158b..6f8b127 100644
|
|
||||||
--- a/src/udev/udev-rules.c
|
|
||||||
+++ b/src/udev/udev-rules.c
|
|
||||||
@@ -1068,6 +1068,12 @@ static int add_rule(struct udev_rules *rules, char *line,
|
|
||||||
enum operation_type op;
|
|
||||||
|
|
||||||
if (get_key(rules->udev, &linepos, &key, &op, &value) != 0) {
|
|
||||||
+ /* Avoid erroring on trailing whitespace. This is probably rare
|
|
||||||
+ * so save the work for the error case instead of always trying
|
|
||||||
+ * to strip the trailing whitespace with strstrip(). */
|
|
||||||
+ while (isblank(*linepos))
|
|
||||||
+ linepos++;
|
|
||||||
+
|
|
||||||
/* If we aren't at the end of the line, this is a parsing error.
|
|
||||||
* Make a best effort to describe where the problem is. */
|
|
||||||
if (*linepos != '\n') {
|
|
@ -1,65 +0,0 @@
|
|||||||
From 3d2b4b62bfc73a38dce90be5cebdc924db42f63c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Martin Pitt <martinpitt@gnome.org>
|
|
||||||
Date: Mon, 16 Sep 2013 14:25:44 -0500
|
|
||||||
Subject: [PATCH] keymap: Add Samsung Series 5 [Ultra]
|
|
||||||
|
|
||||||
Also consolidate the wlan key into the "all Samsung" rule to avoid repetition.
|
|
||||||
|
|
||||||
Thanks to Mauro Carvalho Chehab!
|
|
||||||
|
|
||||||
https://bugzilla.redhat.com/show_bug.cgi?id=989103
|
|
||||||
---
|
|
||||||
hwdb/60-keyboard.hwdb | 17 ++++++++++++-----
|
|
||||||
1 file changed, 12 insertions(+), 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
|
|
||||||
index 53e83ad..3862b4c 100644
|
|
||||||
--- a/hwdb/60-keyboard.hwdb
|
|
||||||
+++ b/hwdb/60-keyboard.hwdb
|
|
||||||
@@ -882,6 +882,8 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*
|
|
||||||
KEYBOARD_KEY_b1=!prog2 # Fn+F7 run Samsung Magic Doctor (keypressed event is generated twice)
|
|
||||||
KEYBOARD_KEY_b3=!prog3 # Fn+F8 switch power mode (battery/dynamic/performance)
|
|
||||||
KEYBOARD_KEY_b4=!wlan # Fn+F9 (X60P)
|
|
||||||
+ KEYBOARD_KEY_c5=!prog3 # Fn+F8 switch power mode (battery/dynamic/performance)
|
|
||||||
+ KEYBOARD_KEY_d5=!wlan # Fn+F12 wlan/airplane switch
|
|
||||||
KEYBOARD_KEY_f7=!f22 # Fn+F10 Touchpad on
|
|
||||||
KEYBOARD_KEY_f9=!f23 # Fn+F10 Touchpad off
|
|
||||||
|
|
||||||
@@ -889,9 +891,18 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*
|
|
||||||
keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*300E[457]*:pvr*
|
|
||||||
keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*200E[45]*:pvr*
|
|
||||||
KEYBOARD_KEY_ce=! # Fn+F1 launch control setting
|
|
||||||
- KEYBOARD_KEY_d5=! # Fn+F12 Wi-Fi toggle
|
|
||||||
|
|
||||||
# Series 5
|
|
||||||
+keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*530U*:pvr*
|
|
||||||
+ KEYBOARD_KEY_ce=!prog1 # Fn+F1 launch settings
|
|
||||||
+ KEYBOARD_KEY_a8=! # Fn Lock - Function lock on
|
|
||||||
+ KEYBOARD_KEY_a9=! # Fn Lock - Function lock off
|
|
||||||
+
|
|
||||||
+keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*550P*:pvr*
|
|
||||||
+ KEYBOARD_KEY_ce=!prog1 # Fn+F1 launch settings
|
|
||||||
+ KEYBOARD_KEY_a8=! # Fn Lock - Function lock on
|
|
||||||
+ KEYBOARD_KEY_a9=! # Fn Lock - Function lock off
|
|
||||||
+
|
|
||||||
keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700Z*:pvr*
|
|
||||||
KEYBOARD_KEY_ce=!prog1 # Fn+F1 launch settings
|
|
||||||
KEYBOARD_KEY_a0=!mute # Fn+F6 mute
|
|
||||||
@@ -900,7 +911,6 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700Z*:pvr*
|
|
||||||
KEYBOARD_KEY_97=!kbdillumdown # Fn+F9 keyboard backlight down
|
|
||||||
KEYBOARD_KEY_96=!kbdillumup # Fn+F10 keyboard backlight up
|
|
||||||
KEYBOARD_KEY_b3=!prog3 # Fn+F11 fan/cooling mode changer
|
|
||||||
- KEYBOARD_KEY_d5=!wlan # Fn+F12 wlan/airplane switch
|
|
||||||
|
|
||||||
# Series 9
|
|
||||||
keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*90X3A*:pvr*
|
|
||||||
@@ -936,9 +946,6 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700Z*:pvr*
|
|
||||||
keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700T*:pvr*
|
|
||||||
KEYBOARD_KEY_ad=leftmeta
|
|
||||||
|
|
||||||
-keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn535U*:pvr*
|
|
||||||
- KEYBOARD_KEY_d5=!wlan
|
|
||||||
-
|
|
||||||
###########################################################
|
|
||||||
# SONY
|
|
||||||
###########################################################
|
|
@ -1,149 +0,0 @@
|
|||||||
From 87e08d21857b2b2e59f3480e6d0538b535a5897c Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
|
||||||
Date: Mon, 16 Sep 2013 11:04:20 -0500
|
|
||||||
Subject: [PATCH] login: fix login_is_valid test
|
|
||||||
|
|
||||||
---
|
|
||||||
Makefile.am | 10 +++++++++-
|
|
||||||
src/login/login-shared.c | 23 ++++++++++++++++++++++-
|
|
||||||
src/login/login-shared.h | 21 +++++++++++++++++++++
|
|
||||||
src/login/test-login-shared.c | 38 ++++++++++++++++++++++++++++++++++++++
|
|
||||||
4 files changed, 90 insertions(+), 2 deletions(-)
|
|
||||||
create mode 100644 src/login/test-login-shared.c
|
|
||||||
|
|
||||||
diff --git a/Makefile.am b/Makefile.am
|
|
||||||
index 6014521..eae001b 100644
|
|
||||||
--- a/Makefile.am
|
|
||||||
+++ b/Makefile.am
|
|
||||||
@@ -3836,6 +3836,13 @@ test_login_LDADD = \
|
|
||||||
libsystemd-login-internal.la \
|
|
||||||
libsystemd-shared.la
|
|
||||||
|
|
||||||
+test_login_shared_SOURCES = \
|
|
||||||
+ src/login/test-login-shared.c
|
|
||||||
+
|
|
||||||
+test_login_shared_LDADD = \
|
|
||||||
+ libsystemd-login-internal.la \
|
|
||||||
+ libsystemd-shared.la
|
|
||||||
+
|
|
||||||
test_inhibit_SOURCES = \
|
|
||||||
src/login/test-inhibit.c
|
|
||||||
|
|
||||||
@@ -3862,7 +3869,8 @@ manual_tests += \
|
|
||||||
test-inhibit
|
|
||||||
|
|
||||||
tests += \
|
|
||||||
- test-login-tables
|
|
||||||
+ test-login-tables \
|
|
||||||
+ test-login-shared
|
|
||||||
|
|
||||||
libsystemd_login_la_SOURCES = \
|
|
||||||
src/login/sd-login.c \
|
|
||||||
diff --git a/src/login/login-shared.c b/src/login/login-shared.c
|
|
||||||
index ff13c28..054c775 100644
|
|
||||||
--- a/src/login/login-shared.c
|
|
||||||
+++ b/src/login/login-shared.c
|
|
||||||
@@ -1,8 +1,29 @@
|
|
||||||
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
|
|
||||||
+
|
|
||||||
+/***
|
|
||||||
+ This file is part of systemd.
|
|
||||||
+
|
|
||||||
+ Copyright 2013 Zbigniew Jędrzejewski-Szmek
|
|
||||||
+
|
|
||||||
+ 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.
|
|
||||||
+
|
|
||||||
+ systemd is distributed in the hope that it will be useful, but
|
|
||||||
+ WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
+ Lesser General Public License for more details.
|
|
||||||
+
|
|
||||||
+ You should have received a copy of the GNU Lesser General Public License
|
|
||||||
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
+***/
|
|
||||||
+
|
|
||||||
#include "login-shared.h"
|
|
||||||
#include "def.h"
|
|
||||||
|
|
||||||
bool session_id_valid(const char *id) {
|
|
||||||
assert(id);
|
|
||||||
|
|
||||||
- return id + strspn(id, LETTERS DIGITS) == '\0';
|
|
||||||
+ return id[0] && id[strspn(id, LETTERS DIGITS)] == '\0';
|
|
||||||
}
|
|
||||||
diff --git a/src/login/login-shared.h b/src/login/login-shared.h
|
|
||||||
index 728ef00..b2787c9 100644
|
|
||||||
--- a/src/login/login-shared.h
|
|
||||||
+++ b/src/login/login-shared.h
|
|
||||||
@@ -1,3 +1,24 @@
|
|
||||||
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
|
|
||||||
+
|
|
||||||
+/***
|
|
||||||
+ This file is part of systemd.
|
|
||||||
+
|
|
||||||
+ Copyright 2013 Zbigniew Jędrzejewski-Szmek
|
|
||||||
+
|
|
||||||
+ 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.
|
|
||||||
+
|
|
||||||
+ systemd is distributed in the hope that it will be useful, but
|
|
||||||
+ WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
+ Lesser General Public License for more details.
|
|
||||||
+
|
|
||||||
+ You should have received a copy of the GNU Lesser General Public License
|
|
||||||
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
+***/
|
|
||||||
+
|
|
||||||
#include <stdbool.h>
|
|
||||||
|
|
||||||
bool session_id_valid(const char *id);
|
|
||||||
diff --git a/src/login/test-login-shared.c b/src/login/test-login-shared.c
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..2df6029
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/src/login/test-login-shared.c
|
|
||||||
@@ -0,0 +1,38 @@
|
|
||||||
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
|
|
||||||
+
|
|
||||||
+/***
|
|
||||||
+ This file is part of systemd.
|
|
||||||
+
|
|
||||||
+ Copyright 2013 Zbigniew Jędrzejewski-Szmek
|
|
||||||
+
|
|
||||||
+ 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.
|
|
||||||
+
|
|
||||||
+ systemd is distributed in the hope that it will be useful, but
|
|
||||||
+ WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
+ Lesser General Public License for more details.
|
|
||||||
+
|
|
||||||
+ You should have received a copy of the GNU Lesser General Public License
|
|
||||||
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
+***/
|
|
||||||
+
|
|
||||||
+#include "macro.h"
|
|
||||||
+#include "login-shared.h"
|
|
||||||
+
|
|
||||||
+static void test_session_id_valid(void) {
|
|
||||||
+ assert_se(session_id_valid("c1"));
|
|
||||||
+ assert_se(session_id_valid("1234"));
|
|
||||||
+
|
|
||||||
+ assert_se(!session_id_valid("1-2"));
|
|
||||||
+ assert_se(!session_id_valid(""));
|
|
||||||
+ assert_se(!session_id_valid("\tid"));
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+int main(int argc, char* argv[]) {
|
|
||||||
+ test_session_id_valid();
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
@ -1,75 +0,0 @@
|
|||||||
From 72fd713962ca2c2450e23b01d9e22017a7e28fd4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Colin Walters <walters@verbum.org>
|
|
||||||
Date: Thu, 22 Aug 2013 13:55:21 -0400
|
|
||||||
Subject: [PATCH] polkit: Avoid race condition in scraping /proc
|
|
||||||
|
|
||||||
If a calling process execve()s a setuid program, it can appear to be
|
|
||||||
uid 0. Since we're receiving requests over DBus, avoid this by simply
|
|
||||||
passing system-bus-name as a subject.
|
|
||||||
---
|
|
||||||
src/shared/polkit.c | 31 +++++--------------------------
|
|
||||||
1 file changed, 5 insertions(+), 26 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/shared/polkit.c b/src/shared/polkit.c
|
|
||||||
index cea7074..1c5e9e3 100644
|
|
||||||
--- a/src/shared/polkit.c
|
|
||||||
+++ b/src/shared/polkit.c
|
|
||||||
@@ -38,12 +38,8 @@ int verify_polkit(
|
|
||||||
|
|
||||||
#ifdef ENABLE_POLKIT
|
|
||||||
DBusMessage *m = NULL, *reply = NULL;
|
|
||||||
- const char *unix_process = "unix-process", *pid = "pid", *starttime = "start-time", *cancel_id = "";
|
|
||||||
+ const char *system_bus_name = "system-bus-name", *name = "name", *cancel_id = "";
|
|
||||||
uint32_t flags = interactive ? 1 : 0;
|
|
||||||
- pid_t pid_raw;
|
|
||||||
- uint32_t pid_u32;
|
|
||||||
- unsigned long long starttime_raw;
|
|
||||||
- uint64_t starttime_u64;
|
|
||||||
DBusMessageIter iter_msg, iter_struct, iter_array, iter_dict, iter_variant;
|
|
||||||
int r;
|
|
||||||
dbus_bool_t authorized = FALSE, challenge = FALSE;
|
|
||||||
@@ -68,14 +64,6 @@ int verify_polkit(
|
|
||||||
|
|
||||||
#ifdef ENABLE_POLKIT
|
|
||||||
|
|
||||||
- pid_raw = bus_get_unix_process_id(c, sender, error);
|
|
||||||
- if (pid_raw == 0)
|
|
||||||
- return -EINVAL;
|
|
||||||
-
|
|
||||||
- r = get_starttime_of_pid(pid_raw, &starttime_raw);
|
|
||||||
- if (r < 0)
|
|
||||||
- return r;
|
|
||||||
-
|
|
||||||
m = dbus_message_new_method_call(
|
|
||||||
"org.freedesktop.PolicyKit1",
|
|
||||||
"/org/freedesktop/PolicyKit1/Authority",
|
|
||||||
@@ -86,22 +74,13 @@ int verify_polkit(
|
|
||||||
|
|
||||||
dbus_message_iter_init_append(m, &iter_msg);
|
|
||||||
|
|
||||||
- pid_u32 = (uint32_t) pid_raw;
|
|
||||||
- starttime_u64 = (uint64_t) starttime_raw;
|
|
||||||
-
|
|
||||||
if (!dbus_message_iter_open_container(&iter_msg, DBUS_TYPE_STRUCT, NULL, &iter_struct) ||
|
|
||||||
- !dbus_message_iter_append_basic(&iter_struct, DBUS_TYPE_STRING, &unix_process) ||
|
|
||||||
+ !dbus_message_iter_append_basic(&iter_struct, DBUS_TYPE_STRING, &system_bus_name) ||
|
|
||||||
!dbus_message_iter_open_container(&iter_struct, DBUS_TYPE_ARRAY, "{sv}", &iter_array) ||
|
|
||||||
!dbus_message_iter_open_container(&iter_array, DBUS_TYPE_DICT_ENTRY, NULL, &iter_dict) ||
|
|
||||||
- !dbus_message_iter_append_basic(&iter_dict, DBUS_TYPE_STRING, &pid) ||
|
|
||||||
- !dbus_message_iter_open_container(&iter_dict, DBUS_TYPE_VARIANT, "u", &iter_variant) ||
|
|
||||||
- !dbus_message_iter_append_basic(&iter_variant, DBUS_TYPE_UINT32, &pid_u32) ||
|
|
||||||
- !dbus_message_iter_close_container(&iter_dict, &iter_variant) ||
|
|
||||||
- !dbus_message_iter_close_container(&iter_array, &iter_dict) ||
|
|
||||||
- !dbus_message_iter_open_container(&iter_array, DBUS_TYPE_DICT_ENTRY, NULL, &iter_dict) ||
|
|
||||||
- !dbus_message_iter_append_basic(&iter_dict, DBUS_TYPE_STRING, &starttime) ||
|
|
||||||
- !dbus_message_iter_open_container(&iter_dict, DBUS_TYPE_VARIANT, "t", &iter_variant) ||
|
|
||||||
- !dbus_message_iter_append_basic(&iter_variant, DBUS_TYPE_UINT64, &starttime_u64) ||
|
|
||||||
+ !dbus_message_iter_append_basic(&iter_dict, DBUS_TYPE_STRING, &name) ||
|
|
||||||
+ !dbus_message_iter_open_container(&iter_dict, DBUS_TYPE_VARIANT, "s", &iter_variant) ||
|
|
||||||
+ !dbus_message_iter_append_basic(&iter_variant, DBUS_TYPE_STRING, &sender) ||
|
|
||||||
!dbus_message_iter_close_container(&iter_dict, &iter_variant) ||
|
|
||||||
!dbus_message_iter_close_container(&iter_array, &iter_dict) ||
|
|
||||||
!dbus_message_iter_close_container(&iter_struct, &iter_array) ||
|
|
||||||
--
|
|
||||||
1.8.3.1
|
|
||||||
|
|
2
sources
2
sources
@ -1 +1 @@
|
|||||||
7799f3cc9d289b8db1c1fa56ae7ecd88 systemd-207.tar.xz
|
6b30239cbea4cb2c832625f1012dbe03 systemd-208.tar.xz
|
||||||
|
55
systemd.spec
55
systemd.spec
@ -15,8 +15,8 @@
|
|||||||
|
|
||||||
Name: systemd
|
Name: systemd
|
||||||
Url: http://www.freedesktop.org/wiki/Software/systemd
|
Url: http://www.freedesktop.org/wiki/Software/systemd
|
||||||
Version: 207
|
Version: 208
|
||||||
Release: 4%{?gitcommit:.git%{gitcommit}}%{?dist}
|
Release: 1%{?gitcommit:.git%{gitcommit}}%{?dist}
|
||||||
# For a breakdown of the licensing, see README
|
# For a breakdown of the licensing, see README
|
||||||
License: LGPLv2+ and MIT and GPLv2+
|
License: LGPLv2+ and MIT and GPLv2+
|
||||||
Summary: A System and Service Manager
|
Summary: A System and Service Manager
|
||||||
@ -36,32 +36,6 @@ Source4: listen.conf
|
|||||||
# Prevent accidental removal of the systemd package
|
# Prevent accidental removal of the systemd package
|
||||||
Source6: yum-protect-systemd.conf
|
Source6: yum-protect-systemd.conf
|
||||||
|
|
||||||
Patch0003: 0003-core-cgroup-first-print-then-free.patch
|
|
||||||
Patch0004: 0004-swap-fix-reverse-dependencies.patch
|
|
||||||
Patch0005: 0005-update-TODO.patch
|
|
||||||
Patch0006: 0006-cryptsetup-generator-don-t-create-tmp-swap-units.patch
|
|
||||||
Patch0007: 0007-cryptsetup-generator-allow-specifying-options-in-pro.patch
|
|
||||||
Patch0008: 0008-automount-rename-repeat_unmont-to-repeat_unmount.patch
|
|
||||||
Patch0009: 0009-cgroup-add-the-missing-setting-of-variable-s-value.patch
|
|
||||||
Patch0010: 0010-cgroup-correct-the-log-information.patch
|
|
||||||
Patch0011: 0011-cgroup-fix-incorrectly-setting-memory-cgroup.patch
|
|
||||||
Patch0012: 0012-random-seed-we-should-return-errno-of-failed-loop_wr.patch
|
|
||||||
Patch0013: 0013-update-TODO.patch
|
|
||||||
Patch0014: 0014-libudev-fix-move_later-comparison.patch
|
|
||||||
Patch0015: 0015-man-document-luks.options-kernel-commandline.patch
|
|
||||||
Patch0016: 0016-keymap-remove-some-commented-out-lines.patch
|
|
||||||
Patch0017: 0017-Advertise-hibernation-only-if-there-s-enough-free-sw.patch
|
|
||||||
Patch0018: 0018-README-add-SCSI-BSG-option.patch
|
|
||||||
Patch0019: 0019-swap-create-.wants-symlink-to-auto-swap-devices.patch
|
|
||||||
Patch0020: 0020-cgroup-add-missing-equals-for-BlockIOWeight.patch
|
|
||||||
Patch0021: 0021-Assume-that-proc-meminfo-can-be-missing.patch
|
|
||||||
Patch0022: 0022-transaction.c-do-not-point-users-to-logs-when-unit-n.patch
|
|
||||||
Patch0023: 0023-Verify-validity-of-session-name-when-received-from-o.patch
|
|
||||||
Patch0024: 0024-udev-rules-avoid-erroring-on-trailing-whitespace.patch
|
|
||||||
Patch0025: 0025-keymap-Add-Samsung-Series-5-Ultra.patch
|
|
||||||
Patch0026: 0026-login-fix-login_is_valid-test.patch
|
|
||||||
Patch0027: 0027-polkit-Avoid-race-condition-in-scraping-proc.patch
|
|
||||||
|
|
||||||
# kernel-install patch for grubby, drop if grubby is obsolete
|
# kernel-install patch for grubby, drop if grubby is obsolete
|
||||||
Patch1000: kernel-install-grubby.patch
|
Patch1000: kernel-install-grubby.patch
|
||||||
|
|
||||||
@ -395,6 +369,10 @@ systemctl start systemd-udevd.service >/dev/null 2>&1 || :
|
|||||||
udevadm hwdb --update >/dev/null 2>&1 || :
|
udevadm hwdb --update >/dev/null 2>&1 || :
|
||||||
journalctl --update-catalog >/dev/null 2>&1 || :
|
journalctl --update-catalog >/dev/null 2>&1 || :
|
||||||
|
|
||||||
|
# Make sure new journal files
|
||||||
|
chgrp systemd-journal /var/log/journal/ /var/log/journal/`cat /etc/machine-id 2> /dev/null` >/dev/null 2>&1 || :
|
||||||
|
chmod g+s /var/log/journal/ /var/log/journal/`cat /etc/machine-id 2> /dev/null` >/dev/null 2>&1 || :
|
||||||
|
|
||||||
# Stop-gap until rsyslog.rpm does this on its own. (This is supposed
|
# Stop-gap until rsyslog.rpm does this on its own. (This is supposed
|
||||||
# to fail when the link already exists)
|
# to fail when the link already exists)
|
||||||
ln -s /usr/lib/systemd/system/rsyslog.service /etc/systemd/system/syslog.service >/dev/null 2>&1 || :
|
ln -s /usr/lib/systemd/system/rsyslog.service /etc/systemd/system/syslog.service >/dev/null 2>&1 || :
|
||||||
@ -619,12 +597,12 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g
|
|||||||
%{_datadir}/bash-completion/completions/kernel-install
|
%{_datadir}/bash-completion/completions/kernel-install
|
||||||
%{_datadir}/bash-completion/completions/systemd-run
|
%{_datadir}/bash-completion/completions/systemd-run
|
||||||
%{_datadir}/zsh/site-functions/*
|
%{_datadir}/zsh/site-functions/*
|
||||||
%ghost %{_localstatedir}/lib/random-seed
|
%ghost %dir %{_localstatedir}/lib/systemd/
|
||||||
%ghost %dir %{_localstatedir}/var/lib/systemd/
|
%ghost %dir %{_localstatedir}/lib/systemd/coredump
|
||||||
%ghost %dir %{_localstatedir}/var/lib/systemd/coredump
|
%ghost %dir %{_localstatedir}/lib/systemd/catalog
|
||||||
%ghost %dir %{_localstatedir}/var/lib/systemd/catalog
|
%ghost %dir %{_localstatedir}/lib/systemd/backlight
|
||||||
%ghost %{_localstatedir}/var/lib/systemd/catalog/database
|
%ghost %{_localstatedir}/lib/systemd/random-seed
|
||||||
%ghost %dir %{_localstatedir}/var/lib/backlight/
|
%ghost %{_localstatedir}/lib/systemd/catalog/database
|
||||||
|
|
||||||
# Make sure we don't remove runlevel targets from F14 alpha installs,
|
# Make sure we don't remove runlevel targets from F14 alpha installs,
|
||||||
# but make sure we don't create then anew.
|
# but make sure we don't create then anew.
|
||||||
@ -692,18 +670,21 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g
|
|||||||
%{_datadir}/systemd/gatewayd
|
%{_datadir}/systemd/gatewayd
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Oct 2 2013 Lennart Poettering <lpoetter@redhat.com - 208-1
|
||||||
|
- New upstream release
|
||||||
|
|
||||||
* Wed Sep 18 2013 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> 207-4
|
* Wed Sep 18 2013 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> 207-4
|
||||||
- Fix policykit authentication
|
- Fix policykit authentication
|
||||||
Resolves: rhbz#1006680
|
- Resolves: rhbz#1006680
|
||||||
|
|
||||||
* Tue Sep 17 2013 Harald Hoyer <harald@redhat.com> 207-3
|
* Tue Sep 17 2013 Harald Hoyer <harald@redhat.com> 207-3
|
||||||
- fixed login
|
- fixed login
|
||||||
Resolves: rhbz#1005233
|
- Resolves: rhbz#1005233
|
||||||
|
|
||||||
* Mon Sep 16 2013 Harald Hoyer <harald@redhat.com> 207-2
|
* Mon Sep 16 2013 Harald Hoyer <harald@redhat.com> 207-2
|
||||||
- add some upstream fixes for 207
|
- add some upstream fixes for 207
|
||||||
- fixed swap activation
|
- fixed swap activation
|
||||||
Resolves: rhbz#1008604
|
- Resolves: rhbz#1008604
|
||||||
|
|
||||||
* Fri Sep 13 2013 Lennart Poettering <lpoetter@redhat.com> - 207-1
|
* Fri Sep 13 2013 Lennart Poettering <lpoetter@redhat.com> - 207-1
|
||||||
- New upstream release
|
- New upstream release
|
||||||
|
Loading…
Reference in New Issue
Block a user