diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c index 8e7a739d78..68eee367c4 100644 --- a/src/conf/network_conf.c +++ b/src/conf/network_conf.c @@ -3353,12 +3353,6 @@ virNetworkDefUpdateDNSTxt(virNetworkDef *def, bool isAdd = (command == VIR_NETWORK_UPDATE_COMMAND_ADD_FIRST || command == VIR_NETWORK_UPDATE_COMMAND_ADD_LAST); - if (command == VIR_NETWORK_UPDATE_COMMAND_MODIFY) { - virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", - _("DNS TXT records cannot be modified, only added or deleted")); - goto cleanup; - } - if (virNetworkDefUpdateCheckElementName(def, ctxt->node, "txt") < 0) goto cleanup; @@ -3397,6 +3391,18 @@ virNetworkDefUpdateDNSTxt(virNetworkDef *def, virNetworkDNSTxtDefClear(&dns->txts[foundIdx]); VIR_DELETE_ELEMENT(dns->txts, foundIdx, dns->ntxts); + } else if (command == VIR_NETWORK_UPDATE_COMMAND_MODIFY) { + + if (foundIdx == dns->ntxts) { + virReportError(VIR_ERR_OPERATION_INVALID, + _("couldn't locate a matching DNS TXT record in network %1$s"), + def->name); + goto cleanup; + } + + VIR_FREE(dns->txts[foundIdx].value); + dns->txts[foundIdx].value = g_steal_pointer(&txt.value); + } else { virNetworkDefUpdateUnknownCommand(command); goto cleanup; diff --git a/tests/networkxml2xmlupdatein/dns-txt-record-modify-fail.xml b/tests/networkxml2xmlupdatein/dns-txt-record-modify-fail.xml new file mode 100644 index 0000000000..75ed475fe1 --- /dev/null +++ b/tests/networkxml2xmlupdatein/dns-txt-record-modify-fail.xml @@ -0,0 +1 @@ + diff --git a/tests/networkxml2xmlupdatein/dns-txt-record-modify-success.xml b/tests/networkxml2xmlupdatein/dns-txt-record-modify-success.xml new file mode 100644 index 0000000000..e16c352253 --- /dev/null +++ b/tests/networkxml2xmlupdatein/dns-txt-record-modify-success.xml @@ -0,0 +1 @@ + diff --git a/tests/networkxml2xmlupdateout/nat-network-dns-txt-modify-ok.xml b/tests/networkxml2xmlupdateout/nat-network-dns-txt-modify-ok.xml new file mode 100644 index 0000000000..4b4dda094a --- /dev/null +++ b/tests/networkxml2xmlupdateout/nat-network-dns-txt-modify-ok.xml @@ -0,0 +1,26 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9b + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2xmlupdatetest.c b/tests/networkxml2xmlupdatetest.c index 59e6ce98e5..875cede035 100644 --- a/tests/networkxml2xmlupdatetest.c +++ b/tests/networkxml2xmlupdatetest.c @@ -306,6 +306,15 @@ mymain(void) "dns-txt-record-snowman", "nat-network-dns-txt-record", VIR_NETWORK_UPDATE_COMMAND_DELETE); + DO_TEST("modify-dns-txt-record", + "dns-txt-record-modify-success", + "nat-network-dns-txt-record", + "nat-network-dns-txt-modify-ok", + VIR_NETWORK_UPDATE_COMMAND_MODIFY); + DO_TEST_FAIL("modify-missing-dns-txt-record", + "dns-txt-record-modify-fail", + "nat-network-dns-txt-record", + VIR_NETWORK_UPDATE_COMMAND_MODIFY); section = VIR_NETWORK_SECTION_DNS_SRV;