}
+#define USER_ALIAS_PREFIX "ua-"
+#define USER_ALIAS_CHARS \
+ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-"
+
/* Parse the XML definition for a device address
* @param node XML nodeset to parse for device address definition
*/
xmlNodePtr rom = NULL;
char *type = NULL;
char *rombar = NULL;
+ char *aliasStr = NULL;
int ret = -1;
virDomainDeviceInfoClear(info);
while (cur != NULL) {
if (cur->type == XML_ELEMENT_NODE) {
if (alias == NULL &&
- !(flags & VIR_DOMAIN_DEF_PARSE_INACTIVE) &&
virXMLNodeNameEqual(cur, "alias")) {
alias = cur;
} else if (address == NULL &&
cur = cur->next;
}
- if (alias)
- info->alias = virXMLPropString(alias, "name");
+ if (alias) {
+ aliasStr = virXMLPropString(alias, "name");
+
+ if (!(flags & VIR_DOMAIN_DEF_PARSE_INACTIVE) ||
+ (xmlopt->config.features & VIR_DOMAIN_DEF_FEATURE_USER_ALIAS &&
+ STRPREFIX(aliasStr, USER_ALIAS_PREFIX) &&
+ strspn(aliasStr, USER_ALIAS_CHARS) == strlen(aliasStr)))
+ VIR_STEAL_PTR(info->alias, aliasStr);
+ }
if (master) {
info->mastertype = VIR_DOMAIN_CONTROLLER_MASTER_USB;
virDomainDeviceInfoClear(info);
VIR_FREE(type);
VIR_FREE(rombar);
+ VIR_FREE(aliasStr);
return ret;
}
VIR_DOMAIN_DEF_FEATURE_OFFLINE_VCPUPIN = (1 << 2),
VIR_DOMAIN_DEF_FEATURE_NAME_SLASH = (1 << 3),
VIR_DOMAIN_DEF_FEATURE_INDIVIDUAL_VCPUS = (1 << 4),
+ VIR_DOMAIN_DEF_FEATURE_USER_ALIAS = (1 << 5),
} virDomainDefFeatures;