Thread LDAP Daten Auslesen und weiter Verarbeiten (24 answers)
Opened by Rambo at 2018-08-08 09:02

Rambo
 2018-08-08 09:02
#188744 #188744
User since
2003-08-14
803 Artikel
BenutzerIn

user image
Guten Morgen werte Foren Gemeinde,

nach langer Foren Abstinenz benötige ich wieder ein wenig Hilfe von euch.
Wir müssen im Unternehmen die Infos von extern Firmen und MA dahingehen untersuchen wann der Zugang abläuft (account expired) und den entsprechenden Vorgesetzen (manager) informieren damit er eine Verlängerung beantragen kann.
Das Script was die entsprechenden Daten ausliest habe ich bereits. Die Frage ist, wie verarbeite ich diese Daten weiter.
Folgenes sind meine Überlegungen:
Auslesen der Entsprechenden Daten die hierfür Notwendig sind:
Code: (dl )
1
2
3
4
5
samACC = Login ID
name = Vorname Nachname
mail = Mail Adresse
expired = Ablaufdatum des Zuganges
manager = Vorgesetzter der eine Verlängerung beantragen muss

Diese Daten müssen ausgewertet werden und um sie später 30 Tage vor dem Ablaudatum via Mail zu versenden.

Problemstellung 1: Wie verarbeite ich die entsprechenden Daten (Array oder Hash)
Bsp:
Code: (dl )
1
2
3
samACC   name            mail                    expired      Manager
AB001 John JD Doh John.Doh@mail.com Nie
BA001 Max MM Muster max.muster@firma.de 30.09.2018 CN=John.Doh

In diesem Fall soll eine Mail am 01.09.2018 an John.Doh@mail.com gehen das der Zugang des Benutzer Max Muster zum 30.09.2018 ausläuft.

Wie kann ich das am Sinnvollsten lösen?
Das Scipt was die Daten ausliest ist hier:
Code: (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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#!/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;
}


Für ein paar Anregungen wäre ich sehr dankbar

View full thread LDAP Daten Auslesen und weiter Verarbeiten