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_policy: set i->[ug]id_valid
[elogind.git]
/
src
/
bus-proxyd
/
bus-policy.c
diff --git
a/src/bus-proxyd/bus-policy.c
b/src/bus-proxyd/bus-policy.c
index 3f1d7557c178a53493ad4f3755612cd433ec97b7..2c4708dd777c0d19d2cbfe6ee2b4a1a2dbe5ace4 100644
(file)
--- a/
src/bus-proxyd/bus-policy.c
+++ b/
src/bus-proxyd/bus-policy.c
@@
-39,6
+39,14
@@
static void policy_item_free(PolicyItem *i) {
DEFINE_TRIVIAL_CLEANUP_FUNC(PolicyItem*, policy_item_free);
DEFINE_TRIVIAL_CLEANUP_FUNC(PolicyItem*, policy_item_free);
+static void item_append(PolicyItem *i, PolicyItem **list) {
+
+ PolicyItem *tail;
+
+ LIST_FIND_TAIL(items, *list, tail);
+ LIST_INSERT_AFTER(items, *list, tail, i);
+}
+
static int file_load(Policy *p, const char *path) {
_cleanup_free_ char *c = NULL, *policy_user = NULL, *policy_group = NULL;
static int file_load(Policy *p, const char *path) {
_cleanup_free_ char *c = NULL, *policy_user = NULL, *policy_group = NULL;
@@
-330,15
+338,15
@@
static int file_load(Policy *p, const char *path) {
}
if (policy_category == POLICY_CATEGORY_DEFAULT)
}
if (policy_category == POLICY_CATEGORY_DEFAULT)
-
LIST_PREPEND(items, p->default_items, i
);
+
item_append(i, &p->default_items
);
else if (policy_category == POLICY_CATEGORY_MANDATORY)
else if (policy_category == POLICY_CATEGORY_MANDATORY)
-
LIST_PREPEND(items, p->default_items, i
);
+
item_append(i, &p->mandatory_items
);
else if (policy_category == POLICY_CATEGORY_USER) {
const char *u = policy_user;
assert_cc(sizeof(uid_t) == sizeof(uint32_t));
else if (policy_category == POLICY_CATEGORY_USER) {
const char *u = policy_user;
assert_cc(sizeof(uid_t) == sizeof(uint32_t));
- r = hashmap_ensure_allocated(&p->user_items,
trivial_hash_func, trivial_compare_func
);
+ r = hashmap_ensure_allocated(&p->user_items,
NULL
);
if (r < 0)
return log_oom();
if (r < 0)
return log_oom();
@@
-355,7
+363,8
@@
static int file_load(Policy *p, const char *path) {
PolicyItem *first;
first = hashmap_get(p->user_items, UINT32_TO_PTR(i->uid));
PolicyItem *first;
first = hashmap_get(p->user_items, UINT32_TO_PTR(i->uid));
- LIST_PREPEND(items, first, i);
+ item_append(i, &first);
+ i->uid_valid = true;
r = hashmap_replace(p->user_items, UINT32_TO_PTR(i->uid), first);
if (r < 0) {
r = hashmap_replace(p->user_items, UINT32_TO_PTR(i->uid), first);
if (r < 0) {
@@
-369,7
+378,7
@@
static int file_load(Policy *p, const char *path) {
assert_cc(sizeof(gid_t) == sizeof(uint32_t));
assert_cc(sizeof(gid_t) == sizeof(uint32_t));
- r = hashmap_ensure_allocated(&p->group_items,
trivial_hash_func, trivial_compare_func
);
+ r = hashmap_ensure_allocated(&p->group_items,
NULL
);
if (r < 0)
return log_oom();
if (r < 0)
return log_oom();
@@
-386,7
+395,8
@@
static int file_load(Policy *p, const char *path) {
PolicyItem *first;
first = hashmap_get(p->group_items, UINT32_TO_PTR(i->gid));
PolicyItem *first;
first = hashmap_get(p->group_items, UINT32_TO_PTR(i->gid));
- LIST_PREPEND(items, first, i);
+ item_append(i, &first);
+ i->gid_valid = true;
r = hashmap_replace(p->group_items, UINT32_TO_PTR(i->gid), first);
if (r < 0) {
r = hashmap_replace(p->group_items, UINT32_TO_PTR(i->gid), first);
if (r < 0) {
@@
-724,5
+734,6
@@
static const char* const policy_item_class_table[_POLICY_ITEM_CLASS_MAX] = {
[POLICY_ITEM_OWN_PREFIX] = "own-prefix",
[POLICY_ITEM_USER] = "user",
[POLICY_ITEM_GROUP] = "group",
[POLICY_ITEM_OWN_PREFIX] = "own-prefix",
[POLICY_ITEM_USER] = "user",
[POLICY_ITEM_GROUP] = "group",
+ [POLICY_ITEM_IGNORE] = "ignore",
};
DEFINE_STRING_TABLE_LOOKUP(policy_item_class, PolicyItemClass);
};
DEFINE_STRING_TABLE_LOOKUP(policy_item_class, PolicyItemClass);