diff options
author | Brad Bishop <bradleyb@fuzziesquirrel.com> | 2016-08-15 20:16:55 -0400 |
---|---|---|
committer | Patrick Williams <patrick@stwcx.xyz> | 2016-08-30 19:28:03 +0000 |
commit | 44a22c2e1e5f66aa59d2f53c30d68b969f5dfb1a (patch) | |
tree | 0ef717fed73db5b7adca4781518e79d497ae9f07 | |
parent | b243adec40bffbd471f9af1997f9edb4c2f0dc27 (diff) | |
download | talos-openbmc-44a22c2e1e5f66aa59d2f53c30d68b969f5dfb1a.tar.gz talos-openbmc-44a22c2e1e5f66aa59d2f53c30d68b969f5dfb1a.zip |
systemd: export message_append_cmdline
Change-Id: I337ebf4eda95597b59778c7f6198fa5388472c2e
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
-rw-r--r-- | meta-phosphor/common/recipes-core/systemd/systemd/0001-Export-message_append_cmdline.patch | 323 | ||||
-rw-r--r-- | meta-phosphor/common/recipes-core/systemd/systemd_%.bbappend | 1 |
2 files changed, 324 insertions, 0 deletions
diff --git a/meta-phosphor/common/recipes-core/systemd/systemd/0001-Export-message_append_cmdline.patch b/meta-phosphor/common/recipes-core/systemd/systemd/0001-Export-message_append_cmdline.patch new file mode 100644 index 000000000..afb2a48b6 --- /dev/null +++ b/meta-phosphor/common/recipes-core/systemd/systemd/0001-Export-message_append_cmdline.patch @@ -0,0 +1,323 @@ +From 5dfdd9973fe6437985d535fd530cec83a2774113 Mon Sep 17 00:00:00 2001 +From: Brad Bishop <bradleyb@us.ibm.com> +Date: Tue, 16 Aug 2016 15:07:34 -0400 +Subject: [PATCH] Export message_append_cmdline + +Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com> +--- + Makefile.am | 43 ++++-- + src/libsystemd/libsystemd.sym | 1 + + src/libsystemd/sd-bus/bus-message.c | 254 ++++++++++++++++++++++++++++++++++++ + src/systemd/sd-bus.h | 1 + + 4 files changed, 285 insertions(+), 14 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index 03341fc..0dbf4b7 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -3032,7 +3033,10 @@ libsystemd_internal_la_SOURCES = \ + src/libsystemd/sd-device/sd-device.c \ + src/libsystemd/sd-device/device-private.c \ + src/libsystemd/sd-device/device-private.h \ +- src/libsystemd/sd-resolve/sd-resolve.c ++ src/libsystemd/sd-resolve/sd-resolve.c \ ++ src/shared/bus-util.c \ ++ src/shared/bus-util.h ++ + + libsystemd_internal_la_LIBADD = \ + libbasic.la \ +diff --git a/src/libsystemd/libsystemd.sym b/src/libsystemd/libsystemd.sym +index 4ab637b..f0c06c7 100644 +--- a/src/libsystemd/libsystemd.sym ++++ b/src/libsystemd/libsystemd.sym +@@ -488,4 +488,5 @@ global: + sd_journal_has_persistent_files; + sd_journal_enumerate_fields; + sd_journal_restart_fields; ++ sd_bus_message_append_cmdline; + } LIBSYSTEMD_227; +diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c +index c2e913f..d8d3ec8 100644 +--- a/src/libsystemd/sd-bus/bus-message.c ++++ b/src/libsystemd/sd-bus/bus-message.c +@@ -38,6 +38,7 @@ + #include "time-util.h" + #include "utf8.h" + #include "util.h" ++#include "parse-util.h" + + static int message_append_basic(sd_bus_message *m, char type, const void *p, const void **stored); + +@@ -5946,3 +5947,256 @@ _public_ int sd_bus_message_set_priority(sd_bus_message *m, int64_t priority) { + m->priority = priority; + return 0; + } ++ ++_public_ int sd_bus_message_append_cmdline(sd_bus_message *m, const char *signature, char ***x) { ++ char **p; ++ int r; ++ ++ assert(m); ++ assert(signature); ++ assert(x); ++ ++ p = *x; ++ ++ for (;;) { ++ const char *v; ++ char t; ++ ++ t = *signature; ++ v = *p; ++ ++ if (t == 0) ++ break; ++ if (!v) { ++ log_error("Too few parameters for signature."); ++ return -EINVAL; ++ } ++ ++ signature++; ++ p++; ++ ++ switch (t) { ++ ++ case SD_BUS_TYPE_BOOLEAN: ++ ++ r = parse_boolean(v); ++ if (r < 0) { ++ log_error("Failed to parse as boolean: %s", v); ++ return r; ++ } ++ ++ r = sd_bus_message_append_basic(m, t, &r); ++ break; ++ ++ case SD_BUS_TYPE_BYTE: { ++ uint8_t z; ++ ++ r = safe_atou8(v, &z); ++ if (r < 0) { ++ log_error("Failed to parse as byte (unsigned 8bit integer): %s", v); ++ return r; ++ } ++ ++ r = sd_bus_message_append_basic(m, t, &z); ++ break; ++ } ++ ++ case SD_BUS_TYPE_INT16: { ++ int16_t z; ++ ++ r = safe_atoi16(v, &z); ++ if (r < 0) { ++ log_error("Failed to parse as signed 16bit integer: %s", v); ++ return r; ++ } ++ ++ r = sd_bus_message_append_basic(m, t, &z); ++ break; ++ } ++ ++ case SD_BUS_TYPE_UINT16: { ++ uint16_t z; ++ ++ r = safe_atou16(v, &z); ++ if (r < 0) { ++ log_error("Failed to parse as unsigned 16bit integer: %s", v); ++ return r; ++ } ++ ++ r = sd_bus_message_append_basic(m, t, &z); ++ break; ++ } ++ ++ case SD_BUS_TYPE_INT32: { ++ int32_t z; ++ ++ r = safe_atoi32(v, &z); ++ if (r < 0) { ++ log_error("Failed to parse as signed 32bit integer: %s", v); ++ return r; ++ } ++ ++ r = sd_bus_message_append_basic(m, t, &z); ++ break; ++ } ++ ++ case SD_BUS_TYPE_UINT32: { ++ uint32_t z; ++ ++ r = safe_atou32(v, &z); ++ if (r < 0) { ++ log_error("Failed to parse as unsigned 32bit integer: %s", v); ++ return r; ++ } ++ ++ r = sd_bus_message_append_basic(m, t, &z); ++ break; ++ } ++ ++ case SD_BUS_TYPE_INT64: { ++ int64_t z; ++ ++ r = safe_atoi64(v, &z); ++ if (r < 0) { ++ log_error("Failed to parse as signed 64bit integer: %s", v); ++ return r; ++ } ++ ++ r = sd_bus_message_append_basic(m, t, &z); ++ break; ++ } ++ ++ case SD_BUS_TYPE_UINT64: { ++ uint64_t z; ++ ++ r = safe_atou64(v, &z); ++ if (r < 0) { ++ log_error("Failed to parse as unsigned 64bit integer: %s", v); ++ return r; ++ } ++ ++ r = sd_bus_message_append_basic(m, t, &z); ++ break; ++ } ++ ++ ++ case SD_BUS_TYPE_DOUBLE: { ++ double z; ++ ++ r = safe_atod(v, &z); ++ if (r < 0) { ++ log_error("Failed to parse as double precision floating point: %s", v); ++ return r; ++ } ++ ++ r = sd_bus_message_append_basic(m, t, &z); ++ break; ++ } ++ ++ case SD_BUS_TYPE_STRING: ++ case SD_BUS_TYPE_OBJECT_PATH: ++ case SD_BUS_TYPE_SIGNATURE: ++ ++ r = sd_bus_message_append_basic(m, t, v); ++ break; ++ ++ case SD_BUS_TYPE_ARRAY: { ++ uint32_t n; ++ size_t k; ++ ++ r = safe_atou32(v, &n); ++ if (r < 0) { ++ log_error("Failed to parse number of array entries: %s", v); ++ return r; ++ } ++ ++ r = signature_element_length(signature, &k); ++ if (r < 0) { ++ log_error("Invalid array signature."); ++ return r; ++ } ++ ++ { ++ unsigned i; ++ char s[k + 1]; ++ memcpy(s, signature, k); ++ s[k] = 0; ++ ++ r = sd_bus_message_open_container(m, SD_BUS_TYPE_ARRAY, s); ++ if (r < 0) ++ return bus_log_create_error(r); ++ ++ for (i = 0; i < n; i++) { ++ r = sd_bus_message_append_cmdline(m, s, &p); ++ if (r < 0) ++ return r; ++ } ++ } ++ ++ signature += k; ++ ++ r = sd_bus_message_close_container(m); ++ break; ++ } ++ ++ case SD_BUS_TYPE_VARIANT: ++ r = sd_bus_message_open_container(m, SD_BUS_TYPE_VARIANT, v); ++ if (r < 0) ++ return bus_log_create_error(r); ++ ++ r = sd_bus_message_append_cmdline(m, v, &p); ++ if (r < 0) ++ return r; ++ ++ r = sd_bus_message_close_container(m); ++ break; ++ ++ case SD_BUS_TYPE_STRUCT_BEGIN: ++ case SD_BUS_TYPE_DICT_ENTRY_BEGIN: { ++ size_t k; ++ ++ signature--; ++ p--; ++ ++ r = signature_element_length(signature, &k); ++ if (r < 0) { ++ log_error("Invalid struct/dict entry signature."); ++ return r; ++ } ++ ++ { ++ char s[k-1]; ++ memcpy(s, signature + 1, k - 2); ++ s[k - 2] = 0; ++ ++ r = sd_bus_message_open_container(m, t == SD_BUS_TYPE_STRUCT_BEGIN ? SD_BUS_TYPE_STRUCT : SD_BUS_TYPE_DICT_ENTRY, s); ++ if (r < 0) ++ return bus_log_create_error(r); ++ ++ r = sd_bus_message_append_cmdline(m, s, &p); ++ if (r < 0) ++ return r; ++ } ++ ++ signature += k; ++ ++ r = sd_bus_message_close_container(m); ++ break; ++ } ++ ++ case SD_BUS_TYPE_UNIX_FD: ++ log_error("UNIX file descriptor not supported as type."); ++ return -EINVAL; ++ ++ default: ++ log_error("Unknown signature type %c.", t); ++ return -EINVAL; ++ } ++ ++ if (r < 0) ++ return bus_log_create_error(r); ++ } ++ ++ *x = p; ++ return 0; ++} +diff --git a/src/systemd/sd-bus.h b/src/systemd/sd-bus.h +index 2a2ef0e..a6a21a4 100644 +--- a/src/systemd/sd-bus.h ++++ b/src/systemd/sd-bus.h +@@ -233,6 +233,7 @@ int sd_bus_message_get_priority(sd_bus_message *m, int64_t *priority); + int sd_bus_message_get_expect_reply(sd_bus_message *m); + int sd_bus_message_get_auto_start(sd_bus_message *m); + int sd_bus_message_get_allow_interactive_authorization(sd_bus_message *m); ++int sd_bus_message_append_cmdline(sd_bus_message *m, const char *signature, char ***x); + + const char *sd_bus_message_get_signature(sd_bus_message *m, int complete); + const char *sd_bus_message_get_path(sd_bus_message *m); +-- +1.8.3.1 + diff --git a/meta-phosphor/common/recipes-core/systemd/systemd_%.bbappend b/meta-phosphor/common/recipes-core/systemd/systemd_%.bbappend index 3c3dbac8b..0fd2931e1 100644 --- a/meta-phosphor/common/recipes-core/systemd/systemd_%.bbappend +++ b/meta-phosphor/common/recipes-core/systemd/systemd_%.bbappend @@ -3,6 +3,7 @@ PACKAGECONFIG_remove = "machined hibernate ldconfig binfmt backlight quotacheck FILESEXTRAPATHS_append := "${THISDIR}/${PN}:" SRC_URI += "file://default.network" SRC_URI += "file://obmc-standby.target" +SRC_URI += "file://0001-Export-message_append_cmdline.patch" FILES_${PN} += "${libdir}/systemd/network/default.network" FILES_${PN} += "${systemd_system_unitdir}/obmc-standby.target" |