mirror of
https://github.com/systemd/systemd
synced 2024-09-16 06:43:18 +00:00
bus: catch up with kernel changes
This commit is contained in:
parent
cee22bd3cb
commit
a2cef833cf
|
@ -540,6 +540,7 @@ int bus_kernel_read_message(sd_bus *bus, sd_bus_message **m) {
|
|||
|
||||
int bus_kernel_create(const char *name, char **s) {
|
||||
struct kdbus_cmd_bus_make *make;
|
||||
struct kdbus_cmd_make_item *n, *cg;
|
||||
size_t l;
|
||||
int fd;
|
||||
char *p;
|
||||
|
@ -552,16 +553,27 @@ int bus_kernel_create(const char *name, char **s) {
|
|||
return -errno;
|
||||
|
||||
l = strlen(name);
|
||||
make = alloca0(offsetof(struct kdbus_cmd_bus_make, name) + DECIMAL_STR_MAX(uid_t) + 1 + l + 1);
|
||||
sprintf(make->name, "%lu-%s", (unsigned long) getuid(), name);
|
||||
make->size = offsetof(struct kdbus_cmd_bus_make, name) + strlen(make->name) + 1;
|
||||
make = alloca0(offsetof(struct kdbus_cmd_bus_make, items) +
|
||||
sizeof(struct kdbus_cmd_make_item) + sizeof(uint64_t) +
|
||||
sizeof(struct kdbus_cmd_make_item) + DECIMAL_STR_MAX(uid_t) + 1 + l + 1);
|
||||
|
||||
cg = make->items;
|
||||
cg->type = KDBUS_CMD_MAKE_CGROUP;
|
||||
cg->data64[0] = 1;
|
||||
cg->size = sizeof(struct kdbus_cmd_make_item) + sizeof(uint64_t);
|
||||
|
||||
n = KDBUS_ITEM_NEXT(cg);
|
||||
n->type = KDBUS_CMD_MAKE_NAME;
|
||||
sprintf(n->str, "%lu-%s", (unsigned long) getuid(), name);
|
||||
n->size = sizeof(struct kdbus_cmd_make_item) + strlen(n->str) + 1;
|
||||
|
||||
make->size = offsetof(struct kdbus_cmd_bus_make, items) + cg->size + n->size;
|
||||
make->flags = KDBUS_ACCESS_WORLD | KDBUS_POLICY_OPEN;
|
||||
make->bus_flags = 0;
|
||||
make->bloom_size = BLOOM_SIZE;
|
||||
make->cgroup_id = 1;
|
||||
assert_cc(BLOOM_SIZE % 8 == 0);
|
||||
|
||||
p = strjoin("/dev/kdbus/", make->name, "/bus", NULL);
|
||||
p = strjoin("/dev/kdbus/", n->str, "/bus", NULL);
|
||||
if (!p)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
* Copyright (C) 2013 Kay Sievers
|
||||
* Copyright (C) 2013 Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
* Copyright (C) 2013 Linux Foundation
|
||||
* Copyright (C) 2013 Lennart Poettering
|
||||
* Copyright (C) 2013 Daniel Mack <daniel@zonque.org>
|
||||
*
|
||||
* kdbus is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Lesser General Public License as published by the
|
||||
|
@ -92,7 +94,6 @@ enum {
|
|||
KDBUS_MSG_NAME_CHANGE, /* .name_change */
|
||||
KDBUS_MSG_ID_ADD, /* .id_change */
|
||||
KDBUS_MSG_ID_REMOVE, /* .id_change */
|
||||
KDBUS_MSG_ID_CHANGE, /* .id_change */
|
||||
KDBUS_MSG_REPLY_TIMEOUT, /* empty, but .reply_cookie in .kdbus_msg is filled in */
|
||||
KDBUS_MSG_REPLY_DEAD, /* dito */
|
||||
};
|
||||
|
@ -227,7 +228,35 @@ enum {
|
|||
KDBUS_POLICY_OPEN = 4,
|
||||
};
|
||||
|
||||
/* Items to append to kdbus_cmd_bus_make, kdbus_cmd_ep_make and
|
||||
* kdbus_cmd_ns_make */
|
||||
|
||||
enum {
|
||||
KDBUS_CMD_MAKE_NONE,
|
||||
KDBUS_CMD_MAKE_NAME,
|
||||
KDBUS_CMD_MAKE_CGROUP, /* the cgroup hierarchy ID for which to attach
|
||||
* cgroup membership paths * to messages. */
|
||||
KDBUS_CMD_MAKE_CRED, /* allow translator services which connect
|
||||
* to the bus on behalf of somebody else,
|
||||
* allow specifiying the credentials of the
|
||||
* client to connect on behalf on. Needs
|
||||
* privileges */
|
||||
|
||||
};
|
||||
|
||||
struct kdbus_cmd_make_item {
|
||||
__u64 size;
|
||||
__u64 type;
|
||||
union {
|
||||
__u8 data[0];
|
||||
__u64 data64[0];
|
||||
char str[0];
|
||||
};
|
||||
};
|
||||
|
||||
struct kdbus_cmd_hello {
|
||||
__u64 size;
|
||||
|
||||
/* userspace → kernel, kernel → userspace */
|
||||
__u64 conn_flags; /* userspace specifies its
|
||||
* capabilities and more, kernel
|
||||
|
@ -236,26 +265,16 @@ struct kdbus_cmd_hello {
|
|||
* capabilities by returning an error
|
||||
* from KDBUS_CMD_HELLO */
|
||||
|
||||
/* userspace → kernel */
|
||||
__u64 pid; /* To allow translator services which
|
||||
* connect to the bus on behalf of
|
||||
* somebody else, allow specifiying
|
||||
* the PID of the client to connect on
|
||||
* behalf on. Normal clients should
|
||||
* pass this as 0 (i.e. to do things
|
||||
* under their own PID). Priviliged
|
||||
* clients can pass != 0, to operate
|
||||
* on behalf of somebody else. */
|
||||
|
||||
/* kernel → userspace */
|
||||
__u64 bus_flags; /* this is .flags copied verbatim from
|
||||
* from original KDBUS_CMD_BUS_MAKE
|
||||
* ioctl. It's intended to be useful
|
||||
* to do negotiation of features of
|
||||
* the payload that is transfreted. */
|
||||
__u64 id; /* peer id */
|
||||
__u64 id; /* id assigned to this connection */
|
||||
__u64 bloom_size; /* The bloom filter size chosen by the
|
||||
* bus owner */
|
||||
struct kdbus_cmd_make_item items[0];
|
||||
};
|
||||
|
||||
struct kdbus_cmd_bus_make {
|
||||
|
@ -268,12 +287,9 @@ struct kdbus_cmd_bus_make {
|
|||
* copied verbatim into the bus
|
||||
* structure and returned from
|
||||
* KDBUS_CMD_HELLO, later */
|
||||
__u64 cgroup_id; /* the cgroup hierarchy ID for which
|
||||
* to attach cgroup membership paths
|
||||
* to messages. 0 if no cgroup data
|
||||
* shall be attached. */
|
||||
__u64 bloom_size; /* Size of the bloom filter for this bus. */
|
||||
char name[0];
|
||||
__u64 bloom_size; /* size of the bloom filter for this bus */
|
||||
struct kdbus_cmd_make_item items[0];
|
||||
|
||||
};
|
||||
|
||||
struct kdbus_cmd_ep_make {
|
||||
|
@ -284,7 +300,7 @@ struct kdbus_cmd_ep_make {
|
|||
* same way as for
|
||||
* KDBUS_CMD_BUS_MAKE. Unused for
|
||||
* now. */
|
||||
char name[0];
|
||||
struct kdbus_cmd_make_item items[0];
|
||||
};
|
||||
|
||||
struct kdbus_cmd_ns_make {
|
||||
|
@ -295,7 +311,7 @@ struct kdbus_cmd_ns_make {
|
|||
* same way as for
|
||||
* KDBUS_CMD_BUS_MAKE. Unused for
|
||||
* now. */
|
||||
char name[0];
|
||||
struct kdbus_cmd_make_item items[0];
|
||||
};
|
||||
|
||||
enum {
|
||||
|
@ -322,15 +338,15 @@ struct kdbus_cmd_names {
|
|||
};
|
||||
|
||||
enum {
|
||||
KDBUS_CMD_NAME_INFO_ITEM_NAME,
|
||||
KDBUS_CMD_NAME_INFO_ITEM_SECLABEL,
|
||||
KDBUS_CMD_NAME_INFO_ITEM_AUDIT,
|
||||
KDBUS_CMD_NAME_INFO_ITEM_NAME, /* userspace → kernel */
|
||||
KDBUS_CMD_NAME_INFO_ITEM_SECLABEL, /* kernel → userspace */
|
||||
KDBUS_CMD_NAME_INFO_ITEM_AUDIT, /* kernel → userspace */
|
||||
};
|
||||
|
||||
struct kdbus_cmd_name_info_item {
|
||||
__u64 size;
|
||||
__u64 type;
|
||||
__u8 items[0];
|
||||
__u8 data[0];
|
||||
};
|
||||
|
||||
struct kdbus_cmd_name_info {
|
||||
|
@ -338,7 +354,7 @@ struct kdbus_cmd_name_info {
|
|||
__u64 flags;
|
||||
__u64 id; /* either ID, or 0 and _ITEM_NAME follows */
|
||||
struct kdbus_creds creds;
|
||||
struct kdbus_cmd_name_info_item item[0]; /* list of item records */
|
||||
struct kdbus_cmd_name_info_item items[0]; /* list of item records */
|
||||
};
|
||||
|
||||
enum {
|
||||
|
@ -349,7 +365,6 @@ enum {
|
|||
KDBUS_CMD_MATCH_NAME_CHANGE, /* Matches a name string against KDBUS_MSG_NAME_CHANGE */
|
||||
KDBUS_CMD_MATCH_ID_ADD, /* Matches an ID against KDBUS_MSG_ID_ADD */
|
||||
KDBUS_CMD_MATCH_ID_REMOVE, /* Matches an ID against KDBUS_MSG_ID_REMOVE */
|
||||
KDBUS_CMD_MATCH_ID_CHANGE, /* Matches an ID against KDBUS_MSG_ID_CHANGE */
|
||||
};
|
||||
|
||||
struct kdbus_cmd_match_item {
|
||||
|
|
Loading…
Reference in a new issue