}
if (state->dm_runas) {
- flexarray_append(dm_args, "-runas");
- flexarray_append(dm_args, state->dm_runas);
+ if (qemu_opts->have_runwith_user) {
+ flexarray_append_pair(dm_args, "-run-with",
+ GCSPRINTF("user=%s", state->dm_runas));
+ } else {
+ flexarray_append(dm_args, "-runas");
+ flexarray_append(dm_args, state->dm_runas);
+ }
}
}
flexarray_append(dm_args, NULL);
if (!strcmp("chroot", libxl__json_object_get_string(o))) {
dmss->qemu_opts.have_runwith_chroot = true;
}
+ else if (!strcmp("user", libxl__json_object_get_string(o))) {
+ dmss->qemu_opts.have_runwith_user = true;
+ }
}
/*
typedef struct libxl__qemu_available_opts libxl__qemu_available_opts;
struct libxl__qemu_available_opts {
bool have_runwith_chroot;
+ bool have_runwith_user;
};
typedef void libxl__dm_spawn_cb(libxl__egc *egc, libxl__dm_spawn_state*,