[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: ldap_err2string format



I generally agree with your comments, and this should be clarified when
we revise the C API I-D.

But ldap_err2string() may or may not be thread safe, depending on how it
is implemented.  If an implementation returns a pointer to static,
readonly data or to thread specific data, ldap_err2string() should be
thread safe).

Also, I don't understand what this sentence from your suggested text is
intended to convey:

>    The implementation behaves as if no
>    library calls the ldap_err2string function.

?

-- 
Mark Smith
Directory Product Development / iPlanet E-Commerce Solutions
My words are my own, not my employer's.            Got LDAP?


"Kurt D. Zeilenga" wrote:
> 
> At 03:54 PM 6/16/00 -0600, Dave Steck wrote:
> >According to <draft-ietf-ldapext-ldap-c-api-04.txt>, the output of ldap_err2string(err) is:
> >  "an informative zero-terminated character string message describing the error."
> >It doesn't specify whether the string is encoded in UTF-8 or may be local, such as DBCS.
> 
> I believe ldap_err2string(err) is intended to behave much
> like strerror(err).  I would suggest using language similar
> to that found in the Standard C Library specification.
> 
> Synopsis
>    char *ldap_err2string(err);
> 
> Description
>    The ldap_err2string function maps the LDAP result code in
>    err to an message string.  The implementation behaves as if no
>    library calls the ldap_err2string function.
> 
> Returns
>    The ldap_err2string function returns a pointer to the string,
>    the contents of which are implementation-defined.  The array
>    pointed to shall not be modified by the program, but may be
>    overwritten by a subsequent call to the ldap_err2string
>    function.
> 
> Of course, like strerror(), ldap_err2string is not thread safe.
> This may be cause to alter the last sentence,
>   s/, but may/and must not/
> 
> >The draft says:
> >So what do you think?
> 
> I believe the UTF-8/T.61 requirement should only apply to
> strings which are to carried over LDAP.  Other strings,
> such as host names and error texts, should be C strings.
> 
> > Does the spec nail this down to UTF-8 (in LDAPv3)?
> 
> No, and it shouldn't.
> 
>  char *s = ldap_err2string( ldap_get_option( NULL, -1, NULL ) );
> 
> Is the returned string UTF-8, T.61, or a C string?
> It cannot depend on the protocol in use as a protocol version
> has yet to specified.  The encoding should not be protocol
> dependent, it should be language dependent.
> 
> >If [UTF-8], the common coding practice of:
> >   printf(".... %s\n", ldap_err2string(err));
> >is ill advised since it's not internationalized.
> 
> Exactly.  Note that this practice is assumed valid given
> the I-D examples.
> 
> Kurt