Da jeder seinen Server betreibt und wir so keinen Überblick über Karteileichen sprich Benutzer die sich länger nicht angemeldet haben hier ein Script, dass in der Description der Ldapdatenbank, den Server und die Systemzeit einträgt. ACHTUNG: letzte Zeile nach erfolgreichem Test aktivieren!
#!/bin/bash
# Lastlogin OpenNewsNetwork
# Date: Dez 15 2006
# Version: 0.15
# Author: Arnold Schiller
# Jan Schubert
# Please adapt the following settings to your needs
NEWSHOST="newsX"
USERSLDIF="/tmp/users.ldif.$$"
LDAPSERVER="ldap1.open-news-network.org"
LDAPBASE="dc=open-news-network,dc=org"
ADMIN="cn=admin,$LDAPBASE"
PASS="xyz"
NEWSLOG="/var/log/news/news.info"
ROWNUM=11 #row in which user is logged, depends on your Log-Format, mostly 9 or 11
# define path to commands here
LDAPSEARCH="/usr/bin/ldapsearch"
LDAPMODIFY="/usr/bin/ldapmodify"
GREP="/bin/grep"
CAT="/usr/bin/cat"
SH="/bin/sh"
CUT="/usr/bin/cut"
SORT="/usr/bin/sort"
AWK="/usr/bin/awk"
# get current users from LDAP database
$LDAPSEARCH -w $PASS -x -D $ADMIN -h $LDAPSERVER -L -b $LDAPBASE lastModifiedBy: * > $USERSLDIF
# get authenticated users and match them against ldap users
# uncomment last line for updating the LDAP Server, otherwise you will see the modifications on STDOUT
$GREP -E " auth authenticator successful, user [^\@ ]+\@[^\@ ]+\.[a-z]{2,4}$" $NEWSLOG \
|$CUT -d\ -f$ROWNUM \
|$SORT -u \
|$AWK -v USERSLDIF=$USERSLDIF -v LDAPBASE=$LDAPBASE '{printf "grep \"^dn: uid=%s,%s%s\" %s\n",$1,LDAPBASE,"$",USERSLDIF}' \
|$SH \
|$AWK -v NEWSHOST=$NEWSHOST '{printf "\n# %s\n%s\ndescription: %s %s\n",$0,$0,NEWSHOST,systime()}' \
#|$LDAPMODIFY -w $PASS -x -D $ADMIN -h $LDAPSERVER