[systemd-devel] [PATCH 3/3] test: split conn_update() into update attach-flags and update policy
Djalal Harouni
tixxdz at opendz.org
Mon Aug 4 18:46:08 PDT 2014
Since ordinary connections are only interested in the attach-flags and
policy holders in policies, split conn_update() into:
1) conn_update_attach_flags()
2) conn_update_policy()
This way we use the conn_update_policy() function in test-kdbus-policy
with a policy-holding connection and we pass all the tests. This
prevents messing up with the attach-flags.
Signed-off-by: Djalal Harouni <tixxdz at opendz.org>
---
test/kdbus-util.c | 62 +++++++++++++++++++++++++++++++-----------------
test/kdbus-util.h | 7 +++---
test/test-kdbus-policy.c | 2 +-
3 files changed, 45 insertions(+), 26 deletions(-)
diff --git a/test/kdbus-util.c b/test/kdbus-util.c
index e04aab1..c93390e 100644
--- a/test/kdbus-util.c
+++ b/test/kdbus-util.c
@@ -602,19 +602,15 @@ int name_list(struct conn *conn, uint64_t flags)
return 0;
}
-int conn_update(struct conn *conn, const char *name,
- const struct kdbus_policy_access *access,
- size_t num_access, uint64_t flags)
+int conn_update_attach_flags(struct conn *conn, uint64_t flags)
{
+ int ret;
+ size_t size;
struct kdbus_cmd_update *update;
struct kdbus_item *item;
- size_t i, size;
- int ret;
size = sizeof(struct kdbus_cmd_update);
size += KDBUS_ITEM_SIZE(sizeof(uint64_t));
- size += KDBUS_ITEM_SIZE(strlen(name) + 1);
- size += num_access * KDBUS_ITEM_SIZE(sizeof(struct kdbus_policy_access));
update = malloc(size);
if (!update) {
@@ -628,25 +624,47 @@ int conn_update(struct conn *conn, const char *name,
item = update->items;
- /*
- * normally having flags == 0 is valid, but just keep
- * HELLO flags of kdbus_hello(), don't check them.
- */
item->type = KDBUS_ITEM_ATTACH_FLAGS;
item->size = KDBUS_ITEM_HEADER_SIZE + sizeof(uint64_t);
- item->data64[0] = flags ? flags : KDBUS_ATTACH_TIMESTAMP |
- KDBUS_ATTACH_CREDS |
- KDBUS_ATTACH_NAMES |
- KDBUS_ATTACH_COMM |
- KDBUS_ATTACH_EXE |
- KDBUS_ATTACH_CMDLINE |
- KDBUS_ATTACH_CAPS |
- KDBUS_ATTACH_CGROUP |
- KDBUS_ATTACH_SECLABEL |
- KDBUS_ATTACH_AUDIT |
- KDBUS_ATTACH_CONN_NAME;
+ item->data64[0] = flags;
item = KDBUS_ITEM_NEXT(item);
+ ret = ioctl(conn->fd, KDBUS_CMD_CONN_UPDATE, update);
+ if (ret < 0) {
+ ret = -errno;
+ fprintf(stderr, "error conn update: %d (%m)\n", ret);
+ }
+
+ free(update);
+
+ return ret;
+}
+
+int conn_update_policy(struct conn *conn, const char *name,
+ const struct kdbus_policy_access *access,
+ size_t num_access)
+{
+ struct kdbus_cmd_update *update;
+ struct kdbus_item *item;
+ size_t i, size;
+ int ret;
+
+ size = sizeof(struct kdbus_cmd_update);
+ size += KDBUS_ITEM_SIZE(strlen(name) + 1);
+ size += num_access * KDBUS_ITEM_SIZE(sizeof(struct kdbus_policy_access));
+
+ update = malloc(size);
+ if (!update) {
+ ret = -errno;
+ fprintf(stderr, "error malloc: %d (%m)\n", ret);
+ return ret;
+ }
+
+ memset(update, 0, size);
+ update->size = size;
+
+ item = update->items;
+
item->type = KDBUS_ITEM_NAME;
item->size = KDBUS_ITEM_HEADER_SIZE + strlen(name) + 1;
strcpy(item->str, name);
diff --git a/test/kdbus-util.h b/test/kdbus-util.h
index 615f318..ba94d7b 100644
--- a/test/kdbus-util.h
+++ b/test/kdbus-util.h
@@ -55,9 +55,10 @@ struct conn *kdbus_hello_activator(const char *path, const char *name,
size_t num_access);
struct kdbus_item *make_policy_name(const char *name);
struct kdbus_item *make_policy_access(__u64 type, __u64 bits, __u64 id);
-int conn_update(struct conn *conn, const char *name,
- const struct kdbus_policy_access *access,
- size_t num_access, uint64_t flags);
+int conn_update_attach_flags(struct conn *conn, uint64_t flags);
+int conn_update_policy(struct conn *conn, const char *name,
+ const struct kdbus_policy_access *access,
+ size_t num_access);
void add_match_empty(int fd);
diff --git a/test/test-kdbus-policy.c b/test/test-kdbus-policy.c
index e0bd619..4f8e763 100644
--- a/test/test-kdbus-policy.c
+++ b/test/test-kdbus-policy.c
@@ -64,7 +64,7 @@ static int kdbus_set_policy_talk(struct conn *conn,
.access = KDBUS_POLICY_TALK,
};
- return conn_update(conn, name, &access, 1, 0);
+ return conn_update_policy(conn, name, &access, 1);
}
/* The policy access will be stored in a policy holder connection */
--
1.9.3
More information about the systemd-devel
mailing list