2011-01-06 82 views
1

我有這個代碼工作。這可以通過LDAP功能完成嗎?

#!/usr/bin/perl 

use warnings; 
use strict; 
use Net::LDAP; 
use Data::Dumper; 

my $dn="..."; 
my $password="..."; 

my $ldap = Net::LDAP->new('...') or die "[email protected]"; 
my $mesg = $ldap->bind($dn, password => $password); 
if ($mesg->code) { die "uuuu $mesg"; } 

$mesg = $ldap->search(
    base => "...", 
    scope => 'one', 
    filter => '(groupType=-2147483646)', 
    attrs => ['sAMAccountName'], 
    ); 

my @ad = (); 

foreach ($mesg->entries) { 
    push @ad, $_->asn->{attributes}[0]->{vals}[0]; 
} 

foreach (@ad) { 
    print; 
    print "\n"; 
} 

並輸出安全組的名稱。

所以我想,如果LDAP(Active Directory)中有函數提取從樹的值,而不是做使用數組和哈希就像我在

push @ad, $_->asn->{attributes}[0]->{vals}[0]; 

的樹看起來做硬編碼路徑像這樣

'entries' => [ 
       bless({ 
         'changes' => [], 
         'changetype' => 'modify', 
         'asn' => { 
            'objectName' => '...', 
            'attributes' => [ 
                { 
                 'type' => 'sAMAccountName', 
                 'vals' => [ 
                    'test-group-1' 
                   ] 
                } 
                ] 
           } 
         }, 'Net::LDAP::Entry'), 
       bless({ 
         'changes' => [], 
         'changetype' => 'modify', 
         'asn' => { 
            'objectName' => '...', 
            'attributes' => [ 
                { 
                 'type' => 'sAMAccountName', 
                 'vals' => [ 
                    'test-group-3' 
                   ] 
                } 
                ] 
           } 
         }, 'Net::LDAP::Entry') 
      ], 

回答

2
push @ad, $_->get_value('sAMAccountName');