#!/usr/bin/perl -w # # # ------------------------------------------------------------------ # Loaded Modules # ------------------------------------------------------------------ use strict; use warnings; use Net::LDAP; use Net::LDAP; # ------------------------------------------------------------------ # ldap parameters # ------------------------------------------------------------------ my $ldap_srv = 'server'; my $ldap_usr = 'CN=bibi blox,OU=User,OU=xxx,OU=yy,DC=foo,DC=com'; my $ldap_pwd = 'ist geheim; my $ldap_base_dir = 'dc=foo,dc=com'; # ------------------------------------------------------------------ # connect to ldap # ------------------------------------------------------------------ my $ldap = Net::LDAP->new( $ldap_srv ) or die "$@"; my $mesg = $ldap->bind( $ldap_usr, password => $ldap_pwd ); # ------------------------------------------------------------------ # search LDAP database # ------------------------------------------------------------------ $mesg = $ldap->search( base=>$ldap_base_dir, filter => "(&(objectclass=*)(sn=*))"); #filter=>"(name=*)", my @Acc_Data = ''; my @entries = $mesg->entries; print "UserID\tUser Name\tBeschreibung\tGruppen\tLetzter Login\tLast_PWD_Set\tEmail\tPhone\tAccount expired\tLocal Manager\n"; foreach my $entry (@entries) { my $samACC = $entry->get_value('samAccountName'); my $name = $entry->get_value('name'); my $descr = $entry->get_value('description'); my $memberof = join ", ", $entry->get_value('memberof'); my $lastLogon = readable_wintime($entry->get_value('lastLogonTimestamp')); my $pwdLastSet = readable_wintime($entry->get_value('pwdLastSet')); my $mail = $entry->get_value('mail'); my $phone = $entry->get_value('telephoneNumber'); my $expired = readable_date($entry->get_value('accountExpires')); my $manager = $entry->get_value('manager'); print "$samACC\t$name\t$descr\t$memberof\t$lastLogon\t$pwdLastSet\t$mail\t$phone\t$expired\t$manager\n"; } # ------------------------------------------------------------------ # disconnect from ldap # ------------------------------------------------------------------ $mesg = $ldap->unbind; # take down session # ------------------------------------------------------------------ # convert none readable date/time format to readable format # ------------------------------------------------------------------ sub readable_wintime { my $wintime = shift; my $unix_epoch = win_to_unix_epoch($wintime); my ($year, $month, $day, $hour, $minute, $second) = (localtime $unix_epoch)[5,4,3,2,1,0]; $year += 1900; $month += 1; ($month, $day, $hour, $minute, $second) = map { sprintf '%02d', $_ } $month, $day, $hour, $minute, $second; my $LastLogin = join('.', $day, $month, $year) . ' ' . join(':', $hour, $minute, $second); } sub readable_date { my $wintime = shift; my $unix_epoch = win_to_unix_epoch($wintime); my ($year, $month, $day,) = (localtime $unix_epoch)[5,4,3,2,1,0]; $year += 1900; $month += 1; ($month, $day) = map { sprintf '%02d', $_ } $month, $day; my $LastLogin = join('.', $day, $month, $year); } sub win_to_unix_epoch { # Actually hundreths of nanoseconds at this point... my $nanoseconds = shift; # Get seconds my $seconds = $nanoseconds / 10_000_000; # This magic number is the difference between Unix and Windows epoch. my $unix_epoch = $seconds - 11644473600; # Return the Unix epoch for use with localtime(). return $unix_epoch; }