diff options
author | Lennart Poettering <lennart@poettering.net> | 2012-04-16 16:47:33 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2012-04-16 18:59:08 +0200 |
commit | f8e2fb7b14e53f5a4bcfd66d26910af1dee185c6 (patch) | |
tree | c8f7ab02b4525466984a7fa23ebedfde090ef168 /src/shared | |
parent | 9156e799a258658cf3f51434708cdb194c13eaa4 (diff) |
logind: add shutdown/suspend/idle inhibition framework
Diffstat (limited to 'src/shared')
-rw-r--r-- | src/shared/dbus-common.c | 50 | ||||
-rw-r--r-- | src/shared/dbus-common.h | 2 | ||||
-rw-r--r-- | src/shared/polkit.c | 52 | ||||
-rw-r--r-- | src/shared/util.c | 3 |
4 files changed, 55 insertions, 52 deletions
diff --git a/src/shared/dbus-common.c b/src/shared/dbus-common.c index 6d000e1162..e161273cd8 100644 --- a/src/shared/dbus-common.c +++ b/src/shared/dbus-common.c @@ -1155,3 +1155,53 @@ DBusHandlerResult bus_exit_idle_filter(DBusConnection *bus, DBusMessage *m, void return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; } + +/* This mimics dbus_bus_get_unix_user() */ +pid_t bus_get_unix_process_id( + DBusConnection *connection, + const char *name, + DBusError *error) { + + DBusMessage *m = NULL, *reply = NULL; + uint32_t pid = 0; + + m = dbus_message_new_method_call( + DBUS_SERVICE_DBUS, + DBUS_PATH_DBUS, + DBUS_INTERFACE_DBUS, + "GetConnectionUnixProcessID"); + if (!m) { + dbus_set_error_const(error, DBUS_ERROR_NO_MEMORY, NULL); + goto finish; + } + + if (!dbus_message_append_args( + m, + DBUS_TYPE_STRING, &name, + DBUS_TYPE_INVALID)) { + dbus_set_error_const(error, DBUS_ERROR_NO_MEMORY, NULL); + goto finish; + } + + reply = dbus_connection_send_with_reply_and_block(connection, m, -1, error); + if (!reply) + goto finish; + + if (dbus_set_error_from_message(error, reply)) + goto finish; + + if (!dbus_message_get_args( + reply, error, + DBUS_TYPE_UINT32, &pid, + DBUS_TYPE_INVALID)) + goto finish; + +finish: + if (m) + dbus_message_unref(m); + + if (reply) + dbus_message_unref(reply); + + return (pid_t) pid; +} diff --git a/src/shared/dbus-common.h b/src/shared/dbus-common.h index 2bfcdfa5d4..859812900d 100644 --- a/src/shared/dbus-common.h +++ b/src/shared/dbus-common.h @@ -199,4 +199,6 @@ void bus_async_unregister_and_exit(DBusConnection *bus, const char *name); DBusHandlerResult bus_exit_idle_filter(DBusConnection *bus, DBusMessage *m, void *userdata); +pid_t bus_get_unix_process_id(DBusConnection *connection, const char *name, DBusError *error); + #endif diff --git a/src/shared/polkit.c b/src/shared/polkit.c index 07d18e7d5f..14e27cdc60 100644 --- a/src/shared/polkit.c +++ b/src/shared/polkit.c @@ -27,56 +27,6 @@ #include "dbus-common.h" #include "polkit.h" -/* This mimics dbus_bus_get_unix_user() */ -static pid_t get_unix_process_id( - DBusConnection *connection, - const char *name, - DBusError *error) { - - DBusMessage *m = NULL, *reply = NULL; - uint32_t pid = 0; - - m = dbus_message_new_method_call( - DBUS_SERVICE_DBUS, - DBUS_PATH_DBUS, - DBUS_INTERFACE_DBUS, - "GetConnectionUnixProcessID"); - if (!m) { - dbus_set_error_const(error, DBUS_ERROR_NO_MEMORY, NULL); - goto finish; - } - - if (!dbus_message_append_args( - m, - DBUS_TYPE_STRING, &name, - DBUS_TYPE_INVALID)) { - dbus_set_error_const(error, DBUS_ERROR_NO_MEMORY, NULL); - goto finish; - } - - reply = dbus_connection_send_with_reply_and_block(connection, m, -1, error); - if (!reply) - goto finish; - - if (dbus_set_error_from_message(error, reply)) - goto finish; - - if (!dbus_message_get_args( - reply, error, - DBUS_TYPE_UINT32, &pid, - DBUS_TYPE_INVALID)) - goto finish; - -finish: - if (m) - dbus_message_unref(m); - - if (reply) - dbus_message_unref(reply); - - return (pid_t) pid; -} - int verify_polkit( DBusConnection *c, DBusMessage *request, @@ -104,7 +54,7 @@ int verify_polkit( if (!sender) return -EINVAL; - pid_raw = get_unix_process_id(c, sender, error); + pid_raw = bus_get_unix_process_id(c, sender, error); if (pid_raw == 0) return -EINVAL; diff --git a/src/shared/util.c b/src/shared/util.c index 0b4d4d6746..15c7f4d325 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -1690,7 +1690,8 @@ char *cescape(const char *s) { /* Does C style string escaping. */ - if (!(r = new(char, strlen(s)*4 + 1))) + r = new(char, strlen(s)*4 + 1); + if (!r) return NULL; for (f = s, t = r; *f; f++) |