From: Daniel Mack Date: Sat, 9 Aug 2014 12:12:51 +0000 (+0200) Subject: metadata: add new item type KDBUS_ITEM_AUXGROUPS (ABI break) X-Git-Tag: upstream/0.20140911.160207utc~58 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4f3a6afb804735746f01b4de431be2f9e346e8d5;p=platform%2Fcore%2Fsystem%2Fkdbus-bus.git metadata: add new item type KDBUS_ITEM_AUXGROUPS (ABI break) Add new data type to dump the auxiliary groups the sending task is a member of. --- diff --git a/kdbus.h b/kdbus.h index 8f98396..97da18c 100644 --- a/kdbus.h +++ b/kdbus.h @@ -223,6 +223,7 @@ struct kdbus_policy_access { * @KDBUS_ITEM_ID: Connection ID * @KDBUS_ITEM_TIMESTAMP: Timestamp * @KDBUS_ITEM_CREDS: Process credential + * @KDBUS_ITEM_AUXGROUPS: Auxiliary process groups * @KDBUS_ITEM_PID_COMM: Process ID "comm" identifier * @KDBUS_ITEM_TID_COMM: Thread ID "comm" identifier * @KDBUS_ITEM_EXE: The path of the executable @@ -263,6 +264,7 @@ enum kdbus_item_type { KDBUS_ITEM_ID, KDBUS_ITEM_TIMESTAMP, KDBUS_ITEM_CREDS, + KDBUS_ITEM_AUXGROUPS, KDBUS_ITEM_PID_COMM, KDBUS_ITEM_TID_COMM, KDBUS_ITEM_EXE, @@ -500,6 +502,7 @@ enum kdbus_hello_flags { * enum kdbus_attach_flags - flags for metadata attachments * @KDBUS_ATTACH_TIMESTAMP: Timestamp * @KDBUS_ATTACH_CREDS: Credentials + * @KDBUS_ATTACH_AUXGROUPS: Auxiliary groups * @KDBUS_ATTACH_NAMES: Well-known names * @KDBUS_ATTACH_COMM: The "comm" process identifier * @KDBUS_ATTACH_EXE: The path of the executable @@ -514,16 +517,17 @@ enum kdbus_hello_flags { enum kdbus_attach_flags { KDBUS_ATTACH_TIMESTAMP = 1 << 0, KDBUS_ATTACH_CREDS = 1 << 1, - KDBUS_ATTACH_NAMES = 1 << 2, - KDBUS_ATTACH_COMM = 1 << 3, - KDBUS_ATTACH_EXE = 1 << 4, - KDBUS_ATTACH_CMDLINE = 1 << 5, - KDBUS_ATTACH_CGROUP = 1 << 6, - KDBUS_ATTACH_CAPS = 1 << 7, - KDBUS_ATTACH_SECLABEL = 1 << 8, - KDBUS_ATTACH_AUDIT = 1 << 9, - KDBUS_ATTACH_CONN_NAME = 1 << 10, - _KDBUS_ATTACH_ALL = (1 << 11) - 1, + KDBUS_ATTACH_AUXGROUPS = 1 << 2, + KDBUS_ATTACH_NAMES = 1 << 3, + KDBUS_ATTACH_COMM = 1 << 4, + KDBUS_ATTACH_EXE = 1 << 5, + KDBUS_ATTACH_CMDLINE = 1 << 6, + KDBUS_ATTACH_CGROUP = 1 << 7, + KDBUS_ATTACH_CAPS = 1 << 8, + KDBUS_ATTACH_SECLABEL = 1 << 9, + KDBUS_ATTACH_AUDIT = 1 << 10, + KDBUS_ATTACH_CONN_NAME = 1 << 11, + _KDBUS_ATTACH_ALL = (1 << 12) - 1, }; /** diff --git a/metadata.c b/metadata.c index 0db5392..facf70b 100644 --- a/metadata.c +++ b/metadata.c @@ -189,6 +189,35 @@ static int kdbus_meta_append_cred(struct kdbus_meta *meta) &creds, sizeof(creds)); } +static int kdbus_meta_append_auxgroups(struct kdbus_meta *meta) +{ + struct group_info *info; + struct kdbus_item *item; + u64 *gid, size; + int i, ret = 0; + + info = get_current_groups(); + + size = KDBUS_ITEM_SIZE(info->ngroups * sizeof(*gid)); + item = kdbus_meta_append_item(meta, size); + if (IS_ERR(item)) { + ret = PTR_ERR(item); + goto exit_put_groups; + } + + item->size = size; + item->type = KDBUS_ITEM_AUXGROUPS; + gid = (u64 *) item->data; + + for (i = 0; i < info->ngroups; i++) + gid[i] = from_kgid(current_user_ns(), GROUP_AT(info, i)); + +exit_put_groups: + put_group_info(info); + + return ret; +} + static int kdbus_meta_append_src_names(struct kdbus_meta *meta, struct kdbus_conn *conn) { @@ -437,6 +466,12 @@ int kdbus_meta_append(struct kdbus_meta *meta, return ret; } + if (mask & KDBUS_ATTACH_AUXGROUPS) { + ret = kdbus_meta_append_auxgroups(meta); + if (ret < 0) + return ret; + } + if (mask & KDBUS_ATTACH_NAMES && conn) { ret = kdbus_meta_append_src_names(meta, conn); if (ret < 0)