New upstream
This commit is contained in:
parent
db3a9fa0d9
commit
3afeac81f3
@ -1,39 +0,0 @@
|
|||||||
From 1848e58772105127f636d527dba028694d15ed15 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Harald Hoyer <harald@redhat.com>
|
|
||||||
Date: Thu, 1 Aug 2013 12:31:38 +0200
|
|
||||||
Subject: [PATCH] 80-net-name-slot.rules: only rename network interfaces on
|
|
||||||
ACTION=="add"
|
|
||||||
|
|
||||||
Otherwise systemd-udevd will rename on "change" and "move" events,
|
|
||||||
resulting in weird renames in combination with biosdevname
|
|
||||||
|
|
||||||
systemd-udevd[355]: renamed network interface eth0 to em1
|
|
||||||
systemd-udevd[355]: renamed network interface eth1 to p3p2
|
|
||||||
systemd-udevd[357]: renamed network interface eth0 to p3p1
|
|
||||||
systemd-udevd[429]: renamed network interface p3p2 to ens3f1
|
|
||||||
systemd-udevd[428]: renamed network interface p3p1 to ens3f0
|
|
||||||
systemd-udevd[426]: renamed network interface em1 to enp63s0
|
|
||||||
|
|
||||||
or
|
|
||||||
|
|
||||||
systemd-udevd[356]: renamed network interface eth0 to em1
|
|
||||||
systemd-udevd[356]: renamed network interface eth0 to p3p1
|
|
||||||
systemd-udevd[420]: renamed network interface p3p1 to ens3f0
|
|
||||||
systemd-udevd[418]: renamed network interface em1 to enp63s0
|
|
||||||
systemd-udevd[421]: renamed network interface eth1 to p3p1
|
|
||||||
---
|
|
||||||
rules/80-net-name-slot.rules | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/rules/80-net-name-slot.rules b/rules/80-net-name-slot.rules
|
|
||||||
index 15b5bc4..c5f1b38 100644
|
|
||||||
--- a/rules/80-net-name-slot.rules
|
|
||||||
+++ b/rules/80-net-name-slot.rules
|
|
||||||
@@ -1,6 +1,6 @@
|
|
||||||
# do not edit this file, it will be overwritten on update
|
|
||||||
|
|
||||||
-ACTION=="remove", GOTO="net_name_slot_end"
|
|
||||||
+ACTION!="add", GOTO="net_name_slot_end"
|
|
||||||
SUBSYSTEM!="net", GOTO="net_name_slot_end"
|
|
||||||
NAME!="", GOTO="net_name_slot_end"
|
|
||||||
|
|
@ -1,76 +0,0 @@
|
|||||||
From 9d5dbdd18f4c106856f031ae94d4f05aa3259de7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Harald Hoyer <harald@redhat.com>
|
|
||||||
Date: Thu, 1 Aug 2013 12:14:02 +0200
|
|
||||||
Subject: [PATCH] journal: handle multiline syslog messages
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
Since the journal can handle multiple lines just well natively,
|
|
||||||
and rsyslog can be configured to handle them as well, there is no need
|
|
||||||
to truncate messages from syslog() after the first newline.
|
|
||||||
|
|
||||||
Reproducer:
|
|
||||||
|
|
||||||
1. Add following four lines to /etc/rsyslog.conf
|
|
||||||
|
|
||||||
----------
|
|
||||||
$EscapeControlCharactersOnReceive off
|
|
||||||
$ActionFileDefaultTemplate RSYSLOG_SysklogdFileFormat
|
|
||||||
$SpaceLFOnReceive on
|
|
||||||
$DropTrailingLFOnReception off
|
|
||||||
----------
|
|
||||||
|
|
||||||
3. Restart rsyslog
|
|
||||||
# service rsyslog restart
|
|
||||||
|
|
||||||
4. Compile and run the following program
|
|
||||||
|
|
||||||
----------
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <syslog.h>
|
|
||||||
|
|
||||||
int main()
|
|
||||||
{
|
|
||||||
syslog(LOG_INFO, "aaa%caaa", '\n');
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
----------
|
|
||||||
|
|
||||||
Actual results:
|
|
||||||
Below message appears in /var/log/messages.
|
|
||||||
|
|
||||||
----------
|
|
||||||
Sep 7 19:19:39 localhost test2: aaa
|
|
||||||
----------
|
|
||||||
|
|
||||||
Expected results:
|
|
||||||
Below message, which worked prior to systemd-journald
|
|
||||||
appears in /var/log/messages.
|
|
||||||
|
|
||||||
----------
|
|
||||||
Sep 7 19:19:39 localhost test2: aaa aaa
|
|
||||||
|
|
||||||
https://bugzilla.redhat.com/show_bug.cgi?id=855313
|
|
||||||
---
|
|
||||||
src/journal/journald-server.c | 7 +------
|
|
||||||
1 file changed, 1 insertion(+), 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c
|
|
||||||
index 60c32b1..c5c195a 100644
|
|
||||||
--- a/src/journal/journald-server.c
|
|
||||||
+++ b/src/journal/journald-server.c
|
|
||||||
@@ -1240,12 +1240,7 @@ int process_event(Server *s, struct epoll_event *ev) {
|
|
||||||
char *e;
|
|
||||||
|
|
||||||
if (n > 0 && n_fds == 0) {
|
|
||||||
- e = memchr(s->buffer, '\n', n);
|
|
||||||
- if (e)
|
|
||||||
- *e = 0;
|
|
||||||
- else
|
|
||||||
- s->buffer[n] = 0;
|
|
||||||
-
|
|
||||||
+ s->buffer[n] = 0;
|
|
||||||
server_process_syslog_message(s, strstrip(s->buffer), ucred, tv, label, label_len);
|
|
||||||
} else if (n_fds > 0)
|
|
||||||
log_warning("Got file descriptors via syslog socket. Ignoring.");
|
|
@ -1,32 +0,0 @@
|
|||||||
From fad2602f7eb86f8839d5ec7bc0b6bc5ce282e16d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Michael Biebl <biebl@debian.org>
|
|
||||||
Date: Tue, 23 Jul 2013 05:03:17 +0200
|
|
||||||
Subject: [PATCH] man: Fix copy&paste error
|
|
||||||
|
|
||||||
---
|
|
||||||
man/udev.xml | 6 +++---
|
|
||||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/man/udev.xml b/man/udev.xml
|
|
||||||
index 0220725..f107482 100644
|
|
||||||
--- a/man/udev.xml
|
|
||||||
+++ b/man/udev.xml
|
|
||||||
@@ -704,15 +704,15 @@
|
|
||||||
system hwdb directory <filename>/usr/lib/udev/hwdb.d</filename>,
|
|
||||||
the volatile runtime directory <filename>/run/udev/hwdb.d</filename>
|
|
||||||
and the local administration directory <filename>/etc/udev/hwdb.d</filename>.
|
|
||||||
- All rules files are collectively sorted and processed in lexical order,
|
|
||||||
+ All hwdb files are collectively sorted and processed in lexical order,
|
|
||||||
regardless of the directories in which they live. However, files with
|
|
||||||
identical filenames replace each other. Files in <filename>/etc</filename>
|
|
||||||
have the highest priority, files in <filename>/run</filename> take precedence
|
|
||||||
over files with the same name in <filename>/lib</filename>. This can be
|
|
||||||
used to override a system-supplied hwdb file with a local file if needed;
|
|
||||||
- a symlink in <filename>/etc</filename> with the same name as a rules file in
|
|
||||||
+ a symlink in <filename>/etc</filename> with the same name as a hwdb file in
|
|
||||||
<filename>/lib</filename>, pointing to <filename>/dev/null</filename>,
|
|
||||||
- disables the rules file entirely. hwdb files must have the extension
|
|
||||||
+ disables the hwdb file entirely. hwdb files must have the extension
|
|
||||||
<filename>.hwdb</filename>; other extensions are ignored.</para>
|
|
||||||
|
|
||||||
<para>The hwdb file contains data records consisting of matches and
|
|
@ -1,48 +0,0 @@
|
|||||||
From f173657bccae4dd0cbfe0a7ed33ebc9117b74f05 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Lennart Poettering <lennart@poettering.net>
|
|
||||||
Date: Wed, 24 Jul 2013 07:24:05 +0200
|
|
||||||
Subject: [PATCH] core: synchronously block when logging
|
|
||||||
|
|
||||||
Previously, the logging sockets were asynchronous and if clogged we'd
|
|
||||||
lose messages. We did this to be extra careful given that PID 1 might
|
|
||||||
need to spawn the logging daemon as response to PID 1's own log messages
|
|
||||||
and we really should avoid a deadlock in that case.
|
|
||||||
|
|
||||||
As it turns out this causes loss of too many messages, hence make the
|
|
||||||
socket blocking again, however put a time limit on it to avoid unbounded
|
|
||||||
deadlocks in the unlikely case they happen.
|
|
||||||
|
|
||||||
https://bugs.freedesktop.org/show_bug.cgi?id=66664
|
|
||||||
---
|
|
||||||
src/shared/log.c | 12 ++++++++----
|
|
||||||
1 file changed, 8 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/shared/log.c b/src/shared/log.c
|
|
||||||
index 27317f7..8f4995a 100644
|
|
||||||
--- a/src/shared/log.c
|
|
||||||
+++ b/src/shared/log.c
|
|
||||||
@@ -115,16 +115,20 @@ void log_close_syslog(void) {
|
|
||||||
|
|
||||||
static int create_log_socket(int type) {
|
|
||||||
int fd;
|
|
||||||
+ struct timeval tv;
|
|
||||||
|
|
||||||
- /* All output to the syslog/journal fds we do asynchronously,
|
|
||||||
- * and if the buffers are full we just drop the messages */
|
|
||||||
-
|
|
||||||
- fd = socket(AF_UNIX, type|SOCK_CLOEXEC|SOCK_NONBLOCK, 0);
|
|
||||||
+ fd = socket(AF_UNIX, type|SOCK_CLOEXEC, 0);
|
|
||||||
if (fd < 0)
|
|
||||||
return -errno;
|
|
||||||
|
|
||||||
fd_inc_sndbuf(fd, SNDBUF_SIZE);
|
|
||||||
|
|
||||||
+ /* We need a blocking fd here since we'd otherwise lose
|
|
||||||
+ messages way too early. However, let's not hang forever in the
|
|
||||||
+ unlikely case of a deadlock. */
|
|
||||||
+ timeval_store(&tv, 1*USEC_PER_MINUTE);
|
|
||||||
+ setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv));
|
|
||||||
+
|
|
||||||
return fd;
|
|
||||||
}
|
|
||||||
|
|
@ -1,173 +0,0 @@
|
|||||||
From 81e5007269cc33ff6acf27051b1f3b5b986f878a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Lennart Poettering <lennart@poettering.net>
|
|
||||||
Date: Wed, 24 Jul 2013 08:08:57 +0200
|
|
||||||
Subject: [PATCH] journal: immediately sync to disk as soon as we receieve an
|
|
||||||
EMERG/ALERT/CRIT message
|
|
||||||
|
|
||||||
---
|
|
||||||
TODO | 2 --
|
|
||||||
man/journald.conf.xml | 14 +++++++++++---
|
|
||||||
src/journal/journald-server.c | 26 ++++++++++++++++----------
|
|
||||||
src/journal/journald-server.h | 2 +-
|
|
||||||
4 files changed, 28 insertions(+), 16 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/TODO b/TODO
|
|
||||||
index ba8bb8e..279ea60 100644
|
|
||||||
--- a/TODO
|
|
||||||
+++ b/TODO
|
|
||||||
@@ -74,8 +74,6 @@ Features:
|
|
||||||
|
|
||||||
* journald: optionally, log debug messages to /run but everything else to /var
|
|
||||||
|
|
||||||
-* journald: optionally, when messages with a high log priority are logged, sync() immediately.
|
|
||||||
-
|
|
||||||
* systemctl list-unit-files should list generated files (and probably with a new state "generated" for them, or so)
|
|
||||||
|
|
||||||
* do we really need both hasprefix() and startswith()?
|
|
||||||
diff --git a/man/journald.conf.xml b/man/journald.conf.xml
|
|
||||||
index 487e8d6..9219b3d 100644
|
|
||||||
--- a/man/journald.conf.xml
|
|
||||||
+++ b/man/journald.conf.xml
|
|
||||||
@@ -348,9 +348,17 @@
|
|
||||||
<varlistentry>
|
|
||||||
<term><varname>SyncIntervalSec=</varname></term>
|
|
||||||
|
|
||||||
- <listitem><para>The timeout before synchronizing journal
|
|
||||||
- data to disk. After syncing, journal files have
|
|
||||||
- the OFFLINE state. Default timeout is 5 minutes.
|
|
||||||
+ <listitem><para>The timeout before
|
|
||||||
+ synchronizing journal files to
|
|
||||||
+ disk. After syncing, journal files are
|
|
||||||
+ placed in the OFFLINE state. Note that
|
|
||||||
+ syncing is unconditionally done
|
|
||||||
+ immediately after a log message of
|
|
||||||
+ priority CRIT, ALERT or EMERG has been
|
|
||||||
+ logged, this setting hence applies
|
|
||||||
+ only to messages of the levels ERR,
|
|
||||||
+ WARNING, NOTICE, INFO, DEBUG. The
|
|
||||||
+ default timeout is 5 minutes.
|
|
||||||
</para></listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c
|
|
||||||
index c5c195a..f417059 100644
|
|
||||||
--- a/src/journal/journald-server.c
|
|
||||||
+++ b/src/journal/journald-server.c
|
|
||||||
@@ -352,13 +352,12 @@ void server_rotate(Server *s) {
|
|
||||||
}
|
|
||||||
|
|
||||||
void server_sync(Server *s) {
|
|
||||||
+ static const struct itimerspec sync_timer_disable = {};
|
|
||||||
JournalFile *f;
|
|
||||||
void *k;
|
|
||||||
Iterator i;
|
|
||||||
int r;
|
|
||||||
|
|
||||||
- static const struct itimerspec sync_timer_disable = {};
|
|
||||||
-
|
|
||||||
if (s->system_journal) {
|
|
||||||
r = journal_file_set_offline(s->system_journal);
|
|
||||||
if (r < 0)
|
|
||||||
@@ -443,7 +442,7 @@ bool shall_try_append_again(JournalFile *f, int r) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static void write_to_journal(Server *s, uid_t uid, struct iovec *iovec, unsigned n) {
|
|
||||||
+static void write_to_journal(Server *s, uid_t uid, struct iovec *iovec, unsigned n, int priority) {
|
|
||||||
JournalFile *f;
|
|
||||||
bool vacuumed = false;
|
|
||||||
int r;
|
|
||||||
@@ -469,7 +468,7 @@ static void write_to_journal(Server *s, uid_t uid, struct iovec *iovec, unsigned
|
|
||||||
|
|
||||||
r = journal_file_append_entry(f, NULL, iovec, n, &s->seqnum, NULL, NULL);
|
|
||||||
if (r >= 0) {
|
|
||||||
- server_schedule_sync(s);
|
|
||||||
+ server_schedule_sync(s, priority);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -499,7 +498,8 @@ static void write_to_journal(Server *s, uid_t uid, struct iovec *iovec, unsigned
|
|
||||||
size += iovec[i].iov_len;
|
|
||||||
|
|
||||||
log_error("Failed to write entry (%d items, %zu bytes) despite vacuuming, ignoring: %s", n, size, strerror(-r));
|
|
||||||
- }
|
|
||||||
+ } else
|
|
||||||
+ server_schedule_sync(s, priority);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void dispatch_message_real(
|
|
||||||
@@ -509,6 +509,7 @@ static void dispatch_message_real(
|
|
||||||
struct timeval *tv,
|
|
||||||
const char *label, size_t label_len,
|
|
||||||
const char *unit_id,
|
|
||||||
+ int priority,
|
|
||||||
pid_t object_pid) {
|
|
||||||
|
|
||||||
char pid[sizeof("_PID=") + DECIMAL_STR_MAX(pid_t)],
|
|
||||||
@@ -523,7 +524,6 @@ static void dispatch_message_real(
|
|
||||||
o_owner_uid[sizeof("OBJECT_SYSTEMD_OWNER_UID=") + DECIMAL_STR_MAX(uid_t)];
|
|
||||||
uid_t object_uid;
|
|
||||||
gid_t object_gid;
|
|
||||||
-
|
|
||||||
char *x;
|
|
||||||
sd_id128_t id;
|
|
||||||
int r;
|
|
||||||
@@ -786,7 +786,7 @@ static void dispatch_message_real(
|
|
||||||
else
|
|
||||||
journal_uid = 0;
|
|
||||||
|
|
||||||
- write_to_journal(s, journal_uid, iovec, n);
|
|
||||||
+ write_to_journal(s, journal_uid, iovec, n, priority);
|
|
||||||
}
|
|
||||||
|
|
||||||
void server_driver_message(Server *s, sd_id128_t message_id, const char *format, ...) {
|
|
||||||
@@ -820,7 +820,7 @@ void server_driver_message(Server *s, sd_id128_t message_id, const char *format,
|
|
||||||
ucred.uid = getuid();
|
|
||||||
ucred.gid = getgid();
|
|
||||||
|
|
||||||
- dispatch_message_real(s, iovec, n, ELEMENTSOF(iovec), &ucred, NULL, NULL, 0, NULL, 0);
|
|
||||||
+ dispatch_message_real(s, iovec, n, ELEMENTSOF(iovec), &ucred, NULL, NULL, 0, NULL, LOG_INFO, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void server_dispatch_message(
|
|
||||||
@@ -886,7 +886,7 @@ void server_dispatch_message(
|
|
||||||
"Suppressed %u messages from %s", rl - 1, path);
|
|
||||||
|
|
||||||
finish:
|
|
||||||
- dispatch_message_real(s, iovec, n, m, ucred, tv, label, label_len, unit_id, object_pid);
|
|
||||||
+ dispatch_message_real(s, iovec, n, m, ucred, tv, label, label_len, unit_id, priority, object_pid);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1418,11 +1418,17 @@ static int server_open_sync_timer(Server *s) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
-int server_schedule_sync(Server *s) {
|
|
||||||
+int server_schedule_sync(Server *s, int priority) {
|
|
||||||
int r;
|
|
||||||
|
|
||||||
assert(s);
|
|
||||||
|
|
||||||
+ if (priority <= LOG_CRIT) {
|
|
||||||
+ /* Immediately sync to disk when this is of priority CRIT, ALERT, EMERG */
|
|
||||||
+ server_sync(s);
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
if (s->sync_scheduled)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
diff --git a/src/journal/journald-server.h b/src/journal/journald-server.h
|
|
||||||
index 9ff3300..e856ef2 100644
|
|
||||||
--- a/src/journal/journald-server.h
|
|
||||||
+++ b/src/journal/journald-server.h
|
|
||||||
@@ -153,7 +153,7 @@ void server_done(Server *s);
|
|
||||||
void server_sync(Server *s);
|
|
||||||
void server_vacuum(Server *s);
|
|
||||||
void server_rotate(Server *s);
|
|
||||||
-int server_schedule_sync(Server *s);
|
|
||||||
+int server_schedule_sync(Server *s, int priority);
|
|
||||||
int server_flush_to_var(Server *s);
|
|
||||||
int process_event(Server *s, struct epoll_event *ev);
|
|
||||||
void server_maybe_append_tags(Server *s);
|
|
@ -1,23 +0,0 @@
|
|||||||
From ddc8a554f100c77f35df682bb528906b26f5f497 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
|
||||||
Date: Tue, 23 Jul 2013 22:01:39 -0400
|
|
||||||
Subject: [PATCH] initctl: use irreversible jobs when switching runlevels
|
|
||||||
|
|
||||||
Spotted by uau in #systemd.
|
|
||||||
---
|
|
||||||
src/initctl/initctl.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/initctl/initctl.c b/src/initctl/initctl.c
|
|
||||||
index 735f1e1..5fbce4a 100644
|
|
||||||
--- a/src/initctl/initctl.c
|
|
||||||
+++ b/src/initctl/initctl.c
|
|
||||||
@@ -122,7 +122,7 @@ static void change_runlevel(Server *s, int runlevel) {
|
|
||||||
if (isolate)
|
|
||||||
mode = "isolate";
|
|
||||||
else
|
|
||||||
- mode = "replace";
|
|
||||||
+ mode = "replace-irreversibly";
|
|
||||||
|
|
||||||
log_debug("Running request %s/start/%s", target, mode);
|
|
||||||
|
|
@ -1,39 +0,0 @@
|
|||||||
From cc1ab04e1ce05fc0aa917249677ab2818ea87eee Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tom Gundersen <teg@jklm.no>
|
|
||||||
Date: Wed, 24 Jul 2013 14:55:19 +0200
|
|
||||||
Subject: [PATCH] udev: log error if chmod/chown of static dev nodes fails
|
|
||||||
|
|
||||||
---
|
|
||||||
src/udev/udev-rules.c | 16 ++++++++++++----
|
|
||||||
1 file changed, 12 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c
|
|
||||||
index 8ace705..fe4965f 100644
|
|
||||||
--- a/src/udev/udev-rules.c
|
|
||||||
+++ b/src/udev/udev-rules.c
|
|
||||||
@@ -2593,13 +2593,21 @@ int udev_rules_apply_static_dev_perms(struct udev_rules *rules)
|
|
||||||
mode = 0600;
|
|
||||||
}
|
|
||||||
if (mode != (stats.st_mode & 01777)) {
|
|
||||||
- chmod(device_node, mode);
|
|
||||||
- log_debug("chmod '%s' %#o\n", device_node, mode);
|
|
||||||
+ r = chmod(device_node, mode);
|
|
||||||
+ if (r < 0) {
|
|
||||||
+ log_error("failed to chmod '%s' %#o\n", device_node, mode);
|
|
||||||
+ return -errno;
|
|
||||||
+ } else
|
|
||||||
+ log_debug("chmod '%s' %#o\n", device_node, mode);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((uid != 0 && uid != stats.st_uid) || (gid != 0 && gid != stats.st_gid)) {
|
|
||||||
- chown(device_node, uid, gid);
|
|
||||||
- log_debug("chown '%s' %u %u\n", device_node, uid, gid);
|
|
||||||
+ r = chown(device_node, uid, gid);
|
|
||||||
+ if (r < 0) {
|
|
||||||
+ log_error("failed to chown '%s' %u %u \n", device_node, uid, gid);
|
|
||||||
+ return -errno;
|
|
||||||
+ } else
|
|
||||||
+ log_debug("chown '%s' %u %u\n", device_node, uid, gid);
|
|
||||||
}
|
|
||||||
|
|
||||||
utimensat(AT_FDCWD, device_node, NULL, 0);
|
|
@ -1,25 +0,0 @@
|
|||||||
From 3a27b93611af2c6dbed260e269118a1fd226ef27 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tom Gundersen <teg@jklm.no>
|
|
||||||
Date: Wed, 24 Jul 2013 15:05:48 +0200
|
|
||||||
Subject: [PATCH] udev: static_node - don't touch permissions uneccessarily
|
|
||||||
|
|
||||||
Don't set default permissions if only TAGS were specified in a rule.
|
|
||||||
---
|
|
||||||
src/udev/udev-rules.c | 4 ++++
|
|
||||||
1 file changed, 4 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c
|
|
||||||
index fe4965f..769b670 100644
|
|
||||||
--- a/src/udev/udev-rules.c
|
|
||||||
+++ b/src/udev/udev-rules.c
|
|
||||||
@@ -2586,6 +2586,10 @@ int udev_rules_apply_static_dev_perms(struct udev_rules *rules)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+ /* don't touch the permissions if only the tags were set */
|
|
||||||
+ if (mode == 0 && uid == 0 && gid == 0)
|
|
||||||
+ goto next;
|
|
||||||
+
|
|
||||||
if (mode == 0) {
|
|
||||||
if (gid > 0)
|
|
||||||
mode = 0660;
|
|
@ -1,87 +0,0 @@
|
|||||||
From eada3a23db3aed6f679c8d5476618f33d4249cb7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Dave Reisner <dreisner@archlinux.org>
|
|
||||||
Date: Wed, 24 Jul 2013 11:10:05 -0400
|
|
||||||
Subject: [PATCH] tmpfiles: support passing --prefix multiple times
|
|
||||||
|
|
||||||
---
|
|
||||||
man/systemd-tmpfiles.xml | 3 ++-
|
|
||||||
src/tmpfiles/tmpfiles.c | 24 +++++++++++++++++++++---
|
|
||||||
2 files changed, 23 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/man/systemd-tmpfiles.xml b/man/systemd-tmpfiles.xml
|
|
||||||
index 405a9f1..b0f2d9c 100644
|
|
||||||
--- a/man/systemd-tmpfiles.xml
|
|
||||||
+++ b/man/systemd-tmpfiles.xml
|
|
||||||
@@ -121,7 +121,8 @@
|
|
||||||
<term><option>--prefix=PATH</option></term>
|
|
||||||
<listitem><para>Only apply rules that
|
|
||||||
apply to paths with the specified
|
|
||||||
- prefix.</para></listitem>
|
|
||||||
+ prefix. This option can be specified
|
|
||||||
+ multiple times.</para></listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
|
|
||||||
index eae993e..cb15133 100644
|
|
||||||
--- a/src/tmpfiles/tmpfiles.c
|
|
||||||
+++ b/src/tmpfiles/tmpfiles.c
|
|
||||||
@@ -105,7 +105,7 @@ static bool arg_create = false;
|
|
||||||
static bool arg_clean = false;
|
|
||||||
static bool arg_remove = false;
|
|
||||||
|
|
||||||
-static const char *arg_prefix = NULL;
|
|
||||||
+static char **include_prefixes = NULL;
|
|
||||||
|
|
||||||
static const char conf_file_dirs[] =
|
|
||||||
"/etc/tmpfiles.d\0"
|
|
||||||
@@ -1018,6 +1018,21 @@ static bool item_equal(Item *a, Item *b) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static bool should_include_path(const char *path) {
|
|
||||||
+ char **prefix;
|
|
||||||
+
|
|
||||||
+ /* no explicit paths specified for inclusion, so everything is valid */
|
|
||||||
+ if (strv_length(include_prefixes) == 0)
|
|
||||||
+ return true;
|
|
||||||
+
|
|
||||||
+ STRV_FOREACH(prefix, include_prefixes) {
|
|
||||||
+ if (path_startswith(path, *prefix))
|
|
||||||
+ return true;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return false;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static int parse_line(const char *fname, unsigned line, const char *buffer) {
|
|
||||||
_cleanup_item_free_ Item *i = NULL;
|
|
||||||
Item *existing;
|
|
||||||
@@ -1119,7 +1134,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) {
|
|
||||||
|
|
||||||
path_kill_slashes(i->path);
|
|
||||||
|
|
||||||
- if (arg_prefix && !path_startswith(i->path, arg_prefix))
|
|
||||||
+ if (!should_include_path(i->path))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (user && !streq(user, "-")) {
|
|
||||||
@@ -1258,7 +1273,8 @@ static int parse_argv(int argc, char *argv[]) {
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ARG_PREFIX:
|
|
||||||
- arg_prefix = optarg;
|
|
||||||
+ if (strv_extend(&include_prefixes, optarg) < 0)
|
|
||||||
+ return log_oom();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '?':
|
|
||||||
@@ -1423,6 +1439,8 @@ finish:
|
|
||||||
hashmap_free(items);
|
|
||||||
hashmap_free(globs);
|
|
||||||
|
|
||||||
+ strv_free(include_prefixes);
|
|
||||||
+
|
|
||||||
set_free_free(unix_sockets);
|
|
||||||
|
|
||||||
label_finish();
|
|
@ -1,135 +0,0 @@
|
|||||||
From 84601ab5c6e6c17bd489423b693b85377b9b1be9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Dave Reisner <dreisner@archlinux.org>
|
|
||||||
Date: Wed, 24 Jul 2013 11:19:24 -0400
|
|
||||||
Subject: [PATCH] tmpfiles: introduce --exclude-prefix
|
|
||||||
|
|
||||||
The opposite of --prefix, allows specifying path prefixes which should
|
|
||||||
be skipped when processing rules.
|
|
||||||
---
|
|
||||||
man/systemd-tmpfiles.xml | 7 +++++
|
|
||||||
shell-completion/systemd-zsh-completion.zsh | 1 +
|
|
||||||
src/tmpfiles/tmpfiles.c | 44 ++++++++++++++++++-----------
|
|
||||||
3 files changed, 36 insertions(+), 16 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/man/systemd-tmpfiles.xml b/man/systemd-tmpfiles.xml
|
|
||||||
index b0f2d9c..403592d 100644
|
|
||||||
--- a/man/systemd-tmpfiles.xml
|
|
||||||
+++ b/man/systemd-tmpfiles.xml
|
|
||||||
@@ -124,6 +124,13 @@
|
|
||||||
prefix. This option can be specified
|
|
||||||
multiple times.</para></listitem>
|
|
||||||
</varlistentry>
|
|
||||||
+ <varlistentry>
|
|
||||||
+ <term><option>--exclude-prefix=PATH</option></term>
|
|
||||||
+ <listitem><para>Ignore rules that
|
|
||||||
+ apply to paths with the specified
|
|
||||||
+ prefix. This option can be specified
|
|
||||||
+ multiple times.</para></listitem>
|
|
||||||
+ </varlistentry>
|
|
||||||
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
diff --git a/shell-completion/systemd-zsh-completion.zsh b/shell-completion/systemd-zsh-completion.zsh
|
|
||||||
index c85e00e..7aebbcd 100644
|
|
||||||
--- a/shell-completion/systemd-zsh-completion.zsh
|
|
||||||
+++ b/shell-completion/systemd-zsh-completion.zsh
|
|
||||||
@@ -249,6 +249,7 @@ _ctls()
|
|
||||||
'--clean[Clean up all files and directories with an age parameter configured.]' \
|
|
||||||
'--remove[All files and directories marked with r, R in the configuration files are removed.]' \
|
|
||||||
'--prefix=[Only apply rules that apply to paths with the specified prefix.]' \
|
|
||||||
+ '--exclude-prefix=[Ignore rules that apply to paths with the specified prefix.]' \
|
|
||||||
'--help[Prints a short help text and exits.]' \
|
|
||||||
'*::files:_files'
|
|
||||||
;;
|
|
||||||
diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
|
|
||||||
index cb15133..5eca82a 100644
|
|
||||||
--- a/src/tmpfiles/tmpfiles.c
|
|
||||||
+++ b/src/tmpfiles/tmpfiles.c
|
|
||||||
@@ -106,6 +106,7 @@ static bool arg_clean = false;
|
|
||||||
static bool arg_remove = false;
|
|
||||||
|
|
||||||
static char **include_prefixes = NULL;
|
|
||||||
+static char **exclude_prefixes = NULL;
|
|
||||||
|
|
||||||
static const char conf_file_dirs[] =
|
|
||||||
"/etc/tmpfiles.d\0"
|
|
||||||
@@ -1021,16 +1022,19 @@ static bool item_equal(Item *a, Item *b) {
|
|
||||||
static bool should_include_path(const char *path) {
|
|
||||||
char **prefix;
|
|
||||||
|
|
||||||
- /* no explicit paths specified for inclusion, so everything is valid */
|
|
||||||
- if (strv_length(include_prefixes) == 0)
|
|
||||||
- return true;
|
|
||||||
+ STRV_FOREACH(prefix, exclude_prefixes) {
|
|
||||||
+ if (path_startswith(path, *prefix))
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
STRV_FOREACH(prefix, include_prefixes) {
|
|
||||||
if (path_startswith(path, *prefix))
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
- return false;
|
|
||||||
+ /* no matches, so we should include this path only if we
|
|
||||||
+ * have no whitelist at all */
|
|
||||||
+ return strv_length(include_prefixes) == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int parse_line(const char *fname, unsigned line, const char *buffer) {
|
|
||||||
@@ -1219,11 +1223,12 @@ static int help(void) {
|
|
||||||
|
|
||||||
printf("%s [OPTIONS...] [CONFIGURATION FILE...]\n\n"
|
|
||||||
"Creates, deletes and cleans up volatile and temporary files and directories.\n\n"
|
|
||||||
- " -h --help Show this help\n"
|
|
||||||
- " --create Create marked files/directories\n"
|
|
||||||
- " --clean Clean up marked directories\n"
|
|
||||||
- " --remove Remove marked files/directories\n"
|
|
||||||
- " --prefix=PATH Only apply rules that apply to paths with the specified prefix\n",
|
|
||||||
+ " -h --help Show this help\n"
|
|
||||||
+ " --create Create marked files/directories\n"
|
|
||||||
+ " --clean Clean up marked directories\n"
|
|
||||||
+ " --remove Remove marked files/directories\n"
|
|
||||||
+ " --prefix=PATH Only apply rules that apply to paths with the specified prefix\n"
|
|
||||||
+ " --exclude-prefix=PATH Ignore rules that apply to paths with the specified prefix\n",
|
|
||||||
program_invocation_short_name);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
@@ -1235,16 +1240,18 @@ static int parse_argv(int argc, char *argv[]) {
|
|
||||||
ARG_CREATE,
|
|
||||||
ARG_CLEAN,
|
|
||||||
ARG_REMOVE,
|
|
||||||
- ARG_PREFIX
|
|
||||||
+ ARG_PREFIX,
|
|
||||||
+ ARG_EXCLUDE_PREFIX,
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct option options[] = {
|
|
||||||
- { "help", no_argument, NULL, 'h' },
|
|
||||||
- { "create", no_argument, NULL, ARG_CREATE },
|
|
||||||
- { "clean", no_argument, NULL, ARG_CLEAN },
|
|
||||||
- { "remove", no_argument, NULL, ARG_REMOVE },
|
|
||||||
- { "prefix", required_argument, NULL, ARG_PREFIX },
|
|
||||||
- { NULL, 0, NULL, 0 }
|
|
||||||
+ { "help", no_argument, NULL, 'h' },
|
|
||||||
+ { "create", no_argument, NULL, ARG_CREATE },
|
|
||||||
+ { "clean", no_argument, NULL, ARG_CLEAN },
|
|
||||||
+ { "remove", no_argument, NULL, ARG_REMOVE },
|
|
||||||
+ { "prefix", required_argument, NULL, ARG_PREFIX },
|
|
||||||
+ { "exclude-prefix", required_argument, NULL, ARG_EXCLUDE_PREFIX },
|
|
||||||
+ { NULL, 0, NULL, 0 }
|
|
||||||
};
|
|
||||||
|
|
||||||
int c;
|
|
||||||
@@ -1277,6 +1284,11 @@ static int parse_argv(int argc, char *argv[]) {
|
|
||||||
return log_oom();
|
|
||||||
break;
|
|
||||||
|
|
||||||
+ case ARG_EXCLUDE_PREFIX:
|
|
||||||
+ if (strv_extend(&exclude_prefixes, optarg) < 0)
|
|
||||||
+ return log_oom();
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
case '?':
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
@ -1,20 +0,0 @@
|
|||||||
From a2381ddc5af1bf1524048fe0c6b505167fe0ec73 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Dave Reisner <dreisner@archlinux.org>
|
|
||||||
Date: Wed, 24 Jul 2013 11:58:35 -0400
|
|
||||||
Subject: [PATCH] tmpfiles-setup: exclude /dev prefixes files
|
|
||||||
|
|
||||||
Fixes Arch Linux bug: https://bugs.archlinux.org/task/36259
|
|
||||||
---
|
|
||||||
units/systemd-tmpfiles-setup.service.in | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/units/systemd-tmpfiles-setup.service.in b/units/systemd-tmpfiles-setup.service.in
|
|
||||||
index 67c7d4a..6f98063 100644
|
|
||||||
--- a/units/systemd-tmpfiles-setup.service.in
|
|
||||||
+++ b/units/systemd-tmpfiles-setup.service.in
|
|
||||||
@@ -21,4 +21,4 @@ ConditionDirectoryNotEmpty=|/run/tmpfiles.d
|
|
||||||
[Service]
|
|
||||||
Type=oneshot
|
|
||||||
RemainAfterExit=yes
|
|
||||||
-ExecStart=@rootbindir@/systemd-tmpfiles --create --remove
|
|
||||||
+ExecStart=@rootbindir@/systemd-tmpfiles --create --remove --exclude-prefix=/dev
|
|
@ -1,81 +0,0 @@
|
|||||||
From 49d2e4a62d9c94c4c4aeeb6c4da4b226f9a638a7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Lennart Poettering <lennart@poettering.net>
|
|
||||||
Date: Fri, 26 Jul 2013 17:32:19 +0200
|
|
||||||
Subject: [PATCH] logind: update state file after generating the session fifo,
|
|
||||||
not before
|
|
||||||
|
|
||||||
https://bugs.freedesktop.org/show_bug.cgi?id=67273
|
|
||||||
---
|
|
||||||
src/login/logind-dbus.c | 7 ++++++-
|
|
||||||
src/login/logind-session-dbus.c | 4 ++++
|
|
||||||
src/machine/machined-dbus.c | 3 ++-
|
|
||||||
3 files changed, 12 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
|
|
||||||
index 39af637..b5e975a 100644
|
|
||||||
--- a/src/login/logind-dbus.c
|
|
||||||
+++ b/src/login/logind-dbus.c
|
|
||||||
@@ -643,6 +643,10 @@ static int bus_manager_create_session(Manager *m, DBusMessage *message) {
|
|
||||||
|
|
||||||
session->create_message = dbus_message_ref(message);
|
|
||||||
|
|
||||||
+ /* Now, let's wait until the slice unit and stuff got
|
|
||||||
+ * created. We send the reply back from
|
|
||||||
+ * session_send_create_reply().*/
|
|
||||||
+
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
fail:
|
|
||||||
@@ -2356,7 +2360,6 @@ DBusHandlerResult bus_message_filter(
|
|
||||||
if (streq_ptr(path, s->scope_job)) {
|
|
||||||
free(s->scope_job);
|
|
||||||
s->scope_job = NULL;
|
|
||||||
- session_save(s);
|
|
||||||
|
|
||||||
if (s->started) {
|
|
||||||
if (streq(result, "done"))
|
|
||||||
@@ -2366,6 +2369,8 @@ DBusHandlerResult bus_message_filter(
|
|
||||||
session_send_create_reply(s, &error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ session_save(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
session_add_to_gc_queue(s);
|
|
||||||
diff --git a/src/login/logind-session-dbus.c b/src/login/logind-session-dbus.c
|
|
||||||
index 62b9ffd..210f756 100644
|
|
||||||
--- a/src/login/logind-session-dbus.c
|
|
||||||
+++ b/src/login/logind-session-dbus.c
|
|
||||||
@@ -535,6 +535,10 @@ int session_send_create_reply(Session *s, DBusError *error) {
|
|
||||||
if (!s->create_message)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
+ /* This is called after the session scope was successfully
|
|
||||||
+ * created, and finishes where bus_manager_create_session()
|
|
||||||
+ * left off. */
|
|
||||||
+
|
|
||||||
if (error) {
|
|
||||||
DBusError buffer;
|
|
||||||
|
|
||||||
diff --git a/src/machine/machined-dbus.c b/src/machine/machined-dbus.c
|
|
||||||
index 1e8bc60..6c4d50b 100644
|
|
||||||
--- a/src/machine/machined-dbus.c
|
|
||||||
+++ b/src/machine/machined-dbus.c
|
|
||||||
@@ -543,7 +543,6 @@ DBusHandlerResult bus_message_filter(
|
|
||||||
if (streq_ptr(path, mm->scope_job)) {
|
|
||||||
free(mm->scope_job);
|
|
||||||
mm->scope_job = NULL;
|
|
||||||
- machine_save(mm);
|
|
||||||
|
|
||||||
if (mm->started) {
|
|
||||||
if (streq(result, "done"))
|
|
||||||
@@ -553,6 +552,8 @@ DBusHandlerResult bus_message_filter(
|
|
||||||
machine_send_create_reply(mm, &error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ machine_save(mm);
|
|
||||||
}
|
|
||||||
|
|
||||||
machine_add_to_gc_queue(mm);
|
|
@ -1,177 +0,0 @@
|
|||||||
From 8517d72d5e52fb99eedfe4667303d5883fd38698 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
|
||||||
Date: Fri, 19 Jul 2013 04:02:50 -0400
|
|
||||||
Subject: [PATCH] journalctl: use _COMM= match for scripts
|
|
||||||
|
|
||||||
In case of scripts, _EXE is set to the interpreter name, and
|
|
||||||
_COMM is set based on the file name. Add a match for _COMM,
|
|
||||||
and _EXE if the interpreter is not a link (e.g. for yum,
|
|
||||||
the interpreter is /usr/bin/python, but it is a link to
|
|
||||||
/usr/bin/python2, which in turn is a link to /usr/bin/python2.7,
|
|
||||||
at least on Fedora, so we end up with _EXE=/usr/bin/python2.7).
|
|
||||||
I don't think that such link chasing makes sense, because
|
|
||||||
the final _EXE name is more likely to change.
|
|
||||||
---
|
|
||||||
src/journal/journalctl.c | 30 ++++++++++++++++++++++++++----
|
|
||||||
src/shared/fileio.c | 29 +++++++++++++++++++++++++++++
|
|
||||||
src/shared/fileio.h | 2 ++
|
|
||||||
src/test/test-fileio.c | 35 +++++++++++++++++++++++++++++++++++
|
|
||||||
4 files changed, 92 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
|
|
||||||
index 083a597..dde2ed7 100644
|
|
||||||
--- a/src/journal/journalctl.c
|
|
||||||
+++ b/src/journal/journalctl.c
|
|
||||||
@@ -45,6 +45,7 @@
|
|
||||||
#include "logs-show.h"
|
|
||||||
#include "util.h"
|
|
||||||
#include "path-util.h"
|
|
||||||
+#include "fileio.h"
|
|
||||||
#include "build.h"
|
|
||||||
#include "pager.h"
|
|
||||||
#include "logs-show.h"
|
|
||||||
@@ -627,8 +628,9 @@ static int add_matches(sd_journal *j, char **args) {
|
|
||||||
if (streq(*i, "+"))
|
|
||||||
r = sd_journal_add_disjunction(j);
|
|
||||||
else if (path_is_absolute(*i)) {
|
|
||||||
- _cleanup_free_ char *p, *t = NULL;
|
|
||||||
+ _cleanup_free_ char *p, *t = NULL, *t2 = NULL;
|
|
||||||
const char *path;
|
|
||||||
+ _cleanup_free_ char *interpreter = NULL;
|
|
||||||
struct stat st;
|
|
||||||
|
|
||||||
p = canonicalize_file_name(*i);
|
|
||||||
@@ -639,9 +641,27 @@ static int add_matches(sd_journal *j, char **args) {
|
|
||||||
return -errno;
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (S_ISREG(st.st_mode) && (0111 & st.st_mode))
|
|
||||||
- t = strappend("_EXE=", path);
|
|
||||||
- else if (S_ISCHR(st.st_mode))
|
|
||||||
+ if (S_ISREG(st.st_mode) && (0111 & st.st_mode)) {
|
|
||||||
+ if (executable_is_script(path, &interpreter) > 0) {
|
|
||||||
+ _cleanup_free_ char *comm;
|
|
||||||
+
|
|
||||||
+ comm = strndup(path_get_file_name(path), 15);
|
|
||||||
+ if (!comm)
|
|
||||||
+ return log_oom();
|
|
||||||
+
|
|
||||||
+ t = strappend("_COMM=", comm);
|
|
||||||
+
|
|
||||||
+ /* Append _EXE only if the interpreter is not a link.
|
|
||||||
+ Otherwise it might be outdated often. */
|
|
||||||
+ if (lstat(interpreter, &st) == 0 &&
|
|
||||||
+ !S_ISLNK(st.st_mode)) {
|
|
||||||
+ t2 = strappend("_EXE=", interpreter);
|
|
||||||
+ if (!t2)
|
|
||||||
+ return log_oom();
|
|
||||||
+ }
|
|
||||||
+ } else
|
|
||||||
+ t = strappend("_EXE=", path);
|
|
||||||
+ } else if (S_ISCHR(st.st_mode))
|
|
||||||
asprintf(&t, "_KERNEL_DEVICE=c%u:%u", major(st.st_rdev), minor(st.st_rdev));
|
|
||||||
else if (S_ISBLK(st.st_mode))
|
|
||||||
asprintf(&t, "_KERNEL_DEVICE=b%u:%u", major(st.st_rdev), minor(st.st_rdev));
|
|
||||||
@@ -654,6 +674,8 @@ static int add_matches(sd_journal *j, char **args) {
|
|
||||||
return log_oom();
|
|
||||||
|
|
||||||
r = sd_journal_add_match(j, t, 0);
|
|
||||||
+ if (t2)
|
|
||||||
+ r = sd_journal_add_match(j, t2, 0);
|
|
||||||
} else
|
|
||||||
r = sd_journal_add_match(j, *i, 0);
|
|
||||||
|
|
||||||
diff --git a/src/shared/fileio.c b/src/shared/fileio.c
|
|
||||||
index dc13c9e..2b1dab8 100644
|
|
||||||
--- a/src/shared/fileio.c
|
|
||||||
+++ b/src/shared/fileio.c
|
|
||||||
@@ -593,3 +593,32 @@ int write_env_file(const char *fname, char **l) {
|
|
||||||
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+int executable_is_script(const char *path, char **interpreter) {
|
|
||||||
+ int r;
|
|
||||||
+ char _cleanup_free_ *line = NULL;
|
|
||||||
+ int len;
|
|
||||||
+ char *ans;
|
|
||||||
+
|
|
||||||
+ assert(path);
|
|
||||||
+
|
|
||||||
+ r = read_one_line_file(path, &line);
|
|
||||||
+ if (r < 0)
|
|
||||||
+ return r;
|
|
||||||
+
|
|
||||||
+ if (!startswith(line, "#!"))
|
|
||||||
+ return 0;
|
|
||||||
+
|
|
||||||
+ ans = strstrip(line + 2);
|
|
||||||
+ len = strcspn(ans, " \t");
|
|
||||||
+
|
|
||||||
+ if (len == 0)
|
|
||||||
+ return 0;
|
|
||||||
+
|
|
||||||
+ ans = strndup(ans, len);
|
|
||||||
+ if (!ans)
|
|
||||||
+ return -ENOMEM;
|
|
||||||
+
|
|
||||||
+ *interpreter = ans;
|
|
||||||
+ return 1;
|
|
||||||
+}
|
|
||||||
diff --git a/src/shared/fileio.h b/src/shared/fileio.h
|
|
||||||
index 0ca6878..a0aae28 100644
|
|
||||||
--- a/src/shared/fileio.h
|
|
||||||
+++ b/src/shared/fileio.h
|
|
||||||
@@ -35,3 +35,5 @@ int read_full_file(const char *fn, char **contents, size_t *size);
|
|
||||||
int parse_env_file(const char *fname, const char *separator, ...) _sentinel_;
|
|
||||||
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);
|
|
||||||
diff --git a/src/test/test-fileio.c b/src/test/test-fileio.c
|
|
||||||
index d56f7cc..b08e796 100644
|
|
||||||
--- a/src/test/test-fileio.c
|
|
||||||
+++ b/src/test/test-fileio.c
|
|
||||||
@@ -139,7 +139,42 @@ static void test_parse_env_file(void) {
|
|
||||||
unlink("/tmp/test-fileio");
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void test_executable_is_script(void) {
|
|
||||||
+ char t[] = "/tmp/test-executable-XXXXXX";
|
|
||||||
+ int fd, r;
|
|
||||||
+ FILE *f;
|
|
||||||
+ char *command;
|
|
||||||
+
|
|
||||||
+ fd = mkostemp(t, O_CLOEXEC);
|
|
||||||
+ assert_se(fd >= 0);
|
|
||||||
+
|
|
||||||
+ f = fdopen(fd, "w");
|
|
||||||
+ assert_se(f);
|
|
||||||
+
|
|
||||||
+ fputs("#! /bin/script -a -b \ngoo goo", f);
|
|
||||||
+ fflush(f);
|
|
||||||
+
|
|
||||||
+ r = executable_is_script(t, &command);
|
|
||||||
+ assert_se(r > 0);
|
|
||||||
+ assert_se(streq(command, "/bin/script"));
|
|
||||||
+ free(command);
|
|
||||||
+
|
|
||||||
+ r = executable_is_script("/bin/sh", &command);
|
|
||||||
+ assert_se(r == 0);
|
|
||||||
+
|
|
||||||
+ r = executable_is_script("/usr/bin/yum", &command);
|
|
||||||
+ assert_se(r > 0 || r == -ENOENT);
|
|
||||||
+ if (r > 0) {
|
|
||||||
+ assert_se(startswith(command, "/"));
|
|
||||||
+ free(command);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ fclose(f);
|
|
||||||
+ unlink(t);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
int main(int argc, char *argv[]) {
|
|
||||||
test_parse_env_file();
|
|
||||||
+ test_executable_is_script();
|
|
||||||
return 0;
|
|
||||||
}
|
|
@ -1,24 +0,0 @@
|
|||||||
From fb65edbfc52681e54b8af6fceab780497034d8e7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Brandon Philips <brandon@ifup.co>
|
|
||||||
Date: Sat, 27 Jul 2013 09:49:58 -0700
|
|
||||||
Subject: [PATCH] man: systemd.unit: fix volatile path
|
|
||||||
|
|
||||||
The volatile path was '/run/systemd/systemd' when it should be
|
|
||||||
'/run/systemd/system'. Fix.
|
|
||||||
---
|
|
||||||
man/systemd.unit.xml | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
|
|
||||||
index f6a0791..2f65ec6 100644
|
|
||||||
--- a/man/systemd.unit.xml
|
|
||||||
+++ b/man/systemd.unit.xml
|
|
||||||
@@ -285,7 +285,7 @@
|
|
||||||
<entry>Local configuration</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
- <entry><filename>/run/systemd/systemd</filename></entry>
|
|
||||||
+ <entry><filename>/run/systemd/system</filename></entry>
|
|
||||||
<entry>Volatile units</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
@ -1,63 +0,0 @@
|
|||||||
From f2ec9c58f792df949cc18581ccb0280d94d078b1 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Lennart Poettering <lennart@poettering.net>
|
|
||||||
Date: Wed, 24 Jul 2013 17:31:17 +0200
|
|
||||||
Subject: [PATCH] man: link up scope+slice units from systemd.unit(5)
|
|
||||||
|
|
||||||
---
|
|
||||||
man/systemd.unit.xml | 21 +++++++++++++++------
|
|
||||||
1 file changed, 15 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
|
|
||||||
index 2f65ec6..a577e91 100644
|
|
||||||
--- a/man/systemd.unit.xml
|
|
||||||
+++ b/man/systemd.unit.xml
|
|
||||||
@@ -60,7 +60,9 @@
|
|
||||||
<filename><replaceable>target</replaceable>.target</filename>,
|
|
||||||
<filename><replaceable>path</replaceable>.path</filename>,
|
|
||||||
<filename><replaceable>timer</replaceable>.timer</filename>,
|
|
||||||
- <filename><replaceable>snapshot</replaceable>.snapshot</filename></para>
|
|
||||||
+ <filename><replaceable>snapshot</replaceable>.snapshot</filename>,
|
|
||||||
+ <filename><replaceable>slice</replaceable>.slice</filename>,
|
|
||||||
+ <filename><replaceable>scope</replaceable>.scope</filename></para>
|
|
||||||
|
|
||||||
<para><literallayout><filename>/etc/systemd/system/*</filename>
|
|
||||||
<filename>/run/systemd/system/*</filename>
|
|
||||||
@@ -81,12 +83,15 @@
|
|
||||||
<para>A unit configuration file encodes information
|
|
||||||
about a service, a socket, a device, a mount point, an
|
|
||||||
automount point, a swap file or partition, a start-up
|
|
||||||
- target, a file system path, or a timer controlled and
|
|
||||||
- supervised by
|
|
||||||
- <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>. The
|
|
||||||
- syntax is inspired by <ulink
|
|
||||||
+ target, a watched file system path, a timer controlled
|
|
||||||
+ and supervised by
|
|
||||||
+ <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
|
|
||||||
+ a temporary system state snapshot, a resource
|
|
||||||
+ management slice or a group of externally created
|
|
||||||
+ processes. The syntax is inspired by <ulink
|
|
||||||
url="http://standards.freedesktop.org/desktop-entry-spec/latest/">XDG
|
|
||||||
- Desktop Entry Specification</ulink> <filename>.desktop</filename> files, which are in turn
|
|
||||||
+ Desktop Entry Specification</ulink>
|
|
||||||
+ <filename>.desktop</filename> files, which are in turn
|
|
||||||
inspired by Microsoft Windows
|
|
||||||
<filename>.ini</filename> files.</para>
|
|
||||||
|
|
||||||
@@ -110,6 +115,8 @@
|
|
||||||
<citerefentry><refentrytitle>systemd.path</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
|
|
||||||
<citerefentry><refentrytitle>systemd.timer</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
|
|
||||||
<citerefentry><refentrytitle>systemd.snapshot</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
|
|
||||||
+ <citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
|
|
||||||
+ <citerefentry><refentrytitle>systemd.scope</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>Unit files are loaded from a set of paths
|
|
||||||
@@ -1324,6 +1331,8 @@
|
|
||||||
<citerefentry><refentrytitle>systemd.path</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
|
|
||||||
<citerefentry><refentrytitle>systemd.timer</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
|
|
||||||
<citerefentry><refentrytitle>systemd.snapshot</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
|
|
||||||
+ <citerefentry><refentrytitle>systemd.scope</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
|
|
||||||
+ <citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
|
|
||||||
<citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
|
|
||||||
<citerefentry><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
|
|
||||||
<citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
|
|
@ -1,22 +0,0 @@
|
|||||||
From 5b09d0b9082447bea8cd0365a632305133e0277f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Lennart Poettering <lennart@poettering.net>
|
|
||||||
Date: Wed, 24 Jul 2013 17:31:37 +0200
|
|
||||||
Subject: [PATCH] man: there is no session mode, only user mode
|
|
||||||
|
|
||||||
---
|
|
||||||
man/systemd.unit.xml | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
|
|
||||||
index a577e91..1b71538 100644
|
|
||||||
--- a/man/systemd.unit.xml
|
|
||||||
+++ b/man/systemd.unit.xml
|
|
||||||
@@ -317,7 +317,7 @@
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<title>
|
|
||||||
- Load path when running in session mode (<option>--user</option>).
|
|
||||||
+ Load path when running in user mode (<option>--user</option>).
|
|
||||||
</title>
|
|
||||||
|
|
||||||
<tgroup cols='2'>
|
|
@ -1,37 +0,0 @@
|
|||||||
From 7ed8571a3dbfd768488c1db082e0bebb2c88fbcb Mon Sep 17 00:00:00 2001
|
|
||||||
From: George McCollister <george.mccollister@gmail.com>
|
|
||||||
Date: Thu, 1 Aug 2013 12:40:01 -0500
|
|
||||||
Subject: [PATCH] journal: fix hashmap leak in mmap-cache
|
|
||||||
|
|
||||||
hashmap_free() wasn't being called on m->contexts and m->fds resulting
|
|
||||||
in a leak.
|
|
||||||
|
|
||||||
To reproduce do:
|
|
||||||
while(1) {
|
|
||||||
sd_journal_open(&j, SD_JOURNAL_LOCAL_ONLY);
|
|
||||||
sd_journal_close(j);
|
|
||||||
}
|
|
||||||
|
|
||||||
Memory usage will increase until OOM.
|
|
||||||
---
|
|
||||||
src/journal/mmap-cache.c | 4 ++++
|
|
||||||
1 file changed, 4 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/src/journal/mmap-cache.c b/src/journal/mmap-cache.c
|
|
||||||
index 767f555..03b57be 100644
|
|
||||||
--- a/src/journal/mmap-cache.c
|
|
||||||
+++ b/src/journal/mmap-cache.c
|
|
||||||
@@ -307,9 +307,13 @@ static void mmap_cache_free(MMapCache *m) {
|
|
||||||
while ((c = hashmap_first(m->contexts)))
|
|
||||||
context_free(c);
|
|
||||||
|
|
||||||
+ hashmap_free(m->contexts);
|
|
||||||
+
|
|
||||||
while ((f = hashmap_first(m->fds)))
|
|
||||||
fd_free(f);
|
|
||||||
|
|
||||||
+ hashmap_free(m->fds);
|
|
||||||
+
|
|
||||||
while (m->unused)
|
|
||||||
window_free(m->unused);
|
|
||||||
|
|
@ -1,306 +0,0 @@
|
|||||||
From 2c8837069cfd00a0a440d229f2086899cf43cd62 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Daniel Schaal <farbing@web.de>
|
|
||||||
Date: Fri, 2 Aug 2013 07:59:02 +0200
|
|
||||||
Subject: [PATCH] systemd-delta: Only print colors when on a tty
|
|
||||||
|
|
||||||
This make systemd-delta follow the behaviour of systemctl
|
|
||||||
and journalctl.
|
|
||||||
|
|
||||||
https://bugs.freedesktop.org/show_bug.cgi?id=67656
|
|
||||||
|
|
||||||
[zj: unify color query methods between those three programs.]
|
|
||||||
---
|
|
||||||
src/delta/delta.c | 15 +++++---
|
|
||||||
src/journal/journalctl.c | 5 ++-
|
|
||||||
src/shared/util.h | 16 +++++++++
|
|
||||||
src/systemctl/systemctl.c | 88 +++++++++++++++++------------------------------
|
|
||||||
4 files changed, 60 insertions(+), 64 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/delta/delta.c b/src/delta/delta.c
|
|
||||||
index 49c2fc3..b3272d9 100644
|
|
||||||
--- a/src/delta/delta.c
|
|
||||||
+++ b/src/delta/delta.c
|
|
||||||
@@ -66,7 +66,8 @@ static int notify_override_masked(const char *top, const char *bottom) {
|
|
||||||
if (!(arg_flags & SHOW_MASKED))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
- printf(ANSI_HIGHLIGHT_RED_ON "[MASKED]" ANSI_HIGHLIGHT_OFF " %s → %s\n", top, bottom);
|
|
||||||
+ printf("%s%s%s %s → %s\n",
|
|
||||||
+ ansi_highlight_red(), "[MASKED]", ansi_highlight_off(), top, bottom);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -74,7 +75,8 @@ static int notify_override_equivalent(const char *top, const char *bottom) {
|
|
||||||
if (!(arg_flags & SHOW_EQUIVALENT))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
- printf(ANSI_HIGHLIGHT_GREEN_ON "[EQUIVALENT]" ANSI_HIGHLIGHT_OFF " %s → %s\n", top, bottom);
|
|
||||||
+ printf("%s%s%s %s → %s\n",
|
|
||||||
+ ansi_highlight_green(), "[EQUIVALENT]", ansi_highlight(), top, bottom);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -82,7 +84,8 @@ static int notify_override_redirected(const char *top, const char *bottom) {
|
|
||||||
if (!(arg_flags & SHOW_REDIRECTED))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
- printf(ANSI_HIGHLIGHT_ON "[REDIRECTED]" ANSI_HIGHLIGHT_OFF " %s → %s\n", top, bottom);
|
|
||||||
+ printf("%s%s%s %s → %s\n",
|
|
||||||
+ ansi_highlight(), "[REDIRECTED]", ansi_highlight_off(), top, bottom);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -90,7 +93,8 @@ static int notify_override_overridden(const char *top, const char *bottom) {
|
|
||||||
if (!(arg_flags & SHOW_OVERRIDDEN))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
- printf(ANSI_HIGHLIGHT_ON "[OVERRIDDEN]" ANSI_HIGHLIGHT_OFF " %s → %s\n", top, bottom);
|
|
||||||
+ printf("%s%s%s %s → %s\n",
|
|
||||||
+ ansi_highlight(), "[OVERRIDDEN]", ansi_highlight_off(), top, bottom);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -98,7 +102,8 @@ static int notify_override_extended(const char *top, const char *bottom) {
|
|
||||||
if (!(arg_flags & SHOW_EXTENDED))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
- printf(ANSI_HIGHLIGHT_ON "[EXTENDED]" ANSI_HIGHLIGHT_OFF " %s → %s\n", top, bottom);
|
|
||||||
+ printf("%s%s%s %s → %s\n",
|
|
||||||
+ ansi_highlight(), "[EXTENDED]", ansi_highlight_off(), top, bottom);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
|
|
||||||
index dde2ed7..feea6bf 100644
|
|
||||||
--- a/src/journal/journalctl.c
|
|
||||||
+++ b/src/journal/journalctl.c
|
|
||||||
@@ -1605,14 +1605,13 @@ int main(int argc, char *argv[]) {
|
|
||||||
|
|
||||||
if (!arg_merge) {
|
|
||||||
sd_id128_t boot_id;
|
|
||||||
- const char *color_on = on_tty() ? ANSI_HIGHLIGHT_ON : "",
|
|
||||||
- *color_off = on_tty() ? ANSI_HIGHLIGHT_OFF : "";
|
|
||||||
|
|
||||||
r = sd_journal_get_monotonic_usec(j, NULL, &boot_id);
|
|
||||||
if (r >= 0) {
|
|
||||||
if (previous_boot_id_valid &&
|
|
||||||
!sd_id128_equal(boot_id, previous_boot_id))
|
|
||||||
- printf("%s-- Reboot --%s\n", color_on, color_off);
|
|
||||||
+ printf("%s-- Reboot --%s\n",
|
|
||||||
+ ansi_highlight(), ansi_highlight_off());
|
|
||||||
|
|
||||||
previous_boot_id = boot_id;
|
|
||||||
previous_boot_id_valid = true;
|
|
||||||
diff --git a/src/shared/util.h b/src/shared/util.h
|
|
||||||
index ac999c6..3be692e 100644
|
|
||||||
--- a/src/shared/util.h
|
|
||||||
+++ b/src/shared/util.h
|
|
||||||
@@ -374,6 +374,22 @@ void columns_lines_cache_reset(int _unused_ signum);
|
|
||||||
|
|
||||||
bool on_tty(void);
|
|
||||||
|
|
||||||
+static inline const char *ansi_highlight(void) {
|
|
||||||
+ return on_tty() ? ANSI_HIGHLIGHT_ON : "";
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static inline const char *ansi_highlight_red(void) {
|
|
||||||
+ return on_tty() ? ANSI_HIGHLIGHT_RED_ON : "";
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static inline const char *ansi_highlight_green(void) {
|
|
||||||
+ return on_tty() ? ANSI_HIGHLIGHT_GREEN_ON : "";
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static inline const char *ansi_highlight_off(void) {
|
|
||||||
+ return on_tty() ? ANSI_HIGHLIGHT_OFF : "";
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
int running_in_chroot(void);
|
|
||||||
|
|
||||||
char *ellipsize(const char *s, size_t length, unsigned percent);
|
|
||||||
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
|
|
||||||
index 9f47b2c..aca033b 100644
|
|
||||||
--- a/src/systemctl/systemctl.c
|
|
||||||
+++ b/src/systemctl/systemctl.c
|
|
||||||
@@ -175,30 +175,6 @@ static void polkit_agent_open_if_enabled(void) {
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
-static const char *ansi_highlight(bool b) {
|
|
||||||
-
|
|
||||||
- if (!on_tty())
|
|
||||||
- return "";
|
|
||||||
-
|
|
||||||
- return b ? ANSI_HIGHLIGHT_ON : ANSI_HIGHLIGHT_OFF;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-static const char *ansi_highlight_red(bool b) {
|
|
||||||
-
|
|
||||||
- if (!on_tty())
|
|
||||||
- return "";
|
|
||||||
-
|
|
||||||
- return b ? ANSI_HIGHLIGHT_RED_ON : ANSI_HIGHLIGHT_OFF;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-static const char *ansi_highlight_green(bool b) {
|
|
||||||
-
|
|
||||||
- if (!on_tty())
|
|
||||||
- return "";
|
|
||||||
-
|
|
||||||
- return b ? ANSI_HIGHLIGHT_GREEN_ON : ANSI_HIGHLIGHT_OFF;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
static int translate_bus_error_to_exit_status(int r, const DBusError *error) {
|
|
||||||
assert(error);
|
|
||||||
|
|
||||||
@@ -381,14 +357,14 @@ static void output_units_list(const struct unit_info *unit_infos, unsigned c) {
|
|
||||||
|
|
||||||
if (streq(u->load_state, "error") ||
|
|
||||||
streq(u->load_state, "not-found")) {
|
|
||||||
- on_loaded = on = ansi_highlight_red(true);
|
|
||||||
- off_loaded = off = ansi_highlight_red(false);
|
|
||||||
+ on_loaded = on = ansi_highlight_red();
|
|
||||||
+ off_loaded = off = ansi_highlight_off();
|
|
||||||
} else
|
|
||||||
on_loaded = off_loaded = "";
|
|
||||||
|
|
||||||
if (streq(u->active_state, "failed")) {
|
|
||||||
- on_active = on = ansi_highlight_red(true);
|
|
||||||
- off_active = off = ansi_highlight_red(false);
|
|
||||||
+ on_active = on = ansi_highlight_red();
|
|
||||||
+ off_active = off = ansi_highlight_off();
|
|
||||||
} else
|
|
||||||
on_active = off_active = "";
|
|
||||||
|
|
||||||
@@ -416,11 +392,11 @@ static void output_units_list(const struct unit_info *unit_infos, unsigned c) {
|
|
||||||
if (job_count)
|
|
||||||
printf("JOB = Pending job for the unit.\n");
|
|
||||||
puts("");
|
|
||||||
- on = ansi_highlight(true);
|
|
||||||
- off = ansi_highlight(false);
|
|
||||||
+ on = ansi_highlight();
|
|
||||||
+ off = ansi_highlight_off();
|
|
||||||
} else {
|
|
||||||
- on = ansi_highlight_red(true);
|
|
||||||
- off = ansi_highlight_red(false);
|
|
||||||
+ on = ansi_highlight_red();
|
|
||||||
+ off = ansi_highlight_off();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (arg_all)
|
|
||||||
@@ -683,13 +659,13 @@ static int output_sockets_list(struct socket_info *socket_infos, unsigned cs) {
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
- on = ansi_highlight(true);
|
|
||||||
- off = ansi_highlight(false);
|
|
||||||
+ on = ansi_highlight();
|
|
||||||
+ off = ansi_highlight_off();
|
|
||||||
if (!arg_no_legend)
|
|
||||||
printf("\n");
|
|
||||||
} else {
|
|
||||||
- on = ansi_highlight_red(true);
|
|
||||||
- off = ansi_highlight_red(false);
|
|
||||||
+ on = ansi_highlight_red();
|
|
||||||
+ off = ansi_highlight_off();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!arg_no_legend) {
|
|
||||||
@@ -838,11 +814,11 @@ static void output_unit_file_list(const UnitFileList *units, unsigned c) {
|
|
||||||
u->state == UNIT_FILE_MASKED_RUNTIME ||
|
|
||||||
u->state == UNIT_FILE_DISABLED ||
|
|
||||||
u->state == UNIT_FILE_INVALID) {
|
|
||||||
- on = ansi_highlight_red(true);
|
|
||||||
- off = ansi_highlight_red(false);
|
|
||||||
+ on = ansi_highlight_red();
|
|
||||||
+ off = ansi_highlight_off();
|
|
||||||
} else if (u->state == UNIT_FILE_ENABLED) {
|
|
||||||
- on = ansi_highlight_green(true);
|
|
||||||
- off = ansi_highlight_green(false);
|
|
||||||
+ on = ansi_highlight_green();
|
|
||||||
+ off = ansi_highlight_off();
|
|
||||||
} else
|
|
||||||
on = off = "";
|
|
||||||
|
|
||||||
@@ -1250,8 +1226,8 @@ static void list_jobs_print(struct job_info* jobs, size_t n) {
|
|
||||||
assert(n == 0 || jobs);
|
|
||||||
|
|
||||||
if (n == 0) {
|
|
||||||
- on = ansi_highlight_green(true);
|
|
||||||
- off = ansi_highlight_green(false);
|
|
||||||
+ on = ansi_highlight_green();
|
|
||||||
+ off = ansi_highlight_off();
|
|
||||||
|
|
||||||
printf("%sNo jobs running.%s\n", on, off);
|
|
||||||
return;
|
|
||||||
@@ -1287,8 +1263,8 @@ static void list_jobs_print(struct job_info* jobs, size_t n) {
|
|
||||||
_cleanup_free_ char *e = NULL;
|
|
||||||
|
|
||||||
if (streq(j->state, "running")) {
|
|
||||||
- on = ansi_highlight(true);
|
|
||||||
- off = ansi_highlight(false);
|
|
||||||
+ on = ansi_highlight();
|
|
||||||
+ off = ansi_highlight_off();
|
|
||||||
} else
|
|
||||||
on = off = "";
|
|
||||||
|
|
||||||
@@ -1301,8 +1277,8 @@ static void list_jobs_print(struct job_info* jobs, size_t n) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- on = ansi_highlight(true);
|
|
||||||
- off = ansi_highlight(false);
|
|
||||||
+ on = ansi_highlight();
|
|
||||||
+ off = ansi_highlight_off();
|
|
||||||
|
|
||||||
if (on_tty())
|
|
||||||
printf("\n%s%zu jobs listed%s.\n", on, n, off);
|
|
||||||
@@ -2588,8 +2564,8 @@ static void print_status_info(UnitStatusInfo *i) {
|
|
||||||
printf(" Follow: unit currently follows state of %s\n", i->following);
|
|
||||||
|
|
||||||
if (streq_ptr(i->load_state, "error")) {
|
|
||||||
- on = ansi_highlight_red(true);
|
|
||||||
- off = ansi_highlight_red(false);
|
|
||||||
+ on = ansi_highlight_red();
|
|
||||||
+ off = ansi_highlight_off();
|
|
||||||
} else
|
|
||||||
on = off = "";
|
|
||||||
|
|
||||||
@@ -2639,11 +2615,11 @@ static void print_status_info(UnitStatusInfo *i) {
|
|
||||||
ss = streq_ptr(i->active_state, i->sub_state) ? NULL : i->sub_state;
|
|
||||||
|
|
||||||
if (streq_ptr(i->active_state, "failed")) {
|
|
||||||
- on = ansi_highlight_red(true);
|
|
||||||
- off = ansi_highlight_red(false);
|
|
||||||
+ on = ansi_highlight_red();
|
|
||||||
+ off = ansi_highlight_off();
|
|
||||||
} else if (streq_ptr(i->active_state, "active") || streq_ptr(i->active_state, "reloading")) {
|
|
||||||
- on = ansi_highlight_green(true);
|
|
||||||
- off = ansi_highlight_green(false);
|
|
||||||
+ on = ansi_highlight_green();
|
|
||||||
+ off = ansi_highlight_off();
|
|
||||||
} else
|
|
||||||
on = off = "";
|
|
||||||
|
|
||||||
@@ -2718,8 +2694,8 @@ static void print_status_info(UnitStatusInfo *i) {
|
|
||||||
|
|
||||||
good = is_clean_exit_lsb(p->code, p->status, NULL);
|
|
||||||
if (!good) {
|
|
||||||
- on = ansi_highlight_red(true);
|
|
||||||
- off = ansi_highlight_red(false);
|
|
||||||
+ on = ansi_highlight_red();
|
|
||||||
+ off = ansi_highlight_off();
|
|
||||||
} else
|
|
||||||
on = off = "";
|
|
||||||
|
|
||||||
@@ -2838,8 +2814,8 @@ static void print_status_info(UnitStatusInfo *i) {
|
|
||||||
|
|
||||||
if (i->need_daemon_reload)
|
|
||||||
printf("\n%sWarning:%s Unit file changed on disk, 'systemctl %sdaemon-reload' recommended.\n",
|
|
||||||
- ansi_highlight_red(true),
|
|
||||||
- ansi_highlight_red(false),
|
|
||||||
+ ansi_highlight_red(),
|
|
||||||
+ ansi_highlight_off(),
|
|
||||||
arg_scope == UNIT_FILE_SYSTEM ? "" : "--user ");
|
|
||||||
}
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
|||||||
From 2c853443d3518f638b58f30cd866ca2d4c401281 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
|
||||||
Date: Tue, 6 Aug 2013 21:30:34 -0400
|
|
||||||
Subject: [PATCH] systemd: fix segv in snapshot creation
|
|
||||||
|
|
||||||
https://bugs.freedesktop.org/show_bug.cgi?id=67848
|
|
||||||
---
|
|
||||||
src/core/snapshot.c | 4 +++-
|
|
||||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/core/snapshot.c b/src/core/snapshot.c
|
|
||||||
index 1423854..d11239d 100644
|
|
||||||
--- a/src/core/snapshot.c
|
|
||||||
+++ b/src/core/snapshot.c
|
|
||||||
@@ -221,8 +221,10 @@ int snapshot_create(Manager *m, const char *name, bool cleanup, DBusError *e, Sn
|
|
||||||
if (asprintf(&n, "snapshot-%u.snapshot", ++ m->n_snapshots) < 0)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
- if (!manager_get_unit(m, n))
|
|
||||||
+ if (!manager_get_unit(m, n)) {
|
|
||||||
+ name = n;
|
|
||||||
break;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
free(n);
|
|
||||||
n = NULL;
|
|
@ -1,32 +0,0 @@
|
|||||||
From a6dfef02531465a318de68ac2cd3343250b9ef3a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Kay Sievers <kay@vrfy.org>
|
|
||||||
Date: Wed, 7 Aug 2013 13:10:01 +0200
|
|
||||||
Subject: [PATCH] udev: hwdb - try reading modalias for usb before falling back
|
|
||||||
to the composed one
|
|
||||||
|
|
||||||
---
|
|
||||||
src/udev/udev-builtin-hwdb.c | 7 +++----
|
|
||||||
1 file changed, 3 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/udev/udev-builtin-hwdb.c b/src/udev/udev-builtin-hwdb.c
|
|
||||||
index f1c0ca9..d6aa96b 100644
|
|
||||||
--- a/src/udev/udev-builtin-hwdb.c
|
|
||||||
+++ b/src/udev/udev-builtin-hwdb.c
|
|
||||||
@@ -102,14 +102,13 @@ static int udev_builtin_hwdb_search(struct udev_device *dev, struct udev_device
|
|
||||||
if (subsystem && !streq(dsubsys, subsystem))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
+ modalias = udev_device_get_property_value(d, "MODALIAS");
|
|
||||||
+
|
|
||||||
/* the usb_device does not have a modalias, compose one */
|
|
||||||
- if (streq(dsubsys, "usb"))
|
|
||||||
+ if (!modalias && streq(dsubsys, "usb"))
|
|
||||||
modalias = modalias_usb(d, s, sizeof(s));
|
|
||||||
|
|
||||||
if (!modalias)
|
|
||||||
- modalias = udev_device_get_property_value(d, "MODALIAS");
|
|
||||||
-
|
|
||||||
- if (!modalias)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
n = udev_builtin_hwdb_lookup(dev, prefix, modalias, filter, test);
|
|
@ -1,29 +0,0 @@
|
|||||||
From 0e842bc91f0a60d06aecf23d5881773d5c66af59 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tom Gundersen <teg@jklm.no>
|
|
||||||
Date: Thu, 8 Aug 2013 21:44:02 +0200
|
|
||||||
Subject: [PATCH] udevd: respect the log-level set in /etc/udev/udev.conf
|
|
||||||
|
|
||||||
A regression introduced when we moved to systemd's logging is that the only
|
|
||||||
way to adjust the log-level of the udev daemon is via the env var, kernel
|
|
||||||
commandline or the commandline.
|
|
||||||
|
|
||||||
This reintroduces support for specifying this in the configuration file.
|
|
||||||
---
|
|
||||||
src/udev/udevd.c | 3 +++
|
|
||||||
1 file changed, 3 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/src/udev/udevd.c b/src/udev/udevd.c
|
|
||||||
index 45ec3d6..7c6c5d6 100644
|
|
||||||
--- a/src/udev/udevd.c
|
|
||||||
+++ b/src/udev/udevd.c
|
|
||||||
@@ -923,7 +923,10 @@ int main(int argc, char *argv[])
|
|
||||||
log_set_target(LOG_TARGET_AUTO);
|
|
||||||
log_parse_environment();
|
|
||||||
log_open();
|
|
||||||
+
|
|
||||||
udev_set_log_fn(udev, udev_main_log);
|
|
||||||
+ log_set_max_level(udev_get_log_priority(udev));
|
|
||||||
+
|
|
||||||
log_debug("version %s\n", VERSION);
|
|
||||||
label_init("/dev");
|
|
||||||
|
|
@ -1,45 +0,0 @@
|
|||||||
From 03c6b09de9b0d2b96657bc4b2b6d59b8425e3d12 Mon Sep 17 00:00:00 2001
|
|
||||||
From: WANG Chao <chaowang@redhat.com>
|
|
||||||
Date: Thu, 8 Aug 2013 15:18:11 +0800
|
|
||||||
Subject: [PATCH] fstab-generator: respect noauto/nofail when adding sysroot
|
|
||||||
mount
|
|
||||||
|
|
||||||
Currently we don't respect noauto/nofail root mount options (from
|
|
||||||
rootflags kernel cmdline). We should map these two flags to the
|
|
||||||
corresponding boolean variable noauto and nofail when calling
|
|
||||||
add_mount().
|
|
||||||
---
|
|
||||||
src/fstab-generator/fstab-generator.c | 6 +++++-
|
|
||||||
1 file changed, 5 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
|
|
||||||
index c17299f..87b17cd 100644
|
|
||||||
--- a/src/fstab-generator/fstab-generator.c
|
|
||||||
+++ b/src/fstab-generator/fstab-generator.c
|
|
||||||
@@ -492,6 +492,7 @@ static int parse_new_root_from_proc_cmdline(void) {
|
|
||||||
char *w, *state;
|
|
||||||
int r;
|
|
||||||
size_t l;
|
|
||||||
+ bool noauto, nofail;
|
|
||||||
|
|
||||||
r = read_one_line_file("/proc/cmdline", &line);
|
|
||||||
if (r < 0) {
|
|
||||||
@@ -547,6 +548,9 @@ static int parse_new_root_from_proc_cmdline(void) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+ noauto = !!strstr(opts, "noauto");
|
|
||||||
+ nofail = !!strstr(opts, "nofail");
|
|
||||||
+
|
|
||||||
if (!what) {
|
|
||||||
log_debug("Could not find a root= entry on the kernel commandline.");
|
|
||||||
return 0;
|
|
||||||
@@ -558,7 +562,7 @@ static int parse_new_root_from_proc_cmdline(void) {
|
|
||||||
}
|
|
||||||
|
|
||||||
log_debug("Found entry what=%s where=/sysroot type=%s", what, type);
|
|
||||||
- r = add_mount(what, "/sysroot", type, opts, 0, false, false, false,
|
|
||||||
+ r = add_mount(what, "/sysroot", type, opts, 0, noauto, nofail, false,
|
|
||||||
false, NULL, NULL, NULL, SPECIAL_INITRD_ROOT_FS_TARGET, "/proc/cmdline");
|
|
||||||
|
|
||||||
return (r < 0) ? r : 0;
|
|
@ -1,43 +0,0 @@
|
|||||||
From 7372290556ee2df52a0dbd87dc2af6bd610198de Mon Sep 17 00:00:00 2001
|
|
||||||
From: Lennart Poettering <lennart@poettering.net>
|
|
||||||
Date: Fri, 9 Aug 2013 16:40:57 +0200
|
|
||||||
Subject: [PATCH] service: always unwatch PIDs before forgetting old ones
|
|
||||||
|
|
||||||
---
|
|
||||||
src/core/service.c | 9 +++++----
|
|
||||||
1 file changed, 5 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/core/service.c b/src/core/service.c
|
|
||||||
index b98f11a..df49ce1 100644
|
|
||||||
--- a/src/core/service.c
|
|
||||||
+++ b/src/core/service.c
|
|
||||||
@@ -191,6 +191,8 @@ static int service_set_main_pid(Service *s, pid_t pid) {
|
|
||||||
if (pid == getpid())
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
+ service_unwatch_main_pid(s);
|
|
||||||
+
|
|
||||||
s->main_pid = pid;
|
|
||||||
s->main_pid_known = true;
|
|
||||||
|
|
||||||
@@ -2158,10 +2160,8 @@ static void service_enter_start(Service *s) {
|
|
||||||
assert(s->exec_command[SERVICE_EXEC_START]);
|
|
||||||
assert(!s->exec_command[SERVICE_EXEC_START]->command_next || s->type == SERVICE_ONESHOT);
|
|
||||||
|
|
||||||
- if (s->type == SERVICE_FORKING)
|
|
||||||
- service_unwatch_control_pid(s);
|
|
||||||
- else
|
|
||||||
- service_unwatch_main_pid(s);
|
|
||||||
+ service_unwatch_control_pid(s);
|
|
||||||
+ service_unwatch_main_pid(s);
|
|
||||||
|
|
||||||
/* We want to ensure that nobody leaks processes from
|
|
||||||
* START_PRE here, so let's go on a killing spree, People
|
|
||||||
@@ -3751,6 +3751,7 @@ static void service_reset_failed(Unit *u) {
|
|
||||||
|
|
||||||
static int service_kill(Unit *u, KillWho who, int signo, DBusError *error) {
|
|
||||||
Service *s = SERVICE(u);
|
|
||||||
+
|
|
||||||
return unit_kill_common(u, who, signo, s->main_pid, s->control_pid, error);
|
|
||||||
}
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
|||||||
From cdeb74502d64ea47d1751afc2de82d51ef192c88 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
|
||||||
Date: Mon, 19 Aug 2013 16:59:42 -0400
|
|
||||||
Subject: [PATCH] units: disable kmod-static-nodes.service in containers
|
|
||||||
|
|
||||||
Fixes https://bugzilla.redhat.com/show_bug.cgi?id=998122.
|
|
||||||
|
|
||||||
Note: upstream kmod has a patch [1] to exit with a warning if
|
|
||||||
modules.devname is missing. We could use new %v specifier to make this
|
|
||||||
service conditional on the existence of this file, but this could
|
|
||||||
mask a kernel installation error, hence we should let kmod run
|
|
||||||
even if the file doesn't exist.
|
|
||||||
|
|
||||||
[1] http://git.kernel.org/cgit/utils/kernel/kmod/kmod.git/commit/?id=ae17710117
|
|
||||||
---
|
|
||||||
units/kmod-static-nodes.service.in | 1 +
|
|
||||||
1 file changed, 1 insertion(+)
|
|
||||||
|
|
||||||
diff --git a/units/kmod-static-nodes.service.in b/units/kmod-static-nodes.service.in
|
|
||||||
index cdfc6e5..98664ea 100644
|
|
||||||
--- a/units/kmod-static-nodes.service.in
|
|
||||||
+++ b/units/kmod-static-nodes.service.in
|
|
||||||
@@ -9,6 +9,7 @@
|
|
||||||
Description=Create list of required static device nodes for the current kernel
|
|
||||||
DefaultDependencies=no
|
|
||||||
Before=sysinit.target systemd-tmpfiles-setup-dev.service
|
|
||||||
+ConditionVirtualization=!container
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=oneshot
|
|
@ -1,31 +0,0 @@
|
|||||||
From 035b40d564a47fb53a78f08a7bbf218a6920061d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Khem Raj <raj.khem@gmail.com>
|
|
||||||
Date: Wed, 21 Aug 2013 20:35:44 -0700
|
|
||||||
Subject: [PATCH] use CAP_MKNOD ConditionCapability
|
|
||||||
|
|
||||||
Fixes errors seen when booting VMs on QEMU like
|
|
||||||
|
|
||||||
systemd[1]: kmod-static-nodes.service: main process exited, code=exited, status=203/EXEC
|
|
||||||
systemd[1]: Failed to start Create list of required static device nodes for the current kernel.
|
|
||||||
systemd[1]: Unit kmod-static-nodes.service entered failed state.
|
|
||||||
|
|
||||||
Make sure that mknod capability is available
|
|
||||||
|
|
||||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
|
||||||
---
|
|
||||||
units/kmod-static-nodes.service.in | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/units/kmod-static-nodes.service.in b/units/kmod-static-nodes.service.in
|
|
||||||
index 98664ea..d8a8420 100644
|
|
||||||
--- a/units/kmod-static-nodes.service.in
|
|
||||||
+++ b/units/kmod-static-nodes.service.in
|
|
||||||
@@ -9,7 +9,7 @@
|
|
||||||
Description=Create list of required static device nodes for the current kernel
|
|
||||||
DefaultDependencies=no
|
|
||||||
Before=sysinit.target systemd-tmpfiles-setup-dev.service
|
|
||||||
-ConditionVirtualization=!container
|
|
||||||
+ConditionCapability=CAP_MKNOD
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=oneshot
|
|
@ -1,25 +0,0 @@
|
|||||||
From 81e19a8767e4347df71a2874e724e50b43ee930d Mon Sep 17 00:00:00 2001
|
|
||||||
From: WANG Chao <chaowang@redhat.com>
|
|
||||||
Date: Fri, 9 Aug 2013 17:01:50 +0800
|
|
||||||
Subject: [PATCH] fstab-generator: read rd.fstab=on/off switch correctly
|
|
||||||
|
|
||||||
---
|
|
||||||
src/fstab-generator/fstab-generator.c | 4 ++--
|
|
||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
|
|
||||||
index 87b17cd..5a2074e 100644
|
|
||||||
--- a/src/fstab-generator/fstab-generator.c
|
|
||||||
+++ b/src/fstab-generator/fstab-generator.c
|
|
||||||
@@ -600,9 +600,9 @@ static int parse_proc_cmdline(void) {
|
|
||||||
} else if (startswith(word, "rd.fstab=")) {
|
|
||||||
|
|
||||||
if (in_initrd()) {
|
|
||||||
- r = parse_boolean(word + 6);
|
|
||||||
+ r = parse_boolean(word + 9);
|
|
||||||
if (r < 0)
|
|
||||||
- log_warning("Failed to parse fstab switch %s. Ignoring.", word + 6);
|
|
||||||
+ log_warning("Failed to parse fstab switch %s. Ignoring.", word + 9);
|
|
||||||
else
|
|
||||||
arg_enabled = r;
|
|
||||||
}
|
|
@ -1,298 +0,0 @@
|
|||||||
From 032e57b4e9a90dc11352f1d6640ee246e3f32fb7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Lennart Poettering <lennart@poettering.net>
|
|
||||||
Date: Wed, 14 Aug 2013 01:57:02 +0200
|
|
||||||
Subject: [PATCH] backlight: add minimal tool to save/restore screen brightness
|
|
||||||
across reboots
|
|
||||||
|
|
||||||
As many laptops don't save/restore screen brightness across reboots,
|
|
||||||
let's do this in systemd with a minimal tool, that restores the
|
|
||||||
brightness as early as possible, and saves it as late as possible. This
|
|
||||||
will cover consoles and graphical logins, but graphical desktops should
|
|
||||||
do their own per-user stuff probably.
|
|
||||||
|
|
||||||
This only touches firmware brightness controls for now.
|
|
||||||
---
|
|
||||||
.gitignore | 1 +
|
|
||||||
Makefile.am | 20 ++++++
|
|
||||||
configure.ac | 9 +++
|
|
||||||
rules/99-systemd.rules.in | 4 ++
|
|
||||||
rules/Makefile | 1 +
|
|
||||||
src/backlight/Makefile | 1 +
|
|
||||||
src/backlight/backlight.c | 126 ++++++++++++++++++++++++++++++++++++
|
|
||||||
units/.gitignore | 1 +
|
|
||||||
units/systemd-backlight@.service.in | 21 ++++++
|
|
||||||
9 files changed, 184 insertions(+)
|
|
||||||
create mode 120000 rules/Makefile
|
|
||||||
create mode 120000 src/backlight/Makefile
|
|
||||||
create mode 100644 src/backlight/backlight.c
|
|
||||||
create mode 100644 units/systemd-backlight@.service.in
|
|
||||||
|
|
||||||
diff --git a/.gitignore b/.gitignore
|
|
||||||
index bdf9d4a..379a3c1 100644
|
|
||||||
--- a/.gitignore
|
|
||||||
+++ b/.gitignore
|
|
||||||
@@ -29,6 +29,7 @@
|
|
||||||
/systemd-ac-power
|
|
||||||
/systemd-analyze
|
|
||||||
/systemd-ask-password
|
|
||||||
+/systemd-backlight
|
|
||||||
/systemd-binfmt
|
|
||||||
/systemd-bootchart
|
|
||||||
/systemd-cat
|
|
||||||
diff --git a/Makefile.am b/Makefile.am
|
|
||||||
index 7933de6..0059b1d 100644
|
|
||||||
--- a/Makefile.am
|
|
||||||
+++ b/Makefile.am
|
|
||||||
@@ -3267,6 +3267,26 @@ EXTRA_DIST += \
|
|
||||||
units/systemd-random-seed.service.in
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
|
||||||
+if ENABLE_BACKLIGHT
|
|
||||||
+rootlibexec_PROGRAMS += \
|
|
||||||
+ systemd-backlight
|
|
||||||
+
|
|
||||||
+nodist_systemunit_DATA += \
|
|
||||||
+ units/systemd-backlight@.service
|
|
||||||
+
|
|
||||||
+systemd_backlight_SOURCES = \
|
|
||||||
+ src/backlight/backlight.c
|
|
||||||
+
|
|
||||||
+systemd_backlight_LDADD = \
|
|
||||||
+ libsystemd-label.la \
|
|
||||||
+ libsystemd-shared.la \
|
|
||||||
+ libudev-private.la
|
|
||||||
+endif
|
|
||||||
+
|
|
||||||
+EXTRA_DIST += \
|
|
||||||
+ units/systemd-backlight@.service.in
|
|
||||||
+
|
|
||||||
+# ------------------------------------------------------------------------------
|
|
||||||
if HAVE_LIBCRYPTSETUP
|
|
||||||
rootlibexec_PROGRAMS += \
|
|
||||||
systemd-cryptsetup
|
|
||||||
diff --git a/configure.ac b/configure.ac
|
|
||||||
index 759073a..f7237bd 100644
|
|
||||||
--- a/configure.ac
|
|
||||||
+++ b/configure.ac
|
|
||||||
@@ -667,6 +667,14 @@ fi
|
|
||||||
AM_CONDITIONAL(ENABLE_RANDOMSEED, [test "$have_randomseed" = "yes"])
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
|
||||||
+have_backlight=no
|
|
||||||
+AC_ARG_ENABLE(backlight, AS_HELP_STRING([--disable-backlight], [disable backlight tools]))
|
|
||||||
+if test "x$enable_backlight" != "xno"; then
|
|
||||||
+ have_backlight=yes
|
|
||||||
+fi
|
|
||||||
+AM_CONDITIONAL(ENABLE_BACKLIGHT, [test "$have_backlight" = "yes"])
|
|
||||||
+
|
|
||||||
+# ------------------------------------------------------------------------------
|
|
||||||
have_logind=no
|
|
||||||
AC_ARG_ENABLE(logind, AS_HELP_STRING([--disable-logind], [disable login daemon]))
|
|
||||||
if test "x$enable_logind" != "xno"; then
|
|
||||||
@@ -992,6 +1000,7 @@ AC_MSG_RESULT([
|
|
||||||
quotacheck: ${have_quotacheck}
|
|
||||||
tmpfiles: ${have_tmpfiles}
|
|
||||||
randomseed: ${have_randomseed}
|
|
||||||
+ backlight: ${have_backlight}
|
|
||||||
logind: ${have_logind}
|
|
||||||
machined: ${have_machined}
|
|
||||||
hostnamed: ${have_hostnamed}
|
|
||||||
diff --git a/rules/99-systemd.rules.in b/rules/99-systemd.rules.in
|
|
||||||
index e9b2da7..ac4bc86 100644
|
|
||||||
--- a/rules/99-systemd.rules.in
|
|
||||||
+++ b/rules/99-systemd.rules.in
|
|
||||||
@@ -51,6 +51,10 @@ SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_USB_INTERFACES}=="*:0701??:
|
|
||||||
|
|
||||||
ACTION=="add", SUBSYSTEM=="net", KERNEL!="lo", RUN+="@rootlibexecdir@/systemd-sysctl --prefix=/proc/sys/net/ipv4/conf/$name --prefix=/proc/sys/net/ipv4/neigh/$name --prefix=/proc/sys/net/ipv6/conf/$name --prefix=/proc/sys/net/ipv6/neigh/$name"
|
|
||||||
|
|
||||||
+# Pull in backlight save/restore for all firmware backlight devices
|
|
||||||
+
|
|
||||||
+ACTION=="add", SUBSYSTEM=="backlight", ATTR{type}=="firmware", TAG+="systemd", ENV{SYSTEMD_WANTS}+="systemd-backlight@sys%p.service"
|
|
||||||
+
|
|
||||||
# Asynchronously mount file systems implemented by these modules as
|
|
||||||
# soon as they are loaded.
|
|
||||||
|
|
||||||
diff --git a/rules/Makefile b/rules/Makefile
|
|
||||||
new file mode 120000
|
|
||||||
index 0000000..bd10475
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/rules/Makefile
|
|
||||||
@@ -0,0 +1 @@
|
|
||||||
+../src/Makefile
|
|
||||||
\ No newline at end of file
|
|
||||||
diff --git a/src/backlight/Makefile b/src/backlight/Makefile
|
|
||||||
new file mode 120000
|
|
||||||
index 0000000..d0b0e8e
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/src/backlight/Makefile
|
|
||||||
@@ -0,0 +1 @@
|
|
||||||
+../Makefile
|
|
||||||
\ No newline at end of file
|
|
||||||
diff --git a/src/backlight/backlight.c b/src/backlight/backlight.c
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..3378907
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/src/backlight/backlight.c
|
|
||||||
@@ -0,0 +1,126 @@
|
|
||||||
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
|
|
||||||
+
|
|
||||||
+/***
|
|
||||||
+ This file is part of systemd.
|
|
||||||
+
|
|
||||||
+ Copyright 2013 Lennart Poettering
|
|
||||||
+
|
|
||||||
+ 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 <libudev.h>
|
|
||||||
+
|
|
||||||
+#include "util.h"
|
|
||||||
+#include "mkdir.h"
|
|
||||||
+#include "fileio.h"
|
|
||||||
+
|
|
||||||
+int main(int argc, char *argv[]) {
|
|
||||||
+ struct udev *udev = NULL;
|
|
||||||
+ struct udev_device *device = NULL;
|
|
||||||
+ _cleanup_free_ char *saved = NULL;
|
|
||||||
+ int r;
|
|
||||||
+
|
|
||||||
+ if (argc != 3) {
|
|
||||||
+ log_error("This program requires two arguments.");
|
|
||||||
+ return EXIT_FAILURE;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ log_set_target(LOG_TARGET_AUTO);
|
|
||||||
+ log_parse_environment();
|
|
||||||
+ log_open();
|
|
||||||
+
|
|
||||||
+ umask(0022);
|
|
||||||
+
|
|
||||||
+ r = mkdir_p("/var/lib/backlight", 0755);
|
|
||||||
+ if (r < 0) {
|
|
||||||
+ log_error("Failed to create backlight directory: %s", strerror(-r));
|
|
||||||
+ goto finish;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ udev = udev_new();
|
|
||||||
+ if (!udev) {
|
|
||||||
+ r = log_oom();
|
|
||||||
+ goto finish;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ device = udev_device_new_from_syspath(udev, argv[2]);
|
|
||||||
+ if (!device) {
|
|
||||||
+ r = log_oom();
|
|
||||||
+ goto finish;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (!streq_ptr(udev_device_get_subsystem(device), "backlight")) {
|
|
||||||
+ log_error("Not a backlight device: %s", argv[2]);
|
|
||||||
+ r = -ENODEV;
|
|
||||||
+ goto finish;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ saved = strappend("/var/lib/backlight/", udev_device_get_sysname(device));
|
|
||||||
+ if (!saved) {
|
|
||||||
+ r = log_oom();
|
|
||||||
+ goto finish;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (streq(argv[1], "load")) {
|
|
||||||
+ _cleanup_free_ char *value = NULL;
|
|
||||||
+
|
|
||||||
+ r = read_one_line_file(saved, &value);
|
|
||||||
+ if (r < 0) {
|
|
||||||
+
|
|
||||||
+ if (r == -ENOENT) {
|
|
||||||
+ r = 0;
|
|
||||||
+ goto finish;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ log_error("Failed to read %s: %s", saved, strerror(-r));
|
|
||||||
+ goto finish;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ r = udev_device_set_sysattr_value(device, "brightness", value);
|
|
||||||
+ if (r < 0) {
|
|
||||||
+ log_error("Failed to write system attribute: %s", strerror(-r));
|
|
||||||
+ goto finish;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ } else if (streq(argv[1], "save")) {
|
|
||||||
+ const char *value;
|
|
||||||
+
|
|
||||||
+ value = udev_device_get_sysattr_value(device, "brightness");
|
|
||||||
+ if (!value) {
|
|
||||||
+ log_error("Failed to read system attribute: %s", strerror(-r));
|
|
||||||
+ goto finish;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ r = write_string_file(saved, value);
|
|
||||||
+ if (r < 0) {
|
|
||||||
+ log_error("Failed to write %s: %s", saved, strerror(-r));
|
|
||||||
+ goto finish;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ } else {
|
|
||||||
+ log_error("Unknown verb %s.", argv[1]);
|
|
||||||
+ r = -EINVAL;
|
|
||||||
+ goto finish;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+finish:
|
|
||||||
+ if (device)
|
|
||||||
+ udev_device_unref(device);
|
|
||||||
+
|
|
||||||
+ if (udev)
|
|
||||||
+ udev_unref(udev);
|
|
||||||
+
|
|
||||||
+ return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
|
||||||
+
|
|
||||||
+}
|
|
||||||
diff --git a/units/.gitignore b/units/.gitignore
|
|
||||||
index 9aee00f..9c65075 100644
|
|
||||||
--- a/units/.gitignore
|
|
||||||
+++ b/units/.gitignore
|
|
||||||
@@ -1,3 +1,4 @@
|
|
||||||
+/systemd-backlight@.service
|
|
||||||
/halt-local.service
|
|
||||||
/rc-local.service
|
|
||||||
/systemd-hybrid-sleep.service
|
|
||||||
diff --git a/units/systemd-backlight@.service.in b/units/systemd-backlight@.service.in
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..14b1219
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/units/systemd-backlight@.service.in
|
|
||||||
@@ -0,0 +1,21 @@
|
|
||||||
+# 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.
|
|
||||||
+
|
|
||||||
+[Unit]
|
|
||||||
+Description=Load/Save Screen Backlight Brightness of %f
|
|
||||||
+Documentation=man:systemd-backlight@.service(8)
|
|
||||||
+DefaultDependencies=no
|
|
||||||
+RequiresMountsFor=/var/lib/backlight
|
|
||||||
+Conflicts=shutdown.target
|
|
||||||
+After=systemd-readahead-collect.service systemd-readahead-replay.service systemd-remount-fs.service
|
|
||||||
+Before=sysinit.target shutdown.target
|
|
||||||
+
|
|
||||||
+[Service]
|
|
||||||
+Type=oneshot
|
|
||||||
+RemainAfterExit=yes
|
|
||||||
+ExecStart=@rootlibexecdir@/systemd-backlight load %f
|
|
||||||
+ExecStop=@rootlibexecdir@/systemd-backlight save %f
|
|
@ -1,69 +0,0 @@
|
|||||||
From 3437438503da8aa7e0549dde61f10f2bb0fb5805 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Lennart Poettering <lennart@poettering.net>
|
|
||||||
Date: Wed, 14 Aug 2013 02:55:57 +0200
|
|
||||||
Subject: [PATCH] backlight: instead of syspath use sysname for identifying
|
|
||||||
backlight devices
|
|
||||||
|
|
||||||
This makes the description string of the backlight service a bit nicer.
|
|
||||||
---
|
|
||||||
rules/99-systemd.rules.in | 2 +-
|
|
||||||
src/backlight/backlight.c | 10 ++++++++--
|
|
||||||
units/systemd-backlight@.service.in | 6 +++---
|
|
||||||
3 files changed, 12 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/rules/99-systemd.rules.in b/rules/99-systemd.rules.in
|
|
||||||
index ac4bc86..bbb7d0c 100644
|
|
||||||
--- a/rules/99-systemd.rules.in
|
|
||||||
+++ b/rules/99-systemd.rules.in
|
|
||||||
@@ -53,7 +53,7 @@ ACTION=="add", SUBSYSTEM=="net", KERNEL!="lo", RUN+="@rootlibexecdir@/systemd-sy
|
|
||||||
|
|
||||||
# Pull in backlight save/restore for all firmware backlight devices
|
|
||||||
|
|
||||||
-ACTION=="add", SUBSYSTEM=="backlight", ATTR{type}=="firmware", TAG+="systemd", ENV{SYSTEMD_WANTS}+="systemd-backlight@sys%p.service"
|
|
||||||
+ACTION=="add", SUBSYSTEM=="backlight", ATTR{type}=="firmware", TAG+="systemd", ENV{SYSTEMD_WANTS}+="systemd-backlight@$name.service"
|
|
||||||
|
|
||||||
# Asynchronously mount file systems implemented by these modules as
|
|
||||||
# soon as they are loaded.
|
|
||||||
diff --git a/src/backlight/backlight.c b/src/backlight/backlight.c
|
|
||||||
index 3378907..1ef0b45 100644
|
|
||||||
--- a/src/backlight/backlight.c
|
|
||||||
+++ b/src/backlight/backlight.c
|
|
||||||
@@ -54,9 +54,15 @@ int main(int argc, char *argv[]) {
|
|
||||||
goto finish;
|
|
||||||
}
|
|
||||||
|
|
||||||
- device = udev_device_new_from_syspath(udev, argv[2]);
|
|
||||||
+ errno = 0;
|
|
||||||
+ device = udev_device_new_from_subsystem_sysname(udev, "backlight", argv[2]);
|
|
||||||
if (!device) {
|
|
||||||
- r = log_oom();
|
|
||||||
+ if (errno != 0) {
|
|
||||||
+ log_error("Failed to get backlight device: %m");
|
|
||||||
+ r = -errno;
|
|
||||||
+ } else
|
|
||||||
+ r = log_oom();
|
|
||||||
+
|
|
||||||
goto finish;
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/units/systemd-backlight@.service.in b/units/systemd-backlight@.service.in
|
|
||||||
index 14b1219..b0e75db 100644
|
|
||||||
--- a/units/systemd-backlight@.service.in
|
|
||||||
+++ b/units/systemd-backlight@.service.in
|
|
||||||
@@ -6,7 +6,7 @@
|
|
||||||
# (at your option) any later version.
|
|
||||||
|
|
||||||
[Unit]
|
|
||||||
-Description=Load/Save Screen Backlight Brightness of %f
|
|
||||||
+Description=Load/Save Screen Backlight Brightness of %I
|
|
||||||
Documentation=man:systemd-backlight@.service(8)
|
|
||||||
DefaultDependencies=no
|
|
||||||
RequiresMountsFor=/var/lib/backlight
|
|
||||||
@@ -17,5 +17,5 @@ Before=sysinit.target shutdown.target
|
|
||||||
[Service]
|
|
||||||
Type=oneshot
|
|
||||||
RemainAfterExit=yes
|
|
||||||
-ExecStart=@rootlibexecdir@/systemd-backlight load %f
|
|
||||||
-ExecStop=@rootlibexecdir@/systemd-backlight save %f
|
|
||||||
+ExecStart=@rootlibexecdir@/systemd-backlight load %I
|
|
||||||
+ExecStop=@rootlibexecdir@/systemd-backlight save %I
|
|
@ -1,94 +0,0 @@
|
|||||||
From e3435020cb50691abac53965a7ddf6f66991926f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Kay Sievers <kay@vrfy.org>
|
|
||||||
Date: Thu, 15 Aug 2013 18:35:03 +0200
|
|
||||||
Subject: [PATCH] sysctl: allow overwriting of values specified in "later"
|
|
||||||
files
|
|
||||||
|
|
||||||
---
|
|
||||||
NEWS | 9 +++++++++
|
|
||||||
src/sysctl/sysctl.c | 16 ++++++++--------
|
|
||||||
units/systemd-sysctl.service.in | 1 -
|
|
||||||
3 files changed, 17 insertions(+), 9 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/NEWS b/NEWS
|
|
||||||
index f9929d0..9d989d3 100644
|
|
||||||
--- a/NEWS
|
|
||||||
+++ b/NEWS
|
|
||||||
@@ -2,6 +2,15 @@ systemd System and Service Manager
|
|
||||||
|
|
||||||
CHANGES WITH 206:
|
|
||||||
|
|
||||||
+ * The systemd-sysctl tool does no longer natively read the
|
|
||||||
+ file /etc/sysctl.conf. If desired, the file should be
|
|
||||||
+ symlinked from /etc/sysctl.d/99-sysctl.conf. Apart from
|
|
||||||
+ providing legacy support by a symlink rather than built-in
|
|
||||||
+ code, it also makes the otherwise hidden order of application
|
|
||||||
+ of the different files visible.
|
|
||||||
+
|
|
||||||
+CHANGES WITH 206:
|
|
||||||
+
|
|
||||||
* The documentation has been updated to cover the various new
|
|
||||||
concepts introduced with 205.
|
|
||||||
|
|
||||||
diff --git a/src/sysctl/sysctl.c b/src/sysctl/sysctl.c
|
|
||||||
index db18dd9..b5670db 100644
|
|
||||||
--- a/src/sysctl/sysctl.c
|
|
||||||
+++ b/src/sysctl/sysctl.c
|
|
||||||
@@ -135,6 +135,7 @@ static int parse_file(Hashmap *sysctl_options, const char *path, bool ignore_eno
|
|
||||||
log_debug("parse: %s\n", path);
|
|
||||||
while (!feof(f)) {
|
|
||||||
char l[LINE_MAX], *p, *value, *new_value, *property, *existing;
|
|
||||||
+ void *v;
|
|
||||||
int k;
|
|
||||||
|
|
||||||
if (!fgets(l, sizeof(l), f)) {
|
|
||||||
@@ -167,13 +168,14 @@ static int parse_file(Hashmap *sysctl_options, const char *path, bool ignore_eno
|
|
||||||
p = normalize_sysctl(strstrip(p));
|
|
||||||
value = strstrip(value);
|
|
||||||
|
|
||||||
- existing = hashmap_get(sysctl_options, p);
|
|
||||||
+ existing = hashmap_get2(sysctl_options, p, &v);
|
|
||||||
if (existing) {
|
|
||||||
- if (!streq(value, existing))
|
|
||||||
- log_warning("Duplicate assignment of %s in file '%s', ignoring.",
|
|
||||||
- p, path);
|
|
||||||
+ if (streq(value, existing))
|
|
||||||
+ continue;
|
|
||||||
|
|
||||||
- continue;
|
|
||||||
+ log_info("Overwriting earlier assignment of %s in file '%s'.", p, path);
|
|
||||||
+ free(hashmap_remove(sysctl_options, p));
|
|
||||||
+ free(v);
|
|
||||||
}
|
|
||||||
|
|
||||||
property = strdup(p);
|
|
||||||
@@ -188,7 +190,7 @@ static int parse_file(Hashmap *sysctl_options, const char *path, bool ignore_eno
|
|
||||||
|
|
||||||
k = hashmap_put(sysctl_options, property, new_value);
|
|
||||||
if (k < 0) {
|
|
||||||
- log_error("Failed to add sysctl variable %s to hashmap: %s", property, strerror(-r));
|
|
||||||
+ log_error("Failed to add sysctl variable %s to hashmap: %s", property, strerror(-k));
|
|
||||||
free(property);
|
|
||||||
free(new_value);
|
|
||||||
return k;
|
|
||||||
@@ -304,8 +306,6 @@ int main(int argc, char *argv[]) {
|
|
||||||
goto finish;
|
|
||||||
}
|
|
||||||
|
|
||||||
- r = parse_file(sysctl_options, "/etc/sysctl.conf", true);
|
|
||||||
-
|
|
||||||
STRV_FOREACH(f, files) {
|
|
||||||
k = parse_file(sysctl_options, *f, true);
|
|
||||||
if (k < 0 && r == 0)
|
|
||||||
diff --git a/units/systemd-sysctl.service.in b/units/systemd-sysctl.service.in
|
|
||||||
index 45e1ceb..5baf22c 100644
|
|
||||||
--- a/units/systemd-sysctl.service.in
|
|
||||||
+++ b/units/systemd-sysctl.service.in
|
|
||||||
@@ -13,7 +13,6 @@ Conflicts=shutdown.target
|
|
||||||
After=systemd-readahead-collect.service systemd-readahead-replay.service
|
|
||||||
Before=sysinit.target shutdown.target
|
|
||||||
ConditionPathIsReadWrite=/proc/sys/
|
|
||||||
-ConditionPathExists=|/etc/sysctl.conf
|
|
||||||
ConditionDirectoryNotEmpty=|/lib/sysctl.d
|
|
||||||
ConditionDirectoryNotEmpty=|/usr/lib/sysctl.d
|
|
||||||
ConditionDirectoryNotEmpty=|/usr/local/lib/sysctl.d
|
|
@ -1,37 +0,0 @@
|
|||||||
From 7efa944f689234f12798d737f9597f93621193da Mon Sep 17 00:00:00 2001
|
|
||||||
From: Steven Hiscocks <steven@hiscocks.me.uk>
|
|
||||||
Date: Thu, 15 Aug 2013 12:50:32 -0400
|
|
||||||
Subject: [PATCH] systemd-python: fix initialization of _Reader objects
|
|
||||||
|
|
||||||
https://bugzilla.redhat.com/show_bug.cgi?id=995575
|
|
||||||
---
|
|
||||||
src/python-systemd/_reader.c | 9 +++++++++
|
|
||||||
1 file changed, 9 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/src/python-systemd/_reader.c b/src/python-systemd/_reader.c
|
|
||||||
index 6ac2f20..be8ada2 100644
|
|
||||||
--- a/src/python-systemd/_reader.c
|
|
||||||
+++ b/src/python-systemd/_reader.c
|
|
||||||
@@ -64,6 +64,10 @@ static PyStructSequence_Desc Monotonic_desc = {
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+/**
|
|
||||||
+ * Convert a Python sequence object into a strv (char**), and
|
|
||||||
+ * None into a NULL pointer.
|
|
||||||
+ */
|
|
||||||
static int strv_converter(PyObject* obj, void *_result) {
|
|
||||||
char ***result = _result;
|
|
||||||
Py_ssize_t i, len;
|
|
||||||
@@ -73,6 +77,11 @@ static int strv_converter(PyObject* obj, void *_result) {
|
|
||||||
if (!obj)
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
+ if (obj == Py_None) {
|
|
||||||
+ *result = NULL;
|
|
||||||
+ return 1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
if (!PySequence_Check(obj))
|
|
||||||
return 0;
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
|||||||
From 65a43fc88f420d5be42f6c443ce920c1852f6998 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Kay Sievers <kay@vrfy.org>
|
|
||||||
Date: Thu, 15 Aug 2013 19:51:08 +0200
|
|
||||||
Subject: [PATCH] udevd: simplify sigterm check
|
|
||||||
|
|
||||||
---
|
|
||||||
src/udev/udevd.c | 8 +++-----
|
|
||||||
1 file changed, 3 insertions(+), 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/udev/udevd.c b/src/udev/udevd.c
|
|
||||||
index 7c6c5d6..fd799cc 100644
|
|
||||||
--- a/src/udev/udevd.c
|
|
||||||
+++ b/src/udev/udevd.c
|
|
||||||
@@ -314,13 +314,11 @@ static void worker_new(struct event *event)
|
|
||||||
udev_device_unref(dev);
|
|
||||||
dev = NULL;
|
|
||||||
|
|
||||||
- if (udev_event->sigterm) {
|
|
||||||
- udev_event_unref(udev_event);
|
|
||||||
- goto out;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
udev_event_unref(udev_event);
|
|
||||||
|
|
||||||
+ if (udev_event->sigterm)
|
|
||||||
+ goto out;
|
|
||||||
+
|
|
||||||
/* wait for more device messages from main udevd, or term signal */
|
|
||||||
while (dev == NULL) {
|
|
||||||
struct epoll_event ev[4];
|
|
@ -1,22 +0,0 @@
|
|||||||
From e122454310eeee15bad6974f5315ff0cb3be5ab6 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Kay Sievers <kay@vrfy.org>
|
|
||||||
Date: Thu, 15 Aug 2013 19:54:03 +0200
|
|
||||||
Subject: [PATCH] libudev: fix hwdb validation to look for the *new* file
|
|
||||||
|
|
||||||
---
|
|
||||||
src/libudev/libudev-hwdb.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/libudev/libudev-hwdb.c b/src/libudev/libudev-hwdb.c
|
|
||||||
index 5645a11..de1cb83 100644
|
|
||||||
--- a/src/libudev/libudev-hwdb.c
|
|
||||||
+++ b/src/libudev/libudev-hwdb.c
|
|
||||||
@@ -358,7 +358,7 @@ bool udev_hwdb_validate(struct udev_hwdb *hwdb) {
|
|
||||||
return false;
|
|
||||||
if (!hwdb->f)
|
|
||||||
return false;
|
|
||||||
- if (fstat(fileno(hwdb->f), &st) < 0)
|
|
||||||
+ if (stat("/etc/udev/hwdb.bin", &st) < 0)
|
|
||||||
return true;
|
|
||||||
if (timespec_load(&hwdb->st.st_mtim) != timespec_load(&st.st_mtim))
|
|
||||||
return true;
|
|
@ -1,50 +0,0 @@
|
|||||||
From ac2279a50aee4c8c5fabb645d185ad6c9e61d553 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
|
||||||
Date: Thu, 15 Aug 2013 15:07:57 -0400
|
|
||||||
Subject: [PATCH] units: make fsck units remain after exit
|
|
||||||
|
|
||||||
Without this, fsck would be re-run if any other service which pulls
|
|
||||||
in a target requiring one of the mounts was started after fsck was done
|
|
||||||
but before the initial transaction was done.
|
|
||||||
|
|
||||||
https://bugs.freedesktop.org/show_bug.cgi?id=66784
|
|
||||||
---
|
|
||||||
units/systemd-fsck-root.service.in | 4 ++--
|
|
||||||
units/systemd-fsck@.service.in | 2 +-
|
|
||||||
2 files changed, 3 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/units/systemd-fsck-root.service.in b/units/systemd-fsck-root.service.in
|
|
||||||
index 563129b..4388314 100644
|
|
||||||
--- a/units/systemd-fsck-root.service.in
|
|
||||||
+++ b/units/systemd-fsck-root.service.in
|
|
||||||
@@ -7,7 +7,7 @@
|
|
||||||
|
|
||||||
[Unit]
|
|
||||||
Description=File System Check on Root Device
|
|
||||||
-Documentation=man:systemd-fsck@.service(8)
|
|
||||||
+Documentation=man:systemd-fsck-root.service(8)
|
|
||||||
DefaultDependencies=no
|
|
||||||
After=systemd-readahead-collect.service systemd-readahead-replay.service
|
|
||||||
Before=local-fs.target shutdown.target
|
|
||||||
@@ -16,7 +16,7 @@ ConditionPathIsReadWrite=!/
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=oneshot
|
|
||||||
-RemainAfterExit=no
|
|
||||||
+RemainAfterExit=yes
|
|
||||||
ExecStart=@rootlibexecdir@/systemd-fsck
|
|
||||||
StandardOutput=journal+console
|
|
||||||
FsckPassNo=1
|
|
||||||
diff --git a/units/systemd-fsck@.service.in b/units/systemd-fsck@.service.in
|
|
||||||
index b3c71eb..e229cdc 100644
|
|
||||||
--- a/units/systemd-fsck@.service.in
|
|
||||||
+++ b/units/systemd-fsck@.service.in
|
|
||||||
@@ -15,7 +15,7 @@ Before=shutdown.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=oneshot
|
|
||||||
-RemainAfterExit=no
|
|
||||||
+RemainAfterExit=yes
|
|
||||||
ExecStart=@rootlibexecdir@/systemd-fsck %f
|
|
||||||
StandardOutput=journal+console
|
|
||||||
TimeoutSec=0
|
|
@ -1,64 +0,0 @@
|
|||||||
From bb8f5a48fef4adbe1a8bd57eb8a8d1d346447781 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Kay Sievers <kay@vrfy.org>
|
|
||||||
Date: Sat, 17 Aug 2013 19:07:42 +0200
|
|
||||||
Subject: [PATCH] udev: replace CAP_MKNOD by writable /sys condition
|
|
||||||
|
|
||||||
---
|
|
||||||
units/systemd-udev-settle.service.in | 2 +-
|
|
||||||
units/systemd-udev-trigger.service.in | 2 +-
|
|
||||||
units/systemd-udevd-control.socket | 2 +-
|
|
||||||
units/systemd-udevd-kernel.socket | 2 +-
|
|
||||||
4 files changed, 4 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/units/systemd-udev-settle.service.in b/units/systemd-udev-settle.service.in
|
|
||||||
index 037dd9a..0817803 100644
|
|
||||||
--- a/units/systemd-udev-settle.service.in
|
|
||||||
+++ b/units/systemd-udev-settle.service.in
|
|
||||||
@@ -16,7 +16,7 @@ DefaultDependencies=no
|
|
||||||
Wants=systemd-udevd.service
|
|
||||||
After=systemd-udev-trigger.service
|
|
||||||
Before=sysinit.target
|
|
||||||
-ConditionCapability=CAP_MKNOD
|
|
||||||
+ConditionPathIsReadWrite=/sys
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=oneshot
|
|
||||||
diff --git a/units/systemd-udev-trigger.service.in b/units/systemd-udev-trigger.service.in
|
|
||||||
index 604c369..0c33909 100644
|
|
||||||
--- a/units/systemd-udev-trigger.service.in
|
|
||||||
+++ b/units/systemd-udev-trigger.service.in
|
|
||||||
@@ -12,7 +12,7 @@ DefaultDependencies=no
|
|
||||||
Wants=systemd-udevd.service
|
|
||||||
After=systemd-udevd-kernel.socket systemd-udevd-control.socket
|
|
||||||
Before=sysinit.target
|
|
||||||
-ConditionCapability=CAP_MKNOD
|
|
||||||
+ConditionPathIsReadWrite=/sys
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=oneshot
|
|
||||||
diff --git a/units/systemd-udevd-control.socket b/units/systemd-udevd-control.socket
|
|
||||||
index ca17102..8330a1c 100644
|
|
||||||
--- a/units/systemd-udevd-control.socket
|
|
||||||
+++ b/units/systemd-udevd-control.socket
|
|
||||||
@@ -10,7 +10,7 @@ Description=udev Control Socket
|
|
||||||
Documentation=man:systemd-udevd.service(8) man:udev(7)
|
|
||||||
DefaultDependencies=no
|
|
||||||
Before=sockets.target
|
|
||||||
-ConditionCapability=CAP_MKNOD
|
|
||||||
+ConditionPathIsReadWrite=/sys
|
|
||||||
|
|
||||||
[Socket]
|
|
||||||
Service=systemd-udevd.service
|
|
||||||
diff --git a/units/systemd-udevd-kernel.socket b/units/systemd-udevd-kernel.socket
|
|
||||||
index 4b8a5b0..39b7809 100644
|
|
||||||
--- a/units/systemd-udevd-kernel.socket
|
|
||||||
+++ b/units/systemd-udevd-kernel.socket
|
|
||||||
@@ -10,7 +10,7 @@ Description=udev Kernel Socket
|
|
||||||
Documentation=man:systemd-udevd.service(8) man:udev(7)
|
|
||||||
DefaultDependencies=no
|
|
||||||
Before=sockets.target
|
|
||||||
-ConditionCapability=CAP_MKNOD
|
|
||||||
+ConditionPathIsReadWrite=/sys
|
|
||||||
|
|
||||||
[Socket]
|
|
||||||
Service=systemd-udevd.service
|
|
@ -1,63 +0,0 @@
|
|||||||
From 9656356ef09c12a3c0d73bf84b7c6704d37bea47 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Harald Hoyer <harald@redhat.com>
|
|
||||||
Date: Mon, 19 Aug 2013 15:18:43 +0200
|
|
||||||
Subject: [PATCH] libudev-enumerate.c:udev_enumerate_get_list_entry() fixed
|
|
||||||
possible stale pointer
|
|
||||||
|
|
||||||
If a realloc() happens in syspath_add(), the move_later pointer could
|
|
||||||
point to an invalid memory region.
|
|
||||||
|
|
||||||
Let move_later store the array index, instead of the pointer to the
|
|
||||||
entry.
|
|
||||||
---
|
|
||||||
src/libudev/libudev-enumerate.c | 19 +++++++++++--------
|
|
||||||
1 file changed, 11 insertions(+), 8 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/libudev/libudev-enumerate.c b/src/libudev/libudev-enumerate.c
|
|
||||||
index 5ccaabd..3e79107 100644
|
|
||||||
--- a/src/libudev/libudev-enumerate.c
|
|
||||||
+++ b/src/libudev/libudev-enumerate.c
|
|
||||||
@@ -270,8 +270,9 @@ _public_ struct udev_list_entry *udev_enumerate_get_list_entry(struct udev_enume
|
|
||||||
return NULL;
|
|
||||||
if (!udev_enumerate->devices_uptodate) {
|
|
||||||
unsigned int i;
|
|
||||||
+ int move_later = -1;
|
|
||||||
unsigned int max;
|
|
||||||
- struct syspath *prev = NULL, *move_later = NULL;
|
|
||||||
+ struct syspath *prev = NULL;
|
|
||||||
size_t move_later_prefix = 0;
|
|
||||||
|
|
||||||
udev_list_cleanup(&udev_enumerate->devices_list);
|
|
||||||
@@ -303,23 +304,25 @@ _public_ struct udev_list_entry *udev_enumerate_get_list_entry(struct udev_enume
|
|
||||||
move_later_prefix = devices_delay_later(udev_enumerate->udev, entry->syspath);
|
|
||||||
|
|
||||||
if (move_later_prefix > 0) {
|
|
||||||
- move_later = entry;
|
|
||||||
+ move_later = i;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (move_later &&
|
|
||||||
- !strneq(entry->syspath, move_later->syspath, move_later_prefix)) {
|
|
||||||
+ if ((move_later >= 0) &&
|
|
||||||
+ !strneq(entry->syspath, udev_enumerate->devices[move_later].syspath, move_later_prefix)) {
|
|
||||||
|
|
||||||
- udev_list_entry_add(&udev_enumerate->devices_list, move_later->syspath, NULL);
|
|
||||||
- move_later = NULL;
|
|
||||||
+ udev_list_entry_add(&udev_enumerate->devices_list,
|
|
||||||
+ udev_enumerate->devices[move_later].syspath, NULL);
|
|
||||||
+ move_later = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
udev_list_entry_add(&udev_enumerate->devices_list, entry->syspath, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (move_later)
|
|
||||||
- udev_list_entry_add(&udev_enumerate->devices_list, move_later->syspath, NULL);
|
|
||||||
+ if (move_later >= 0)
|
|
||||||
+ udev_list_entry_add(&udev_enumerate->devices_list,
|
|
||||||
+ udev_enumerate->devices[move_later].syspath, NULL);
|
|
||||||
|
|
||||||
/* add and cleanup delayed devices from end of list */
|
|
||||||
for (i = max; i < udev_enumerate->devices_cur; i++) {
|
|
@ -1,86 +0,0 @@
|
|||||||
From 376cb2b4d456d50167756ec49176bf6cffd052a7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
|
||||||
Date: Fri, 26 Jul 2013 12:57:33 -0400
|
|
||||||
Subject: [PATCH] journal: fix parsing of facility in syslog messages
|
|
||||||
|
|
||||||
In 49998b383 (journald: do not overwrite syslog facility when
|
|
||||||
parsing priority) journald started ignoring facility part when
|
|
||||||
reading service stderr to convert to syslog messages. In this
|
|
||||||
case it is fine, because only the priority is allowed.
|
|
||||||
|
|
||||||
But the same codepath is used for syslog messages, where the
|
|
||||||
facility should be used. Split the two codepaths by explicitly
|
|
||||||
specyfing whether the facility should be ignored or not.
|
|
||||||
|
|
||||||
https://bugzilla.redhat.com/show_bug.cgi?id=988814
|
|
||||||
---
|
|
||||||
src/journal/journald-stream.c | 2 +-
|
|
||||||
src/journal/journald-syslog.c | 12 ++++++++----
|
|
||||||
src/journal/journald-syslog.h | 2 +-
|
|
||||||
3 files changed, 10 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/journal/journald-stream.c b/src/journal/journald-stream.c
|
|
||||||
index e98fe94..9c4efec 100644
|
|
||||||
--- a/src/journal/journald-stream.c
|
|
||||||
+++ b/src/journal/journald-stream.c
|
|
||||||
@@ -90,7 +90,7 @@ static int stdout_stream_log(StdoutStream *s, const char *p) {
|
|
||||||
priority = s->priority;
|
|
||||||
|
|
||||||
if (s->level_prefix)
|
|
||||||
- syslog_parse_priority((char**) &p, &priority);
|
|
||||||
+ syslog_parse_priority((char**) &p, &priority, false);
|
|
||||||
|
|
||||||
if (s->forward_to_syslog || s->server->forward_to_syslog)
|
|
||||||
server_forward_syslog(s->server, syslog_fixup_facility(priority), s->identifier, p, &s->ucred, NULL);
|
|
||||||
diff --git a/src/journal/journald-syslog.c b/src/journal/journald-syslog.c
|
|
||||||
index 7cbb346..c2770a5 100644
|
|
||||||
--- a/src/journal/journald-syslog.c
|
|
||||||
+++ b/src/journal/journald-syslog.c
|
|
||||||
@@ -236,7 +236,7 @@ size_t syslog_parse_identifier(const char **buf, char **identifier, char **pid)
|
|
||||||
return e;
|
|
||||||
}
|
|
||||||
|
|
||||||
-void syslog_parse_priority(char **p, int *priority) {
|
|
||||||
+void syslog_parse_priority(char **p, int *priority, bool with_facility) {
|
|
||||||
int a = 0, b = 0, c = 0;
|
|
||||||
int k;
|
|
||||||
|
|
||||||
@@ -265,10 +265,14 @@ void syslog_parse_priority(char **p, int *priority) {
|
|
||||||
} else
|
|
||||||
return;
|
|
||||||
|
|
||||||
- if (a < 0 || b < 0 || c < 0)
|
|
||||||
+ if (a < 0 || b < 0 || c < 0 ||
|
|
||||||
+ (!with_facility && (a || b || c > 7)))
|
|
||||||
return;
|
|
||||||
|
|
||||||
- *priority = (*priority & LOG_FACMASK) | (a*100 + b*10 + c);
|
|
||||||
+ if (with_facility)
|
|
||||||
+ *priority = a*100 + b*10 + c;
|
|
||||||
+ else
|
|
||||||
+ *priority = (*priority & LOG_FACMASK) | c;
|
|
||||||
*p += k;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -361,7 +365,7 @@ void server_process_syslog_message(
|
|
||||||
assert(buf);
|
|
||||||
|
|
||||||
orig = buf;
|
|
||||||
- syslog_parse_priority((char**) &buf, &priority);
|
|
||||||
+ syslog_parse_priority((char**) &buf, &priority, true);
|
|
||||||
|
|
||||||
if (s->forward_to_syslog)
|
|
||||||
forward_syslog_raw(s, priority, orig, ucred, tv);
|
|
||||||
diff --git a/src/journal/journald-syslog.h b/src/journal/journald-syslog.h
|
|
||||||
index 324b70e..8ccdb77 100644
|
|
||||||
--- a/src/journal/journald-syslog.h
|
|
||||||
+++ b/src/journal/journald-syslog.h
|
|
||||||
@@ -25,7 +25,7 @@
|
|
||||||
|
|
||||||
int syslog_fixup_facility(int priority) _const_;
|
|
||||||
|
|
||||||
-void syslog_parse_priority(char **p, int *priority);
|
|
||||||
+void syslog_parse_priority(char **p, int *priority, bool with_facility);
|
|
||||||
size_t syslog_parse_identifier(const char **buf, char **identifier, char **pid);
|
|
||||||
|
|
||||||
void server_forward_syslog(Server *s, int priority, const char *identifier, const char *message, struct ucred *ucred, struct timeval *tv);
|
|
@ -1,30 +0,0 @@
|
|||||||
From 092ce0fbd755a56fe2fd25a28519fe974ebf1d2f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Harald Hoyer <harald@redhat.com>
|
|
||||||
Date: Fri, 23 Aug 2013 18:46:06 +0200
|
|
||||||
Subject: [PATCH] cgroup.c: check return value of unit_realize_cgroup_now()
|
|
||||||
|
|
||||||
do not recurse further, if unit_realize_cgroup_now() failed
|
|
||||||
---
|
|
||||||
src/core/cgroup.c | 9 +++++++--
|
|
||||||
1 file changed, 7 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/core/cgroup.c b/src/core/cgroup.c
|
|
||||||
index 5a1c3ad..50b17f3 100644
|
|
||||||
--- a/src/core/cgroup.c
|
|
||||||
+++ b/src/core/cgroup.c
|
|
||||||
@@ -432,8 +432,13 @@ static int unit_realize_cgroup_now(Unit *u) {
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* First, realize parents */
|
|
||||||
- if (UNIT_ISSET(u->slice))
|
|
||||||
- unit_realize_cgroup_now(UNIT_DEREF(u->slice));
|
|
||||||
+ if (UNIT_ISSET(u->slice)) {
|
|
||||||
+ int r;
|
|
||||||
+
|
|
||||||
+ r = unit_realize_cgroup_now(UNIT_DEREF(u->slice));
|
|
||||||
+ if (r < 0)
|
|
||||||
+ return r;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
/* And then do the real work */
|
|
||||||
return unit_create_cgroups(u, mask);
|
|
@ -1,31 +0,0 @@
|
|||||||
From c3cfb3213c9ac33679e4b9f01379e6520b769155 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Harald Hoyer <harald@redhat.com>
|
|
||||||
Date: Wed, 28 Aug 2013 15:42:34 +0200
|
|
||||||
Subject: [PATCH] Revert "cgroup.c: check return value of
|
|
||||||
unit_realize_cgroup_now()"
|
|
||||||
|
|
||||||
This reverts commit 092ce0fbd755a56fe2fd25a28519fe974ebf1d2f.
|
|
||||||
---
|
|
||||||
src/core/cgroup.c | 9 ++-------
|
|
||||||
1 file changed, 2 insertions(+), 7 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/core/cgroup.c b/src/core/cgroup.c
|
|
||||||
index 50b17f3..5a1c3ad 100644
|
|
||||||
--- a/src/core/cgroup.c
|
|
||||||
+++ b/src/core/cgroup.c
|
|
||||||
@@ -432,13 +432,8 @@ static int unit_realize_cgroup_now(Unit *u) {
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* First, realize parents */
|
|
||||||
- if (UNIT_ISSET(u->slice)) {
|
|
||||||
- int r;
|
|
||||||
-
|
|
||||||
- r = unit_realize_cgroup_now(UNIT_DEREF(u->slice));
|
|
||||||
- if (r < 0)
|
|
||||||
- return r;
|
|
||||||
- }
|
|
||||||
+ if (UNIT_ISSET(u->slice))
|
|
||||||
+ unit_realize_cgroup_now(UNIT_DEREF(u->slice));
|
|
||||||
|
|
||||||
/* And then do the real work */
|
|
||||||
return unit_create_cgroups(u, mask);
|
|
@ -1,71 +0,0 @@
|
|||||||
From 882c606d2a0d8effbd218059ea7f050c351e4019 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Harald Hoyer <harald@redhat.com>
|
|
||||||
Date: Wed, 28 Aug 2013 15:33:35 +0200
|
|
||||||
Subject: [PATCH] Do not realloc strings, which are already in the hashmap as
|
|
||||||
keys
|
|
||||||
|
|
||||||
This prevents corruption of the hashmap, because we would free() the
|
|
||||||
keys in the hashmap, if the unit is already in there, with the same
|
|
||||||
cgroup path.
|
|
||||||
---
|
|
||||||
src/core/cgroup.c | 18 ++++++++++++++----
|
|
||||||
src/core/unit.c | 2 +-
|
|
||||||
2 files changed, 15 insertions(+), 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/core/cgroup.c b/src/core/cgroup.c
|
|
||||||
index 5a1c3ad..3eeb475 100644
|
|
||||||
--- a/src/core/cgroup.c
|
|
||||||
+++ b/src/core/cgroup.c
|
|
||||||
@@ -382,6 +382,7 @@ static CGroupControllerMask unit_get_siblings_mask(Unit *u) {
|
|
||||||
static int unit_create_cgroups(Unit *u, CGroupControllerMask mask) {
|
|
||||||
char *path = NULL;
|
|
||||||
int r;
|
|
||||||
+ bool is_in_hash = false;
|
|
||||||
|
|
||||||
assert(u);
|
|
||||||
|
|
||||||
@@ -390,8 +391,14 @@ static int unit_create_cgroups(Unit *u, CGroupControllerMask mask) {
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
r = hashmap_put(u->manager->cgroup_unit, path, u);
|
|
||||||
- if (r < 0)
|
|
||||||
+ if (r == 0)
|
|
||||||
+ is_in_hash = true;
|
|
||||||
+
|
|
||||||
+ if (r < 0) {
|
|
||||||
+ free(path);
|
|
||||||
+ log_error("cgroup %s exists already: %s", path, strerror(-r));
|
|
||||||
return r;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
/* First, create our own group */
|
|
||||||
r = cg_create_with_mask(mask, path);
|
|
||||||
@@ -405,9 +412,12 @@ static int unit_create_cgroups(Unit *u, CGroupControllerMask mask) {
|
|
||||||
log_error("Failed to migrate cgroup %s: %s", path, strerror(-r));
|
|
||||||
}
|
|
||||||
|
|
||||||
- /* And remember the new data */
|
|
||||||
- free(u->cgroup_path);
|
|
||||||
- u->cgroup_path = path;
|
|
||||||
+ if (!is_in_hash) {
|
|
||||||
+ /* And remember the new data */
|
|
||||||
+ free(u->cgroup_path);
|
|
||||||
+ u->cgroup_path = path;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
u->cgroup_realized = true;
|
|
||||||
u->cgroup_mask = mask;
|
|
||||||
|
|
||||||
diff --git a/src/core/unit.c b/src/core/unit.c
|
|
||||||
index 0e9329f..ac488cf 100644
|
|
||||||
--- a/src/core/unit.c
|
|
||||||
+++ b/src/core/unit.c
|
|
||||||
@@ -2337,7 +2337,7 @@ int unit_deserialize(Unit *u, FILE *f, FDSet *fds) {
|
|
||||||
free(u->cgroup_path);
|
|
||||||
u->cgroup_path = s;
|
|
||||||
|
|
||||||
- hashmap_put(u->manager->cgroup_unit, s, u);
|
|
||||||
+ assert(hashmap_put(u->manager->cgroup_unit, s, u) == 1);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
|||||||
From ea7df0ea7dd50f119f5f6b8cecffdbbbe49deda0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Kay Sievers <kay@vrfy.org>
|
|
||||||
Date: Tue, 27 Aug 2013 18:25:06 +0200
|
|
||||||
Subject: [PATCH] log to kmsg when "debug" is used on the kernel command line
|
|
||||||
|
|
||||||
---
|
|
||||||
src/core/main.c | 9 +++++++--
|
|
||||||
1 file changed, 7 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/core/main.c b/src/core/main.c
|
|
||||||
index 77cdcfe..716def7 100644
|
|
||||||
--- a/src/core/main.c
|
|
||||||
+++ b/src/core/main.c
|
|
||||||
@@ -413,9 +413,14 @@ static int parse_proc_cmdline_word(const char *word) {
|
|
||||||
|
|
||||||
} else if (streq(word, "quiet"))
|
|
||||||
arg_show_status = false;
|
|
||||||
- else if (streq(word, "debug"))
|
|
||||||
+ else if (streq(word, "debug")) {
|
|
||||||
+ /* Log to kmsg, the journal socket will fill up before the
|
|
||||||
+ * journal is started and tools running during that time
|
|
||||||
+ * will block with every log message for for 60 seconds,
|
|
||||||
+ * before they give up. */
|
|
||||||
log_set_max_level(LOG_DEBUG);
|
|
||||||
- else if (!in_initrd()) {
|
|
||||||
+ log_set_target(LOG_TARGET_KMSG);
|
|
||||||
+ } else if (!in_initrd()) {
|
|
||||||
unsigned i;
|
|
||||||
|
|
||||||
/* SysV compatibility */
|
|
@ -1,49 +0,0 @@
|
|||||||
From 407df48ed36526f773dcc60ab6cef0f5ce441fe7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: David Herrmann <dh.herrmann@gmail.com>
|
|
||||||
Date: Wed, 4 Sep 2013 12:36:19 +0200
|
|
||||||
Subject: [PATCH] libudev: fix memleak when enumerating childs
|
|
||||||
|
|
||||||
We need to free udev-devices again if they don't match. Funny that no-one
|
|
||||||
noticed it yet since valgrind is quite verbose about it.
|
|
||||||
Fix it and free non-matching devices.
|
|
||||||
---
|
|
||||||
src/libudev/libudev-enumerate.c | 14 +++++++++-----
|
|
||||||
1 file changed, 9 insertions(+), 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/libudev/libudev-enumerate.c b/src/libudev/libudev-enumerate.c
|
|
||||||
index 3e79107..b96e5b2 100644
|
|
||||||
--- a/src/libudev/libudev-enumerate.c
|
|
||||||
+++ b/src/libudev/libudev-enumerate.c
|
|
||||||
@@ -829,23 +829,27 @@ nomatch:
|
|
||||||
static int parent_add_child(struct udev_enumerate *enumerate, const char *path)
|
|
||||||
{
|
|
||||||
struct udev_device *dev;
|
|
||||||
+ int r = 0;
|
|
||||||
|
|
||||||
dev = udev_device_new_from_syspath(enumerate->udev, path);
|
|
||||||
if (dev == NULL)
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
if (!match_subsystem(enumerate, udev_device_get_subsystem(dev)))
|
|
||||||
- return 0;
|
|
||||||
+ goto nomatch;
|
|
||||||
if (!match_sysname(enumerate, udev_device_get_sysname(dev)))
|
|
||||||
- return 0;
|
|
||||||
+ goto nomatch;
|
|
||||||
if (!match_property(enumerate, dev))
|
|
||||||
- return 0;
|
|
||||||
+ goto nomatch;
|
|
||||||
if (!match_sysattr(enumerate, dev))
|
|
||||||
- return 0;
|
|
||||||
+ goto nomatch;
|
|
||||||
|
|
||||||
syspath_add(enumerate, udev_device_get_syspath(dev));
|
|
||||||
+ r = 1;
|
|
||||||
+
|
|
||||||
+nomatch:
|
|
||||||
udev_device_unref(dev);
|
|
||||||
- return 1;
|
|
||||||
+ return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int parent_crawl_children(struct udev_enumerate *enumerate, const char *path, int maxdepth)
|
|
@ -1,27 +0,0 @@
|
|||||||
From 3af2fb43cba8a683cbe8bbcb3bc44dbce8d553af Mon Sep 17 00:00:00 2001
|
|
||||||
From: Brandon Philips <brandon@ifup.co>
|
|
||||||
Date: Tue, 3 Sep 2013 21:34:02 -0700
|
|
||||||
Subject: [PATCH] cgtop: fixup the online help
|
|
||||||
|
|
||||||
The online help shows the keys as uppercase but the code and manpage say
|
|
||||||
lower case. Make the online help follow reality.
|
|
||||||
---
|
|
||||||
src/cgtop/cgtop.c | 4 ++--
|
|
||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/cgtop/cgtop.c b/src/cgtop/cgtop.c
|
|
||||||
index fb523a3..cacf705 100644
|
|
||||||
--- a/src/cgtop/cgtop.c
|
|
||||||
+++ b/src/cgtop/cgtop.c
|
|
||||||
@@ -824,9 +824,9 @@ int main(int argc, char *argv[]) {
|
|
||||||
case '?':
|
|
||||||
case 'h':
|
|
||||||
fprintf(stdout,
|
|
||||||
- "\t<" ON "P" OFF "> By path; <" ON "T" OFF "> By tasks; <" ON "C" OFF "> By CPU; <" ON "M" OFF "> By memory; <" ON "I" OFF "> By I/O\n"
|
|
||||||
+ "\t<" ON "p" OFF "> By path; <" ON "t" OFF "> By tasks; <" ON "c" OFF "> By CPU; <" ON "m" OFF "> By memory; <" ON "i" OFF "> By I/O\n"
|
|
||||||
"\t<" ON "+" OFF "> Increase delay; <" ON "-" OFF "> Decrease delay; <" ON "%%" OFF "> Toggle time\n"
|
|
||||||
- "\t<" ON "Q" OFF "> Quit; <" ON "SPACE" OFF "> Refresh");
|
|
||||||
+ "\t<" ON "q" OFF "> Quit; <" ON "SPACE" OFF "> Refresh");
|
|
||||||
fflush(stdout);
|
|
||||||
sleep(3);
|
|
||||||
break;
|
|
@ -1,44 +0,0 @@
|
|||||||
From 8d74c49c208f4e36ef844a584557fc5577272c27 Mon Sep 17 00:00:00 2001
|
|
||||||
From: David Herrmann <dh.herrmann@gmail.com>
|
|
||||||
Date: Fri, 30 Aug 2013 15:50:41 +0200
|
|
||||||
Subject: [PATCH] libudev: enumerate: fix NULL-deref for subsystem-matches
|
|
||||||
|
|
||||||
udev_device_get_subsystem() may return NULL if no subsystem could be
|
|
||||||
figured out by libudev. This might be due to OOM or if the device
|
|
||||||
disconnected between the udev_device_new() call and
|
|
||||||
udev_device_get_subsystem(). Therefore, we need to handle subsystem==NULL
|
|
||||||
safely.
|
|
||||||
|
|
||||||
Instead of testing for it in each helper, we treat subsystem==NULL as
|
|
||||||
empty subsystem in match_subsystem().
|
|
||||||
|
|
||||||
Backtrace of udev_enumerate with an input-device disconnecting in exactly
|
|
||||||
this time-frame:
|
|
||||||
(gdb) bt
|
|
||||||
#0 0x00007ffff569dc24 in strnlen () from /usr/lib/libc.so.6
|
|
||||||
#1 0x00007ffff56d9e04 in fnmatch@@GLIBC_2.2.5 () from /usr/lib/libc.so.6
|
|
||||||
#2 0x00007ffff5beb83d in match_subsystem (udev_enumerate=0x7a05f0, subsystem=0x0) at src/libudev/libudev-enumerate.c:727
|
|
||||||
#3 0x00007ffff5bebb30 in parent_add_child (enumerate=enumerate@entry=0x7a05f0, path=<optimized out>) at src/libudev/libudev-enumerate.c:834
|
|
||||||
#4 0x00007ffff5bebc3f in parent_crawl_children (enumerate=enumerate@entry=0x7a05f0, path=0x7a56b0 "/sys/devices/<shortened>/input/input97", maxdepth=maxdepth@entry=254) at src/libudev/libudev-enumerate.c:866
|
|
||||||
#5 0x00007ffff5bebc54 in parent_crawl_children (enumerate=enumerate@entry=0x7a05f0, path=0x79e8c0 "/sys/devices/<shortened>/input", maxdepth=maxdepth@entry=255) at src/libudev/libudev-enumerate.c:868
|
|
||||||
#6 0x00007ffff5bebc54 in parent_crawl_children (enumerate=enumerate@entry=0x7a05f0, path=path@entry=0x753190 "/sys/devices/<shortened>", maxdepth=maxdepth@entry=256) at src/libudev/libudev-enumerate.c:868
|
|
||||||
#7 0x00007ffff5bec7df in scan_devices_children (enumerate=0x7a05f0) at src/libudev/libudev-enumerate.c:882
|
|
||||||
#8 udev_enumerate_scan_devices (udev_enumerate=udev_enumerate@entry=0x7a05f0) at src/libudev/libudev-enumerate.c:919
|
|
||||||
#9 0x00007ffff5df8777 in <random_caller> () at some/file.c:181
|
|
||||||
---
|
|
||||||
src/libudev/libudev-enumerate.c | 2 ++
|
|
||||||
1 file changed, 2 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/src/libudev/libudev-enumerate.c b/src/libudev/libudev-enumerate.c
|
|
||||||
index b96e5b2..385829d 100644
|
|
||||||
--- a/src/libudev/libudev-enumerate.c
|
|
||||||
+++ b/src/libudev/libudev-enumerate.c
|
|
||||||
@@ -721,6 +721,8 @@ static bool match_subsystem(struct udev_enumerate *udev_enumerate, const char *s
|
|
||||||
{
|
|
||||||
struct udev_list_entry *list_entry;
|
|
||||||
|
|
||||||
+ subsystem = subsystem ? : "";
|
|
||||||
+
|
|
||||||
udev_list_entry_foreach(list_entry, udev_list_get_entry(&udev_enumerate->subsystem_nomatch_list)) {
|
|
||||||
if (fnmatch(udev_list_entry_get_name(list_entry), subsystem, 0) == 0)
|
|
||||||
return false;
|
|
@ -1,38 +0,0 @@
|
|||||||
From 138ef72fbc2264a341873c1cf8c771c1c143922a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Kay Sievers <kay@vrfy.org>
|
|
||||||
Date: Wed, 4 Sep 2013 17:59:14 +0200
|
|
||||||
Subject: [PATCH] libudev: enumerate - do not try to match against an empty
|
|
||||||
subsystem
|
|
||||||
|
|
||||||
---
|
|
||||||
src/libudev/libudev-enumerate.c | 5 ++++-
|
|
||||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/libudev/libudev-enumerate.c b/src/libudev/libudev-enumerate.c
|
|
||||||
index 385829d..bc1e37d 100644
|
|
||||||
--- a/src/libudev/libudev-enumerate.c
|
|
||||||
+++ b/src/libudev/libudev-enumerate.c
|
|
||||||
@@ -721,12 +721,14 @@ static bool match_subsystem(struct udev_enumerate *udev_enumerate, const char *s
|
|
||||||
{
|
|
||||||
struct udev_list_entry *list_entry;
|
|
||||||
|
|
||||||
- subsystem = subsystem ? : "";
|
|
||||||
+ if (!subsystem)
|
|
||||||
+ return false;
|
|
||||||
|
|
||||||
udev_list_entry_foreach(list_entry, udev_list_get_entry(&udev_enumerate->subsystem_nomatch_list)) {
|
|
||||||
if (fnmatch(udev_list_entry_get_name(list_entry), subsystem, 0) == 0)
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
if (udev_list_get_entry(&udev_enumerate->subsystem_match_list) != NULL) {
|
|
||||||
udev_list_entry_foreach(list_entry, udev_list_get_entry(&udev_enumerate->subsystem_match_list)) {
|
|
||||||
if (fnmatch(udev_list_entry_get_name(list_entry), subsystem, 0) == 0)
|
|
||||||
@@ -734,6 +736,7 @@ static bool match_subsystem(struct udev_enumerate *udev_enumerate, const char *s
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
@ -1,42 +0,0 @@
|
|||||||
From 2c284b172a7474731df01a7c3280e30de844ba75 Mon Sep 17 00:00:00 2001
|
|
||||||
From: George McCollister <george.mccollister@gmail.com>
|
|
||||||
Date: Wed, 4 Sep 2013 07:12:43 -0500
|
|
||||||
Subject: [PATCH] journald: fix vacuuming of archived journals
|
|
||||||
|
|
||||||
d_name is modified on line 227 so if the entire journal name is needed
|
|
||||||
again p must be used. Before this change when journal_file_empty was called
|
|
||||||
on archived journals it would always return with -2.
|
|
||||||
|
|
||||||
Signed-off-by: George McCollister <george.mccollister@gmail.com>
|
|
||||||
---
|
|
||||||
src/journal/journal-vacuum.c | 10 +++++-----
|
|
||||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/journal/journal-vacuum.c b/src/journal/journal-vacuum.c
|
|
||||||
index 79572f1..ace7722 100644
|
|
||||||
--- a/src/journal/journal-vacuum.c
|
|
||||||
+++ b/src/journal/journal-vacuum.c
|
|
||||||
@@ -265,18 +265,18 @@ int journal_directory_vacuum(
|
|
||||||
/* We do not vacuum active files or unknown files! */
|
|
||||||
continue;
|
|
||||||
|
|
||||||
- if (journal_file_empty(dirfd(d), de->d_name)) {
|
|
||||||
+ if (journal_file_empty(dirfd(d), p)) {
|
|
||||||
|
|
||||||
/* Always vacuum empty non-online files. */
|
|
||||||
|
|
||||||
- if (unlinkat(dirfd(d), de->d_name, 0) >= 0)
|
|
||||||
- log_debug("Deleted empty journal %s/%s.", directory, de->d_name);
|
|
||||||
+ if (unlinkat(dirfd(d), p, 0) >= 0)
|
|
||||||
+ log_debug("Deleted empty journal %s/%s.", directory, p);
|
|
||||||
else if (errno != ENOENT)
|
|
||||||
- log_warning("Failed to delete %s/%s: %m", directory, de->d_name);
|
|
||||||
+ log_warning("Failed to delete %s/%s: %m", directory, p);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
- patch_realtime(directory, de->d_name, &st, &realtime);
|
|
||||||
+ patch_realtime(directory, p, &st, &realtime);
|
|
||||||
|
|
||||||
GREEDY_REALLOC(list, n_allocated, n_list + 1);
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
|||||||
From f29938b8d28e574ae614f6db4e70478d8ccac4d0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: George McCollister <george.mccollister@gmail.com>
|
|
||||||
Date: Wed, 4 Sep 2013 07:12:44 -0500
|
|
||||||
Subject: [PATCH] journald: fix fd leak in journal_file_empty
|
|
||||||
|
|
||||||
Before my previous patch, journal_file_empty wasn't be called with the
|
|
||||||
correct filename. Now that it's being called with the correct filename
|
|
||||||
it leaks file descriptors. This patch closes the file descriptors before
|
|
||||||
returning.
|
|
||||||
|
|
||||||
Signed-off-by: George McCollister <george.mccollister@gmail.com>
|
|
||||||
|
|
||||||
[Edit harald@redhat.com: make use of _cleanup_close_ instead]
|
|
||||||
---
|
|
||||||
src/journal/journal-vacuum.c | 3 ++-
|
|
||||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/journal/journal-vacuum.c b/src/journal/journal-vacuum.c
|
|
||||||
index ace7722..178c803 100644
|
|
||||||
--- a/src/journal/journal-vacuum.c
|
|
||||||
+++ b/src/journal/journal-vacuum.c
|
|
||||||
@@ -129,8 +129,9 @@ static void patch_realtime(
|
|
||||||
}
|
|
||||||
|
|
||||||
static int journal_file_empty(int dir_fd, const char *name) {
|
|
||||||
- int fd, r;
|
|
||||||
+ int r;
|
|
||||||
le64_t n_entries;
|
|
||||||
+ _cleanup_close_ int fd;
|
|
||||||
|
|
||||||
fd = openat(dir_fd, name, O_RDONLY|O_CLOEXEC|O_NOFOLLOW|O_NONBLOCK);
|
|
||||||
if (fd < 0)
|
|
@ -61,6 +61,13 @@ enable initial-setup-text.service
|
|||||||
# https://bugzilla.redhat.com/show_bug.cgi?id=957135
|
# https://bugzilla.redhat.com/show_bug.cgi?id=957135
|
||||||
enable vmtoolsd.service
|
enable vmtoolsd.service
|
||||||
|
|
||||||
|
# https://bugzilla.redhat.com/show_bug.cgi?id=976315
|
||||||
|
enable dkms.service
|
||||||
|
|
||||||
|
# https://bugzilla.redhat.com/show_bug.cgi?id=961878
|
||||||
|
enable ipmi.service
|
||||||
|
enable ipmievd.service
|
||||||
|
|
||||||
# Hardware
|
# Hardware
|
||||||
enable gpm.*
|
enable gpm.*
|
||||||
enable gpsd.*
|
enable gpsd.*
|
||||||
|
2
sources
2
sources
@ -1 +1 @@
|
|||||||
89e36f2d3ba963020b72738549954cbc systemd-206.tar.xz
|
7799f3cc9d289b8db1c1fa56ae7ecd88 systemd-207.tar.xz
|
||||||
|
@ -1,59 +0,0 @@
|
|||||||
From 31f49d022aee9bbb356e52e5483f182d7ffa8d2f Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
|
||||||
Date: Thu, 15 Aug 2013 12:51:20 -0400
|
|
||||||
Subject: [PATCH] systemd-python: check for oom, give nicer error messages
|
|
||||||
|
|
||||||
---
|
|
||||||
src/python-systemd/_reader.c | 8 ++++++--
|
|
||||||
src/python-systemd/login.c | 2 +-
|
|
||||||
2 files changed, 7 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/python-systemd/_reader.c b/src/python-systemd/_reader.c
|
|
||||||
index 3b1003b..bc5db19 100644
|
|
||||||
--- a/src/python-systemd/_reader.c
|
|
||||||
+++ b/src/python-systemd/_reader.c
|
|
||||||
@@ -75,7 +75,7 @@ static int strv_converter(PyObject* obj, void *_result) {
|
|
||||||
assert(result);
|
|
||||||
|
|
||||||
if (!obj)
|
|
||||||
- goto cleanup;
|
|
||||||
+ return 0;
|
|
||||||
|
|
||||||
if (obj == Py_None) {
|
|
||||||
*result = NULL;
|
|
||||||
@@ -87,6 +87,10 @@ static int strv_converter(PyObject* obj, void *_result) {
|
|
||||||
|
|
||||||
len = PySequence_Length(obj);
|
|
||||||
*result = new0(char*, len + 1);
|
|
||||||
+ if (!*result) {
|
|
||||||
+ set_error(-ENOMEM, NULL, NULL);
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
for (i = 0; i < len; i++) {
|
|
||||||
PyObject *item;
|
|
||||||
@@ -154,7 +158,7 @@ static int Reader_init(Reader *self, PyObject *args, PyObject *keywds)
|
|
||||||
char **files = NULL;
|
|
||||||
|
|
||||||
static const char* const kwlist[] = {"flags", "path", "files", NULL};
|
|
||||||
- if (!PyArg_ParseTupleAndKeywords(args, keywds, "|izO&", (char**) kwlist,
|
|
||||||
+ if (!PyArg_ParseTupleAndKeywords(args, keywds, "|izO&:__init__", (char**) kwlist,
|
|
||||||
&flags, &path, strv_converter, &files))
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
diff --git a/src/python-systemd/login.c b/src/python-systemd/login.c
|
|
||||||
index 1e86193..dd2edbc 100644
|
|
||||||
--- a/src/python-systemd/login.c
|
|
||||||
+++ b/src/python-systemd/login.c
|
|
||||||
@@ -159,7 +159,7 @@ static int Monitor_init(Monitor *self, PyObject *args, PyObject *keywds)
|
|
||||||
int r;
|
|
||||||
|
|
||||||
static const char* const kwlist[] = {"category", NULL};
|
|
||||||
- if (!PyArg_ParseTupleAndKeywords(args, keywds, "|z", (char**) kwlist,
|
|
||||||
+ if (!PyArg_ParseTupleAndKeywords(args, keywds, "|z:__init__", (char**) kwlist,
|
|
||||||
&category))
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
--
|
|
||||||
1.8.2.562.g931e949
|
|
||||||
|
|
66
systemd.spec
66
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: 206
|
Version: 207
|
||||||
Release: 11%{?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,56 +36,8 @@ 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
|
||||||
|
|
||||||
Patch0001: 0001-80-net-name-slot.rules-only-rename-network-interface.patch
|
|
||||||
Patch0004: 0004-journal-handle-multiline-syslog-messages.patch
|
|
||||||
Patch0005: 0005-man-Fix-copy-paste-error.patch
|
|
||||||
Patch0006: 0006-core-synchronously-block-when-logging.patch
|
|
||||||
Patch0007: 0007-journal-immediately-sync-to-disk-as-soon-as-we-recei.patch
|
|
||||||
Patch0008: 0008-initctl-use-irreversible-jobs-when-switching-runleve.patch
|
|
||||||
Patch0009: 0009-udev-log-error-if-chmod-chown-of-static-dev-nodes-fa.patch
|
|
||||||
Patch0010: 0010-udev-static_node-don-t-touch-permissions-uneccessari.patch
|
|
||||||
Patch0011: 0011-tmpfiles-support-passing-prefix-multiple-times.patch
|
|
||||||
Patch0012: 0012-tmpfiles-introduce-exclude-prefix.patch
|
|
||||||
Patch0013: 0013-tmpfiles-setup-exclude-dev-prefixes-files.patch
|
|
||||||
Patch0014: 0014-logind-update-state-file-after-generating-the-sessio.patch
|
|
||||||
Patch0015: 0015-journalctl-use-_COMM-match-for-scripts.patch
|
|
||||||
Patch0016: 0016-man-systemd.unit-fix-volatile-path.patch
|
|
||||||
Patch0017: 0017-man-link-up-scope-slice-units-from-systemd.unit-5.patch
|
|
||||||
Patch0018: 0018-man-there-is-no-session-mode-only-user-mode.patch
|
|
||||||
Patch0019: 0019-journal-fix-hashmap-leak-in-mmap-cache.patch
|
|
||||||
Patch0020: 0020-systemd-delta-Only-print-colors-when-on-a-tty.patch
|
|
||||||
Patch0021: 0021-systemd-fix-segv-in-snapshot-creation.patch
|
|
||||||
Patch0022: 0022-udev-hwdb-try-reading-modalias-for-usb-before-fallin.patch
|
|
||||||
Patch0023: 0023-udevd-respect-the-log-level-set-in-etc-udev-udev.con.patch
|
|
||||||
Patch0024: 0024-fstab-generator-respect-noauto-nofail-when-adding-sy.patch
|
|
||||||
Patch0025: 0025-service-always-unwatch-PIDs-before-forgetting-old-on.patch
|
|
||||||
Patch0026: 0026-units-disable-kmod-static-nodes.service-in-container.patch
|
|
||||||
Patch0027: 0027-use-CAP_MKNOD-ConditionCapability.patch
|
|
||||||
Patch0028: 0028-fstab-generator-read-rd.fstab-on-off-switch-correctl.patch
|
|
||||||
Patch0029: 0029-backlight-add-minimal-tool-to-save-restore-screen-br.patch
|
|
||||||
Patch0030: 0030-backlight-instead-of-syspath-use-sysname-for-identif.patch
|
|
||||||
Patch0031: 0031-sysctl-allow-overwriting-of-values-specified-in-late.patch
|
|
||||||
Patch0032: 0032-systemd-python-fix-initialization-of-_Reader-objects.patch
|
|
||||||
Patch0033: 0033-udevd-simplify-sigterm-check.patch
|
|
||||||
Patch0034: 0034-libudev-fix-hwdb-validation-to-look-for-the-new-file.patch
|
|
||||||
Patch0035: 0035-units-make-fsck-units-remain-after-exit.patch
|
|
||||||
Patch0036: 0036-udev-replace-CAP_MKNOD-by-writable-sys-condition.patch
|
|
||||||
Patch0037: 0037-libudev-enumerate.c-udev_enumerate_get_list_entry-fi.patch
|
|
||||||
Patch0038: 0038-journal-fix-parsing-of-facility-in-syslog-messages.patch
|
|
||||||
Patch0039: 0039-cgroup.c-check-return-value-of-unit_realize_cgroup_n.patch
|
|
||||||
Patch0040: 0040-Revert-cgroup.c-check-return-value-of-unit_realize_c.patch
|
|
||||||
Patch0041: 0041-Do-not-realloc-strings-which-are-already-in-the-hash.patch
|
|
||||||
Patch0042: 0042-log-to-kmsg-when-debug-is-used-on-the-kernel-command.patch
|
|
||||||
Patch0043: 0043-libudev-fix-memleak-when-enumerating-childs.patch
|
|
||||||
Patch0044: 0044-cgtop-fixup-the-online-help.patch
|
|
||||||
Patch0045: 0045-libudev-enumerate-fix-NULL-deref-for-subsystem-match.patch
|
|
||||||
Patch0046: 0046-libudev-enumerate-do-not-try-to-match-against-an-emp.patch
|
|
||||||
Patch0047: 0047-journald-fix-vacuuming-of-archived-journals.patch
|
|
||||||
Patch0048: 0048-journald-fix-fd-leak-in-journal_file_empty.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
|
||||||
Patch1002: systemd-python-check-for-oom-give-nicer-error-messag.patch
|
|
||||||
|
|
||||||
%global num_patches %{lua: c=0; for i,p in ipairs(patches) do c=c+1; end; print(c);}
|
%global num_patches %{lua: c=0; for i,p in ipairs(patches) do c=c+1; end; print(c);}
|
||||||
|
|
||||||
@ -530,6 +482,7 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g
|
|||||||
%config(noreplace) %{_sysconfdir}/udev/udev.conf
|
%config(noreplace) %{_sysconfdir}/udev/udev.conf
|
||||||
%config(noreplace) %{_sysconfdir}/rsyslog.d/listen.conf
|
%config(noreplace) %{_sysconfdir}/rsyslog.d/listen.conf
|
||||||
%config(noreplace) %{_sysconfdir}/yum/protected.d/systemd.conf
|
%config(noreplace) %{_sysconfdir}/yum/protected.d/systemd.conf
|
||||||
|
%config(noreplace) %{_sysconfdir}/pam.d/systemd-user
|
||||||
%ghost %{_sysconfdir}/udev/hwdb.bin
|
%ghost %{_sysconfdir}/udev/hwdb.bin
|
||||||
%{_rpmconfigdir}/macros.d/macros.systemd
|
%{_rpmconfigdir}/macros.d/macros.systemd
|
||||||
%{_sysconfdir}/xdg/systemd
|
%{_sysconfdir}/xdg/systemd
|
||||||
@ -582,6 +535,7 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g
|
|||||||
%{_prefix}/lib/systemd/system-generators/systemd-fstab-generator
|
%{_prefix}/lib/systemd/system-generators/systemd-fstab-generator
|
||||||
%{_prefix}/lib/systemd/system-generators/systemd-system-update-generator
|
%{_prefix}/lib/systemd/system-generators/systemd-system-update-generator
|
||||||
%{_prefix}/lib/systemd/system-generators/systemd-efi-boot-generator
|
%{_prefix}/lib/systemd/system-generators/systemd-efi-boot-generator
|
||||||
|
%{_prefix}/lib/systemd/system-generators/systemd-gpt-auto-generator
|
||||||
%{_prefix}/lib/tmpfiles.d/systemd.conf
|
%{_prefix}/lib/tmpfiles.d/systemd.conf
|
||||||
%{_prefix}/lib/tmpfiles.d/x11.conf
|
%{_prefix}/lib/tmpfiles.d/x11.conf
|
||||||
%{_prefix}/lib/tmpfiles.d/legacy.conf
|
%{_prefix}/lib/tmpfiles.d/legacy.conf
|
||||||
@ -636,6 +590,15 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g
|
|||||||
%{_datadir}/bash-completion/completions/timedatectl
|
%{_datadir}/bash-completion/completions/timedatectl
|
||||||
%{_datadir}/bash-completion/completions/udevadm
|
%{_datadir}/bash-completion/completions/udevadm
|
||||||
%{_datadir}/bash-completion/completions/systemd-analyze
|
%{_datadir}/bash-completion/completions/systemd-analyze
|
||||||
|
%{_datadir}/bash-completion/completions/kernel-install
|
||||||
|
%{_datadir}/bash-completion/completions/systemd-run
|
||||||
|
%{_datadir}/zsh/site-functions/*
|
||||||
|
%ghost %{_localstatedir}/lib/random-seed
|
||||||
|
%ghost %dir %{_localstatedir}/var/lib/systemd/
|
||||||
|
%ghost %dir %{_localstatedir}/var/lib/systemd/coredump
|
||||||
|
%ghost %dir %{_localstatedir}/var/lib/systemd/catalog
|
||||||
|
%ghost %{_localstatedir}/var/lib/systemd/catalog/database
|
||||||
|
%ghost %dir %{_localstatedir}/var/lib/backlight/
|
||||||
|
|
||||||
# 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.
|
||||||
@ -703,6 +666,9 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g
|
|||||||
%{_datadir}/systemd/gatewayd
|
%{_datadir}/systemd/gatewayd
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Sep 13 2013 Lennart Poettering <lpoetter@redhat.com> - 207-1
|
||||||
|
- New upstream release
|
||||||
|
|
||||||
* Fri Sep 06 2013 Harald Hoyer <harald@redhat.com> 206-11
|
* Fri Sep 06 2013 Harald Hoyer <harald@redhat.com> 206-11
|
||||||
- support "debug" kernel command line parameter
|
- support "debug" kernel command line parameter
|
||||||
- journald: fix fd leak in journal_file_empty
|
- journald: fix fd leak in journal_file_empty
|
||||||
|
Loading…
Reference in New Issue
Block a user