chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
bus-util: simplify bus_verify_polkit_async() a bit
[elogind.git]
/
src
/
libsystemd
/
sd-bus
/
bus-util.c
diff --git
a/src/libsystemd/sd-bus/bus-util.c
b/src/libsystemd/sd-bus/bus-util.c
index 32c536813ddd892ee33fb5a921e884682ddf3b63..44facc6ef91e64d9d0176ee292e913165f4f2018 100644
(file)
--- a/
src/libsystemd/sd-bus/bus-util.c
+++ b/
src/libsystemd/sd-bus/bus-util.c
@@
-184,44
+184,35
@@
int bus_name_has_owner(sd_bus *c, const char *name, sd_bus_error *error) {
}
int bus_verify_polkit(
}
int bus_verify_polkit(
- sd_bus
*bus
,
-
sd_bus_message *m
,
+ sd_bus
_message *call
,
+
int capability
,
const char *action,
bool interactive,
bool *_challenge,
sd_bus_error *e) {
const char *action,
bool interactive,
bool *_challenge,
sd_bus_error *e) {
- _cleanup_bus_creds_unref_ sd_bus_creds *creds = NULL;
- uid_t uid;
int r;
int r;
- assert(bus);
- assert(m);
+ assert(call);
assert(action);
assert(action);
- r = sd_bus_query_sender_creds(m, SD_BUS_CREDS_UID, &creds);
- if (r < 0)
- return r;
-
- r = sd_bus_creds_get_uid(creds, &uid);
+ r = sd_bus_query_sender_privilege(call, capability);
if (r < 0)
return r;
if (r < 0)
return r;
-
- if (uid == 0)
+ else if (r > 0)
return 1;
return 1;
-
#ifdef ENABLE_POLKIT
else {
_cleanup_bus_message_unref_ sd_bus_message *reply = NULL;
int authorized = false, challenge = false;
const char *sender;
#ifdef ENABLE_POLKIT
else {
_cleanup_bus_message_unref_ sd_bus_message *reply = NULL;
int authorized = false, challenge = false;
const char *sender;
- sender = sd_bus_message_get_sender(
m
);
+ sender = sd_bus_message_get_sender(
call
);
if (!sender)
return -EBADMSG;
r = sd_bus_call_method(
if (!sender)
return -EBADMSG;
r = sd_bus_call_method(
- bus,
+
call->
bus,
"org.freedesktop.PolicyKit1",
"/org/freedesktop/PolicyKit1/Authority",
"org.freedesktop.PolicyKit1.Authority",
"org.freedesktop.PolicyKit1",
"/org/freedesktop/PolicyKit1/Authority",
"org.freedesktop.PolicyKit1.Authority",
@@
-322,31
+313,29
@@
finish:
#endif
int bus_verify_polkit_async(
#endif
int bus_verify_polkit_async(
- sd_bus *bus,
- Hashmap **registry,
- sd_bus_message *m,
+ sd_bus_message *call,
+ int capability,
const char *action,
bool interactive,
const char *action,
bool interactive,
- sd_bus_error *error,
- sd_bus_message_handler_t callback,
- void *userdata) {
+ Hashmap **registry,
+ sd_bus_error *error) {
#ifdef ENABLE_POLKIT
_cleanup_bus_message_unref_ sd_bus_message *pk = NULL;
#ifdef ENABLE_POLKIT
_cleanup_bus_message_unref_ sd_bus_message *pk = NULL;
+ _cleanup_bus_slot_unref_ sd_bus_slot *slot = NULL;
AsyncPolkitQuery *q;
const char *sender;
AsyncPolkitQuery *q;
const char *sender;
+ sd_bus_message_handler_t callback;
+ void *userdata;
#endif
#endif
- _cleanup_bus_creds_unref_ sd_bus_creds *creds = NULL;
- uid_t uid;
int r;
int r;
- assert(bus);
- assert(registry);
- assert(m);
+ assert(call);
assert(action);
assert(action);
+ assert(registry);
#ifdef ENABLE_POLKIT
#ifdef ENABLE_POLKIT
- q = hashmap_get(*registry,
m
);
+ q = hashmap_get(*registry,
call
);
if (q) {
int authorized, challenge;
if (q) {
int authorized, challenge;
@@
-383,19
+372,23
@@
int bus_verify_polkit_async(
}
#endif
}
#endif
- r = sd_bus_query_sender_creds(m, SD_BUS_CREDS_UID, &creds);
- if (r < 0)
- return r;
-
- r = sd_bus_creds_get_uid(creds, &uid);
+ r = sd_bus_query_sender_privilege(call, capability);
if (r < 0)
return r;
if (r < 0)
return r;
-
- if (uid == 0)
+ else if (r > 0)
return 1;
#ifdef ENABLE_POLKIT
return 1;
#ifdef ENABLE_POLKIT
- sender = sd_bus_message_get_sender(m);
+ if (sd_bus_get_current_message(call->bus) != call)
+ return -EINVAL;
+
+ callback = sd_bus_get_current_handler(call->bus);
+ if (!callback)
+ return -EINVAL;
+
+ userdata = sd_bus_get_current_userdata(call->bus);
+
+ sender = sd_bus_message_get_sender(call);
if (!sender)
return -EBADMSG;
if (!sender)
return -EBADMSG;
@@
-404,7
+397,7
@@
int bus_verify_polkit_async(
return r;
r = sd_bus_message_new_method_call(
return r;
r = sd_bus_message_new_method_call(
- bus,
+
call->
bus,
&pk,
"org.freedesktop.PolicyKit1",
"/org/freedesktop/PolicyKit1/Authority",
&pk,
"org.freedesktop.PolicyKit1",
"/org/freedesktop/PolicyKit1/Authority",
@@
-428,11
+421,11
@@
int bus_verify_polkit_async(
if (!q)
return -ENOMEM;
if (!q)
return -ENOMEM;
- q->request = sd_bus_message_ref(
m
);
+ q->request = sd_bus_message_ref(
call
);
q->callback = callback;
q->userdata = userdata;
q->callback = callback;
q->userdata = userdata;
- r = hashmap_put(*registry,
m
, q);
+ r = hashmap_put(*registry,
call
, q);
if (r < 0) {
async_polkit_query_free(q);
return r;
if (r < 0) {
async_polkit_query_free(q);
return r;
@@
-440,7
+433,7
@@
int bus_verify_polkit_async(
q->registry = *registry;
q->registry = *registry;
- r = sd_bus_call_async(bus, &q->slot, pk, async_polkit_callback, q, 0);
+ r = sd_bus_call_async(
call->
bus, &q->slot, pk, async_polkit_callback, q, 0);
if (r < 0) {
async_polkit_query_free(q);
return r;
if (r < 0) {
async_polkit_query_free(q);
return r;
@@
-452,7
+445,7
@@
int bus_verify_polkit_async(
return -EACCES;
}
return -EACCES;
}
-void bus_verify_polkit_async_registry_free(
sd_bus *bus,
Hashmap *registry) {
+void bus_verify_polkit_async_registry_free(Hashmap *registry) {
#ifdef ENABLE_POLKIT
AsyncPolkitQuery *q;
#ifdef ENABLE_POLKIT
AsyncPolkitQuery *q;