Re: [PATCH] network: allow "modify" option for DNS-Txt records

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 7/9/24 17:23, Adam Julis wrote:
> The "modify" command allows to replace an existing record (its
> text value). The primary key is the name of the record. If
> duplicity or missing record detected, throw error.
> 
> Tests in networkxml2xmlupdatetest.c contain replacements of an
> existing DNS-text record and failure due to non-existing record.
> 
> Resolves: https://gitlab.com/libvirt/libvirt/-/issues/639
> Signed-off-by: Adam Julis <ajulis@xxxxxxxxxx>
> ---
>  src/conf/network_conf.c                       | 18 ++++++++-----
>  .../dns-txt-record-modify-fail.xml            |  1 +
>  .../dns-txt-record-modify-success.xml         |  1 +
>  .../nat-network-dns-txt-modify-ok.xml         | 26 +++++++++++++++++++
>  tests/networkxml2xmlupdatetest.c              |  9 +++++++
>  5 files changed, 49 insertions(+), 6 deletions(-)
>  create mode 100644 tests/networkxml2xmlupdatein/dns-txt-record-modify-fail.xml
>  create mode 100644 tests/networkxml2xmlupdatein/dns-txt-record-modify-success.xml
>  create mode 100644 tests/networkxml2xmlupdateout/nat-network-dns-txt-modify-ok.xml
> 
> diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
> index fc387f9566..dd362b6ab2 100644
> --- a/src/conf/network_conf.c
> +++ b/src/conf/network_conf.c
> @@ -3351,12 +3351,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;
>  
> @@ -3395,6 +3389,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_strdup(txt.value);

Instead of strdup()-ing the string, you may as well g_steal_pointer() it.

> +
>      } else {
>          virNetworkDefUpdateUnknownCommand(command);
>          goto cleanup;

Reviewed-by: Michal Privoznik <mprivozn@xxxxxxxxxx>

Michal



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux