mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-09-17 21:45:33 +03:00
Compare commits
13 Commits
v6.5.0
...
v4.5-maint
Author | SHA1 | Date | |
---|---|---|---|
|
415cc5c064 | ||
|
fd16bd525a | ||
|
d025c10d54 | ||
|
6a028b6e82 | ||
|
ec58805400 | ||
|
618358632b | ||
|
d1017aeee9 | ||
|
35176b5c78 | ||
|
6aedf9bfad | ||
|
78920738ca | ||
|
88924317f3 | ||
|
941ca31e90 | ||
|
3818514602 |
@@ -66,6 +66,28 @@ remoteAdmClientNew(virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
void *opaque)
|
||||
{
|
||||
struct daemonAdmClientPrivate *priv;
|
||||
uid_t clientuid;
|
||||
gid_t clientgid;
|
||||
pid_t clientpid;
|
||||
unsigned long long timestamp;
|
||||
|
||||
if (virNetServerClientGetUNIXIdentity(client,
|
||||
&clientuid,
|
||||
&clientgid,
|
||||
&clientpid,
|
||||
×tamp) < 0)
|
||||
return NULL;
|
||||
|
||||
VIR_DEBUG("New client pid %lld uid %lld",
|
||||
(long long)clientpid,
|
||||
(long long)clientuid);
|
||||
|
||||
if (geteuid() != clientuid) {
|
||||
virReportRestrictedError(_("Disallowing client %lld with uid %lld"),
|
||||
(long long)clientpid,
|
||||
(long long)clientuid);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (VIR_ALLOC(priv) < 0)
|
||||
return NULL;
|
||||
|
@@ -90,7 +90,7 @@ virDomainConfNWFilterInstantiate(const char *vmname,
|
||||
virConnectPtr conn = virGetConnectNWFilter();
|
||||
virNWFilterBindingDefPtr def = NULL;
|
||||
virNWFilterBindingPtr binding = NULL;
|
||||
char *xml;
|
||||
char *xml = NULL;
|
||||
int ret = -1;
|
||||
|
||||
VIR_DEBUG("vmname=%s portdev=%s filter=%s ignoreExists=%d",
|
||||
|
@@ -1073,9 +1073,7 @@ virDomainRestoreFlags(virConnectPtr conn, const char *from, const char *dxml,
|
||||
* previously by virDomainSave() or virDomainSaveFlags().
|
||||
*
|
||||
* No security-sensitive data will be included unless @flags contains
|
||||
* VIR_DOMAIN_XML_SECURE; this flag is rejected on read-only
|
||||
* connections. For this API, @flags should not contain either
|
||||
* VIR_DOMAIN_XML_INACTIVE or VIR_DOMAIN_XML_UPDATE_CPU.
|
||||
* VIR_DOMAIN_XML_SECURE.
|
||||
*
|
||||
* Returns a 0 terminated UTF-8 encoded XML instance, or NULL in case of
|
||||
* error. The caller must free() the returned value.
|
||||
@@ -1091,12 +1089,7 @@ virDomainSaveImageGetXMLDesc(virConnectPtr conn, const char *file,
|
||||
|
||||
virCheckConnectReturn(conn, NULL);
|
||||
virCheckNonNullArgGoto(file, error);
|
||||
|
||||
if ((conn->flags & VIR_CONNECT_RO) && (flags & VIR_DOMAIN_XML_SECURE)) {
|
||||
virReportError(VIR_ERR_OPERATION_DENIED, "%s",
|
||||
_("virDomainSaveImageGetXMLDesc with secure flag"));
|
||||
goto error;
|
||||
}
|
||||
virCheckReadOnlyGoto(conn->flags, error);
|
||||
|
||||
if (conn->driver->domainSaveImageGetXMLDesc) {
|
||||
char *ret;
|
||||
@@ -9484,6 +9477,7 @@ virDomainManagedSaveDefineXML(virDomainPtr domain, const char *dxml,
|
||||
|
||||
virCheckDomainReturn(domain, -1);
|
||||
conn = domain->conn;
|
||||
virCheckReadOnlyGoto(conn->flags, error);
|
||||
|
||||
if (conn->driver->domainManagedSaveDefineXML) {
|
||||
int ret;
|
||||
@@ -11275,6 +11269,7 @@ virConnectGetDomainCapabilities(virConnectPtr conn,
|
||||
virResetLastError();
|
||||
|
||||
virCheckConnectReturn(conn, NULL);
|
||||
virCheckReadOnlyGoto(conn->flags, error);
|
||||
|
||||
if (conn->driver->connectGetDomainCapabilities) {
|
||||
char *ret;
|
||||
|
@@ -1041,6 +1041,7 @@ virConnectCompareHypervisorCPU(virConnectPtr conn,
|
||||
|
||||
virCheckConnectReturn(conn, VIR_CPU_COMPARE_ERROR);
|
||||
virCheckNonNullArgGoto(xmlCPU, error);
|
||||
virCheckReadOnlyGoto(conn->flags, error);
|
||||
|
||||
if (conn->driver->connectCompareHypervisorCPU) {
|
||||
int ret;
|
||||
@@ -1234,6 +1235,7 @@ virConnectBaselineHypervisorCPU(virConnectPtr conn,
|
||||
|
||||
virCheckConnectReturn(conn, NULL);
|
||||
virCheckNonNullArgGoto(xmlCPUs, error);
|
||||
virCheckReadOnlyGoto(conn->flags, error);
|
||||
|
||||
if (conn->driver->connectBaselineHypervisorCPU) {
|
||||
char *cpu;
|
||||
|
@@ -5,6 +5,7 @@ Before=libvirtd.service
|
||||
[Socket]
|
||||
ListenStream=@localstatedir@/run/libvirt/virtlockd-admin-sock
|
||||
Service=virtlockd.service
|
||||
SocketMode=0600
|
||||
|
||||
[Install]
|
||||
WantedBy=sockets.target
|
||||
|
@@ -4,6 +4,7 @@ Before=libvirtd.service
|
||||
|
||||
[Socket]
|
||||
ListenStream=@localstatedir@/run/libvirt/virtlockd-sock
|
||||
SocketMode=0600
|
||||
|
||||
[Install]
|
||||
WantedBy=sockets.target
|
||||
|
@@ -5,6 +5,7 @@ Before=libvirtd.service
|
||||
[Socket]
|
||||
ListenStream=@localstatedir@/run/libvirt/virtlogd-admin-sock
|
||||
Service=virtlogd.service
|
||||
SocketMode=0600
|
||||
|
||||
[Install]
|
||||
WantedBy=sockets.target
|
||||
|
@@ -4,6 +4,7 @@ Before=libvirtd.service
|
||||
|
||||
[Socket]
|
||||
ListenStream=@localstatedir@/run/libvirt/virtlogd-sock
|
||||
SocketMode=0600
|
||||
|
||||
[Install]
|
||||
WantedBy=sockets.target
|
||||
|
@@ -4934,6 +4934,13 @@ qemuOpenChrChardevUNIXSocket(const virDomainChrSourceDef *dev)
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
enum {
|
||||
QEMU_BUILD_CHARDEV_TCP_NOWAIT = (1 << 0),
|
||||
QEMU_BUILD_CHARDEV_FILE_LOGD = (1 << 1),
|
||||
QEMU_BUILD_CHARDEV_UNIX_FD_PASS = (1 << 2),
|
||||
};
|
||||
|
||||
/* This function outputs a -chardev command line option which describes only the
|
||||
* host side of the character device */
|
||||
static char *
|
||||
@@ -4945,8 +4952,7 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager,
|
||||
const virDomainChrSourceDef *dev,
|
||||
const char *alias,
|
||||
virQEMUCapsPtr qemuCaps,
|
||||
bool nowait,
|
||||
bool chardevStdioLogd)
|
||||
unsigned int flags)
|
||||
{
|
||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
bool telnet;
|
||||
@@ -4985,7 +4991,8 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager,
|
||||
_("append not supported in this QEMU binary"));
|
||||
goto cleanup;
|
||||
}
|
||||
if (qemuBuildChrChardevFileStr(chardevStdioLogd ? logManager : NULL,
|
||||
if (qemuBuildChrChardevFileStr(flags & QEMU_BUILD_CHARDEV_FILE_LOGD ?
|
||||
logManager : NULL,
|
||||
cmd, def, &buf,
|
||||
"path", dev->data.file.path,
|
||||
"append", dev->data.file.append) < 0)
|
||||
@@ -5031,8 +5038,11 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager,
|
||||
dev->data.tcp.service,
|
||||
telnet ? ",telnet" : "");
|
||||
|
||||
if (dev->data.tcp.listen)
|
||||
virBufferAdd(&buf, nowait ? ",server,nowait" : ",server", -1);
|
||||
if (dev->data.tcp.listen) {
|
||||
virBufferAddLit(&buf, ",server");
|
||||
if (flags & QEMU_BUILD_CHARDEV_TCP_NOWAIT)
|
||||
virBufferAddLit(&buf, ",nowait");
|
||||
}
|
||||
|
||||
qemuBuildChrChardevReconnectStr(&buf, &dev->data.tcp.reconnect);
|
||||
|
||||
@@ -5072,7 +5082,9 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager,
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_CHR_TYPE_UNIX:
|
||||
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_CHARDEV_FD_PASS)) {
|
||||
if (dev->data.nix.listen &&
|
||||
(flags & QEMU_BUILD_CHARDEV_UNIX_FD_PASS) &&
|
||||
virQEMUCapsGet(qemuCaps, QEMU_CAPS_CHARDEV_FD_PASS)) {
|
||||
if (qemuSecuritySetSocketLabel(secManager, (virDomainDefPtr)def) < 0)
|
||||
goto cleanup;
|
||||
int fd = qemuOpenChrChardevUNIXSocket(dev);
|
||||
@@ -5090,8 +5102,11 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager,
|
||||
virBufferAsprintf(&buf, "socket,id=%s,path=", charAlias);
|
||||
virQEMUBuildBufferEscapeComma(&buf, dev->data.nix.path);
|
||||
}
|
||||
if (dev->data.nix.listen)
|
||||
virBufferAdd(&buf, nowait ? ",server,nowait" : ",server", -1);
|
||||
if (dev->data.nix.listen) {
|
||||
virBufferAddLit(&buf, ",server");
|
||||
if (flags & QEMU_BUILD_CHARDEV_TCP_NOWAIT)
|
||||
virBufferAddLit(&buf, ",nowait");
|
||||
}
|
||||
|
||||
qemuBuildChrChardevReconnectStr(&buf, &dev->data.nix.reconnect);
|
||||
break;
|
||||
@@ -5425,6 +5440,10 @@ qemuBuildMonitorCommandLine(virLogManagerPtr logManager,
|
||||
qemuDomainObjPrivatePtr priv)
|
||||
{
|
||||
char *chrdev;
|
||||
unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT |
|
||||
QEMU_BUILD_CHARDEV_UNIX_FD_PASS;
|
||||
if (priv->chardevStdioLogd)
|
||||
cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
|
||||
|
||||
if (!priv->monConfig)
|
||||
return 0;
|
||||
@@ -5432,8 +5451,7 @@ qemuBuildMonitorCommandLine(virLogManagerPtr logManager,
|
||||
if (!(chrdev = qemuBuildChrChardevStr(logManager, secManager,
|
||||
cmd, cfg, def,
|
||||
priv->monConfig, "monitor",
|
||||
priv->qemuCaps, true,
|
||||
priv->chardevStdioLogd)))
|
||||
priv->qemuCaps, cdevflags)))
|
||||
return -1;
|
||||
virCommandAddArg(cmd, "-chardev");
|
||||
virCommandAddArg(cmd, chrdev);
|
||||
@@ -5558,6 +5576,10 @@ qemuBuildRNGBackendChrdevStr(virLogManagerPtr logManager,
|
||||
char **chr,
|
||||
bool chardevStdioLogd)
|
||||
{
|
||||
unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT |
|
||||
QEMU_BUILD_CHARDEV_UNIX_FD_PASS;
|
||||
if (chardevStdioLogd)
|
||||
cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
|
||||
*chr = NULL;
|
||||
|
||||
switch ((virDomainRNGBackend) rng->backend) {
|
||||
@@ -5570,8 +5592,8 @@ qemuBuildRNGBackendChrdevStr(virLogManagerPtr logManager,
|
||||
if (!(*chr = qemuBuildChrChardevStr(logManager, secManager,
|
||||
cmd, cfg, def,
|
||||
rng->source.chardev,
|
||||
rng->info.alias, qemuCaps, true,
|
||||
chardevStdioLogd)))
|
||||
rng->info.alias, qemuCaps,
|
||||
cdevflags)))
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -8174,8 +8196,7 @@ qemuBuildVhostuserCommandLine(virQEMUDriverPtr driver,
|
||||
virDomainDefPtr def,
|
||||
virDomainNetDefPtr net,
|
||||
virQEMUCapsPtr qemuCaps,
|
||||
unsigned int bootindex,
|
||||
bool chardevStdioLogd)
|
||||
unsigned int bootindex)
|
||||
{
|
||||
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
|
||||
char *chardev = NULL;
|
||||
@@ -8195,8 +8216,7 @@ qemuBuildVhostuserCommandLine(virQEMUDriverPtr driver,
|
||||
if (!(chardev = qemuBuildChrChardevStr(logManager, secManager,
|
||||
cmd, cfg, def,
|
||||
net->data.vhostuser,
|
||||
net->info.alias, qemuCaps, false,
|
||||
chardevStdioLogd)))
|
||||
net->info.alias, qemuCaps, 0)))
|
||||
goto cleanup;
|
||||
break;
|
||||
|
||||
@@ -8270,8 +8290,7 @@ qemuBuildInterfaceCommandLine(virQEMUDriverPtr driver,
|
||||
virNetDevVPortProfileOp vmop,
|
||||
bool standalone,
|
||||
size_t *nnicindexes,
|
||||
int **nicindexes,
|
||||
bool chardevStdioLogd)
|
||||
int **nicindexes)
|
||||
{
|
||||
int ret = -1;
|
||||
char *nic = NULL, *host = NULL;
|
||||
@@ -8394,8 +8413,7 @@ qemuBuildInterfaceCommandLine(virQEMUDriverPtr driver,
|
||||
|
||||
case VIR_DOMAIN_NET_TYPE_VHOSTUSER:
|
||||
ret = qemuBuildVhostuserCommandLine(driver, logManager, secManager, cmd, def,
|
||||
net, qemuCaps, bootindex,
|
||||
chardevStdioLogd);
|
||||
net, qemuCaps, bootindex);
|
||||
goto cleanup;
|
||||
break;
|
||||
|
||||
@@ -8579,8 +8597,7 @@ qemuBuildNetCommandLine(virQEMUDriverPtr driver,
|
||||
bool standalone,
|
||||
size_t *nnicindexes,
|
||||
int **nicindexes,
|
||||
unsigned int *bootHostdevNet,
|
||||
bool chardevStdioLogd)
|
||||
unsigned int *bootHostdevNet)
|
||||
{
|
||||
size_t i;
|
||||
int last_good_net = -1;
|
||||
@@ -8607,8 +8624,7 @@ qemuBuildNetCommandLine(virQEMUDriverPtr driver,
|
||||
if (qemuBuildInterfaceCommandLine(driver, logManager, secManager, cmd, def, net,
|
||||
qemuCaps, bootNet, vmop,
|
||||
standalone, nnicindexes,
|
||||
nicindexes,
|
||||
chardevStdioLogd) < 0)
|
||||
nicindexes) < 0)
|
||||
goto error;
|
||||
|
||||
last_good_net = i;
|
||||
@@ -8680,6 +8696,10 @@ qemuBuildSmartcardCommandLine(virLogManagerPtr logManager,
|
||||
virBuffer opt = VIR_BUFFER_INITIALIZER;
|
||||
const char *database;
|
||||
const char *contAlias = NULL;
|
||||
unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT |
|
||||
QEMU_BUILD_CHARDEV_UNIX_FD_PASS;
|
||||
if (chardevStdioLogd)
|
||||
cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
|
||||
|
||||
if (!def->nsmartcards)
|
||||
return 0;
|
||||
@@ -8745,8 +8765,7 @@ qemuBuildSmartcardCommandLine(virLogManagerPtr logManager,
|
||||
cmd, cfg, def,
|
||||
smartcard->data.passthru,
|
||||
smartcard->info.alias,
|
||||
qemuCaps, true,
|
||||
chardevStdioLogd))) {
|
||||
qemuCaps, cdevflags))) {
|
||||
virBufferFreeAndReset(&opt);
|
||||
return -1;
|
||||
}
|
||||
@@ -8914,6 +8933,10 @@ qemuBuildShmemCommandLine(virLogManagerPtr logManager,
|
||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
char *devstr = NULL;
|
||||
int rc;
|
||||
unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT |
|
||||
QEMU_BUILD_CHARDEV_UNIX_FD_PASS;
|
||||
if (chardevStdioLogd)
|
||||
cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
|
||||
|
||||
if (shmem->size) {
|
||||
/*
|
||||
@@ -8977,8 +9000,8 @@ qemuBuildShmemCommandLine(virLogManagerPtr logManager,
|
||||
devstr = qemuBuildChrChardevStr(logManager, secManager,
|
||||
cmd, cfg, def,
|
||||
&shmem->server.chr,
|
||||
shmem->info.alias, qemuCaps, true,
|
||||
chardevStdioLogd);
|
||||
shmem->info.alias, qemuCaps,
|
||||
cdevflags);
|
||||
if (!devstr)
|
||||
return -1;
|
||||
|
||||
@@ -9071,6 +9094,10 @@ qemuBuildSerialCommandLine(virLogManagerPtr logManager,
|
||||
{
|
||||
size_t i;
|
||||
bool havespice = false;
|
||||
unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT |
|
||||
QEMU_BUILD_CHARDEV_UNIX_FD_PASS;
|
||||
if (chardevStdioLogd)
|
||||
cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
|
||||
|
||||
if (def->nserials) {
|
||||
for (i = 0; i < def->ngraphics && !havespice; i++) {
|
||||
@@ -9090,8 +9117,7 @@ qemuBuildSerialCommandLine(virLogManagerPtr logManager,
|
||||
cmd, cfg, def,
|
||||
serial->source,
|
||||
serial->info.alias,
|
||||
qemuCaps, true,
|
||||
chardevStdioLogd)))
|
||||
qemuCaps, cdevflags)))
|
||||
return -1;
|
||||
virCommandAddArg(cmd, "-chardev");
|
||||
virCommandAddArg(cmd, devstr);
|
||||
@@ -9132,6 +9158,10 @@ qemuBuildParallelsCommandLine(virLogManagerPtr logManager,
|
||||
bool chardevStdioLogd)
|
||||
{
|
||||
size_t i;
|
||||
unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT |
|
||||
QEMU_BUILD_CHARDEV_UNIX_FD_PASS;
|
||||
if (chardevStdioLogd)
|
||||
cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
|
||||
|
||||
for (i = 0; i < def->nparallels; i++) {
|
||||
virDomainChrDefPtr parallel = def->parallels[i];
|
||||
@@ -9141,8 +9171,7 @@ qemuBuildParallelsCommandLine(virLogManagerPtr logManager,
|
||||
cmd, cfg, def,
|
||||
parallel->source,
|
||||
parallel->info.alias,
|
||||
qemuCaps, true,
|
||||
chardevStdioLogd)))
|
||||
qemuCaps, cdevflags)))
|
||||
return -1;
|
||||
virCommandAddArg(cmd, "-chardev");
|
||||
virCommandAddArg(cmd, devstr);
|
||||
@@ -9167,6 +9196,10 @@ qemuBuildChannelsCommandLine(virLogManagerPtr logManager,
|
||||
bool chardevStdioLogd)
|
||||
{
|
||||
size_t i;
|
||||
unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT |
|
||||
QEMU_BUILD_CHARDEV_UNIX_FD_PASS;
|
||||
if (chardevStdioLogd)
|
||||
cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
|
||||
|
||||
for (i = 0; i < def->nchannels; i++) {
|
||||
virDomainChrDefPtr channel = def->channels[i];
|
||||
@@ -9178,8 +9211,7 @@ qemuBuildChannelsCommandLine(virLogManagerPtr logManager,
|
||||
cmd, cfg, def,
|
||||
channel->source,
|
||||
channel->info.alias,
|
||||
qemuCaps, true,
|
||||
chardevStdioLogd)))
|
||||
qemuCaps, cdevflags)))
|
||||
return -1;
|
||||
virCommandAddArg(cmd, "-chardev");
|
||||
virCommandAddArg(cmd, devstr);
|
||||
@@ -9196,8 +9228,7 @@ qemuBuildChannelsCommandLine(virLogManagerPtr logManager,
|
||||
cmd, cfg, def,
|
||||
channel->source,
|
||||
channel->info.alias,
|
||||
qemuCaps, true,
|
||||
chardevStdioLogd)))
|
||||
qemuCaps, cdevflags)))
|
||||
return -1;
|
||||
virCommandAddArg(cmd, "-chardev");
|
||||
virCommandAddArg(cmd, devstr);
|
||||
@@ -9223,6 +9254,10 @@ qemuBuildConsoleCommandLine(virLogManagerPtr logManager,
|
||||
bool chardevStdioLogd)
|
||||
{
|
||||
size_t i;
|
||||
unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT |
|
||||
QEMU_BUILD_CHARDEV_UNIX_FD_PASS;
|
||||
if (chardevStdioLogd)
|
||||
cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
|
||||
|
||||
/* Explicit console devices */
|
||||
for (i = 0; i < def->nconsoles; i++) {
|
||||
@@ -9241,8 +9276,7 @@ qemuBuildConsoleCommandLine(virLogManagerPtr logManager,
|
||||
cmd, cfg, def,
|
||||
console->source,
|
||||
console->info.alias,
|
||||
qemuCaps, true,
|
||||
chardevStdioLogd)))
|
||||
qemuCaps, cdevflags)))
|
||||
return -1;
|
||||
virCommandAddArg(cmd, "-chardev");
|
||||
virCommandAddArg(cmd, devstr);
|
||||
@@ -9263,8 +9297,7 @@ qemuBuildConsoleCommandLine(virLogManagerPtr logManager,
|
||||
cmd, cfg, def,
|
||||
console->source,
|
||||
console->info.alias,
|
||||
qemuCaps, true,
|
||||
chardevStdioLogd)))
|
||||
qemuCaps, cdevflags)))
|
||||
return -1;
|
||||
virCommandAddArg(cmd, "-chardev");
|
||||
virCommandAddArg(cmd, devstr);
|
||||
@@ -9279,8 +9312,7 @@ qemuBuildConsoleCommandLine(virLogManagerPtr logManager,
|
||||
cmd, cfg, def,
|
||||
console->source,
|
||||
console->info.alias,
|
||||
qemuCaps, true,
|
||||
chardevStdioLogd)))
|
||||
qemuCaps, cdevflags)))
|
||||
return -1;
|
||||
virCommandAddArg(cmd, "-chardev");
|
||||
virCommandAddArg(cmd, devstr);
|
||||
@@ -9403,6 +9435,10 @@ qemuBuildRedirdevCommandLine(virLogManagerPtr logManager,
|
||||
bool chardevStdioLogd)
|
||||
{
|
||||
size_t i;
|
||||
unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT |
|
||||
QEMU_BUILD_CHARDEV_UNIX_FD_PASS;
|
||||
if (chardevStdioLogd)
|
||||
cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
|
||||
|
||||
for (i = 0; i < def->nredirdevs; i++) {
|
||||
virDomainRedirdevDefPtr redirdev = def->redirdevs[i];
|
||||
@@ -9412,8 +9448,7 @@ qemuBuildRedirdevCommandLine(virLogManagerPtr logManager,
|
||||
cmd, cfg, def,
|
||||
redirdev->source,
|
||||
redirdev->info.alias,
|
||||
qemuCaps, true,
|
||||
chardevStdioLogd))) {
|
||||
qemuCaps, cdevflags))) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -10269,8 +10304,7 @@ qemuBuildCommandLine(virQEMUDriverPtr driver,
|
||||
|
||||
if (qemuBuildNetCommandLine(driver, logManager, secManager, cmd, def,
|
||||
qemuCaps, vmop, standalone,
|
||||
nnicindexes, nicindexes, &bootHostdevNet,
|
||||
chardevStdioLogd) < 0)
|
||||
nnicindexes, nicindexes, &bootHostdevNet) < 0)
|
||||
goto error;
|
||||
|
||||
if (qemuBuildSmartcardCommandLine(logManager, secManager, cmd, cfg, def, qemuCaps,
|
||||
|
@@ -6792,7 +6792,7 @@ qemuDomainSaveImageGetXMLDesc(virConnectPtr conn, const char *path,
|
||||
if (fd < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (virDomainSaveImageGetXMLDescEnsureACL(conn, def, flags) < 0)
|
||||
if (virDomainSaveImageGetXMLDescEnsureACL(conn, def) < 0)
|
||||
goto cleanup;
|
||||
|
||||
ret = qemuDomainDefFormatXML(driver, def, flags);
|
||||
|
@@ -5124,6 +5124,9 @@ qemuProcessInit(virQEMUDriverPtr driver,
|
||||
vm->def->os.machine)))
|
||||
goto cleanup;
|
||||
|
||||
if (flags & VIR_QEMU_PROCESS_START_STANDALONE)
|
||||
virQEMUCapsClear(priv->qemuCaps, QEMU_CAPS_CHARDEV_FD_PASS);
|
||||
|
||||
if (qemuDomainUpdateCPU(vm, updatedCPU, &origCPU) < 0)
|
||||
goto cleanup;
|
||||
|
||||
@@ -6632,6 +6635,8 @@ qemuProcessCreatePretendCmd(virQEMUDriverPtr driver,
|
||||
|
||||
flags |= VIR_QEMU_PROCESS_START_PRETEND;
|
||||
flags |= VIR_QEMU_PROCESS_START_NEW;
|
||||
if (standalone)
|
||||
flags |= VIR_QEMU_PROCESS_START_STANDALONE;
|
||||
|
||||
if (qemuProcessInit(driver, vm, NULL, QEMU_ASYNC_JOB_NONE,
|
||||
!!migrateURI, flags) < 0)
|
||||
|
@@ -81,6 +81,8 @@ typedef enum {
|
||||
VIR_QEMU_PROCESS_START_PRETEND = 1 << 3,
|
||||
VIR_QEMU_PROCESS_START_NEW = 1 << 4, /* internal, new VM is starting */
|
||||
VIR_QEMU_PROCESS_START_GEN_VMID = 1 << 5, /* Generate a new VMID */
|
||||
VIR_QEMU_PROCESS_START_STANDALONE = 1 << 6, /* Require CLI args to be usable standalone,
|
||||
ie no FD passing and the like */
|
||||
} qemuProcessStartFlags;
|
||||
|
||||
int qemuProcessStart(virConnectPtr conn,
|
||||
|
@@ -5226,8 +5226,7 @@ enum remote_procedure {
|
||||
/**
|
||||
* @generate: both
|
||||
* @priority: high
|
||||
* @acl: domain:read
|
||||
* @acl: domain:read_secure:VIR_DOMAIN_XML_SECURE
|
||||
* @acl: domain:write
|
||||
*/
|
||||
REMOTE_PROC_DOMAIN_SAVE_IMAGE_GET_XML_DESC = 235,
|
||||
|
||||
|
@@ -14,8 +14,7 @@ QEMU_AUDIO_DRV=none \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
-nodefaults \
|
||||
-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\
|
||||
server,nowait \
|
||||
-chardev socket,id=charmonitor,fd=1729,server,nowait \
|
||||
-mon chardev=charmonitor,id=monitor,mode=control \
|
||||
-rtc base=utc \
|
||||
-no-shutdown \
|
||||
|
@@ -26,4 +26,6 @@ server,nowait \
|
||||
-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
|
||||
-chardev socket,id=charserial0,path=/tmp/serial.sock \
|
||||
-device isa-serial,chardev=charserial0,id=serial0 \
|
||||
-chardev socket,id=charserial1,path=/tmp/serial-server.sock,server,nowait \
|
||||
-device isa-serial,chardev=charserial1,id=serial1 \
|
||||
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
|
||||
|
@@ -0,0 +1,36 @@
|
||||
LC_ALL=C \
|
||||
PATH=/bin \
|
||||
HOME=/home/test \
|
||||
USER=test \
|
||||
LOGNAME=test \
|
||||
QEMU_AUDIO_DRV=none \
|
||||
/usr/bin/qemu-system-i686 \
|
||||
-name guest=QEMUGuest1,debug-threads=on \
|
||||
-S \
|
||||
-object secret,id=masterKey0,format=raw,\
|
||||
file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
|
||||
-machine pc,accel=tcg,usb=off,dump-guest-core=off \
|
||||
-m 214 \
|
||||
-realtime mlock=off \
|
||||
-smp 1,sockets=1,cores=1,threads=1 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
-nodefaults \
|
||||
-chardev socket,id=charmonitor,fd=1729,server,nowait \
|
||||
-mon chardev=charmonitor,id=monitor,mode=control \
|
||||
-rtc base=utc \
|
||||
-no-shutdown \
|
||||
-no-acpi \
|
||||
-boot strict=on \
|
||||
-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
|
||||
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
|
||||
-device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \
|
||||
-chardev socket,id=charserial0,path=/tmp/serial.sock \
|
||||
-device isa-serial,chardev=charserial0,id=serial0 \
|
||||
-chardev socket,id=charserial1,fd=1729,server,nowait \
|
||||
-device isa-serial,chardev=charserial1,id=serial1 \
|
||||
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x2 \
|
||||
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
|
||||
resourcecontrol=deny \
|
||||
-msg timestamp=on
|
@@ -25,6 +25,10 @@
|
||||
<source mode='connect' path='/tmp/serial.sock'/>
|
||||
<target port='0'/>
|
||||
</serial>
|
||||
<serial type='unix'>
|
||||
<source mode='bind' path='/tmp/serial-server.sock'/>
|
||||
<target port='1'/>
|
||||
</serial>
|
||||
<console type='unix'>
|
||||
<source mode='connect' path='/tmp/serial.sock'/>
|
||||
<target port='0'/>
|
||||
|
@@ -1266,7 +1266,7 @@ mymain(void)
|
||||
DO_TEST("misc-no-reboot", NONE);
|
||||
DO_TEST("misc-uuid", NONE);
|
||||
DO_TEST_PARSE_ERROR("vhost_queues-invalid", NONE);
|
||||
DO_TEST("net-vhostuser", NONE);
|
||||
DO_TEST("net-vhostuser", QEMU_CAPS_CHARDEV_FD_PASS);
|
||||
DO_TEST("net-vhostuser-multiq",
|
||||
QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
|
||||
DO_TEST_FAILURE("net-vhostuser-multiq", NONE);
|
||||
@@ -1335,6 +1335,7 @@ mymain(void)
|
||||
QEMU_CAPS_CHARDEV_FILE_APPEND);
|
||||
DO_TEST("serial-unix-chardev",
|
||||
QEMU_CAPS_DEVICE_ISA_SERIAL);
|
||||
DO_TEST_CAPS_LATEST("serial-unix-chardev");
|
||||
DO_TEST("serial-tcp-chardev",
|
||||
QEMU_CAPS_DEVICE_ISA_SERIAL);
|
||||
DO_TEST("serial-udp-chardev",
|
||||
|
Reference in New Issue
Block a user