Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- #Beginn: Donnerstag, 09.09.2010
- #Donnerstag, 09.09.2010, ldap-Befehle getestet, Windows-timestamp in Unix-timestamp Umwandlung
- #Freitag, 10.09.2010, Script zu Ende geschrieben
- #Montag, 13.09.2010, Kommentiert, if-Schleifen Anpassungen, Getestet
- #Dienstag, 14.09.2010, cronjob getestet, Kommentiert
- #Mittwoch, 15.09.2010, Freitag, 27.09.2010, Testwochen
- #Dienstag, 28.09.2010, Auf dbint-vu-1 eingefügt
- #Mittwoch, 29.09.2010, Doku angelegt, diverse weitere Kommentare eingefügt
- #Pfad wird gesetzt.
- HOMEPFAD=/home/mailpw
- #Alle Namen werden aus dem LDAP ausgelesen und in die Datei "namen.txt" geschrieben. Da der CN Vor und Zuname ist und nicht der Loginname, wird hier nach dem Attribut "cn" gesucht. "useraccountcontrol" mit dem Anhang "1.2.840..." filtert alle gesperrten Benutzer raus und schreibt sie in "gesperrt.txt".
- ldapsearch -x -LLL -h 131.234.81.3 -D "ldapaccess@c-lab.local" -w 'PASSWORT:D' -b "cn=users,dc=c-lab,dc=local" useraccountcontrol:1.2.840.113556.1.4.803:=2 cn | grep -v dn: | sed s/cn:// | sed -e '/^:*$/d' | sed '/:/d' | sed 's/^[ \t]*//' | sort > gesperrt.txt
- #Alle Personen werden in namen_2.txt geschrieben.
- ldapsearch -x -LLL -h 131.234.81.3 -D "ldapaccess@c-lab.local" -w 'PASSWORT:D' -b "cn=users,dc=c-lab,dc=local" objectClass=person | grep -v dn: | sed s/cn:// | sed -e '/^:*$/d' | sed '/:/d' | sed 's/^[ \t]*//' | sort > namen_2.txt
- #Windows schreibt 77-Zeichenlange Namen in die namen_2.txt. Da fast jeder dieser komischen Namen eine Zahl enthält, werden alle Zeilen gelöscht, welche die Zahl 1,2,3,4,5,6,7,8 oder 9 enthält. Danach bleiben noch 2 Namen übrig, welche mit "jjL" gelöscht werden.
- cat namen_2.txt | sed '/0/d' | sed '/1/d' | sed '/2/d'| sed '/9/d' | sed '/3/d'| sed '/4/d' | sed '/4/d' | sed '/5/d' | sed '/6/d' | sed '/7/d' | sed '/8/d' | sed '/jjL/d' | sed '/ocal/d' > namen_1.txt
- #Die namen_1.txt wird mit der gesperrt.txt verglichen. Alle Benutzer die in der gesperrt.txt enthalten sind, werden in der namen_1.txt entfernt und die fertige Liste nach namen.txt weitergeleitet.
- comm -3 namen_1.txt gesperrt.txt > namen.txt
- #While Schleife:
- #Da For nicht Zeilenweise einließt, sondern Wort für Wort, muss hier eine While schleife verwendet werden. Bei einer Vorschleife würde er 2 Suchanfragen machen, einmal mit Yves und eine mit Thiel, welche er natürlich nicht findet. While ließt die ganze Zeile
- #korrekt mit Yves Thiel ein.
- #Die Variable für den Einzelnen Namen heißt hier dann $NAME.
- while read NAME
- #EXPIRYTIME holt aus dem LDAP den Windows-Timestamp für das Ablaufdatum des Passwortes (Attribut msDS-UserExpiryTimeComputed).
- do EXPIRYTIME=`ldapsearch -x -LLL -h 131.234.81.3 -D "ldapaccess@c-lab.local" -w 'PASSWORT:D' -b "cn=$NAME,cn=users,dc=c-lab,dc=local" msDS-UserPasswordExpiryTimeComputed | grep -v CN= | grep -v "pwdLastSet: 0" | grep -v "msDS-UserPasswordExpiryTimeComputed: 0" | sed 's!msDS-UserPasswordExpiryTimeComputed:!!g' | sed 's/^[ \t]*//'`
- #LOGINNAME holt aus dem LDAP den Namen (CN) oer Attribut "cn".
- LOGINNAME=`ldapsearch -x -LLL -h 131.234.81.3 -D "ldapaccess@c-lab.local" -w 'PASSWORT:D' -b "cn=$NAME,cn=users,dc=c-lab,dc=local" sAMAccountName | sed s/sAMAccountName:// | sed 's/[ ]*//' | grep -v dn:`
- # Prüft, ob das Ablaufdatum einen Wert besitzt. Somit werden alle ausgefiltert die "Kennwort läuft nie ab" haben, dort trägt Windows/LDAP ein "-" ein, welches somit ausgefiltert wird.
- if echo $EXPIRYTIME | grep -q -e "^[0-9][0-9]*$"; then
- #Umwandlung von Windows-Timestamps (100s-Intervalle ab dem 01.01.1601) in Unix-Timestamps (Sekunden-Intervalle ab dem 01.01.1970).
- UNIXENDING=`expr $EXPIRYTIME / 10000000 - 11644473600`;
- #Der akutelle Unix-Timestamp wird gesetzt.
- UNIXDATE=`date +%s`
- #Das Ablaufdatum in Unix-Timestamp-Format wird von dem heutigen Timestamp subtrahiert. Ergebnis wird in $DIFF gespeichert.
- #Falls das Passwort abgelaufen ist, kommt ein Minuswert raus.
- DIFF=`expr $UNIXENDING - $UNIXDATE`
- fi
- #Falls ein Minuswert enstanden ist...
- if [ "$DIFF" -lt "0" ]
- then
- if [ -e "$HOMEPFAD/USERTXT/$LOGINNAME.txt" ] # Prüfen ob Textdatei mit dem Loginnamen vorhanden
- then
- find $HOMEPFAD/USERTXT/$LOGINNAME.txt -mtime 14 -exec rm {} \; #Falls ja, überprüfen wie alt das File ist. Falls über 14 Tage: löschen!
- if [ ! -e "$HOMEPFAD/USERTXT/$LOGINNAME.txt" ] #Wiederholte Überprüfung
- then #Falls ja..
- sendEmail -f cc@c-lab.de -t "$LOGINNAME@c-lab.de" -t "cc@c-lab.de" -u Passwort fuer User $LOGINNAME abgelaufen! -o message-file=$HOMEPFAD/MAILS/email_0_tage -s mail.uni-paderborn.de #Email wird an den Benutzer und cc@c-lab.de gesendet
- date +%s > $HOMEPFAD/USERTXT/$LOGINNAME.txt #Timestamp wird in die Loginname.txt reingeschrieben und gespeichert. Dieses File wird oben überprüft. So kann garantiert werden, dass nicht an jedem Tag eine E-Mail an den Benutzer versendet wird.
- fi
- else #Falls nicht...
- sendEmail -f cc@c-lab.de -t "$LOGINNAME@c-lab.de" -t "cc@c-lab.de" -u Passwort fuer User $LOGINNAME abgelaufen! -o message-file=$HOMEPFAD/MAILS/email_0_tage -s mail.uni-paderborn.de #s.o.
- date +%s > $HOMEPFAD/USERTXT/$LOGINNAME.txt #s.o.
- fi
- else
- if [ "$DIFF" -lt "86400" ] #Falls der Wert 86400 beträgt (86400 Sekunden = 1 Tag), wird wie oben verfahren.
- then
- if [ -e "$HOMEPFAD/USERTXT/$LOGINNAME.txt" ]
- then
- find $HOMEPFAD/USERTXT/$LOGINNAME.txt -mtime 1 -exec rm {} \;
- if [ ! -e "$HOMEPFAD/USERTXT/$LOGINNAME.txt" ]
- then
- sendEmail -f cc@c-lab.de -t "$LOGINNAME@c-lab.de" -t "cc@c-lab.de" -u Passwort fuer User $LOGINNAME laeuft bald ab! -o message-file=$HOMEPFAD/MAILS/email_1_tage -s mail.uni-paderborn.de
- date +%s > $HOMEPFAD/USERTXT/$LOGINNAME.txt
- fi
- else
- sendEmail -f cc@c-lab.de -t "$LOGINNAME@c-lab.de" -t "cc@c-lab.de" -u Passwort fuer User $LOGINNAME laeuft bald ab! -o message-file=$HOMEPFAD/MAILS/email_1_tage -s mail.uni-paderborn.de
- date +%s > $HOMEPFAD/USERTXT/$LOGINNAME.txt
- fi
- else
- if [ "$DIFF" -lt "604800" ]
- then
- if [ -e "$HOMEPFAD/USERTXT/$LOGINNAME.txt" ]
- then
- find $HOMEPFAD/USERTXT/$LOGINNAME.txt -mtime 7 -exec rm {} \;
- if [ ! -e "$HOMEPFAD/USERTXT/$LOGINNAME.txt" ]
- then
- sendEmail -f cc@c-lab.de -t "$LOGINNAME@c-lab.de" -t "cc@c-lab.de" -u Passwort fuer User $LOGINNAME laeuft bald ab! -o message-file=$HOMEPFAD/MAILS/email_7_tage -s mail.uni-paderborn.de
- date +%s > $HOMEPFAD/USERTXT/$LOGINNAME.txt
- fi
- else
- sendEmail -f cc@c-lab.de -t "$LOGINNAME@c-lab.de" -t "cc@c-lab.de" -u Passwort fuer User $LOGINNAME laeuft bald ab! -o message-file=$HOMEPFAD/MAILS/email_7_tage -s mail.uni-paderborn.de
- date +%s > $HOMEPFAD/USERTXT/$LOGINNAME.txt
- fi
- else
- if [ "$DIFF" -lt "1209600" ]
- then
- if [ -e "$HOMEPFAD/USERTXT/$LOGINNAME.txt" ]
- then
- find $HOMEPFAD/USERTXT/$LOGINNAME.txt -mtime 14 -exec rm {} \;
- if [ ! -e "$HOMEPFAD/USERTXT/$LOGINNAME.txt" ]
- then
- sendEmail -f cc@c-lab.de -t "$LOGINNAME@c-lab.de" -t "cc@c-lab.de"-u Passwort fuer User $LOGINNAME laeuft bald ab! -o message-file=$HOMEPFAD/MAILS/email_14_tage -s mail.uni-paderborn.de
- date +%s > $HOMEPFAD/USERTXT/$LOGINNAME.txt
- fi
- else
- sendEmail -f cc@c-lab.de -t "$LOGINNAME@c-lab.de" -t "cc@c-lab.de" -u Passwort fuer User $LOGINNAME laeuft bald ab! -o message-file=$HOMEPFAD/MAILS/email_14_tage -s mail.uni-paderborn.de
- date +%s > $HOMEPFAD/USERTXT/$LOGINNAME.txt
- fi
- fi
- fi
- fi
- fi
- done < namen.txt #Namen.txt wird in die Whileschleife eingelesen.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement