Re: Capturing LDAP error message
Chris Ridd <[email protected]> Tue, 19 Jul 2011 16:41:02 +0100
| Newsgroups | gmane.comp.lang.perl.modules.ldap |
|---|---|
| Message-ID | <[email protected]> |
On 19 Jul 2011, at 16:17, Rick Sanders wrote:
> I am trying to capture a better error description than I am getting with the following code:
>
> use Net::LDAP::Util qw(ldap_error_name ldap_error_text ldap_error_desc);
>
> $result = $ldap->add( $dn, attr => [ %$attrs ] );
> if ( $result->code ) {
> $error = $result->code;
> $errtxt = ldap_error_name( $result->code );
> Log(" ERROR adding $dn: $errtxt");
> $errtxt = ldap_error_text( $result->code );
> Log(" ERROR adding $dn: $errtxt");
> $errtxt = ldap_error_desc( $result->code );
> Log(" ERROR adding $dn: $errtxt");
> }
>
> That gives me the following:
>
> ERROR adding mail=MILLENNIUMTENS,o=site: LDAP_INVALID_SYNTAX
> ERROR adding mail=MILLENNIUMTENS,o=site: Some part of the request contained an invalid syntax. It could be a search with an invalid filter or a request to modify the schema and the given schema has a bad syntax.
> ERROR adding mail=MILLENNIUMTENS,o=site: Invalid syntax
>
> If I set $ldap->debug(12) then a ton of info is written to STDERR that contains the details I need (showing the value that caused the error).
>
> Net::LDAP=HASH(0x2993f4) received:
> 0000 30 86: SEQUENCE {
> 0002 02 1: INTEGER = 5
> 0005 69 81: [APPLICATION 9] {
> 0007 0A 1: ENUM = 21
> 000A 04 0: STRING = ''
> 000C 04 74: STRING = 'Bad SMTP Address; not canonical form, Attribute=mail, Value=MILLENNIUMTENS'
> 0058 : }
> 0058 : }
>
> Is there a way in NET::LDAP to grab that error string other than redirecting STDERR and parsing it? "LDAP_INVALID_SYNTAX" is not particularly helpful in diagnosing why the syntax was invalid.
Use $result->error_text() to get that text. See the Net::LDAP::Message documentation...
Note that servers may not return anything helpful to you in that field. The LDAP RFCs tell you not to rely on its contents.
Chris