[libvirt] [PATCH 2/2] use client id for IPv6 DHCP host definition

Eric Blake eblake at redhat.com
Tue Feb 19 21:44:15 UTC 2013


On 02/18/2013 07:38 PM, Laine Stump wrote:
> On 02/15/2013 02:02 PM, Gene Czarcinski wrote:
>> Originally, only a host name was used to associate a
>> DHCPv6 request with a specific IPv6 address.  Further testing
>> demonstrates that this is an unreliable method and, instead,
>> a client-id or DUID needs to be used.  According to DHCPv6
>> standards, this id can be a duid-LLT, duid-LL, or duid-UUID
>> even though dnsmasq will accept almost any text string.
>>
> 
> Other than the suggestion to use strcspn() instead of a while loop, this
> all looks fine to me. ACK with that change made. If you (or someone
> else) wants to ACK the short interdiff I've attached that makes that
> change, I'll push it.
> 

> 
>>From 0b2f2f0794e931af901bc31e4fe6eadc799bee33 Mon Sep 17 00:00:00 2001
> From: Laine Stump <laine at laine.org>
> Date: Mon, 18 Feb 2013 21:33:49 -0500
> Subject: [PATCH] Changes to squash into "use client id for IPv6 DHCP host
>  definition"
> 
> ---
>  src/conf/network_conf.c | 15 +++++----------
>  src/util/virdnsmasq.c   |  3 +--
>  2 files changed, 6 insertions(+), 12 deletions(-)
> 
> diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
> index 8657284..12bf4d7 100644
> --- a/src/conf/network_conf.c
> +++ b/src/conf/network_conf.c
> @@ -710,16 +710,11 @@ virNetworkDHCPHostDefParseXML(const char *networkName,
>  
>      id = virXMLPropString(node, "id");
>      if (id) {
> -        char *cp = id;
> -
> -        while (*cp) {
> -            if ((*cp != ':') && (!c_isxdigit(*cp))) {
> -                virReportError(VIR_ERR_XML_ERROR,
> -                               _("Cannot use id '%s' in network '%s'"),
> -                               id, networkName);
> -                goto cleanup;
> -            }
> -            cp++;
> +        char *cp = id + strcspn(id, "0123456789abcdefABCDEF:");
> +        if (*cp) {
> +            virReportError(VIR_ERR_XML_ERROR,
> +                           _("Invalid character '%c' in id '%s' of network '%s'"),
> +                           *cp, id, networkName);

That's not quite right.  You want to use strspn(), not strcspn().

> +++ b/src/util/virdnsmasq.c
> @@ -328,8 +328,7 @@ hostsfileAdd(dnsmasqHostsfile *hostsfile,
>                              id, ipstr) < 0)
>                  goto alloc_error;
>          }
> -    }
> -    else if (name && mac) {
> +    } else if (name && mac) {

This hunk is good.

ACK to your interdiff once you use the correct function.

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 621 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20130219/08a867de/attachment-0001.sig>


More information about the libvir-list mailing list