From dbb642afae6aa825594fb1c57dff632b013666a3 Mon Sep 17 00:00:00 2001 From: Kay Sievers Date: Sat, 9 Nov 2013 00:58:11 +0100 Subject: [PATCH] bus: let magic ":no-sender" pass the validation --- TODO | 1 + src/libsystemd-bus/bus-internal.c | 10 ++++++++++ src/libsystemd-bus/bus-internal.h | 1 + src/libsystemd-bus/bus-message.c | 4 ++-- 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/TODO b/TODO index 38246f656..b5ffbb294 100644 --- a/TODO +++ b/TODO @@ -1,4 +1,5 @@ Bugfixes: +* check :no-sender logic after PID conversion * enabling an instance unit creates a pointless link, and the unit will be started with getty@getty.service: diff --git a/src/libsystemd-bus/bus-internal.c b/src/libsystemd-bus/bus-internal.c index 0bea8cac4..f0a28c623 100644 --- a/src/libsystemd-bus/bus-internal.c +++ b/src/libsystemd-bus/bus-internal.c @@ -166,6 +166,16 @@ bool service_name_is_valid(const char *p) { return true; } +bool sender_name_is_valid(const char *p) { + if (isempty(p)) + return false; + + if (streq(p, ":no-sender")) + return true; + + return service_name_is_valid(p); +} + bool member_name_is_valid(const char *p) { const char *q; diff --git a/src/libsystemd-bus/bus-internal.h b/src/libsystemd-bus/bus-internal.h index 5fc3a2472..cd9f37edd 100644 --- a/src/libsystemd-bus/bus-internal.h +++ b/src/libsystemd-bus/bus-internal.h @@ -271,6 +271,7 @@ struct sd_bus { bool interface_name_is_valid(const char *p); bool service_name_is_valid(const char *p); +bool sender_name_is_valid(const char *p); bool member_name_is_valid(const char *p); bool object_path_is_valid(const char *p); char *object_path_startswith(const char *a, const char *b); diff --git a/src/libsystemd-bus/bus-message.c b/src/libsystemd-bus/bus-message.c index 42c764c62..2c2e69e39 100644 --- a/src/libsystemd-bus/bus-message.c +++ b/src/libsystemd-bus/bus-message.c @@ -3928,7 +3928,7 @@ int bus_message_parse_fields(sd_bus_message *m) { if (!streq(signature, "s")) return -EBADMSG; - r = message_peek_field_string(m, service_name_is_valid, &ri, &m->destination); + r = message_peek_field_string(m, sender_name_is_valid, &ri, &m->destination); break; case SD_BUS_MESSAGE_HEADER_SENDER: @@ -3939,7 +3939,7 @@ int bus_message_parse_fields(sd_bus_message *m) { if (!streq(signature, "s")) return -EBADMSG; - r = message_peek_field_string(m, service_name_is_valid, &ri, &m->sender); + r = message_peek_field_string(m, sender_name_is_valid, &ri, &m->sender); break; -- 2.30.2