2011-12-20 22 views
7

Bir LDAP sunucusuna bağlanan ve tüm kullanıcıları alan bir Perl betiğim var. Şimdiye kadar iyi çalışıyor ama tüm grupları toplamak için bu aramayı filtrelemek istiyorum. Tüm gruplara sahip olduğumda, kullanıcı bu gruplardan birini seçebilir ve ona yalnızca o grubun üyesi olan kullanıcıları göstereceğim. Bu sorguları nasıl yapabilirim? Ben uğraş bu bir: Perl ile tüm Gruplar nasıl geri alınır?

my $mesg = $ldap->search(
    base => $base, 
    filter => '(objectclass=user)', 
    attrs => ['memberOf'] 
); 

Ama

sonra bazı gruplar tekrarlanır ve el Sonuca filtre gerekir (ve bunu önlemek isterim). Ve ikinci sorgudan ne haber?

cevap

6

tüm grupları elde etmek için "(objectclass=group)" Tüm alt kuruluşuna tek organizationalUnit (kapsam => 'bir') veya grupları retreive olabilir olduğu (kapsam => 'alt')

$mesg = $ldap->search( filter=>"(&(objectclass=group)(cn=the group choosen by the user)", 
         base=>"ou=Monou,dc=societe,dc=fr" 
         scope=>"sub" 
         attrs=> ['cn', 'member']); 
@entries = $mesg->entries; 
foreach $entry (@entries) 
{ 
    $entry->dump; 
    @member = $entry->get_value("member"); # returns all members 
} 
daha fazla yardım için

Düzenlendi An Introduction to perl-ldap


bkz

Dolayısıyla, aradığınız filtre:

(&(objectClass=user)(memberof=CN=Mongroupe,OU=MonOU,DC=societe,DC=fr)) 
+0

İlk sorgu düzgün çalışıyor (tüm grupları aldım) ancak belirli bir gruptan kullanıcı seçmenin bir yolunu bulamıyorum, üye özelliği yok. * Objectclass = user * ve * memberOf = grup seçili * ile bir sorgu denedim ama çalışmaz :( – raz3r

+1

Belirli bir gruba üye ol, üye niteliği üyelerin ayırt edici adını içerir – JPBlanc

+0

Anladım! belirli bir grubun tüm üyelerini almak, sadece sorun şu anda sadece ben onların tüm niteliklerini istiyorum kullanıcı CN CN var olmasıdır.Bu objectclass = kullanıcı ile süzmek için bir yolu var mı? – raz3r

3

Tümü almak için objectclass = * kullanın. cnThe filtresi

my $msg = $ldap->search(base => $dn, 
      scope => 'one', 
      filter => "(objectclass=*)"); 
$msg->all_entries;   
+0

Nice! Ve ikinci sorum ne olacak? Seçilen bir gruptaki tüm kullanıcıları nasıl seçebilirim? – raz3r

+0

Uhm .. bu arama grupları geri dönmüyor, başka bir şeyleri geri alıyor ama anlamıyorum. Kapsam ve filtrenin doğru olduğundan emin misiniz? – raz3r

+0

Buradaki filtre, her sınıfa ait nesneleri döndürüyor. Daha spesifik bir filtre istersiniz. Örneğin, '& (objectCategory = Grup) (groupType: 1.2.840.113556.1.4.803: = 2147483648)' yalnızca grupları almaz, aynı zamanda yalnızca AD içinde Dağıtım Listeleri değil, yalnızca Güvenlik Grupları alır. – Mik

İlgili konular