Ensure guestfwd address is IPv4 and various cleanups

* include/libvirt/virterror.h src/util/virterror.c: add a new error
  VIR_ERR_CONFIG_UNSUPPORTED for valid but unsupported configuration options
* src/conf/domain_conf.c: Throw an error if guestfwd address isn't IPv4
  and cleanup a number of parsing return error values.
This commit is contained in:
Matthew Booth 2009-11-05 16:04:34 +01:00 committed by Daniel Veillard
parent bea92f968e
commit 3023ec5ee7
3 changed files with 34 additions and 20 deletions

View File

@ -170,6 +170,7 @@ typedef enum {
VIR_WAR_NO_SECRET, /* failed to start secret storage */
VIR_ERR_INVALID_SECRET, /* invalid secret */
VIR_ERR_NO_SECRET, /* secret not found */
VIR_ERR_CONFIG_UNSUPPORTED, /* unsupported configuration construct */
} virErrorNumber;
/**

View File

@ -1366,7 +1366,7 @@ virDomainChrDefParseXML(virConnectPtr conn,
if ((def->targetType = virDomainChrTargetTypeFromString(nodeName)) < 0) {
/* channel is handled below */
if (STRNEQ(nodeName, "channel")) {
virDomainReportError(conn, VIR_ERR_INVALID_DOMAIN,
virDomainReportError(conn, VIR_ERR_XML_ERROR,
_("unknown target type for character device: %s"),
nodeName);
return NULL;
@ -1424,7 +1424,7 @@ virDomainChrDefParseXML(virConnectPtr conn,
if (def->targetType == VIR_DOMAIN_CHR_TARGET_TYPE_NULL) {
targetType = virXMLPropString(cur, "type");
if (targetType == NULL) {
virDomainReportError(conn, VIR_ERR_INVALID_DOMAIN, "%s",
virDomainReportError(conn, VIR_ERR_XML_ERROR, "%s",
_("character device target does "
"not define a type"));
goto error;
@ -1432,7 +1432,7 @@ virDomainChrDefParseXML(virConnectPtr conn,
if ((def->targetType =
virDomainChrTargetTypeFromString(targetType)) < 0)
{
virDomainReportError(conn, VIR_ERR_INVALID_DOMAIN,
virDomainReportError(conn, VIR_ERR_XML_ERROR,
_("unknown target type for "
"character device: %s"),
targetType);
@ -1453,7 +1453,7 @@ virDomainChrDefParseXML(virConnectPtr conn,
}
if (virStrToLong_ui(portStr, NULL, 10, &port) < 0) {
virDomainReportError(conn, VIR_ERR_INVALID_DOMAIN,
virDomainReportError(conn, VIR_ERR_XML_ERROR,
_("Invalid port number: %s"),
portStr);
goto error;
@ -1465,7 +1465,7 @@ virDomainChrDefParseXML(virConnectPtr conn,
portStr = virXMLPropString(cur, "port");
if (addrStr == NULL) {
virDomainReportError(conn, VIR_ERR_INVALID_DOMAIN, "%s",
virDomainReportError(conn, VIR_ERR_XML_ERROR, "%s",
_("guestfwd channel does not "
"define a target address"));
goto error;
@ -1476,20 +1476,27 @@ virDomainChrDefParseXML(virConnectPtr conn,
}
if (virSocketParseAddr(addrStr, def->target.addr, 0) < 0)
{
virDomainReportError(conn, VIR_ERR_INVALID_DOMAIN,
virDomainReportError(conn, VIR_ERR_XML_ERROR,
_("%s is not a valid address"),
addrStr);
goto error;
}
if (def->target.addr->stor.ss_family != AF_INET) {
virDomainReportError(conn, VIR_ERR_CONFIG_UNSUPPORTED,
"%s", _("guestfwd channel only supports "
"IPv4 addresses"));
goto error;
}
if (portStr == NULL) {
virDomainReportError(conn, VIR_ERR_INVALID_DOMAIN, "%s",
virDomainReportError(conn, VIR_ERR_XML_ERROR, "%s",
_("guestfwd channel does "
"not define a target port"));
goto error;
}
if (virStrToLong_ui(portStr, NULL, 10, &port) < 0) {
virDomainReportError(conn, VIR_ERR_INVALID_DOMAIN,
virDomainReportError(conn, VIR_ERR_XML_ERROR,
_("Invalid port number: %s"),
portStr);
goto error;
@ -1498,7 +1505,7 @@ virDomainChrDefParseXML(virConnectPtr conn,
break;
default:
virDomainReportError(conn, VIR_ERR_INVALID_DOMAIN,
virDomainReportError(conn, VIR_ERR_XML_ERROR,
_("unexpected target type type %u"),
def->targetType);
}

View File

@ -1089,6 +1089,12 @@ virErrorMsg(virErrorNumber error, const char *info)
else
errmsg = _("Secret not found: %s");
break;
case VIR_ERR_CONFIG_UNSUPPORTED:
if (info == NULL)
errmsg = _("unsupported configuration");
else
errmsg = _("unsupported configuration: %s");
break;
}
return (errmsg);
}