[systemd-devel] [PATCH] bus-proxyd: fix compatibility with old dbus-1

2014-10-10 Thread Lukasz Skalski
'ListQueuedOwners' method should return 'NameHasNoOwner' error
if chosen name is not available on bus.

---
 src/bus-proxyd/bus-proxyd.c | 9 +
 1 file changed, 9 insertions(+)

diff --git a/src/bus-proxyd/bus-proxyd.c b/src/bus-proxyd/bus-proxyd.c
index 4f44825..52498f3 100644
--- a/src/bus-proxyd/bus-proxyd.c
+++ b/src/bus-proxyd/bus-proxyd.c
@@ -733,6 +733,7 @@ static int process_driver(sd_bus *a, sd_bus *b, 
sd_bus_message *m) {
 struct kdbus_cmd_free cmd_free;
 struct kdbus_cmd_name *name;
 _cleanup_strv_free_ char **owners = NULL;
+_cleanup_bus_error_free_ sd_bus_error error = 
SD_BUS_ERROR_NULL;
 char *arg0;
 int err = 0;
 
@@ -743,6 +744,14 @@ static int process_driver(sd_bus *a, sd_bus *b, 
sd_bus_message *m) {
 if (!service_name_is_valid(arg0))
 return synthetic_reply_method_errno(m, -EINVAL, NULL);
 
+r = sd_bus_get_owner(a, arg0, 0, NULL);
+if (r == -ESRCH || r == -ENXIO) {
+sd_bus_error_setf(error, 
SD_BUS_ERROR_NAME_HAS_NO_OWNER, Could not get owners of name '%s': no such 
name., arg0);
+return synthetic_reply_method_errno(m, r, error);
+}
+if (r  0)
+return synthetic_reply_method_errno(m, r, NULL);
+
 cmd.flags = KDBUS_NAME_LIST_QUEUED;
 r = ioctl(a-input_fd, KDBUS_CMD_NAME_LIST, cmd);
 if (r  0)
-- 
1.9.3

___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] [PATCH] bus-proxyd: fix compatibility with old dbus-1

2014-10-10 Thread Daniel Mack
On 10/10/2014 04:42 PM, Lukasz Skalski wrote:
 'ListQueuedOwners' method should return 'NameHasNoOwner' error
 if chosen name is not available on bus.

Applied, thanks!

 
 ---
  src/bus-proxyd/bus-proxyd.c | 9 +
  1 file changed, 9 insertions(+)
 
 diff --git a/src/bus-proxyd/bus-proxyd.c b/src/bus-proxyd/bus-proxyd.c
 index 4f44825..52498f3 100644
 --- a/src/bus-proxyd/bus-proxyd.c
 +++ b/src/bus-proxyd/bus-proxyd.c
 @@ -733,6 +733,7 @@ static int process_driver(sd_bus *a, sd_bus *b, 
 sd_bus_message *m) {
  struct kdbus_cmd_free cmd_free;
  struct kdbus_cmd_name *name;
  _cleanup_strv_free_ char **owners = NULL;
 +_cleanup_bus_error_free_ sd_bus_error error = 
 SD_BUS_ERROR_NULL;
  char *arg0;
  int err = 0;
  
 @@ -743,6 +744,14 @@ static int process_driver(sd_bus *a, sd_bus *b, 
 sd_bus_message *m) {
  if (!service_name_is_valid(arg0))
  return synthetic_reply_method_errno(m, -EINVAL, 
 NULL);
  
 +r = sd_bus_get_owner(a, arg0, 0, NULL);
 +if (r == -ESRCH || r == -ENXIO) {
 +sd_bus_error_setf(error, 
 SD_BUS_ERROR_NAME_HAS_NO_OWNER, Could not get owners of name '%s': no such 
 name., arg0);
 +return synthetic_reply_method_errno(m, r, error);
 +}
 +if (r  0)
 +return synthetic_reply_method_errno(m, r, NULL);
 +
  cmd.flags = KDBUS_NAME_LIST_QUEUED;
  r = ioctl(a-input_fd, KDBUS_CMD_NAME_LIST, cmd);
  if (r  0)
 

___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel