mirror of
https://github.com/libvirt/libvirt.git
synced 2026-08-09 12:38:27 -05:00
Support SASL auth for VNC server.
This commit is contained in:
@@ -60,6 +60,27 @@
|
||||
# vnc_password = "XYZ12345"
|
||||
|
||||
|
||||
# Enable use of SASL encryption on the VNC server. This requires
|
||||
# a VNC client which supports the SASL protocol extension.
|
||||
# Examples include vinagre, virt-viewer and virt-manager
|
||||
# itself. UltraVNC, RealVNC, TightVNC do not support this
|
||||
#
|
||||
# It is necessary to configure /etc/sasl2/qemu.conf to choose
|
||||
# the desired SASL plugin (eg, GSSPI for Kerberos)
|
||||
#
|
||||
# vnc_sasl = 1
|
||||
|
||||
|
||||
# The default SASL configuration file is located in /etc/sasl2/
|
||||
# When running libvirtd unprivileged, it may be desirable to
|
||||
# override the configs in this location. Set this parameter to
|
||||
# point to the directory, and create a qemu.conf in that location
|
||||
#
|
||||
# vnc_sasl_dir = "/some/directory/sasl2"
|
||||
|
||||
|
||||
|
||||
|
||||
# The default security driver is SELinux. If SELinux is disabled
|
||||
# on the host, then the security driver will automatically disable
|
||||
# itself. If you wish to disable QEMU SELinux security driver while
|
||||
|
||||
+34
-5
@@ -161,6 +161,21 @@ int qemudLoadDriverConfig(struct qemud_driver *driver,
|
||||
}
|
||||
}
|
||||
|
||||
p = virConfGetValue (conf, "vnc_sasl");
|
||||
CHECK_TYPE ("vnc_sasl", VIR_CONF_LONG);
|
||||
if (p) driver->vncSASL = p->l;
|
||||
|
||||
p = virConfGetValue (conf, "vnc_sasl_dir");
|
||||
CHECK_TYPE ("vnc_sasl_dir", VIR_CONF_STRING);
|
||||
if (p && p->str) {
|
||||
VIR_FREE(driver->vncSASLdir);
|
||||
if (!(driver->vncSASLdir = strdup(p->str))) {
|
||||
virReportOOMError(NULL);
|
||||
virConfFree(conf);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
virConfFree (conf);
|
||||
return 0;
|
||||
}
|
||||
@@ -838,15 +853,20 @@ int qemudBuildCommandLine(virConnectPtr conn,
|
||||
goto no_memory; \
|
||||
} while (0)
|
||||
|
||||
#define ADD_ENV_PAIR(envname, val) \
|
||||
do { \
|
||||
char *envval; \
|
||||
ADD_ENV_SPACE; \
|
||||
if (virAsprintf(&envval, "%s=%s", envname, val) < 0) \
|
||||
goto no_memory; \
|
||||
qenv[qenvc++] = envval; \
|
||||
} while (0)
|
||||
|
||||
#define ADD_ENV_COPY(envname) \
|
||||
do { \
|
||||
char *val = getenv(envname); \
|
||||
char *envval; \
|
||||
ADD_ENV_SPACE; \
|
||||
if (val != NULL) { \
|
||||
if (virAsprintf(&envval, "%s=%s", envname, val) < 0) \
|
||||
goto no_memory; \
|
||||
qenv[qenvc++] = envval; \
|
||||
ADD_ENV_PAIR(envname, val); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
@@ -1295,6 +1315,15 @@ int qemudBuildCommandLine(virConnectPtr conn,
|
||||
driver->vncTLSx509certdir);
|
||||
}
|
||||
}
|
||||
|
||||
if (driver->vncSASL) {
|
||||
virBufferAddLit(&opt, ",sasl");
|
||||
|
||||
if (driver->vncSASLdir)
|
||||
ADD_ENV_PAIR("SASL_CONF_DIR", driver->vncSASLdir);
|
||||
|
||||
/* TODO: Support ACLs later */
|
||||
}
|
||||
} else {
|
||||
virBufferVSprintf(&opt, "%d",
|
||||
vm->def->graphics->data.vnc.port - 5900);
|
||||
|
||||
@@ -73,9 +73,11 @@ struct qemud_driver {
|
||||
char *stateDir;
|
||||
unsigned int vncTLS : 1;
|
||||
unsigned int vncTLSx509verify : 1;
|
||||
unsigned int vncSASL : 1;
|
||||
char *vncTLSx509certdir;
|
||||
char *vncListen;
|
||||
char *vncPassword;
|
||||
char *vncSASLdir;
|
||||
|
||||
virCapsPtr caps;
|
||||
|
||||
|
||||
@@ -621,6 +621,7 @@ qemudShutdown(void) {
|
||||
VIR_FREE(qemu_driver->vncTLSx509certdir);
|
||||
VIR_FREE(qemu_driver->vncListen);
|
||||
VIR_FREE(qemu_driver->vncPassword);
|
||||
VIR_FREE(qemu_driver->vncSASLdir);
|
||||
|
||||
/* Free domain callback list */
|
||||
virDomainEventCallbackListFree(qemu_driver->domainEventCallbacks);
|
||||
|
||||
Reference in New Issue
Block a user