Please excuse me if I am misunderstanding something (I'm an LDAP newbie) - 
but is this a Net::LDAP bug:

Supplying an extra attribute to the "dn" of a Net::LDAP::add request,
as with:

   $ldap->add( 
'cn='.$myUserObject{cn}.',uid='.${myUserObject}{uid}.',o=att.com', 
$myUserObject) # FAILS 

results in an error response with an error code of 32 and an empty error 
message - while removing the "cn=" portion of the DN allows the add to succeed:

   $ldap->add( 'uid='.${myUserObject}{uid}.',o=att.com', $myUserObject) # 
SUCCEEDS

It seems to me that if the "FAILS" request contains a bad DN, Net::LDAP ought to
detect this and report a "Bad DN" error message, as it does for other types of 
bad dn .

I added the extra "cn=" because when I issue the OpenLDAP command:

  $ ldapsearch -x -b "o=att.com" | grep 'Jason Vas Dias'
  dn: cn=Jason Vas Dias,uid=XXXXX,o=att.com

I see the cn in the dn string, so I thought this may be required when creating 
a new object.

What was my error in prepending the CN ? 
If it was an error, why can't Net::LDAP report it as such ?
  
(our "Base DN" is "o=att.com" and "Manager DN" is "cn=Directory 
Manager,o=att.com") .

What does the resultCode=32 refer to here ?

I've put some print statements in LDAP.pm and turned on debugging to illustrate 
-
confidential attribute values have been removed :

Debug output from failed add() request:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Net::LDAP=HASH(0xca22c0) sending:

30 32 02 01 01 60 2D 02 01 03 04 1E 63 6E 3D 44 02...`-.....cn=D
69 72 65 63 74 6F 72 79 20 4D 61 6E 61 67 65 72 irectory Manager
2C 6F 3D 61 74 74 2E 63 6F 6D 80 08 54 46 43 56 ,o=att.com..XXXX
42 6E 6A 69 __ __ __ __ __ __ __ __ __ __ __ __ XXXX

LDAP::process
Net::LDAP=HASH(0xca22c0) received:14 bytes

30 0C 02 01 01 61 07 0A 01 00 04 00 04 00 __ __ 0....a........

0000   12: SEQUENCE {
0002    1:   INTEGER = 1
0005    7:   [APPLICATION 1] {
0007    1:     ENUM = 0
000A    0:     STRING = ''
000C    0:     STRING = ''
000E     :   }
000E     : }
sync: $VAR1 = '0';

AFTER SYNC: $VAR1 = '0';

Net::LDAP=HASH(0xca22c0) _sendmesg: resultCode:$VAR1 = bless( {
                 'net_ldap_version' => 3,
                 'net_ldap_scheme' => 'ldap',
                 'net_ldap_debug' => 1,
                 'net_ldap_socket' => bless( \*Symbol::GEN1, 'IO::Socket::INET' 
),
                 'net_ldap_onerror' => sub { "DUMMY" },
                 'net_ldap_host' => 'localhost',
                 'net_ldap_uri' => 'localhost',
                 'net_ldap_resp' => {},
                 'net_ldap_mesg' => {},
                 'net_ldap_async' => 0,
                 'net_ldap_port' => '389',
                 'net_ldap_refcnt' => 1
               }, 'Net::LDAP' );

$VAR1 = bless( {
                 'parent' => bless( {
                                      'net_ldap_version' => 3,
                                      'net_ldap_scheme' => 'ldap',
                                      'net_ldap_debug' => 1,
                                      'net_ldap_socket' => bless( 
\*Symbol::GEN1, 'IO::Socket::INET' ),
                                      'net_ldap_onerror' => sub { "DUMMY" },
                                      'net_ldap_host' => 'localhost',
                                      'net_ldap_uri' => 'localhost',
                                      'net_ldap_resp' => {},
                                      'net_ldap_mesg' => {},
                                      'net_ldap_async' => 0,
                                      'net_ldap_port' => '389',
                                      'net_ldap_refcnt' => 1
                                    }, 'Net::LDAP' ),
                 'callback' => undef,
                 'mesgid' => 2,
                 'pdu' => CONFIDENTIAL DATA REMOVED
                 'raw' => undef
               }, 'Net::LDAP::Add' );

Net::LDAP=HASH(0xca22c0) sending:

LDAP::process
Net::LDAP=HASH(0xca22c0) received:23 bytes

30 15 02 01 02 69 10 0A 01 20 04 09 6F 3D 61 74 0....i... ..o=at
74 2E 63 6F 6D 04 00 __ __ __ __ __ __ __ __ __ t.com..

0000   21: SEQUENCE {
0002    1:   INTEGER = 2
0005   16:   [APPLICATION 9] {
0007    1:     ENUM = 32
000A    9:     STRING = 'o=att.com'
0015    0:     STRING = ''
0017     :   }
0017     : }
sync: $VAR1 = '0';

AFTER SYNC: $VAR1 = '0';

1224198910.141223 ERROR: ATT:LDAP Error:  Net::LDAP::Add=HASH(0xa6fc10) 
resultCode:32: $VAR1 = bless( {
                 'parent' => bless( {
                                      'net_ldap_version' => 3,
                                      'net_ldap_scheme' => 'ldap',
                                      'net_ldap_debug' => 1,
                                      'net_ldap_socket' => bless( 
\*Symbol::GEN1, 'IO::Socket::INET' ),
                                      'net_ldap_onerror' => sub { "DUMMY" },
                                      'net_ldap_host' => 'localhost',
                                      'net_ldap_uri' => 'localhost',
                                      'net_ldap_resp' => {},
                                      'net_ldap_mesg' => {},
                                      'net_ldap_async' => 0,
                                      'net_ldap_port' => '389',
                                      'net_ldap_refcnt' => 1
                                    }, 'Net::LDAP' ),
                 'errorMessage' => '',
                 'ctrl_hash' => undef,
                 'resultCode' => 32,
                 'callback' => undef,
                 'mesgid' => 2,
                 'matchedDN' => 'o=att.com',
                 'controls' => undef,
                 'raw' => undef
               }, 'Net::LDAP::Add' );

Reply via email to