Hi,

On 03/12/17 11:39, Selva Nair wrote:
> oops forgot to cc the list..
> 
> ---------- Forwarded message ----------
> From: Selva Nair <selva.n...@gmail.com>
> Date: Sat, Dec 2, 2017 at 10:16 PM
> Subject: Re: [Openvpn-devel] [PATCH v2] ifconfig-ipv6(-push): allow using
> hostnames
> To: Antonio Quartulli <a...@unstable.cc>
> 
> 
> Hi,
> 
> On Sat, Dec 2, 2017 at 9:25 PM, Antonio Quartulli <a...@unstable.cc> wrote:
> 
>> Hi,
>>
>> On 03/12/17 04:27, Selva Nair wrote:
>>
>>>> +    /* we need to modify the hostname received as input, but we don't
>>>> want to
>>>> +     * touch it directly as it might be a constant string.
>>>> +     *
>>>> +     * Therefore, we clone the string here and free it at the end of
>> the
>>>> +     * function */
>>>> +    var_host = strdup(hostname);
>>>> +    ASSERT(var_host);
>>>>
>>>
>>> I think ASSERT should be used only to catch errors in coding logic,
>>> not for plausible runtime errors like this. Especially since this happens
>>> on the server, no reason to terminate the process here.
>>>
>>> Instead, log an error (M_NONFTAL|M_ERRNO will do nicely) and return -1
>>> or goto out. The option parser will log a generic warning, but still
>> useful
>>> to log here using M_ERRNO for more specific info.
>>>
>>
>> I agree. I am also not a big fan of ASSERT(). I think I had copy/pasted
>> this chunk of code from somewhere else (and consider that this patch is
>> quite old even though I have re-sent it now).
>>
>> I will get rid of the ASSERTs.
>>
>>> Alternatively one could use a buffer on the stack --  easy to do as good
>>> old dns names are limited in size (255 octets max?) and the current
>> option
>>> parser also limits the argument passed here to < 255 bytes. But if we
>>> support
>>> internationalized domain names (currently we do not, do we?) and if the
>> line
>>> length in option parser is ever increased, a much larger buffer would be
>>> needed.
>>
>> Are you sure we have a limit of 255 octects? I am not so sure. Anyway,
>> this is not extremely important for now.
>>
> 
> Yes, not important for this patch and stdup is anyway fine as long as we do
> not
> ASSERT.
> 
> The 255 byte limit comes from the config file or option parser which reads
> the
> input from ccd or client-connect script output. The length of a line is
> limited
> to  #define OPTION_LINE_SIZE 256 in options.h

oh ok. thanks for showing this.


> 
> 
>>>
>>>
>>>> +
>>>> +    /* check if this hostname has a /bits suffix */
>>>> +    sep = strchr(var_host , '/');
>>>> +    if (sep)
>>>> +    {
>>>> +        bits = strtoul(sep + 1, &endp, 10);
>>>
>>>
>>> There are a number of such type coercions in the patch
>>> (ulong to uint8_t, size_t  to unit8_t etc.) that some compilers (aka
>> MSVC:)
>>> may warn about, but I do not personally care. All are safe and deliberate
>>> except for the nitpicking below.
>>>
>>> +        if ((*endp != '\0') || (bits > max_bits))
>>>
>>>
>>> That (bits > max_bits) check will not catch many input errors, as the
>>> input is  already truncated to uint8_t. For example, /255 will be flagged
>>> as an error, but /256 will pass as 0.
>>>
>>
>> These are probably all copy/paste from other parts of the code. So the
>> logic here is also used in other parts of the code. If we believe this
>> is not the proper way to handle these cases, I'd suggest to take a note
>> and fix these behaviors with a dedicated patch.
>>
> 
> Please bear with me: Quoting from the patch:
> 
> -    char *sep, *endp;
> -    int bits;
> -    struct in6_addr t_network;
> 
> So, the original code had bits defined as int, so why change to unit8_t?
> Changing the original int to unsigned int would've made sense
> as we are parsing using strtoul and returning the result in an unsigned int.
> But uint8_t brings in hardly any gain and causes all those regressions and
> type conversions I pointed out..

right. I am converting bits to unsigned long (which is what is returned
by strtoul()) and left max_bits as uint8_t.


Cheers,


-- 
Antonio Quartulli

Attachment: signature.asc
Description: OpenPGP digital signature

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Openvpn-devel mailing list
Openvpn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openvpn-devel

Reply via email to