X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fshared%2Fpolkit.c;h=cea7074ad3d4f630f5d349da20a53dfc207738c5;hp=9ed6ff2717683ce1f4a130a0d7b9f31263349321;hb=46ba8aae2b82bc5c87ba347e6bf914ecd5e9d51e;hpb=bece1f5215b4ff147e000255d07f6b3cc777f15b diff --git a/src/shared/polkit.c b/src/shared/polkit.c index 9ed6ff271..cea7074ad 100644 --- a/src/shared/polkit.c +++ b/src/shared/polkit.c @@ -35,9 +35,10 @@ int verify_polkit( bool *_challenge, DBusError *error) { + +#ifdef ENABLE_POLKIT DBusMessage *m = NULL, *reply = NULL; const char *unix_process = "unix-process", *pid = "pid", *starttime = "start-time", *cancel_id = ""; - const char *sender; uint32_t flags = interactive ? 1 : 0; pid_t pid_raw; uint32_t pid_u32; @@ -46,6 +47,8 @@ int verify_polkit( DBusMessageIter iter_msg, iter_struct, iter_array, iter_dict, iter_variant; int r; dbus_bool_t authorized = FALSE, challenge = FALSE; +#endif + const char *sender; unsigned long ul; assert(c); @@ -56,13 +59,15 @@ int verify_polkit( return -EINVAL; ul = dbus_bus_get_unix_user(c, sender, error); - if (ul == (unsigned) -1) + if (ul == (unsigned long) -1) return -EINVAL; /* Shortcut things for root, to avoid the PK roundtrip and dependency */ if (ul == 0) return 1; +#ifdef ENABLE_POLKIT + pid_raw = bus_get_unix_process_id(c, sender, error); if (pid_raw == 0) return -EINVAL; @@ -112,11 +117,14 @@ int verify_polkit( reply = dbus_connection_send_with_reply_and_block(c, m, -1, error); if (!reply) { - r = -EIO; - goto finish; - } - if (dbus_set_error_from_message(error, reply)) { + /* Treat no PK available as access denied */ + if (dbus_error_has_name(error, DBUS_ERROR_SERVICE_UNKNOWN)) { + r = -EACCES; + dbus_error_free(error); + goto finish; + } + r = -EIO; goto finish; } @@ -160,4 +168,7 @@ finish: dbus_message_unref(reply); return r; +#else + return -EPERM; +#endif }