Advertisement
Guest User

Untitled

a guest
Jul 11th, 2017
543
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.52 KB | None | 0 0
  1. #!/bin/sh
  2.  
  3. #Beginn: Donnerstag, 09.09.2010
  4. #Donnerstag, 09.09.2010, ldap-Befehle getestet, Windows-timestamp in Unix-timestamp Umwandlung
  5. #Freitag, 10.09.2010, Script zu Ende geschrieben
  6. #Montag, 13.09.2010, Kommentiert, if-Schleifen Anpassungen, Getestet
  7. #Dienstag, 14.09.2010, cronjob getestet, Kommentiert
  8. #Mittwoch, 15.09.2010, Freitag, 27.09.2010, Testwochen
  9. #Dienstag, 28.09.2010, Auf dbint-vu-1 eingefügt
  10. #Mittwoch, 29.09.2010, Doku angelegt, diverse weitere Kommentare eingefügt
  11.  
  12. #Pfad wird gesetzt.
  13. HOMEPFAD=/home/mailpw
  14.  
  15. #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".
  16. 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
  17.  
  18. #Alle Personen werden in namen_2.txt geschrieben.
  19. 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
  20.  
  21. #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.
  22. 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
  23.  
  24. #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.
  25. comm -3 namen_1.txt gesperrt.txt > namen.txt
  26.  
  27. #While Schleife:
  28. #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
  29. #korrekt mit Yves Thiel ein.
  30. #Die Variable für den Einzelnen Namen heißt hier dann $NAME.
  31. while read NAME
  32.  
  33. #EXPIRYTIME holt aus dem LDAP den Windows-Timestamp für das Ablaufdatum des Passwortes (Attribut msDS-UserExpiryTimeComputed).
  34. 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]*//'`
  35.  
  36. #LOGINNAME holt aus dem LDAP den Namen (CN) oer Attribut "cn".
  37. 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:`
  38.  
  39. # 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.
  40. if echo $EXPIRYTIME | grep -q -e "^[0-9][0-9]*$"; then
  41.  
  42. #Umwandlung von Windows-Timestamps (100s-Intervalle ab dem 01.01.1601) in Unix-Timestamps (Sekunden-Intervalle ab dem 01.01.1970).
  43. UNIXENDING=`expr $EXPIRYTIME / 10000000 - 11644473600`;
  44.  
  45. #Der akutelle Unix-Timestamp wird gesetzt.
  46. UNIXDATE=`date +%s`
  47.  
  48. #Das Ablaufdatum in Unix-Timestamp-Format wird von dem heutigen Timestamp subtrahiert. Ergebnis wird in $DIFF gespeichert.
  49. #Falls das Passwort abgelaufen ist, kommt ein Minuswert raus.
  50. DIFF=`expr $UNIXENDING - $UNIXDATE`
  51. fi
  52.  
  53. #Falls ein Minuswert enstanden ist...
  54. if [ "$DIFF" -lt "0" ]
  55. then
  56. if [ -e "$HOMEPFAD/USERTXT/$LOGINNAME.txt" ] # Prüfen ob Textdatei mit dem Loginnamen vorhanden
  57. then
  58. find $HOMEPFAD/USERTXT/$LOGINNAME.txt -mtime 14 -exec rm {} \; #Falls ja, überprüfen wie alt das File ist. Falls über 14 Tage: löschen!
  59. if [ ! -e "$HOMEPFAD/USERTXT/$LOGINNAME.txt" ] #Wiederholte Überprüfung
  60. then #Falls ja..
  61. 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
  62. 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.
  63. fi
  64. else #Falls nicht...
  65. 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.
  66. date +%s > $HOMEPFAD/USERTXT/$LOGINNAME.txt #s.o.
  67.  
  68. fi
  69. else
  70. if [ "$DIFF" -lt "86400" ] #Falls der Wert 86400 beträgt (86400 Sekunden = 1 Tag), wird wie oben verfahren.
  71. then
  72. if [ -e "$HOMEPFAD/USERTXT/$LOGINNAME.txt" ]
  73. then
  74. find $HOMEPFAD/USERTXT/$LOGINNAME.txt -mtime 1 -exec rm {} \;
  75. if [ ! -e "$HOMEPFAD/USERTXT/$LOGINNAME.txt" ]
  76. then
  77. 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
  78. date +%s > $HOMEPFAD/USERTXT/$LOGINNAME.txt
  79. fi
  80. else
  81. 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
  82. date +%s > $HOMEPFAD/USERTXT/$LOGINNAME.txt
  83.  
  84. fi
  85. else
  86. if [ "$DIFF" -lt "604800" ]
  87. then
  88. if [ -e "$HOMEPFAD/USERTXT/$LOGINNAME.txt" ]
  89. then
  90. find $HOMEPFAD/USERTXT/$LOGINNAME.txt -mtime 7 -exec rm {} \;
  91. if [ ! -e "$HOMEPFAD/USERTXT/$LOGINNAME.txt" ]
  92. then
  93. 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
  94. date +%s > $HOMEPFAD/USERTXT/$LOGINNAME.txt
  95. fi
  96. else
  97. 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
  98. date +%s > $HOMEPFAD/USERTXT/$LOGINNAME.txt
  99.  
  100. fi
  101. else
  102. if [ "$DIFF" -lt "1209600" ]
  103. then
  104. if [ -e "$HOMEPFAD/USERTXT/$LOGINNAME.txt" ]
  105. then
  106. find $HOMEPFAD/USERTXT/$LOGINNAME.txt -mtime 14 -exec rm {} \;
  107. if [ ! -e "$HOMEPFAD/USERTXT/$LOGINNAME.txt" ]
  108. then
  109. 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
  110. date +%s > $HOMEPFAD/USERTXT/$LOGINNAME.txt
  111. fi
  112. else
  113. 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
  114. date +%s > $HOMEPFAD/USERTXT/$LOGINNAME.txt
  115.  
  116. fi
  117.  
  118. fi
  119. fi
  120. fi
  121. fi
  122. done < namen.txt #Namen.txt wird in die Whileschleife eingelesen.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement