The 'pipe' character type wasn't documented. TCP uses a <protocol> element, not <wire> We weren't doing strict validation for protocol and source mode values. Signed-off-by: Cole Robinson <crobinso@xxxxxxxxxx> --- docs/formatdomain.html | 18 +++++++++++++++++- docs/formatdomain.html.in | 17 ++++++++++++++++- src/domain_conf.c | 23 ++++++++++++++++++----- 3 files changed, 51 insertions(+), 7 deletions(-) diff --git a/docs/formatdomain.html b/docs/formatdomain.html index bb6da11..0b21c6b 100644 --- a/docs/formatdomain.html +++ b/docs/formatdomain.html @@ -181,6 +181,8 @@ </li><li> <a href="#elementsCharHost">Host device proxy</a> </li><li> + <a href="#elementsCharPipe">Named pipe</a> + </li><li> <a href="#elementsCharTCP">TCP client/server</a> </li><li> <a href="#elementsCharUDP">UDP network console</a> @@ -879,6 +881,20 @@ qemu-kvm -net nic,model=? /dev/null </serial> ...</pre> <h5> + <a name="elementsCharPipe" id="elementsCharPipe">Named pipe</a> + </h5> + <p> + The character device writes output to a named pipe. See pipe(7) for + more info. + </p> + <pre> + ... + <serial type="pipe"> + <source path="/tmp/mypipe"/> + <target port="1"/> + </serial> + ...</pre> + <h5> <a name="elementsCharTCP" id="elementsCharTCP">TCP client/server</a> </h5> <p> @@ -889,7 +905,7 @@ qemu-kvm -net nic,model=? /dev/null ... <serial type="tcp"> <source mode="connect" host="0.0.0.0" service="2445"/> - <wiremode type="telnet"/> + <protocol type="telnet"/> <target port="1"/> </serial> ...</pre> diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 48d689d..191b03e 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -839,6 +839,21 @@ qemu-kvm -net nic,model=? /dev/null </serial> ...</pre> + <h5><a name="elementsCharPipe">Named pipe</a></h5> + + <p> + The character device writes output to a named pipe. See pipe(7) for + more info. + </p> + + <pre> + ... + <serial type="pipe"> + <source path="/tmp/mypipe"/> + <target port="1"/> + </serial> + ...</pre> + <h5><a name="elementsCharTCP">TCP client/server</a></h5> <p> @@ -850,7 +865,7 @@ qemu-kvm -net nic,model=? /dev/null ... <serial type="tcp"> <source mode="connect" host="0.0.0.0" service="2445"/> - <wiremode type="telnet"/> + <protocol type="telnet"/> <target port="1"/> </serial> ...</pre> diff --git a/src/domain_conf.c b/src/domain_conf.c index cc8c3ef..a04a131 100644 --- a/src/domain_conf.c +++ b/src/domain_conf.c @@ -1169,6 +1169,7 @@ error: * <serial type="tcp"> * <source mode="bind" host="0.0.0.0" service="2445"/> * <target port="1"/> + * <protocol type='raw'/> * </serial> * * <serial type="udp"> @@ -1257,11 +1258,16 @@ virDomainChrDefParseXML(virConnectPtr conn, connectHost = virXMLPropString(cur, "host"); if (connectService == NULL) connectService = virXMLPropString(cur, "service"); - } else { + } else if (STREQ((const char *)mode, "bind")) { if (bindHost == NULL) bindHost = virXMLPropString(cur, "host"); if (bindService == NULL) bindService = virXMLPropString(cur, "service"); + } else { + virDomainReportError(conn, VIR_ERR_INTERNAL_ERROR, + _("Unknown source mode '%s'"), + mode); + goto error; } if (def->type == VIR_DOMAIN_CHR_TYPE_UDP) @@ -1340,11 +1346,18 @@ virDomainChrDefParseXML(virConnectPtr conn, bindService = NULL; def->data.tcp.listen = 1; } - if (protocol != NULL && - STREQ(protocol, "telnet")) - def->data.tcp.protocol = VIR_DOMAIN_CHR_TCP_PROTOCOL_TELNET; - else + + if (protocol == NULL || + STREQ(protocol, "raw")) def->data.tcp.protocol = VIR_DOMAIN_CHR_TCP_PROTOCOL_RAW; + else if (STREQ(protocol, "telnet")) + def->data.tcp.protocol = VIR_DOMAIN_CHR_TCP_PROTOCOL_TELNET; + else { + virDomainReportError(conn, VIR_ERR_INTERNAL_ERROR, + _("Unknown protocol '%s'"), protocol); + goto error; + } + break; case VIR_DOMAIN_CHR_TYPE_UDP: -- 1.6.0.6 -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list