I have made an attempt to improve the textual error messages returned in an LDAP session from server to client when adding or modifying an entry. Instead of fixed text strings such as "value contains invalid data", they now identify which attribute is at fault (e.g. "value for attribute ipHostNumber contains invalid data"). I found it rather frustrating to submit a new entry with, say, 20 attributes, and have it fail without any indication of where the problem lay. Since LDAP does provide for these text messages, and they are likely either to be seen by the client or logged at the client end when debugging, I think this is a worthwhile improvement. Two patches are attached: - One against openldap-devel, which I have not tested except to show that it compiles (but note that I am unable to compile the bdb backend anyway, since my FreeBSD box does not have DB_ENV, so I may have broken this) - A backport against openldap-2.0.7; this is the patch I am actually using. I have only given it a quick test, but it does seem to function correctly. Instead of just passing back a pointer to a fixed error string, after applying this patch many functions now take a pointer+length to a buffer allocated by the caller, into which the result string is written. There are other functions where this could be done too, for consistency. I hope this is useful to somebody :-) Regards, Brian Candler. P.S. One other point. In the original codebase, there are places where *text appears to be used for debug output before it is assigned. Is there a subtle reason for this, or is it just a bug? For example, from servers/slapd/back-ldbm/modify.c: if( err != LDAP_SUCCESS ) { Debug(LDAP_DEBUG_ARGS, "ldbm_modify_internal: %d %s\n", err, *text, 0); *text = "modify: add values failed"; } break; I have swapped these around in the attached patches.
Attachment:
openldap-devel20010219-messages.gz
Description: application/gunzip
Attachment:
openldap-2.0.7-messages.gz
Description: application/gunzip