Thread Active Directory Abfrage (LDAP?)
(10 answers)
Opened by Faldaar at 2007-09-28 17:39
Nach viel probieren und googeln habe ich das ganze nun mit Net::LDAP hin bekommen. Ist zwar insgesamt nicht die eleganteste Lösung, aber es läuft und noch dazu ziemlich schnell. Bin nun auf knapp 20 Sekunden wenn auf einem Client ausgeführt, unter 10 Sekunden auf dem DC selber. Damit kann ich sehr gut leben.
Gehe nun so vor: Hole per LDAP den Benutzer und seine Gruppen. Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 my $noldapserver = 0; my $ldap = Net::LDAP -> new($dc1) or $noldapserver=1; if ( $noldapserver == 1 ) { $ldap = Net::LDAP -> new($dc2) or die "Error connecting to specified domain controllers $@ \n"; } my $mesg = $ldap -> bind($user, password => $passwd ); $mesg = $ldap -> search( base => $base, filter => "(&(objectclass=user)(samAccountname=*))" ); # Check for Error Code if ( $mesg -> code ) { &LDAPerror( "Search", $mesg ); } # Ergebnisanzahl auslesen my $max = $mesg -> count; # Ergebnisse durchgehen for ( my $i = 0; $i < $max; $i++ ) { my $entry = $mesg -> entry ( $i ); my $user = lc( $entry -> get_value( 'samAccountname' ) ); my @groups = $entry -> get_value('memberOf'); # weiterer code, u.a. Gruppenprüfung s.u. } Dann werden die Gruppen des Benutzers durchlaufen, und verglichen mit einem Hash, der bestimmte Gruppen enthält, die mich interessieren: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 foreach ( @groups ) { my $gruppe = $_; my @gnamen = split( /,/, $gruppe ); if ( $gnamen[1] ne "OU=Gruppen" ) { # es interessieren nur Gruppen unterhalb der OU Gruppen next(); } my $grp = ( split( /=/, $gnamen[0] ) )[1]; if ( $Freigaben{$grp} ) { # etwas tun } } Die Fehlerbehandlung habe ich Beispielhaft nur einmal drin gelassen, alle anderen sehen ähnlich aus. Wie gesagt sicher nicht die schönste Lösung, aber es erfüllt seinen Zweck und das (wohl langsame) Modul Win32::NetAdmin hat ausgedient. Martin Edit: Durch weitere Optimierungen, vor allem in der Programmlogik, auf eine Laufzeit von 1,5 bis 5 Sekunden runter. Gleich mal schauen was man aus dem AD noch so alles raus quetschen kann :) Es ist schwieriger eine vorgefasste Meinung zu zertrümmern als ein Atom. (Albert Einstein)
|