X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fdbus-common.c;h=fc97108e9520fe5f99d90cec3da0fd1f8aaba225;hb=cc527a4734d636f1ab5a66576cb7e232af3cc261;hp=50daedcf58bc0d551930657e184a8b57cdae6b8f;hpb=d200735e13c52dcfe36c0e066f9f6c2fbfb85a9c;p=elogind.git diff --git a/src/dbus-common.c b/src/dbus-common.c index 50daedcf5..fc97108e9 100644 --- a/src/dbus-common.c +++ b/src/dbus-common.c @@ -177,11 +177,11 @@ int bus_connect_system_ssh(const char *user, const char *host, DBusConnection ** assert(user || host); if (user && host) - asprintf(&p, "exec:path=ssh,argv1=-xT,argv2=%s@%s,argv3=systemd-stdio-bridge", user, host); + asprintf(&p, "unixexec:path=ssh,argv1=-xT,argv2=%s@%s,argv3=systemd-stdio-bridge", user, host); else if (user) - asprintf(&p, "exec:path=ssh,argv1=-xT,argv2=%s@localhost,argv3=systemd-stdio-bridge", user); + asprintf(&p, "unixexec:path=ssh,argv1=-xT,argv2=%s@localhost,argv3=systemd-stdio-bridge", user); else if (host) - asprintf(&p, "exec:path=ssh,argv1=-xT,argv2=%s,argv3=systemd-stdio-bridge", host); + asprintf(&p, "unixexec:path=ssh,argv1=-xT,argv2=%s,argv3=systemd-stdio-bridge", host); if (!p) { dbus_set_error_const(error, DBUS_ERROR_NO_MEMORY, NULL); @@ -222,7 +222,8 @@ int bus_connect_system_polkit(DBusConnection **_bus, DBusError *error) { if (geteuid() == 0) return bus_connect(DBUS_BUS_SYSTEM, _bus, NULL, error); - if (!(bus = dbus_connection_open_private("exec:path=pkexec,argv1=" SYSTEMD_STDIO_BRIDGE_BINARY_PATH, error))) + bus = dbus_connection_open_private("unixexec:path=pkexec,argv1=" SYSTEMD_STDIO_BRIDGE_BINARY_PATH, error); + if (!bus) return -EIO; dbus_connection_set_exit_on_disconnect(bus, FALSE); @@ -401,6 +402,7 @@ get_prop: const BusProperty *p; DBusMessageIter sub; char *sig; + void *data; if (!dbus_message_iter_init(message, &iter) || dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING) @@ -455,7 +457,10 @@ set_prop: dbus_free(sig); - r = p->set(&sub, property); + data = (char*)bp->base + p->offset; + if (p->indirect) + data = *(void**)data; + r = p->set(&sub, property, data); if (r < 0) { if (r == -ENOMEM) goto oom; @@ -533,6 +538,22 @@ int bus_property_append_bool(DBusMessageIter *i, const char *property, void *dat return 0; } +int bus_property_append_tristate_false(DBusMessageIter *i, const char *property, void *data) { + int *b = data; + dbus_bool_t db; + + assert(i); + assert(property); + assert(b); + + db = *b > 0; + + if (!dbus_message_iter_append_basic(i, DBUS_TYPE_BOOLEAN, &db)) + return -ENOMEM; + + return 0; +} + int bus_property_append_uint64(DBusMessageIter *i, const char *property, void *data) { assert(i); assert(property);