virDomainDefPtr def,
const char *xml)
{
+ char uuidstr[VIR_UUID_STRING_BUFLEN];
char *configFile = NULL;
int ret = -1;
goto cleanup;
}
- ret = virXMLSaveFile(configFile, def->name, "edit", xml);
+ virUUIDFormat(def->uuid, uuidstr);
+ ret = virXMLSaveFile(configFile,
+ virXMLPickShellSafeComment(def->name, uuidstr), "edit",
+ xml);
cleanup:
VIR_FREE(configFile);
virNetworkDefPtr def,
const char *xml)
{
+ char uuidstr[VIR_UUID_STRING_BUFLEN];
char *configFile = NULL;
int ret = -1;
goto cleanup;
}
- ret = virXMLSaveFile(configFile, def->name, "net-edit", xml);
+ virUUIDFormat(def->uuid, uuidstr);
+ ret = virXMLSaveFile(configFile,
+ virXMLPickShellSafeComment(def->name, uuidstr),
+ "net-edit", xml);
cleanup:
VIR_FREE(configFile);
virNWFilterDefPtr def,
const char *xml)
{
+ char uuidstr[VIR_UUID_STRING_BUFLEN];
char *configFile = NULL;
int ret = -1;
goto cleanup;
}
- ret = virXMLSaveFile(configFile, def->name, "nwfilter-edit", xml);
+ virUUIDFormat(def->uuid, uuidstr);
+ ret = virXMLSaveFile(configFile,
+ virXMLPickShellSafeComment(def->name, uuidstr),
+ "nwfilter-edit", xml);
cleanup:
VIR_FREE(configFile);
virNWFilterObjPtr nwfilter,
virNWFilterDefPtr def)
{
+ char uuidstr[VIR_UUID_STRING_BUFLEN];
char *xml;
int ret;
return -1;
}
- ret = virXMLSaveFile(nwfilter->configFile, def->name, "nwfilter-edit", xml);
+ virUUIDFormat(def->uuid, uuidstr);
+ ret = virXMLSaveFile(nwfilter->configFile,
+ virXMLPickShellSafeComment(def->name, uuidstr),
+ "nwfilter-edit", xml);
VIR_FREE(xml);
return ret;
virStoragePoolObjPtr pool,
virStoragePoolDefPtr def)
{
+ char uuidstr[VIR_UUID_STRING_BUFLEN];
char *xml;
int ret = -1;
return -1;
}
- ret = virXMLSaveFile(pool->configFile, def->name, "pool-edit", xml);
+ virUUIDFormat(def->uuid, uuidstr);
+ ret = virXMLSaveFile(pool->configFile,
+ virXMLPickShellSafeComment(def->name, uuidstr),
+ "pool-edit", xml);
VIR_FREE(xml);
return ret;
# xml.h
virXMLChildElementCount;
virXMLParseHelper;
+virXMLPickShellSafeComment;
virXMLPropString;
virXMLSaveFile;
virXPathBoolean;
if (!xml_path)
goto cleanup;
- if (virXMLSaveFile(xml_path, privvol->name,
- "volume-create", xmldesc)) {
+ if (virXMLSaveFile(xml_path, NULL, "volume-create", xmldesc)) {
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
_("Can't create file with volume description"));
goto cleanup;
char *snapDir = NULL;
char *snapFile = NULL;
char uuidstr[VIR_UUID_STRING_BUFLEN];
- char *tmp;
virUUIDFormat(vm->def->uuid, uuidstr);
newxml = virDomainSnapshotDefFormat(uuidstr, snapshot->def,
goto cleanup;
}
- if (virAsprintf(&tmp, "snapshot-edit %s", vm->def->name) < 0) {
- virReportOOMError();
- goto cleanup;
- }
-
- ret = virXMLSaveFile(snapFile, snapshot->def->name, tmp, newxml);
- VIR_FREE(tmp);
+ ret = virXMLSaveFile(snapFile, NULL, "snapshot-edit", newxml);
cleanup:
VIR_FREE(snapFile);
goto cleanup;
}
+const char *virXMLPickShellSafeComment(const char *str1, const char *str2)
+{
+ if(str1 && !strpbrk(str1, "\r\t\n !\"#$&'()*;<>?[\\]^`{|}~") &&
+ !strstr(str1, "--"))
+ return str1;
+ if(str2 && !strpbrk(str2, "\r\t\n !\"#$&'()*;<>?[\\]^`{|}~") &&
+ !strstr(str2, "--"))
+ return str2;
+ return NULL;
+}
static int virXMLEmitWarning(int fd,
const char *name,
or other application using the libvirt API.\n\
-->\n\n";
- if (fd < 0 || !name || !cmd) {
+ if (fd < 0 || !cmd) {
errno = EINVAL;
return -1;
}
if (safewrite(fd, cmd, len) != len)
return -1;
- /* Omit the domain name if it contains a double hyphen
- * because they aren't allowed in XML comments */
- if (!strstr(name, "--")) {
+ if (name) {
if (safewrite(fd, " ", 1) != 1)
return -1;
{
struct virXMLRewriteFileData *data = opaque;
- if (data->warnName && data->warnCommand) {
+ if (data->warnCommand) {
if (virXMLEmitWarning(fd, data->warnName, data->warnCommand) < 0)
return -1;
}
const char *url,
xmlXPathContextPtr *pctxt);
+const char *virXMLPickShellSafeComment(const char *str1, const char *str2);
/**
* virXMLParse:
* @filename: file to parse, or NULL for string parsing