nsresourced,vmspawn,mountfsd: various smaller fixes (#36689)
This commit is contained in:
@@ -940,7 +940,7 @@ static int run(int argc, char *argv[]) {
|
||||
r = varlink_server_new(&server,
|
||||
SD_VARLINK_SERVER_INHERIT_USERDATA|
|
||||
SD_VARLINK_SERVER_ALLOW_FD_PASSING_INPUT|SD_VARLINK_SERVER_ALLOW_FD_PASSING_OUTPUT,
|
||||
NULL);
|
||||
&polkit_registry);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to allocate server: %m");
|
||||
|
||||
@@ -955,8 +955,6 @@ static int run(int argc, char *argv[]) {
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to bind methods: %m");
|
||||
|
||||
sd_varlink_server_set_userdata(server, &polkit_registry);
|
||||
|
||||
r = sd_varlink_server_set_exit_on_idle(server, true);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to enable exit-on-idle mode: %m");
|
||||
|
||||
@@ -101,9 +101,9 @@ static int build_user_json(UserNamespaceInfo *userns_info, uid_t offset, sd_json
|
||||
static int vl_method_get_user_record(sd_varlink *link, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata) {
|
||||
|
||||
static const sd_json_dispatch_field dispatch_table[] = {
|
||||
{ "uid", SD_JSON_VARIANT_UNSIGNED, sd_json_dispatch_uid_gid, offsetof(LookupParameters, uid), 0 },
|
||||
{ "userName", SD_JSON_VARIANT_STRING, json_dispatch_const_user_group_name, offsetof(LookupParameters, user_name), SD_JSON_RELAX },
|
||||
{ "service", SD_JSON_VARIANT_STRING, sd_json_dispatch_const_string, offsetof(LookupParameters, service), 0 },
|
||||
{ "uid", _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uid_gid, offsetof(LookupParameters, uid), 0 },
|
||||
{ "userName", SD_JSON_VARIANT_STRING, json_dispatch_const_user_group_name, offsetof(LookupParameters, user_name), SD_JSON_RELAX },
|
||||
{ "service", SD_JSON_VARIANT_STRING, sd_json_dispatch_const_string, offsetof(LookupParameters, service), 0 },
|
||||
{}
|
||||
};
|
||||
|
||||
@@ -228,9 +228,9 @@ static int build_group_json(UserNamespaceInfo *userns_info, gid_t offset, sd_jso
|
||||
static int vl_method_get_group_record(sd_varlink *link, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata) {
|
||||
|
||||
static const sd_json_dispatch_field dispatch_table[] = {
|
||||
{ "gid", SD_JSON_VARIANT_UNSIGNED, sd_json_dispatch_uid_gid, offsetof(LookupParameters, gid), 0 },
|
||||
{ "groupName", SD_JSON_VARIANT_STRING, json_dispatch_const_user_group_name, offsetof(LookupParameters, group_name), SD_JSON_RELAX },
|
||||
{ "service", SD_JSON_VARIANT_STRING, sd_json_dispatch_const_string, offsetof(LookupParameters, service), 0 },
|
||||
{ "gid", _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uid_gid, offsetof(LookupParameters, gid), 0 },
|
||||
{ "groupName", SD_JSON_VARIANT_STRING, json_dispatch_const_user_group_name, offsetof(LookupParameters, group_name), SD_JSON_RELAX },
|
||||
{ "service", SD_JSON_VARIANT_STRING, sd_json_dispatch_const_string, offsetof(LookupParameters, service), 0 },
|
||||
{}
|
||||
};
|
||||
|
||||
@@ -713,7 +713,7 @@ static int validate_name(sd_varlink *link, const char *name, bool mangle, char *
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int validate_target_and_size(sd_varlink *link, unsigned target, unsigned size) {
|
||||
static int validate_target_and_size(sd_varlink *link, uid_t target, uint32_t size) {
|
||||
assert(link);
|
||||
|
||||
if (!IN_SET(size, 1U, 0x10000))
|
||||
@@ -794,8 +794,8 @@ static int validate_userns_is_empty(sd_varlink *link, int userns_fd) {
|
||||
|
||||
typedef struct AllocateParameters {
|
||||
const char *name;
|
||||
unsigned size;
|
||||
unsigned target;
|
||||
uint32_t size;
|
||||
uid_t target;
|
||||
unsigned userns_fd_idx;
|
||||
bool mangle_name;
|
||||
} AllocateParameters;
|
||||
@@ -804,8 +804,8 @@ static int vl_method_allocate_user_range(sd_varlink *link, sd_json_variant *para
|
||||
|
||||
static const sd_json_dispatch_field dispatch_table[] = {
|
||||
{ "name", SD_JSON_VARIANT_STRING, sd_json_dispatch_const_string, offsetof(AllocateParameters, name), SD_JSON_MANDATORY },
|
||||
{ "size", _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint, offsetof(AllocateParameters, size), SD_JSON_MANDATORY },
|
||||
{ "target", _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint, offsetof(AllocateParameters, target), 0 },
|
||||
{ "size", _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint32, offsetof(AllocateParameters, size), SD_JSON_MANDATORY },
|
||||
{ "target", _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uid_gid, offsetof(AllocateParameters, target), 0 },
|
||||
{ "userNamespaceFileDescriptor", _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint, offsetof(AllocateParameters, userns_fd_idx), SD_JSON_MANDATORY },
|
||||
{ "mangleName", SD_JSON_VARIANT_BOOLEAN, sd_json_dispatch_stdbool, offsetof(AllocateParameters, mangle_name), 0 },
|
||||
{}
|
||||
@@ -817,7 +817,7 @@ static int vl_method_allocate_user_range(sd_varlink *link, sd_json_variant *para
|
||||
uid_t peer_uid;
|
||||
struct stat userns_st;
|
||||
AllocateParameters p = {
|
||||
.size = UINT_MAX,
|
||||
.size = UINT32_MAX,
|
||||
.userns_fd_idx = UINT_MAX,
|
||||
};
|
||||
int r;
|
||||
@@ -1008,7 +1008,7 @@ static int vl_method_register_user_namespace(sd_varlink *link, sd_json_variant *
|
||||
static const sd_json_dispatch_field dispatch_table[] = {
|
||||
{ "name", SD_JSON_VARIANT_STRING, sd_json_dispatch_const_string, offsetof(RegisterParameters, name), SD_JSON_MANDATORY },
|
||||
{ "userNamespaceFileDescriptor", _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint, offsetof(RegisterParameters, userns_fd_idx), SD_JSON_MANDATORY },
|
||||
{ "mangleName", SD_JSON_VARIANT_BOOLEAN, sd_json_dispatch_stdbool, offsetof(AllocateParameters, mangle_name), 0 },
|
||||
{ "mangleName", SD_JSON_VARIANT_BOOLEAN, sd_json_dispatch_stdbool, offsetof(RegisterParameters, mangle_name), 0 },
|
||||
{}
|
||||
};
|
||||
|
||||
@@ -1592,6 +1592,7 @@ static int vl_method_add_netif_to_user_namespace(sd_varlink *link, sd_json_varia
|
||||
_cleanup_close_ int userns_fd = -EBADF, netns_fd = -EBADF, registry_dir_fd = -EBADF;
|
||||
AddNetworkParameters p = {
|
||||
.userns_fd_idx = UINT_MAX,
|
||||
.netns_fd_idx = UINT_MAX,
|
||||
};
|
||||
_cleanup_(userns_info_freep) UserNamespaceInfo *userns_info = NULL;
|
||||
struct stat userns_st;
|
||||
@@ -1760,7 +1761,7 @@ static int run(int argc, char *argv[]) {
|
||||
&server,
|
||||
SD_VARLINK_SERVER_INHERIT_USERDATA|
|
||||
SD_VARLINK_SERVER_ALLOW_FD_PASSING_INPUT|SD_VARLINK_SERVER_ALLOW_FD_PASSING_OUTPUT,
|
||||
NULL);
|
||||
&bpf);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to allocate varlink server: %m");
|
||||
|
||||
@@ -1784,8 +1785,6 @@ static int run(int argc, char *argv[]) {
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to bind methods: %m");
|
||||
|
||||
sd_varlink_server_set_userdata(server, &bpf);
|
||||
|
||||
r = getenv_bool("NSRESOURCE_FIXED_WORKER");
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to parse NSRESOURCE_FIXED_WORKER: %m");
|
||||
|
||||
@@ -2265,14 +2265,19 @@ static int run_virtual_machine(int kvm_device_fd, int vhost_device_fd) {
|
||||
return r;
|
||||
if (r == 0) {
|
||||
/* set TERM and LANG if they are missing */
|
||||
if (setenv("TERM", "vt220", 0) < 0)
|
||||
return log_oom();
|
||||
if (setenv("TERM", "vt220", 0) < 0) {
|
||||
log_oom();
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (setenv("LANG", "C.UTF-8", 0) < 0)
|
||||
return log_oom();
|
||||
if (setenv("LANG", "C.UTF-8", 0) < 0) {
|
||||
log_oom();
|
||||
goto fail;
|
||||
}
|
||||
|
||||
execv(qemu_binary, cmdline);
|
||||
log_error_errno(errno, "Failed to execve %s: %m", qemu_binary);
|
||||
fail:
|
||||
_exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user