bus: include connection name in credentials structure
This commit is contained in:
parent
8d1db1d154
commit
cccb0b2cdb
|
@ -187,6 +187,7 @@ global:
|
||||||
sd_bus_creds_get_audit_login_uid;
|
sd_bus_creds_get_audit_login_uid;
|
||||||
sd_bus_creds_get_unique_name;
|
sd_bus_creds_get_unique_name;
|
||||||
sd_bus_creds_get_well_known_names;
|
sd_bus_creds_get_well_known_names;
|
||||||
|
sd_bus_creds_get_connection_name;
|
||||||
|
|
||||||
/* Error structures */
|
/* Error structures */
|
||||||
sd_bus_error_free;
|
sd_bus_error_free;
|
||||||
|
|
|
@ -379,9 +379,10 @@ static int bus_get_owner_kdbus(
|
||||||
cmd = alloca0(size);
|
cmd = alloca0(size);
|
||||||
strcpy(cmd->name, name);
|
strcpy(cmd->name, name);
|
||||||
}
|
}
|
||||||
cmd->flags = KDBUS_ATTACH_NAMES;
|
|
||||||
|
|
||||||
cmd->size = size;
|
cmd->size = size;
|
||||||
|
kdbus_translate_attach_flags(mask, (uint64_t*) &cmd->flags);
|
||||||
|
|
||||||
r = ioctl(bus->input_fd, KDBUS_CMD_CONN_INFO, cmd);
|
r = ioctl(bus->input_fd, KDBUS_CMD_CONN_INFO, cmd);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return -errno;
|
return -errno;
|
||||||
|
@ -553,6 +554,18 @@ static int bus_get_owner_kdbus(
|
||||||
c->mask |= SD_BUS_CREDS_WELL_KNOWN_NAMES;
|
c->mask |= SD_BUS_CREDS_WELL_KNOWN_NAMES;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case KDBUS_ITEM_CONN_NAME:
|
||||||
|
if ((mask & SD_BUS_CREDS_CONNECTION_NAME)) {
|
||||||
|
c->conn_name = strdup(item->str);
|
||||||
|
if (!c->conn_name) {
|
||||||
|
r = -ENOMEM;
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
c->mask |= SD_BUS_CREDS_CONNECTION_NAME;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -92,6 +92,7 @@ _public_ sd_bus_creds *sd_bus_creds_unref(sd_bus_creds *c) {
|
||||||
free(c->label);
|
free(c->label);
|
||||||
free(c->unique_name);
|
free(c->unique_name);
|
||||||
free(c->cgroup_root);
|
free(c->cgroup_root);
|
||||||
|
free(c->conn_name);
|
||||||
free(c);
|
free(c);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -462,6 +463,18 @@ _public_ int sd_bus_creds_get_well_known_names(sd_bus_creds *c, char ***well_kno
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_public_ int sd_bus_creds_get_connection_name(sd_bus_creds *c, const char **ret) {
|
||||||
|
assert_return(c, -EINVAL);
|
||||||
|
assert_return(ret, -EINVAL);
|
||||||
|
|
||||||
|
if (!(c->mask & SD_BUS_CREDS_CONNECTION_NAME))
|
||||||
|
return -ENODATA;
|
||||||
|
|
||||||
|
assert(c->conn_name);
|
||||||
|
*ret = c->conn_name;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int has_cap(sd_bus_creds *c, unsigned offset, int capability) {
|
static int has_cap(sd_bus_creds *c, unsigned offset, int capability) {
|
||||||
size_t sz;
|
size_t sz;
|
||||||
|
|
||||||
|
|
|
@ -64,6 +64,8 @@ struct sd_bus_creds {
|
||||||
char **well_known_names;
|
char **well_known_names;
|
||||||
|
|
||||||
char *cgroup_root;
|
char *cgroup_root;
|
||||||
|
|
||||||
|
char *conn_name;
|
||||||
};
|
};
|
||||||
|
|
||||||
sd_bus_creds* bus_creds_new(void);
|
sd_bus_creds* bus_creds_new(void);
|
||||||
|
|
|
@ -342,8 +342,10 @@ int bus_creds_dump(sd_bus_creds *c, FILE *f) {
|
||||||
fprintf(f, " TIDComm=%s", c->tid_comm);
|
fprintf(f, " TIDComm=%s", c->tid_comm);
|
||||||
if (c->mask & SD_BUS_CREDS_SELINUX_CONTEXT)
|
if (c->mask & SD_BUS_CREDS_SELINUX_CONTEXT)
|
||||||
fprintf(f, " Label=%s", c->label);
|
fprintf(f, " Label=%s", c->label);
|
||||||
|
if (c->mask & SD_BUS_CREDS_CONNECTION_NAME)
|
||||||
|
fprintf(f, " ConnectionName=%s", c->conn_name);
|
||||||
|
|
||||||
if (c->mask & (SD_BUS_CREDS_EXE|SD_BUS_CREDS_COMM|SD_BUS_CREDS_TID_COMM|SD_BUS_CREDS_SELINUX_CONTEXT))
|
if (c->mask & (SD_BUS_CREDS_EXE|SD_BUS_CREDS_COMM|SD_BUS_CREDS_TID_COMM|SD_BUS_CREDS_SELINUX_CONTEXT|SD_BUS_CREDS_CONNECTION_NAME))
|
||||||
fputs("\n", f);
|
fputs("\n", f);
|
||||||
|
|
||||||
if (sd_bus_creds_get_cmdline(c, &cmdline) >= 0) {
|
if (sd_bus_creds_get_cmdline(c, &cmdline) >= 0) {
|
||||||
|
|
|
@ -568,6 +568,11 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k) {
|
||||||
goto fail;
|
goto fail;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case KDBUS_ITEM_CONN_NAME:
|
||||||
|
m->creds.conn_name = d->str;
|
||||||
|
m->creds.mask |= SD_BUS_CREDS_CONNECTION_NAME & bus->creds_mask;
|
||||||
|
break;
|
||||||
|
|
||||||
case KDBUS_ITEM_FDS:
|
case KDBUS_ITEM_FDS:
|
||||||
case KDBUS_ITEM_SECLABEL:
|
case KDBUS_ITEM_SECLABEL:
|
||||||
break;
|
break;
|
||||||
|
@ -1240,6 +1245,9 @@ int kdbus_translate_attach_flags(uint64_t mask, uint64_t *kdbus_mask) {
|
||||||
if (mask & SD_BUS_CREDS_WELL_KNOWN_NAMES)
|
if (mask & SD_BUS_CREDS_WELL_KNOWN_NAMES)
|
||||||
m |= KDBUS_ATTACH_NAMES;
|
m |= KDBUS_ATTACH_NAMES;
|
||||||
|
|
||||||
|
if (mask & SD_BUS_CREDS_CONNECTION_NAME)
|
||||||
|
m |= KDBUS_ATTACH_CONN_NAME;
|
||||||
|
|
||||||
*kdbus_mask = m;
|
*kdbus_mask = m;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,7 +72,8 @@ enum {
|
||||||
SD_BUS_CREDS_AUDIT_LOGIN_UID = 1ULL << 21,
|
SD_BUS_CREDS_AUDIT_LOGIN_UID = 1ULL << 21,
|
||||||
SD_BUS_CREDS_UNIQUE_NAME = 1ULL << 22,
|
SD_BUS_CREDS_UNIQUE_NAME = 1ULL << 22,
|
||||||
SD_BUS_CREDS_WELL_KNOWN_NAMES = 1ULL << 23,
|
SD_BUS_CREDS_WELL_KNOWN_NAMES = 1ULL << 23,
|
||||||
_SD_BUS_CREDS_ALL = (1ULL << 24) -1,
|
SD_BUS_CREDS_CONNECTION_NAME = 1ULL << 24,
|
||||||
|
_SD_BUS_CREDS_ALL = (1ULL << 25) -1,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
@ -309,6 +310,7 @@ int sd_bus_creds_get_audit_session_id(sd_bus_creds *c, uint32_t *sessionid);
|
||||||
int sd_bus_creds_get_audit_login_uid(sd_bus_creds *c, uid_t *loginuid);
|
int sd_bus_creds_get_audit_login_uid(sd_bus_creds *c, uid_t *loginuid);
|
||||||
int sd_bus_creds_get_unique_name(sd_bus_creds *c, const char **name);
|
int sd_bus_creds_get_unique_name(sd_bus_creds *c, const char **name);
|
||||||
int sd_bus_creds_get_well_known_names(sd_bus_creds *c, char ***names);
|
int sd_bus_creds_get_well_known_names(sd_bus_creds *c, char ***names);
|
||||||
|
int sd_bus_creds_get_connection_name(sd_bus_creds *c, const char **name);
|
||||||
|
|
||||||
/* Error structures */
|
/* Error structures */
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue