On Feb 17, 2021, at 11:24 AM, Bruce Johnson 
<john...@pharmacy.arizona.edu<mailto:john...@pharmacy.arizona.edu>> wrote:

I've written two subroutines for getting sAMAccountName by objectGUID and vice 
versa; the main purpose is to manage a database table that stores the 
objectGUID as a Base64 encoded string. (the purpose of this is to maintain a 
match table for people in two different LDAP directories, one AD and the other 
not.)
If I construct a standard ldap search to return the objectGUID in binary form 
and then use that returned value to perform a new search with the filter 
'(objectGUID=$return)’ as the filter fir the LDAP search, I get the LDAP error 
“Bad Filter”  but ONLY for those particular users. It works just fine for 
others.

Actually per a dump of the return from the Net::LDAPS object it appears that 
the error is coming from Net::LDAPS (or somewhere in the dependencies) rather 
than from the LDAP server:

This is my query, $namein is the sAMAccountName of the user in question

my $attr = ['objectGUID', 'sAMAccountName', 'employeeNumber', 'mail'];

my $ldaps = Net::LDAPS->new("ldaps://host.domain") or return "FAIL LDAP ERROR 
$0";

my $searchBase = “DC=Host,DC=Domain";
# Bind as AD user
my $mesg1 = $ldaps->bind("$ldu\@host.domain", password=>$ldp);

$mesg1->code && die "Authentication failed: " . $mesg1->error . "\n";

my $searchFilter = "(sAMAccountName=$namein)";

$mesg1 = $ldaps->search (  # perform a search
                               base => $searchBase,
                               filter => $searchFilter,
                               attrs => $attr
                               );

        $mesg1->code && die $mesg1->error;

a dump of a successful LDAP query result (using sAMAccountName as the filter)

$VAR1 = bless( {
                 'reference' => [
                                  
'ldaps://Host.domain/CN=Configuration,DC=Host,DC=Domain'
                                ],
                 'resultCode' => 0,
                 'mesgid' => 6,
                 'errorMessage' => '',
                 'matchedDN' => '',
                 'raw' => undef,
                 'ctrl_hash' => undef,
                 'callback' => undef,
                 'controls' => undef,
                 'parent' => bless( {
                                      'net_ldap_rawsocket' => bless( 
\*Symbol::GEN2, 'IO::Socket::SSL' ),
                                      'net_ldap_host' => ‘host.domain',
                                      'net_ldap_mesg' => {},
                                      'net_ldap_async' => 0,
                                      'net_ldap_refcnt' => 1,
                                      'net_ldap_resp' => {},
                                      'net_ldap_socket' => 
$VAR1->{'parent'}{'net_ldap_rawsocket'},
                                      'net_ldap_uri' => 'ldaps://host.domain',
                                      'net_ldap_debug' => 0,
                                      'net_ldap_port' => 636,
                                      'net_ldap_version' => 3,
                                      'net_ldap_scheme' => 'ldaps'
                                    }, 'Net::LDAPS' ),
                 'entries' => [
                                bless( {
                                         'changetype' => 'modify',
                                         'asn' => {
                                                    'attributes' => [
                                                                      {
                                                                        'vals' 
=> [
                                                                                
    '09805994'
                                                                                
  ],
                                                                        'type' 
=> 'employeeNumber'
                                                                      },
                                                                      {
                                                                        'type' 
=> 'objectGUID',
                                                                        'vals' 
=> [
                                                                                
    '????N?6\\P????'
                                                                                
  ]
                                                                      },
                                                                      {
                                                                        'type' 
=> 'sAMAccountName',
                                                                        'vals' 
=> [
                                                                                
    'mckay'
                                                                                
  ]
                                                                      },
                                                                      {
                                                                        'vals' 
=> [
                                                                                
    ‘mckay@host.domain<mailto:mckay@host.domain>'
                                                                                
  ],
                                                                        'type' 
=> 'mail'
                                                                      }
                                                                    ],
                                                    'objectName' => 
'CN=mckay,OU=UA,OU=Accounts,DC=Host,DC=Domain'
                                                  },
                                         'changes' => []
                                       }, 'Net::LDAP::Entry' )
                              ]

I then set the search filter to use the objectGUID returned 
($mesg1->(0)->get_value(‘objectGUID’) ) from the successful query and I get

Bad filter at ./check_crossref_del.pl line 84.

If this was an error from LDAP it should have been returned in the 
'errorMessage' => ‘’, line, I think.

If I run this same code with a user that works I get a repeat of the first 
query as the results

So is this a bug/issue with Net::LDAPS?


--
Bruce Johnson
University of Arizona
College of Pharmacy
Information Technology Group

Institutions do not have opinions, merely customs

Reply via email to