#!/bin/bash# Author : Eric Quinton# Date : 08/01/2013 # Script permettant de rechercher les comptes samba dans l'annuaire # LDAP qui sont inactifs (mot de passe samba a changer anterieur a la date du jour)# et dont le compte n'a pas encore expireBASE=ou=people,ou=masociete,c=comSERVEUR=ldap://localhostATTRIBUTTIMESTAMP=modifyTimestampTIMESTAMPMONTH=2592000HELP=0MAILCMD=/usr/bin/mailTMP=/tmp/listeAgentInactif.txtNBMONTH=6MAILSUJET="Annuaire LDAP - recherche des comptes inactifs depuis $NBMONTH mois"# Recuperation des parametreswhile getopts "d:-:f:m:hn:" OPTdo# gestion des options longues
if test $OPT = '-' ; then
LONGOPT="${OPTARG%%=*}"
OPTARG="${OPTARG#*=}"
case $LONGOPT in
date) OPT="d";;
help) OPT="h";;
file) OPT="f";;
courriel) OPT="m";;
email) OPT="m";;
nbmonth) OPT="n";;
*) HELP=1;;
esac
fi
case $OPT in
d) DATE=$OPTARG;;
f) FICHIER=$OPTARG;;
m) COURRIEL=$OPTARG;;
n) NBMONTH=$OPTARG;;
h) HELP=1;;
*) HELP=1;;
esac
done# affichage de l'aideif test $HELP = 1; thenecho "Script de recherche des comptes inactifs dans un annuaire LDAP"
echo "[--date=dd/mm/yyyy|-d dd/mm/yyyy] : date de recherche"
echo "[--fichier=nomFichier|--file=nomFichier|-f nomFichier] : nom du fichier recevant les resultats de la recherche"
echo "[--courriel=adresse|--email=adresse|-m adresse] : nom de la boite devant recevoir la liste"
echo "[--nbmonth=nombre|-n nombre] : nombre de mois sans modification du compte"
echo "[--help|-h] : cette aide..."
exit 0
fi# formatage de la commande ldapsearchLDAPSEARCH="ldapsearch -H $SERVEUR -b $BASE -x"# formatage de la dateif test -z $DATE; thenANNEE=`date "+%Y"`
MOIS=`date "+%m"`
JOUR=`date "+%d"`
elseANNEE=${DATE:6:4}
MOIS=${DATE:3:2}
JOUR=${DATE:0:2}
fi#DATETIMESTAMP=$ANNEE$MOIS$JOUR"000000Z"DATEINT=`date -d "$ANNEE-$MOIS-$JOUR" "+%s"`DATERECHERCHE=$(($DATEINT-$TIMESTAMPMONTH*$NBMONTH))echo "Date de reference : "$JOUR/$MOIS/$ANNEE > $TMPecho "Nombre de mois sans modification : "$NBMONTH >>$TMPecho "Date recherche : "`date -d @$DATERECHERCHE "+%d/%m/%Y"` >>$TMPDATERECHERCHE=`date -d @$DATERECHERCHE "+%Y%m%d"`"000000Z"# echo "Date au format timestamp : "$DATETIMESTAMP# echo "Date au format integer : "$DATEINTif ! test -z $FICHIER; thenecho "Fichier contenant la liste des identifiants : "$FICHIER
if test -f $FICHIER; then
read -p "le fichier $FICHIER est existant. Voulez-vous le supprimer [O/n] ?" REPONSE
if test -z $REPONSE; then
REPONSE="O"
fi
if test "$REPONSE" = "O" -o "$REPONSE" = "o"; then
rm -f $FICHIER
echo "Fichier supprime"
else
echo "Traitement abandonne"
exit 1
fi
fi
fi# Recuperation de la liste des uid concernesfor IDENTIFIANT in $($LDAPSEARCH "(modifyTimestamp<="$DATERECHERCHE")" -S uid uid|grep ^uid|sed s/uid:\ //)do# test de la date samba d'expiration du compte
DATEEXPIRATION=$($LDAPSEARCH "(uid="$IDENTIFIANT")" sambaKickoffTime|grep ^sambaKickoffTime|sed s/sambaKickoffTime:\ //)
if ! test -z $DATEEXPIRATION; then
if test "$DATEEXPIRATION" -ge "$DATEINT"; then
SAMBAACCTFLAGS=$($LDAPSEARCH "(uid="$IDENTIFIANT")" sambaAcctFlags|grep ^sambaAcctFlags|sed s/sambaAcctFlags:\ //|grep D)
DATEMODIF=$($LDAPSEARCH "(uid="$IDENTIFIANT")" modifyTimestamp|grep ^modifyTimestamp|sed s/modifyTimestamp:\ //)
L_DATEMODIF="Derniere date de modification : "${DATEMODIF:6:2}/${DATEMODIF:4:2}/${DATEMODIF:0:4}
L_DATEEXPIRATION="date expiration du compte : "`date -d @$DATEEXPIRATION "+%d/%m/%Y"`
L_COMPTEVERROUILLE=""
if ! test -z "$SAMBAACCTFLAGS"; then
L_COMPTEVERROUILLE="Compte desactive"
fi
echo -e "$IDENTIFIANT\t$L_DATEMODIF\t$L_DATEEXPIRATION\t$L_COMPTEVERROUILLE" >> $TMP
if ! test -z $FICHIER; then
echo $IDENTIFIANT >> $FICHIER
fi
fi
fi
doneif ! test -z $COURRIEL; then$MAILCMD -s "$MAILSUJET" "$COURRIEL" < $TMP
elsecat $TMP
fi