On 02/19/2013 04:44 PM, Eric Blake wrote:
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(a)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().
Argh! I would have caught that if I'd paid attention to make check.
In the meantime, I noticed that there weren't any networkxml2xml tests
for dhcp6 host records, so I added one before pushing.
> +++ 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.
I've now pushed both the patches in this series.
Thanks Gene! (and thanks for Eric for catching my mistake!)