secret_conf: Modernize XML parsing & formatting

Our virSecret XML is still parsed and formatted using old way
(e.g. virXPathString() + virXXXTypeFromString() combo, or
formatting elements using plain virBufferAsprintf() instead of
virXMLFormatElement()). Modernize the code as it'll make it
easier for future expansion.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Michal Privoznik 2024-02-09 10:20:50 +01:00
parent bad17c4d88
commit d96a414c03

View File

@ -195,39 +195,34 @@ static int
virSecretDefFormatUsage(virBuffer *buf, virSecretDefFormatUsage(virBuffer *buf,
const virSecretDef *def) const virSecretDef *def)
{ {
const char *type; g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER;
g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf);
virBufferAsprintf(&attrBuf, " type='%s'",
virSecretUsageTypeToString(def->usage_type));
type = virSecretUsageTypeToString(def->usage_type);
if (type == NULL) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("unexpected secret usage type %1$d"),
def->usage_type);
return -1;
}
virBufferAsprintf(buf, "<usage type='%s'>\n", type);
virBufferAdjustIndent(buf, 2);
switch (def->usage_type) { switch (def->usage_type) {
case VIR_SECRET_USAGE_TYPE_NONE: case VIR_SECRET_USAGE_TYPE_NONE:
break; break;
case VIR_SECRET_USAGE_TYPE_VOLUME: case VIR_SECRET_USAGE_TYPE_VOLUME:
virBufferEscapeString(buf, "<volume>%s</volume>\n", def->usage_id); virBufferEscapeString(&childBuf, "<volume>%s</volume>\n", def->usage_id);
break; break;
case VIR_SECRET_USAGE_TYPE_CEPH: case VIR_SECRET_USAGE_TYPE_CEPH:
virBufferEscapeString(buf, "<name>%s</name>\n", def->usage_id); virBufferEscapeString(&childBuf, "<name>%s</name>\n", def->usage_id);
break; break;
case VIR_SECRET_USAGE_TYPE_ISCSI: case VIR_SECRET_USAGE_TYPE_ISCSI:
virBufferEscapeString(buf, "<target>%s</target>\n", def->usage_id); virBufferEscapeString(&childBuf, "<target>%s</target>\n", def->usage_id);
break; break;
case VIR_SECRET_USAGE_TYPE_TLS: case VIR_SECRET_USAGE_TYPE_TLS:
virBufferEscapeString(buf, "<name>%s</name>\n", def->usage_id); virBufferEscapeString(&childBuf, "<name>%s</name>\n", def->usage_id);
break; break;
case VIR_SECRET_USAGE_TYPE_VTPM: case VIR_SECRET_USAGE_TYPE_VTPM:
virBufferEscapeString(buf, "<name>%s</name>\n", def->usage_id); virBufferEscapeString(&childBuf, "<name>%s</name>\n", def->usage_id);
break; break;
default: default:
@ -235,8 +230,8 @@ virSecretDefFormatUsage(virBuffer *buf,
virReportEnumRangeError(virSecretUsageType, def->usage_type); virReportEnumRangeError(virSecretUsageType, def->usage_type);
return -1; return -1;
} }
virBufferAdjustIndent(buf, -2);
virBufferAddLit(buf, "</usage>\n"); virXMLFormatElement(buf, "usage", &attrBuf, &childBuf);
return 0; return 0;
} }
@ -245,25 +240,23 @@ char *
virSecretDefFormat(const virSecretDef *def) virSecretDefFormat(const virSecretDef *def)
{ {
g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER; g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
const unsigned char *uuid; g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER;
g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(&buf);
char uuidstr[VIR_UUID_STRING_BUFLEN]; char uuidstr[VIR_UUID_STRING_BUFLEN];
virBufferAsprintf(&buf, "<secret ephemeral='%s' private='%s'>\n", virBufferAsprintf(&attrBuf, " ephemeral='%s' private='%s'",
def->isephemeral ? "yes" : "no", def->isephemeral ? "yes" : "no",
def->isprivate ? "yes" : "no"); def->isprivate ? "yes" : "no");
uuid = def->uuid; virUUIDFormat(def->uuid, uuidstr);
virUUIDFormat(uuid, uuidstr); virBufferEscapeString(&childBuf, "<uuid>%s</uuid>\n", uuidstr);
virBufferAdjustIndent(&buf, 2);
virBufferEscapeString(&buf, "<uuid>%s</uuid>\n", uuidstr);
if (def->description != NULL) if (def->description != NULL)
virBufferEscapeString(&buf, "<description>%s</description>\n", virBufferEscapeString(&childBuf, "<description>%s</description>\n",
def->description); def->description);
if (def->usage_type != VIR_SECRET_USAGE_TYPE_NONE && if (def->usage_type != VIR_SECRET_USAGE_TYPE_NONE &&
virSecretDefFormatUsage(&buf, def) < 0) virSecretDefFormatUsage(&childBuf, def) < 0)
return NULL; return NULL;
virBufferAdjustIndent(&buf, -2);
virBufferAddLit(&buf, "</secret>\n");
virXMLFormatElement(&buf, "secret", &attrBuf, &childBuf);
return virBufferContentAndReset(&buf); return virBufferContentAndReset(&buf);
} }