mirror of
https://github.com/morgan9e/systemd
synced 2026-04-15 00:47:10 +09:00
bus-polkit: port polkit_registry to use value destructors in hash_ops
This commit is contained in:
committed by
Luca Boccassi
parent
d04c1a1c8e
commit
2a1ffd3e3a
@@ -1073,7 +1073,7 @@ void bus_done(Manager *m) {
|
||||
assert(!m->subscribed);
|
||||
|
||||
m->deserialized_subscribed = strv_free(m->deserialized_subscribed);
|
||||
bus_verify_polkit_async_registry_free(m->polkit_registry);
|
||||
m->polkit_registry = hashmap_free(m->polkit_registry);
|
||||
}
|
||||
|
||||
int bus_fdset_add_all(Manager *m, FDSet *fds) {
|
||||
|
||||
@@ -268,7 +268,7 @@ Manager* manager_free(Manager *m) {
|
||||
(void) home_wait_for_worker(h);
|
||||
|
||||
m->bus = sd_bus_flush_close_unref(m->bus);
|
||||
m->polkit_registry = bus_verify_polkit_async_registry_free(m->polkit_registry);
|
||||
m->polkit_registry = hashmap_free(m->polkit_registry);
|
||||
|
||||
m->device_monitor = sd_device_monitor_unref(m->device_monitor);
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@ static void context_destroy(Context *c) {
|
||||
assert(c);
|
||||
|
||||
context_reset(c, UINT64_MAX);
|
||||
bus_verify_polkit_async_registry_free(c->polkit_registry);
|
||||
hashmap_free(c->polkit_registry);
|
||||
}
|
||||
|
||||
static void context_read_etc_hostname(Context *c) {
|
||||
|
||||
@@ -527,7 +527,7 @@ static Manager *manager_unref(Manager *m) {
|
||||
|
||||
hashmap_free(m->transfers);
|
||||
|
||||
bus_verify_polkit_async_registry_free(m->polkit_registry);
|
||||
hashmap_free(m->polkit_registry);
|
||||
|
||||
m->bus = sd_bus_flush_close_unref(m->bus);
|
||||
sd_event_unref(m->event);
|
||||
|
||||
@@ -304,7 +304,7 @@ void context_clear(Context *c) {
|
||||
c->x11_cache = sd_bus_message_unref(c->x11_cache);
|
||||
c->vc_cache = sd_bus_message_unref(c->vc_cache);
|
||||
|
||||
c->polkit_registry = bus_verify_polkit_async_registry_free(c->polkit_registry);
|
||||
c->polkit_registry = hashmap_free(c->polkit_registry);
|
||||
};
|
||||
|
||||
X11Context *context_get_x11_context(Context *c) {
|
||||
|
||||
@@ -154,7 +154,7 @@ static Manager* manager_free(Manager *m) {
|
||||
if (m->unlink_nologin)
|
||||
(void) unlink_or_warn("/run/nologin");
|
||||
|
||||
bus_verify_polkit_async_registry_free(m->polkit_registry);
|
||||
hashmap_free(m->polkit_registry);
|
||||
|
||||
sd_bus_flush_close_unref(m->bus);
|
||||
sd_event_unref(m->event);
|
||||
|
||||
@@ -96,7 +96,7 @@ static Manager* manager_unref(Manager *m) {
|
||||
sd_event_source_unref(m->nscd_cache_flush_event);
|
||||
#endif
|
||||
|
||||
bus_verify_polkit_async_registry_free(m->polkit_registry);
|
||||
hashmap_free(m->polkit_registry);
|
||||
|
||||
manager_varlink_done(m);
|
||||
|
||||
|
||||
@@ -638,8 +638,7 @@ Manager* manager_free(Manager *m) {
|
||||
sd_device_monitor_unref(m->device_monitor);
|
||||
|
||||
manager_varlink_done(m);
|
||||
|
||||
bus_verify_polkit_async_registry_free(m->polkit_registry);
|
||||
hashmap_free(m->polkit_registry);
|
||||
sd_bus_flush_close_unref(m->bus);
|
||||
|
||||
free(m->dynamic_timezone);
|
||||
|
||||
@@ -642,7 +642,7 @@ Manager* manager_free(Manager *m) {
|
||||
sd_event_source_unref(m->mem_pressure_context_event_source);
|
||||
sd_event_unref(m->event);
|
||||
|
||||
bus_verify_polkit_async_registry_free(m->polkit_registry);
|
||||
hashmap_free(m->polkit_registry);
|
||||
sd_bus_flush_close_unref(m->bus);
|
||||
|
||||
hashmap_free(m->monitored_swap_cgroup_contexts);
|
||||
|
||||
@@ -65,7 +65,7 @@ static Manager* manager_unref(Manager *m) {
|
||||
|
||||
sd_event_source_unref(m->image_cache_defer_event);
|
||||
|
||||
bus_verify_polkit_async_registry_free(m->polkit_registry);
|
||||
hashmap_free(m->polkit_registry);
|
||||
|
||||
sd_bus_flush_close_unref(m->bus);
|
||||
sd_event_unref(m->event);
|
||||
|
||||
@@ -731,7 +731,7 @@ Manager *manager_free(Manager *m) {
|
||||
|
||||
ordered_set_free(m->dns_extra_stub_listeners);
|
||||
|
||||
bus_verify_polkit_async_registry_free(m->polkit_registry);
|
||||
hashmap_free(m->polkit_registry);
|
||||
|
||||
sd_bus_flush_close_unref(m->bus);
|
||||
|
||||
|
||||
@@ -236,6 +236,14 @@ static AsyncPolkitQuery *async_polkit_query_free(AsyncPolkitQuery *q) {
|
||||
DEFINE_PRIVATE_TRIVIAL_REF_UNREF_FUNC(AsyncPolkitQuery, async_polkit_query, async_polkit_query_free);
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(AsyncPolkitQuery*, async_polkit_query_unref);
|
||||
|
||||
DEFINE_HASH_OPS_WITH_VALUE_DESTRUCTOR(
|
||||
async_polkit_query_hash_ops,
|
||||
void,
|
||||
trivial_hash_func,
|
||||
trivial_compare_func,
|
||||
AsyncPolkitQuery,
|
||||
async_polkit_query_unref);
|
||||
|
||||
static int async_polkit_defer(sd_event_source *s, void *userdata) {
|
||||
AsyncPolkitQuery *q = ASSERT_PTR(userdata);
|
||||
|
||||
@@ -557,7 +565,7 @@ int bus_verify_polkit_async_full(
|
||||
return -ENOMEM;
|
||||
|
||||
if (!q->registry) {
|
||||
r = hashmap_ensure_put(registry, /* hash_ops= */ NULL, call, q);
|
||||
r = hashmap_ensure_put(registry, &async_polkit_query_hash_ops, call, q);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
@@ -576,15 +584,6 @@ int bus_verify_polkit_async_full(
|
||||
return -EACCES;
|
||||
}
|
||||
|
||||
Hashmap *bus_verify_polkit_async_registry_free(Hashmap *registry) {
|
||||
#if ENABLE_POLKIT
|
||||
return hashmap_free_with_destructor(registry, async_polkit_query_unref);
|
||||
#else
|
||||
assert(hashmap_isempty(registry));
|
||||
return hashmap_free(registry);
|
||||
#endif
|
||||
}
|
||||
|
||||
static int varlink_check_good_user(Varlink *link, uid_t good_user) {
|
||||
int r;
|
||||
|
||||
@@ -795,7 +794,7 @@ int varlink_verify_polkit_async(
|
||||
return -ENOMEM;
|
||||
|
||||
if (!q->registry) {
|
||||
r = hashmap_ensure_put(registry, /* hash_ops= */ NULL, link, q);
|
||||
r = hashmap_ensure_put(registry, &async_polkit_query_hash_ops, link, q);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
|
||||
@@ -14,8 +14,6 @@ static inline int bus_verify_polkit_async(sd_bus_message *call, const char *acti
|
||||
return bus_verify_polkit_async_full(call, action, details, false, UID_INVALID, registry, ret_error);
|
||||
}
|
||||
|
||||
Hashmap *bus_verify_polkit_async_registry_free(Hashmap *registry);
|
||||
|
||||
int varlink_verify_polkit_async(Varlink *link, sd_bus *bus, const char *action, const char **details, uid_t good_user, Hashmap **registry);
|
||||
|
||||
/* A JsonDispatch initializer that makes sure the allowInteractiveAuthentication boolean field we want for
|
||||
|
||||
@@ -119,7 +119,7 @@ static void context_clear(Context *c) {
|
||||
assert(c);
|
||||
|
||||
free(c->zone);
|
||||
bus_verify_polkit_async_registry_free(c->polkit_registry);
|
||||
hashmap_free(c->polkit_registry);
|
||||
sd_bus_message_unref(c->cache);
|
||||
|
||||
sd_bus_slot_unref(c->slot_job_removed);
|
||||
|
||||
@@ -962,7 +962,7 @@ Manager* manager_free(Manager *m) {
|
||||
|
||||
sd_bus_flush_close_unref(m->bus);
|
||||
|
||||
bus_verify_polkit_async_registry_free(m->polkit_registry);
|
||||
hashmap_free(m->polkit_registry);
|
||||
|
||||
return mfree(m);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user