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 65f1d17c9fbcd47b230c60987bbf0f3e63eb1731..44facc6ef91e64d9d0176ee292e913165f4f2018 100644
(file)
--- a/
src/libsystemd/sd-bus/bus-util.c
+++ b/
src/libsystemd/sd-bus/bus-util.c
@@
-184,8
+184,7
@@
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,
int capability,
const char *action,
bool interactive,
@@
-194,28
+193,26
@@
int bus_verify_polkit(
int r;
int r;
- assert(bus);
- assert(m);
+ assert(call);
assert(action);
assert(action);
- r = sd_bus_query_sender_privilege(
m
, capability);
+ r = sd_bus_query_sender_privilege(
call
, capability);
if (r < 0)
return r;
if (r < 0)
return r;
- if (r > 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",
@@
-316,30
+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,
int capability,
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
int r;
#endif
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;
@@
-376,14
+372,23
@@
int bus_verify_polkit_async(
}
#endif
}
#endif
- r = sd_bus_query_sender_privilege(
m
, capability);
+ r = sd_bus_query_sender_privilege(
call
, capability);
if (r < 0)
return r;
if (r < 0)
return r;
- if (r > 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;
@@
-392,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",
@@
-416,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;
@@
-428,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;