Dr. Werner Fink 2014-07-08 11:22:39 +00:00 committed by Git OBS Bridge
parent 0ed4f14ef0
commit 2425a91247
12 changed files with 514 additions and 0 deletions

View File

@ -0,0 +1,54 @@
From 3a8a916338d8446b938f3cf40f6aae0c611892e3 Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Mon, 7 Jul 2014 11:47:10 +0200
Subject: [PATCH] util: consider 0x7F a control chracter (which it is: DEL)
Let's better be safe than sorry.
---
src/shared/util.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git src/shared/util.c src/shared/util.c
index 3d875c7..d25ee66 100644
--- src/shared/util.c
+++ src/shared/util.c
@@ -1608,8 +1608,9 @@ int read_one_char(FILE *f, char *ret, usec_t t, bool *need_nl) {
return -ETIMEDOUT;
}
+ errno = 0;
if (!fgets(line, sizeof(line), f))
- return -EIO;
+ return errno ? -errno : -EIO;
truncate_nl(line);
@@ -5355,6 +5356,9 @@ bool string_is_safe(const char *p) {
if (*t > 0 && *t < ' ')
return false;
+ if (*t == 127)
+ return false;
+
if (strchr("\\\"\'", *t))
return false;
}
@@ -5371,10 +5375,14 @@ bool string_has_cc(const char *p) {
assert(p);
- for (t = p; *t; t++)
+ for (t = p; *t; t++) {
if (*t > 0 && *t < ' ' && *t != '\t')
return true;
+ if (*t == 127)
+ return true;
+ }
+
return false;
}
--
1.7.9.2

View File

@ -0,0 +1,130 @@
From 6294aa76d818e831de4592b41a37e225fd0871f9 Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Mon, 7 Jul 2014 12:04:55 +0200
Subject: [PATCH] util: don't consider tabs special in string_has_cc() anymore
Instead, take a list of exceptions to our usual CC check
---
src/hostname/hostnamed.c | 3 +--
src/shared/env-util.c | 4 +++-
src/shared/fileio.c | 2 +-
src/shared/util.c | 19 ++++++++++---------
src/shared/util.h | 5 +++--
5 files changed, 18 insertions(+), 15 deletions(-)
diff --git src/hostname/hostnamed.c src/hostname/hostnamed.c
index 14629dd..514554d 100644
--- src/hostname/hostnamed.c
+++ src/hostname/hostnamed.c
@@ -550,8 +550,7 @@ static int set_machine_info(Context *c, sd_bus *bus, sd_bus_message *m, int prop
if (prop == PROP_ICON_NAME && !filename_is_safe(name))
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid icon name '%s'", name);
- if (prop == PROP_PRETTY_HOSTNAME &&
- (string_has_cc(name) || chars_intersect(name, "\t")))
+ if (prop == PROP_PRETTY_HOSTNAME && string_has_cc(name, NULL))
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid pretty host name '%s'", name);
if (prop == PROP_CHASSIS && !valid_chassis(name))
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid chassis '%s'", name);
diff --git src/shared/env-util.c src/shared/env-util.c
index b2e4553..20b208f 100644
--- src/shared/env-util.c
+++ src/shared/env-util.c
@@ -78,7 +78,9 @@ bool env_value_is_valid(const char *e) {
if (!utf8_is_valid(e))
return false;
- if (string_has_cc(e))
+ /* bash allows tabs in environment variables, and so should
+ * we */
+ if (string_has_cc(e, "\t"))
return false;
/* POSIX says the overall size of the environment block cannot
diff --git src/shared/fileio.c src/shared/fileio.c
index fb1c1bc..b1de590 100644
--- src/shared/fileio.c
+++ src/shared/fileio.c
@@ -738,7 +738,7 @@ static void write_env_var(FILE *f, const char *v) {
p++;
fwrite(v, 1, p-v, f);
- if (string_has_cc(p) || chars_intersect(p, WHITESPACE "\'\"\\`$")) {
+ if (string_has_cc(p, NULL) || chars_intersect(p, WHITESPACE "\'\"\\`$")) {
fputc('\"', f);
for (; *p; p++) {
diff --git src/shared/util.c src/shared/util.c
index d25ee66..d223ecf 100644
--- src/shared/util.c
+++ src/shared/util.c
@@ -5350,16 +5350,14 @@ bool filename_is_safe(const char *p) {
bool string_is_safe(const char *p) {
const char *t;
- assert(p);
+ if (!p)
+ return false;
for (t = p; *t; t++) {
if (*t > 0 && *t < ' ')
return false;
- if (*t == 127)
- return false;
-
- if (strchr("\\\"\'", *t))
+ if (strchr("\\\"\'\0x7f", *t))
return false;
}
@@ -5367,16 +5365,19 @@ bool string_is_safe(const char *p) {
}
/**
- * Check if a string contains control characters.
- * Spaces and tabs are not considered control characters.
+ * Check if a string contains control characters. If 'ok' is non-NULL
+ * it may be a string containing additional CCs to be considered OK.
*/
-bool string_has_cc(const char *p) {
+bool string_has_cc(const char *p, const char *ok) {
const char *t;
assert(p);
for (t = p; *t; t++) {
- if (*t > 0 && *t < ' ' && *t != '\t')
+ if (ok && strchr(ok, *t))
+ return false;
+
+ if (*t > 0 && *t < ' ')
return true;
if (*t == 127)
diff --git src/shared/util.h src/shared/util.h
index e23069c..8544940 100644
--- src/shared/util.h
+++ src/shared/util.h
@@ -382,7 +382,8 @@ bool fstype_is_network(const char *fstype);
int chvt(int vt);
int read_one_char(FILE *f, char *ret, usec_t timeout, bool *need_nl);
-int ask(char *ret, const char *replies, const char *text, ...) _printf_(3, 4);
+int ask_char(char *ret, const char *replies, const char *text, ...) _printf_(3, 4);
+int ask_string(char **ret, const char *text, ...) _printf_(2, 3);
int reset_terminal_fd(int fd, bool switch_to_text);
int reset_terminal(const char *name);
@@ -692,7 +693,7 @@ _alloc_(2, 3) static inline void *memdup_multiply(const void *p, size_t a, size_
bool filename_is_safe(const char *p) _pure_;
bool path_is_safe(const char *p) _pure_;
bool string_is_safe(const char *p) _pure_;
-bool string_has_cc(const char *p) _pure_;
+bool string_has_cc(const char *p, const char *ok) _pure_;
/**
* Check if a string contains any glob patterns.
--
1.7.9.2

View File

@ -0,0 +1,52 @@
Based on 037c26d0aeb750ca9c8d605884ea1db7baecfea8 Mon Sep 17 00:00:00 2001
Based on 9a00f57a5ba7ed431e6bac8d8b36518708503b4e Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Mon, 7 Jul 2014 14:59:06 +0200
Subject: [PATCH] architecture: add string table entries for mips-le archs
which were missing
---
src/shared/architecture.c | 2 ++
src/shared/architecture.h | 4 ++++
2 files changed, 6 insertions(+)
diff --git src/shared/architecture.c src/shared/architecture.c
index 6cdca4e..dc45f35 100644
--- src/shared/architecture.c
+++ src/shared/architecture.c
@@ -153,7 +153,9 @@ static const char *const architecture_table[_ARCHITECTURE_MAX] = {
[ARCHITECTURE_SPARC] = "sparc",
[ARCHITECTURE_SPARC64] = "sparc64",
[ARCHITECTURE_MIPS] = "mips",
+ [ARCHITECTURE_MIPS_LE] = "mips-le",
[ARCHITECTURE_MIPS64] = "mips64",
+ [ARCHITECTURE_MIPS64_LE] = "mips64-le",
[ARCHITECTURE_ALPHA] = "alpha",
[ARCHITECTURE_ARM] = "arm",
[ARCHITECTURE_ARM_BE] = "arm-be",
diff --git src/shared/architecture.h src/shared/architecture.h
index 20e848b..0807924 100644
--- src/shared/architecture.h
+++ src/shared/architecture.h
@@ -23,6 +23,8 @@
#include "util.h"
+/* A cleaned up architecture definition */
+
typedef enum Architecture {
ARCHITECTURE_X86 = 0,
ARCHITECTURE_X86_64,
@@ -38,7 +40,9 @@ typedef enum Architecture {
ARCHITECTURE_SPARC,
ARCHITECTURE_SPARC64,
ARCHITECTURE_MIPS,
+ ARCHITECTURE_MIPS_LE,
ARCHITECTURE_MIPS64,
+ ARCHITECTURE_MIPS64_LE,
ARCHITECTURE_ALPHA,
ARCHITECTURE_ARM,
ARCHITECTURE_ARM_BE,
--
1.7.9.2

View File

@ -0,0 +1,67 @@
Based on 4774e357268e4a1e9fa82adb0563a538932a4c8e Mon Sep 17 00:00:00 2001
From: Miguel Angel Ajo <mangelajo@redhat.com>
Date: Mon, 7 Jul 2014 14:20:36 +0200
Subject: [PATCH] core: Added support for ERRNO NOTIFY_SOCKET message parsing,
and added StatusErrno dbus property along StatusText to
allow notification of numeric status condition while
degraded service operation or any other special situation.
---
src/core/dbus-service.c | 1 +
src/core/service.c | 17 +++++++++++++++++
src/core/service.h | 1 +
3 files changed, 19 insertions(+)
diff --git src/core/dbus-service.c src/core/dbus-service.c
index 093289f..5a881e8 100644
--- src/core/dbus-service.c
+++ src/core/dbus-service.c
@@ -60,6 +60,7 @@ const sd_bus_vtable bus_service_vtable[] = {
SD_BUS_PROPERTY("ControlPID", "u", bus_property_get_pid, offsetof(Service, control_pid), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
SD_BUS_PROPERTY("BusName", "s", NULL, offsetof(Service, bus_name), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("StatusText", "s", NULL, offsetof(Service, status_text), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
+ SD_BUS_PROPERTY("StatusErrno", "i", NULL, offsetof(Service, status_errno), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
SD_BUS_PROPERTY("Result", "s", property_get_result, offsetof(Service, result), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
BUS_EXEC_STATUS_VTABLE("ExecMain", offsetof(Service, main_exec_status), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
BUS_EXEC_COMMAND_LIST_VTABLE("ExecStartPre", offsetof(Service, exec_command[SERVICE_EXEC_START_PRE]), SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION),
diff --git src/core/service.c src/core/service.c
index 0b19767..ace45e2 100644
--- src/core/service.c
+++ src/core/service.c
@@ -2637,6 +2637,23 @@ static void service_notify_message(Unit *u, pid_t pid, char **tags) {
free(t);
}
+ /* Interpret ERRNO= */
+ e = strv_find_prefix(tags, "ERRNO=");
+ if (e) {
+ int status_errno;
+
+ if (safe_atoi(e + 6, &status_errno) < 0)
+ log_warning_unit(u->id, "Failed to parse ERRNO= field in notification message: %s", e);
+ else {
+ log_debug_unit(u->id, "%s: got %s", u->id, e);
+
+ if (s->status_errno != status_errno) {
+ s->status_errno = status_errno;
+ notify_dbus = true;
+ }
+ }
+ }
+
/* Interpret WATCHDOG= */
if (strv_find(tags, "WATCHDOG=1")) {
log_debug_unit(u->id, "%s: got WATCHDOG=1", u->id);
--- src/core/service.h
+++ src/core/service.h 2014-07-08 12:54:39.238736046 +0200
@@ -187,6 +187,7 @@ struct Service {
char *bus_name;
char *status_text;
+ int status_errno;
RateLimit start_limit;
StartLimitAction start_limit_action;
--
1.7.9.2

View File

@ -0,0 +1,25 @@
From 2040ccf171404b709acb0ecf1d1f17b87c5d05f0 Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Mon, 7 Jul 2014 17:32:44 +0200
Subject: [PATCH] service: don't accept negative ERRNO= notification messages
---
src/core/service.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git src/core/service.c src/core/service.c
index 5c54a34..d5aff99 100644
--- src/core/service.c
+++ src/core/service.c
@@ -2637,7 +2637,7 @@ static void service_notify_message(Unit *u, pid_t pid, char **tags) {
if (e) {
int status_errno;
- if (safe_atoi(e + 6, &status_errno) < 0)
+ if (safe_atoi(e + 6, &status_errno) < 0 || status_errno < 0)
log_warning_unit(u->id, "Failed to parse ERRNO= field in notification message: %s", e);
else {
log_debug_unit(u->id, "%s: got %s", u->id, e);
--
1.7.9.2

View File

@ -0,0 +1,37 @@
Based on b4af5a803aa71a57733ca46fef29b7afb20a626c Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Mon, 7 Jul 2014 17:33:26 +0200
Subject: [PATCH] systemctl: show StatusErrno value in "systemctl status"
---
src/systemctl/systemctl.c | 5 +++++
1 file changed, 5 insertions(+)
--- src/systemctl/systemctl.c
+++ src/systemctl/systemctl.c 2014-07-08 10:57:30.170735691 +0000
@@ -2710,6 +2710,7 @@ typedef struct UnitStatusInfo {
const char *status_text;
const char *pid_file;
bool running:1;
+ int status_errno;
usec_t start_timestamp;
usec_t exit_timestamp;
@@ -2982,6 +2983,8 @@ static void print_status_info(
if (i->status_text)
printf(" Status: \"%s\"\n", i->status_text);
+ if (i->status_errno > 0)
+ printf(" Error: %i (%s)\n", i->status_errno, strerror(i->status_errno));
if (i->control_group &&
(i->main_pid > 0 || i->control_pid > 0 || cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, i->control_group, false) == 0)) {
@@ -3203,6 +3206,8 @@ static int status_property(const char *n
i->exit_code = (int) j;
else if (streq(name, "ExecMainStatus"))
i->exit_status = (int) j;
+ else if (streq(name, "StatusErrno"))
+ i->status_errno = (int) j;
break;
}

View File

@ -0,0 +1,29 @@
From 8cfdb077b8e3da1c47fc1d735d051f21f33144c1 Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Mon, 7 Jul 2014 17:33:46 +0200
Subject: [PATCH] service: flush status text and errno values each time a
service is started
We shouldn't show status texts from previous service starts
---
src/core/service.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git src/core/service.c src/core/service.c
index d5aff99..0f542ed 100644
--- src/core/service.c
+++ src/core/service.c
@@ -1699,6 +1699,10 @@ static int service_start(Unit *u) {
s->main_pid_alien = false;
s->forbid_restart = false;
+ free(s->status_text);
+ s->status_text = NULL;
+ s->status_errno = 0;
+
service_enter_start_pre(s);
return 0;
}
--
1.7.9.2

View File

@ -0,0 +1,36 @@
Based on a669ea9860900d5cdebbc4cb9aaea72db7e28a02 Mon Sep 17 00:00:00 2001
From: Tom Gundersen <teg@jklm.no>
Date: Mon, 7 Jul 2014 14:50:16 +0200
Subject: [PATCH] udev: link_config - ignore errors due to missing MAC address
Otherwis, we get misleading error messages on links with MACs.
Reported by Leonid Isaev.
---
src/udev/net/link-config.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
--- src/udev/net/link-config.c
+++ src/udev/net/link-config.c 2014-07-08 10:44:19.450735575 +0000
@@ -440,7 +440,9 @@ int link_config_apply(link_config_ctx *c
case MACPOLICY_PERSISTENT:
if (!mac_is_permanent(device)) {
r = get_mac(device, false, &generated_mac);
- if (r < 0)
+ if (r == -ENOENT)
+ break;
+ else if (r < 0)
return r;
mac = &generated_mac;
}
@@ -448,7 +450,9 @@ int link_config_apply(link_config_ctx *c
case MACPOLICY_RANDOM:
if (!mac_is_random(device)) {
r = get_mac(device, true, &generated_mac);
- if (r < 0)
+ if (r == -ENOENT)
+ break;
+ else if (r < 0)
return r;
mac = &generated_mac;
}

View File

@ -1,3 +1,21 @@
-------------------------------------------------------------------
Tue Jul 8 10:59:26 UTC 2014 - werner@suse.de
- Port and add upstream patches
0001-util-consider-0x7F-a-control-chracter-which-it-is-DE.patch
0002-util-don-t-consider-tabs-special-in-string_has_cc-an.patch
0003-architecture-add-string-table-entries-for-mips-le-ar.patch
0004-core-Added-support-for-ERRNO-NOTIFY_SOCKET-message-p.patch
0005-service-don-t-accept-negative-ERRNO-notification-mes.patch
0006-systemctl-show-StatusErrno-value-in-systemctl-status.patch
0007-service-flush-status-text-and-errno-values-each-time.patch
------------------------------------------------------------------
Tue Jul 8 10:41:31 UTC 2014 - werner@suse.de
- Add upstream patch
1049-udev-link_config-ignore-errors-due-to-missing-MAC-ad.patch
-------------------------------------------------------------------
Mon Jul 7 13:06:35 UTC 2014 - werner@suse.de

View File

@ -653,6 +653,20 @@ Patch319: 0002-namespace-fix-uninitialized-memory-access.patch
Patch320: 0001-machine-don-t-return-uninitialized-variable.patch
# PATCH-FIX-UPSTREAM added at 2014/07/07
Patch321: 0002-vconsole-setup-run-setfont-before-loadkeys.patch
# PATCH-FIX-UPSTREAM added at 2014/07/08
Patch322: 0001-util-consider-0x7F-a-control-chracter-which-it-is-DE.patch
# PATCH-FIX-UPSTREAM added at 2014/07/08
Patch323: 0002-util-don-t-consider-tabs-special-in-string_has_cc-an.patch
# PATCH-FIX-UPSTREAM added at 2014/07/08
Patch324: 0003-architecture-add-string-table-entries-for-mips-le-ar.patch
# PATCH-FIX-UPSTREAM added at 2014/07/08
Patch325: 0004-core-Added-support-for-ERRNO-NOTIFY_SOCKET-message-p.patch
# PATCH-FIX-UPSTREAM added at 2014/07/08
Patch326: 0005-service-don-t-accept-negative-ERRNO-notification-mes.patch
# PATCH-FIX-UPSTREAM added at 2014/07/08
Patch327: 0006-systemctl-show-StatusErrno-value-in-systemctl-status.patch
# PATCH-FIX-UPSTREAM added at 2014/07/08
Patch328: 0007-service-flush-status-text-and-errno-values-each-time.patch
# UDEV PATCHES
# ============
@ -756,6 +770,8 @@ Patch1046: 1046-fix-duplicated-rules-with-layer3-interfaces.patch
Patch1047: 1047-udev-net_setup_link-builtin-should-print-the-reason-.patch
# PATCH-FIX-UPSTREAM 1048-udev-net_setup_link-add-a-bit-more-logging.patch
Patch1048: 1048-udev-net_setup_link-add-a-bit-more-logging.patch
# PATCH-FIX-UPSTREAM 1049-udev-link_config-ignore-errors-due-to-missing-MAC-ad.patch
Patch1049: 1049-udev-link_config-ignore-errors-due-to-missing-MAC-ad.patch
%description
Systemd is a system and service manager, compatible with SysV and LSB
@ -1235,6 +1251,13 @@ cp %{SOURCE7} m4/
%patch319 -p0
%patch320 -p0
%patch321 -p0
%patch322 -p0
%patch323 -p0
%patch324 -p0
%patch325 -p0
%patch326 -p0
%patch327 -p0
%patch328 -p0
# udev patches
%patch1001 -p1
@ -1292,6 +1315,7 @@ cp %{SOURCE7} m4/
%patch1046 -p1
%patch1047 -p0
%patch1048 -p0
%patch1049 -p0
# ensure generate files are removed
rm -f units/emergency.service

View File

@ -1,3 +1,21 @@
-------------------------------------------------------------------
Tue Jul 8 10:59:26 UTC 2014 - werner@suse.de
- Port and add upstream patches
0001-util-consider-0x7F-a-control-chracter-which-it-is-DE.patch
0002-util-don-t-consider-tabs-special-in-string_has_cc-an.patch
0003-architecture-add-string-table-entries-for-mips-le-ar.patch
0004-core-Added-support-for-ERRNO-NOTIFY_SOCKET-message-p.patch
0005-service-don-t-accept-negative-ERRNO-notification-mes.patch
0006-systemctl-show-StatusErrno-value-in-systemctl-status.patch
0007-service-flush-status-text-and-errno-values-each-time.patch
------------------------------------------------------------------
Tue Jul 8 10:41:31 UTC 2014 - werner@suse.de
- Add upstream patch
1049-udev-link_config-ignore-errors-due-to-missing-MAC-ad.patch
-------------------------------------------------------------------
Mon Jul 7 13:06:35 UTC 2014 - werner@suse.de

View File

@ -648,6 +648,20 @@ Patch319: 0002-namespace-fix-uninitialized-memory-access.patch
Patch320: 0001-machine-don-t-return-uninitialized-variable.patch
# PATCH-FIX-UPSTREAM added at 2014/07/07
Patch321: 0002-vconsole-setup-run-setfont-before-loadkeys.patch
# PATCH-FIX-UPSTREAM added at 2014/07/08
Patch322: 0001-util-consider-0x7F-a-control-chracter-which-it-is-DE.patch
# PATCH-FIX-UPSTREAM added at 2014/07/08
Patch323: 0002-util-don-t-consider-tabs-special-in-string_has_cc-an.patch
# PATCH-FIX-UPSTREAM added at 2014/07/08
Patch324: 0003-architecture-add-string-table-entries-for-mips-le-ar.patch
# PATCH-FIX-UPSTREAM added at 2014/07/08
Patch325: 0004-core-Added-support-for-ERRNO-NOTIFY_SOCKET-message-p.patch
# PATCH-FIX-UPSTREAM added at 2014/07/08
Patch326: 0005-service-don-t-accept-negative-ERRNO-notification-mes.patch
# PATCH-FIX-UPSTREAM added at 2014/07/08
Patch327: 0006-systemctl-show-StatusErrno-value-in-systemctl-status.patch
# PATCH-FIX-UPSTREAM added at 2014/07/08
Patch328: 0007-service-flush-status-text-and-errno-values-each-time.patch
# UDEV PATCHES
# ============
@ -751,6 +765,8 @@ Patch1046: 1046-fix-duplicated-rules-with-layer3-interfaces.patch
Patch1047: 1047-udev-net_setup_link-builtin-should-print-the-reason-.patch
# PATCH-FIX-UPSTREAM 1048-udev-net_setup_link-add-a-bit-more-logging.patch
Patch1048: 1048-udev-net_setup_link-add-a-bit-more-logging.patch
# PATCH-FIX-UPSTREAM 1049-udev-link_config-ignore-errors-due-to-missing-MAC-ad.patch
Patch1049: 1049-udev-link_config-ignore-errors-due-to-missing-MAC-ad.patch
%description
Systemd is a system and service manager, compatible with SysV and LSB
@ -1230,6 +1246,13 @@ cp %{SOURCE7} m4/
%patch319 -p0
%patch320 -p0
%patch321 -p0
%patch322 -p0
%patch323 -p0
%patch324 -p0
%patch325 -p0
%patch326 -p0
%patch327 -p0
%patch328 -p0
# udev patches
%patch1001 -p1
@ -1287,6 +1310,7 @@ cp %{SOURCE7} m4/
%patch1046 -p1
%patch1047 -p0
%patch1048 -p0
%patch1049 -p0
# ensure generate files are removed
rm -f units/emergency.service