All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] dbus: Make _dbus_num_children a dbus-private function
@ 2016-04-22  0:57 Andrew Zaborowski
  2016-04-22  0:57 ` [PATCH 2/2] dbus: Check that property signature has one data type Andrew Zaborowski
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Andrew Zaborowski @ 2016-04-22  0:57 UTC (permalink / raw)
  To: ell

[-- Attachment #1: Type: text/plain, Size: 1008 bytes --]

---
 ell/dbus-private.h | 1 +
 ell/dbus-util.c    | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/ell/dbus-private.h b/ell/dbus-private.h
index 6f39a2d..be43aba 100644
--- a/ell/dbus-private.h
+++ b/ell/dbus-private.h
@@ -156,6 +156,7 @@ const char *_dbus_signature_end(const char *signature);
 
 bool _dbus_valid_object_path(const char *path);
 bool _dbus_valid_signature(const char *sig);
+int _dbus_num_children(const char *sig);
 bool _dbus_valid_interface(const char *interface);
 bool _dbus_valid_method(const char *method);
 bool _dbus_parse_unique_name(const char *name, uint64_t *out_id);
diff --git a/ell/dbus-util.c b/ell/dbus-util.c
index 4d79d11..6414216 100644
--- a/ell/dbus-util.c
+++ b/ell/dbus-util.c
@@ -249,7 +249,7 @@ bool _dbus_valid_signature(const char *sig)
 	return true;
 }
 
-static int _dbus_num_children(const char *sig)
+int _dbus_num_children(const char *sig)
 {
 	const char *s = sig;
 	int num_children = 0;
-- 
2.5.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/2] dbus: Check that property signature has one data type
  2016-04-22  0:57 [PATCH 1/2] dbus: Make _dbus_num_children a dbus-private function Andrew Zaborowski
@ 2016-04-22  0:57 ` Andrew Zaborowski
  2016-04-22  2:21   ` Denis Kenzior
  2016-04-22  0:57 ` [PATCH v4] dbus: Remove signature field from gvariant header Andrew Zaborowski
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 8+ messages in thread
From: Andrew Zaborowski @ 2016-04-22  0:57 UTC (permalink / raw)
  To: ell

[-- Attachment #1: Type: text/plain, Size: 551 bytes --]

---
 ell/dbus-service.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ell/dbus-service.c b/ell/dbus-service.c
index 9d2110f..44baaaf 100644
--- a/ell/dbus-service.c
+++ b/ell/dbus-service.c
@@ -408,7 +408,7 @@ LIB_EXPORT bool l_dbus_interface_property(struct l_dbus_interface *interface,
 	if (unlikely(!signature || !getter))
 		return false;
 
-	if (!_dbus_valid_signature(signature))
+	if (_dbus_num_children(signature) != 1)
 		return false;
 
 	/* Pre-calculate the needed meta-info length */
-- 
2.5.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v4] dbus: Remove signature field from gvariant header
  2016-04-22  0:57 [PATCH 1/2] dbus: Make _dbus_num_children a dbus-private function Andrew Zaborowski
  2016-04-22  0:57 ` [PATCH 2/2] dbus: Check that property signature has one data type Andrew Zaborowski
@ 2016-04-22  0:57 ` Andrew Zaborowski
  2016-04-22  2:22   ` Denis Kenzior
  2016-04-22  0:57 ` [PATCH v2 1/2] dbus: Add private _dbus_message_new_error Andrew Zaborowski
  2016-04-22  2:20 ` [PATCH 1/2] dbus: Make _dbus_num_children a dbus-private function Denis Kenzior
  3 siblings, 1 reply; 8+ messages in thread
From: Andrew Zaborowski @ 2016-04-22  0:57 UTC (permalink / raw)
  To: ell

[-- Attachment #1: Type: text/plain, Size: 1614 bytes --]

The main reason to do that is that systemd thinks it's an error and will
ignore received messages with a dbus1-like signature field in the
header.
---
 ell/dbus-message.c | 15 +++++----------
 1 file changed, 5 insertions(+), 10 deletions(-)

diff --git a/ell/dbus-message.c b/ell/dbus-message.c
index 8cbe1a5..6b89f67 100644
--- a/ell/dbus-message.c
+++ b/ell/dbus-message.c
@@ -973,7 +973,7 @@ static void build_header(struct l_dbus_message *message, const char *signature)
 		message->sender = NULL;
 	}
 
-	if (signature[0] != '\0')
+	if (signature[0] != '\0' && !gvariant)
 		add_field(builder, driver, DBUS_MESSAGE_FIELD_SIGNATURE,
 				"g", signature);
 
@@ -1202,13 +1202,10 @@ static bool append_arguments(struct l_dbus_message *message,
 	if (strcmp(signature, generated_signature))
 		return false;
 
-	l_free(generated_signature);
-
 	build_header(message, signature);
 	message->sealed = true;
-
-	get_header_field(message, DBUS_MESSAGE_FIELD_SIGNATURE, 'g',
-						&message->signature);
+	message->signature = generated_signature;
+	message->signature_free = true;
 
 	return true;
 
@@ -1933,10 +1930,8 @@ LIB_EXPORT struct l_dbus_message *l_dbus_message_builder_finalize(
 
 	build_header(builder->message, generated_signature);
 	builder->message->sealed = true;
-
-	get_header_field(builder->message, DBUS_MESSAGE_FIELD_SIGNATURE, 'g',
-						&builder->message->signature);
-	l_free(generated_signature);
+	builder->message->signature = generated_signature;
+	builder->message->signature_free = true;
 
 	return builder->message;
 }
-- 
2.5.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v2 1/2] dbus: Add private _dbus_message_new_error
  2016-04-22  0:57 [PATCH 1/2] dbus: Make _dbus_num_children a dbus-private function Andrew Zaborowski
  2016-04-22  0:57 ` [PATCH 2/2] dbus: Check that property signature has one data type Andrew Zaborowski
  2016-04-22  0:57 ` [PATCH v4] dbus: Remove signature field from gvariant header Andrew Zaborowski
@ 2016-04-22  0:57 ` Andrew Zaborowski
  2016-04-22  2:24   ` Denis Kenzior
  2016-04-22  2:20 ` [PATCH 1/2] dbus: Make _dbus_num_children a dbus-private function Denis Kenzior
  3 siblings, 1 reply; 8+ messages in thread
From: Andrew Zaborowski @ 2016-04-22  0:57 UTC (permalink / raw)
  To: ell

[-- Attachment #1: Type: text/plain, Size: 3010 bytes --]

---
 ell/dbus-message.c | 41 +++++++++++++++++++++++++----------------
 ell/dbus-private.h |  5 +++++
 2 files changed, 30 insertions(+), 16 deletions(-)

diff --git a/ell/dbus-message.c b/ell/dbus-message.c
index 6b89f67..1034acd 100644
--- a/ell/dbus-message.c
+++ b/ell/dbus-message.c
@@ -328,33 +328,26 @@ LIB_EXPORT struct l_dbus_message *l_dbus_message_new_method_return(
 	return message;
 }
 
-LIB_EXPORT struct l_dbus_message *l_dbus_message_new_error_valist(
-					struct l_dbus_message *method_call,
-					const char *name,
-					const char *format, va_list args)
+struct l_dbus_message *_dbus_message_new_error(uint8_t version,
+						uint32_t reply_serial,
+						const char *destination,
+						const char *name,
+						const char *error)
 {
-	char str[1024];
 	struct l_dbus_message *reply;
-	struct dbus_header *hdr = method_call->header;
-	const char *sender;
 
 	if (!_dbus_valid_interface(name))
 		return NULL;
 
-	vsnprintf(str, sizeof(str), format, args);
 	reply = message_new_common(DBUS_MESSAGE_TYPE_ERROR,
 					DBUS_MESSAGE_FLAG_NO_REPLY_EXPECTED,
-					hdr->version);
-
-	reply->reply_serial = _dbus_message_get_serial(method_call);
-
-	sender = l_dbus_message_get_sender(method_call);
-	if (sender)
-		reply->destination = l_strdup(sender);
+					version);
 
 	reply->error_name = l_strdup(name);
+	reply->destination = l_strdup(destination);
+	reply->reply_serial = reply_serial;
 
-	if (!l_dbus_message_set_arguments(reply, "s", str)) {
+	if (!l_dbus_message_set_arguments(reply, "s", error)) {
 		l_dbus_message_unref(reply);
 		return NULL;
 	}
@@ -362,6 +355,22 @@ LIB_EXPORT struct l_dbus_message *l_dbus_message_new_error_valist(
 	return reply;
 }
 
+LIB_EXPORT struct l_dbus_message *l_dbus_message_new_error_valist(
+					struct l_dbus_message *method_call,
+					const char *name,
+					const char *format, va_list args)
+{
+	char str[1024];
+	struct dbus_header *hdr = method_call->header;
+
+	vsnprintf(str, sizeof(str), format, args);
+
+	return _dbus_message_new_error(hdr->version,
+					_dbus_message_get_serial(method_call),
+					l_dbus_message_get_sender(method_call),
+					name, str);
+}
+
 LIB_EXPORT struct l_dbus_message *l_dbus_message_new_error(
 					struct l_dbus_message *method_call,
 					const char *name,
diff --git a/ell/dbus-private.h b/ell/dbus-private.h
index be43aba..ab52895 100644
--- a/ell/dbus-private.h
+++ b/ell/dbus-private.h
@@ -141,6 +141,11 @@ struct l_dbus_message *_dbus_message_new_signal(uint8_t version,
 						const char *path,
 						const char *interface,
 						const char *name);
+struct l_dbus_message *_dbus_message_new_error(uint8_t version,
+						uint32_t reply_serial,
+						const char *destination,
+						const char *name,
+						const char *error);
 
 struct l_dbus_message *dbus_message_from_blob(const void *data, size_t size);
 struct l_dbus_message *dbus_message_build(void *header, size_t header_size,
-- 
2.5.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] dbus: Make _dbus_num_children a dbus-private function
  2016-04-22  0:57 [PATCH 1/2] dbus: Make _dbus_num_children a dbus-private function Andrew Zaborowski
                   ` (2 preceding siblings ...)
  2016-04-22  0:57 ` [PATCH v2 1/2] dbus: Add private _dbus_message_new_error Andrew Zaborowski
@ 2016-04-22  2:20 ` Denis Kenzior
  3 siblings, 0 replies; 8+ messages in thread
From: Denis Kenzior @ 2016-04-22  2:20 UTC (permalink / raw)
  To: ell

[-- Attachment #1: Type: text/plain, Size: 227 bytes --]

Hi Andrew,

On 04/21/2016 07:57 PM, Andrew Zaborowski wrote:
> ---
>   ell/dbus-private.h | 1 +
>   ell/dbus-util.c    | 2 +-
>   2 files changed, 2 insertions(+), 1 deletion(-)

Applied, thanks.

Regards,
-Denis


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] dbus: Check that property signature has one data type
  2016-04-22  0:57 ` [PATCH 2/2] dbus: Check that property signature has one data type Andrew Zaborowski
@ 2016-04-22  2:21   ` Denis Kenzior
  0 siblings, 0 replies; 8+ messages in thread
From: Denis Kenzior @ 2016-04-22  2:21 UTC (permalink / raw)
  To: ell

[-- Attachment #1: Type: text/plain, Size: 696 bytes --]

Hi Andrew,

On 04/21/2016 07:57 PM, Andrew Zaborowski wrote:
> ---
>   ell/dbus-service.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/ell/dbus-service.c b/ell/dbus-service.c
> index 9d2110f..44baaaf 100644
> --- a/ell/dbus-service.c
> +++ b/ell/dbus-service.c
> @@ -408,7 +408,7 @@ LIB_EXPORT bool l_dbus_interface_property(struct l_dbus_interface *interface,
>   	if (unlikely(!signature || !getter))
>   		return false;
>
> -	if (!_dbus_valid_signature(signature))
> +	if (_dbus_num_children(signature) != 1)
>   		return false;

Good catch.

>
>   	/* Pre-calculate the needed meta-info length */
>

Applied, thanks.

Regards,
-Denis

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v4] dbus: Remove signature field from gvariant header
  2016-04-22  0:57 ` [PATCH v4] dbus: Remove signature field from gvariant header Andrew Zaborowski
@ 2016-04-22  2:22   ` Denis Kenzior
  0 siblings, 0 replies; 8+ messages in thread
From: Denis Kenzior @ 2016-04-22  2:22 UTC (permalink / raw)
  To: ell

[-- Attachment #1: Type: text/plain, Size: 368 bytes --]

Hi Andrew,

On 04/21/2016 07:57 PM, Andrew Zaborowski wrote:
> The main reason to do that is that systemd thinks it's an error and will
> ignore received messages with a dbus1-like signature field in the
> header.
> ---
>   ell/dbus-message.c | 15 +++++----------
>   1 file changed, 5 insertions(+), 10 deletions(-)

Applied, thanks.

Regards,
-Denis


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 1/2] dbus: Add private _dbus_message_new_error
  2016-04-22  0:57 ` [PATCH v2 1/2] dbus: Add private _dbus_message_new_error Andrew Zaborowski
@ 2016-04-22  2:24   ` Denis Kenzior
  0 siblings, 0 replies; 8+ messages in thread
From: Denis Kenzior @ 2016-04-22  2:24 UTC (permalink / raw)
  To: ell

[-- Attachment #1: Type: text/plain, Size: 278 bytes --]

Hi Andrew,

On 04/21/2016 07:57 PM, Andrew Zaborowski wrote:
> ---
>   ell/dbus-message.c | 41 +++++++++++++++++++++++++----------------
>   ell/dbus-private.h |  5 +++++
>   2 files changed, 30 insertions(+), 16 deletions(-)
>

Applied, thanks.

Regards,
-Denis


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2016-04-22  2:24 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-04-22  0:57 [PATCH 1/2] dbus: Make _dbus_num_children a dbus-private function Andrew Zaborowski
2016-04-22  0:57 ` [PATCH 2/2] dbus: Check that property signature has one data type Andrew Zaborowski
2016-04-22  2:21   ` Denis Kenzior
2016-04-22  0:57 ` [PATCH v4] dbus: Remove signature field from gvariant header Andrew Zaborowski
2016-04-22  2:22   ` Denis Kenzior
2016-04-22  0:57 ` [PATCH v2 1/2] dbus: Add private _dbus_message_new_error Andrew Zaborowski
2016-04-22  2:24   ` Denis Kenzior
2016-04-22  2:20 ` [PATCH 1/2] dbus: Make _dbus_num_children a dbus-private function Denis Kenzior

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.