ping

On 10/24/18 10:27 AM, Martijn van Duren wrote:
> In my previous ldap mail I proclaimed that we should encode whitespace. 
> Reading rfc2849 a bit further, encoding a string with leading space is  
> mandatory by SAFE-INIT-CHAR. This is needed because of the definition
> of value-spec, which allows additional space, colon, and less-than
> after the colon separating the AttributeDescription.
> 
> The code below adds these definitions. I also changed the outlen
> calculation because it at least fails b64_ntop on inlen == 1.
> 
> OK?
> 
> martijn@
> 
> Index: ldapclient.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/ldap/ldapclient.c,v
> retrieving revision 1.5
> diff -u -p -r1.5 ldapclient.c
> --- ldapclient.c      23 Oct 2018 08:28:34 -0000      1.5
> +++ ldapclient.c      24 Oct 2018 08:21:27 -0000
> @@ -404,8 +404,13 @@ ldapc_printattr(struct ldapc *ldap, cons
>                * in SAFE-STRINGs. String value that do not match the
>                * criteria must be encoded as Base64.
>                */
> -             for (cp = (const unsigned char *)value;
> -                 encode == 0 &&*cp != '\0'; cp++) {
> +             cp = (const unsigned char *)value;
> +             /* !SAFE-INIT-CHAR: SAFE-CHAR minus %x20 %x3A %x3C */
> +             if (*cp == ' ' ||
> +                 *cp == ':' ||
> +                 *cp == '<')
> +                     encode = 1;
> +             for (; encode == 0 &&*cp != '\0'; cp++) {
>                       /* !SAFE-CHAR %x01-09 / %x0B-0C / %x0E-7F */
>                       if (*cp > 127 ||
>                           *cp == '\0' ||
> @@ -421,7 +426,7 @@ ldapc_printattr(struct ldapc *ldap, cons
>                       }
>               } else {
>                       inlen = strlen(value);
> -                     outlen = inlen * 2 + 1;
> +                     outlen = (((inlen + 2) / 3) * 4) + 1;
>  
>                       if ((out = calloc(1, outlen)) == NULL ||
>                           b64_ntop(value, inlen, out, outlen) == -1) {
> 

Reply via email to