mirror of
https://github.com/systemd/systemd.git
synced 2025-01-25 10:04:04 +03:00
libsystemd-bus: catch up with latest kdbus changes
kdbus_cmd_hello now has a new uint64_t flags field for the requested attachments. Follow that change in libsystemd-bus.
This commit is contained in:
parent
71008e18a0
commit
d21a7bb1a9
@ -239,6 +239,7 @@ struct sd_bus {
|
||||
pid_t original_pid;
|
||||
|
||||
uint64_t hello_flags;
|
||||
uint64_t attach_flags;
|
||||
|
||||
uint64_t match_cookie;
|
||||
|
||||
|
@ -326,6 +326,7 @@ int bus_kernel_take_fd(sd_bus *b) {
|
||||
zero(hello);
|
||||
hello.size = sizeof(hello);
|
||||
hello.conn_flags = b->hello_flags;
|
||||
hello.attach_flags = b->attach_flags;
|
||||
hello.pool_size = KDBUS_POOL_SIZE;
|
||||
|
||||
r = ioctl(b->input_fd, KDBUS_CMD_HELLO, &hello);
|
||||
|
@ -611,7 +611,7 @@ int bus_socket_setup(sd_bus *b) {
|
||||
enable = !b->bus_client;
|
||||
setsockopt(b->input_fd, SOL_SOCKET, SO_PASSCRED, &enable, sizeof(enable));
|
||||
|
||||
enable = !b->bus_client && (b->hello_flags & KDBUS_HELLO_ATTACH_SECLABEL);
|
||||
enable = !b->bus_client && (b->attach_flags & KDBUS_ATTACH_SECLABEL);
|
||||
setsockopt(b->input_fd, SOL_SOCKET, SO_PASSSEC, &enable, sizeof(enable));
|
||||
|
||||
/* Increase the buffers to a MB */
|
||||
|
@ -236,18 +236,20 @@ struct kdbus_cmd_policy {
|
||||
enum {
|
||||
KDBUS_HELLO_STARTER = 1 << 0,
|
||||
KDBUS_HELLO_ACCEPT_FD = 1 << 1,
|
||||
};
|
||||
|
||||
/* subscription for metadata to attach */
|
||||
KDBUS_HELLO_ATTACH_TIMESTAMP = 1 << 8,
|
||||
KDBUS_HELLO_ATTACH_CREDS = 1 << 9,
|
||||
KDBUS_HELLO_ATTACH_NAMES = 1 << 10,
|
||||
KDBUS_HELLO_ATTACH_COMM = 1 << 11,
|
||||
KDBUS_HELLO_ATTACH_EXE = 1 << 12,
|
||||
KDBUS_HELLO_ATTACH_CMDLINE = 1 << 13,
|
||||
KDBUS_HELLO_ATTACH_CGROUP = 1 << 14,
|
||||
KDBUS_HELLO_ATTACH_CAPS = 1 << 15,
|
||||
KDBUS_HELLO_ATTACH_SECLABEL = 1 << 16,
|
||||
KDBUS_HELLO_ATTACH_AUDIT = 1 << 17,
|
||||
/* Flags for message attachments */
|
||||
enum {
|
||||
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,
|
||||
};
|
||||
|
||||
struct kdbus_cmd_hello {
|
||||
@ -260,6 +262,9 @@ struct kdbus_cmd_hello {
|
||||
* more. Kernel might refuse client's
|
||||
* capabilities by returning an error
|
||||
* from KDBUS_HELLO */
|
||||
__u64 attach_flags; /* userspace specifies the metadata
|
||||
* attachments it wishes to receive with
|
||||
* every message. */
|
||||
|
||||
/* kernel → userspace */
|
||||
__u64 bus_flags; /* this is .flags copied verbatim from
|
||||
@ -366,7 +371,8 @@ enum {
|
||||
|
||||
struct kdbus_cmd_name_info {
|
||||
__u64 size; /* overall size of info */
|
||||
__u64 flags;
|
||||
__u64 flags; /* query flags */
|
||||
__u64 attach_flags; /* which meta data payload to attach */
|
||||
__u64 id; /* either ID, or 0 and _ITEM_NAME follows */
|
||||
struct kdbus_creds creds;
|
||||
struct kdbus_item items[0]; /* list of item records */
|
||||
|
@ -181,7 +181,8 @@ _public_ int sd_bus_new(sd_bus **ret) {
|
||||
r->n_ref = REFCNT_INIT;
|
||||
r->input_fd = r->output_fd = -1;
|
||||
r->message_version = 1;
|
||||
r->hello_flags |= KDBUS_HELLO_ACCEPT_FD|KDBUS_HELLO_ATTACH_NAMES;
|
||||
r->hello_flags |= KDBUS_HELLO_ACCEPT_FD;
|
||||
r->attach_flags |= KDBUS_ATTACH_NAMES;
|
||||
r->original_pid = getpid();
|
||||
|
||||
assert_se(pthread_mutex_init(&r->memfd_cache_mutex, NULL) == 0);
|
||||
@ -279,7 +280,7 @@ _public_ int sd_bus_negotiate_attach_timestamp(sd_bus *bus, int b) {
|
||||
assert_return(bus->state == BUS_UNSET, -EPERM);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
SET_FLAG(bus->hello_flags, KDBUS_HELLO_ATTACH_TIMESTAMP, b);
|
||||
SET_FLAG(bus->attach_flags, KDBUS_ATTACH_TIMESTAMP, b);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -289,28 +290,28 @@ _public_ int sd_bus_negotiate_attach_creds(sd_bus *bus, uint64_t mask) {
|
||||
assert_return(bus->state == BUS_UNSET, -EPERM);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
SET_FLAG(bus->hello_flags, KDBUS_HELLO_ATTACH_CREDS,
|
||||
SET_FLAG(bus->attach_flags, KDBUS_ATTACH_CREDS,
|
||||
!!(mask & (SD_BUS_CREDS_UID|SD_BUS_CREDS_GID|SD_BUS_CREDS_PID|SD_BUS_CREDS_PID_STARTTIME|SD_BUS_CREDS_TID)));
|
||||
|
||||
SET_FLAG(bus->hello_flags, KDBUS_HELLO_ATTACH_COMM,
|
||||
SET_FLAG(bus->attach_flags, KDBUS_ATTACH_COMM,
|
||||
!!(mask & (SD_BUS_CREDS_COMM|SD_BUS_CREDS_TID_COMM)));
|
||||
|
||||
SET_FLAG(bus->hello_flags, KDBUS_HELLO_ATTACH_EXE,
|
||||
SET_FLAG(bus->attach_flags, KDBUS_ATTACH_EXE,
|
||||
!!(mask & SD_BUS_CREDS_EXE));
|
||||
|
||||
SET_FLAG(bus->hello_flags, KDBUS_HELLO_ATTACH_CMDLINE,
|
||||
SET_FLAG(bus->attach_flags, KDBUS_ATTACH_CMDLINE,
|
||||
!!(mask & SD_BUS_CREDS_CMDLINE));
|
||||
|
||||
SET_FLAG(bus->hello_flags, KDBUS_HELLO_ATTACH_CGROUP,
|
||||
SET_FLAG(bus->attach_flags, KDBUS_ATTACH_CGROUP,
|
||||
!!(mask & (SD_BUS_CREDS_CGROUP|SD_BUS_CREDS_UNIT|SD_BUS_CREDS_USER_UNIT|SD_BUS_CREDS_SLICE|SD_BUS_CREDS_SESSION|SD_BUS_CREDS_OWNER_UID)));
|
||||
|
||||
SET_FLAG(bus->hello_flags, KDBUS_HELLO_ATTACH_CAPS,
|
||||
SET_FLAG(bus->attach_flags, KDBUS_ATTACH_CAPS,
|
||||
!!(mask & (SD_BUS_CREDS_EFFECTIVE_CAPS|SD_BUS_CREDS_PERMITTED_CAPS|SD_BUS_CREDS_INHERITABLE_CAPS|SD_BUS_CREDS_BOUNDING_CAPS)));
|
||||
|
||||
SET_FLAG(bus->hello_flags, KDBUS_HELLO_ATTACH_SECLABEL,
|
||||
SET_FLAG(bus->attach_flags, KDBUS_ATTACH_SECLABEL,
|
||||
!!(mask & SD_BUS_CREDS_SELINUX_CONTEXT));
|
||||
|
||||
SET_FLAG(bus->hello_flags, KDBUS_HELLO_ATTACH_AUDIT,
|
||||
SET_FLAG(bus->attach_flags, KDBUS_ATTACH_AUDIT,
|
||||
!!(mask & (SD_BUS_CREDS_AUDIT_SESSION_ID|SD_BUS_CREDS_AUDIT_LOGIN_UID)));
|
||||
|
||||
bus->creds_mask = mask;
|
||||
|
Loading…
x
Reference in New Issue
Block a user