script de recheche des comptes ldap non modifiés depuis plus de 6 mois

#!/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 expire
BASE=ou=people,ou=masociete,c=com
SERVEUR=ldap://localhost
ATTRIBUTTIMESTAMP=modifyTimestamp
TIMESTAMPMONTH=2592000
HELP=0
MAILCMD=/usr/bin/mail
TMP=/tmp/listeAgentInactif.txt
NBMONTH=6
MAILSUJET="Annuaire LDAP - recherche des comptes inactifs depuis $NBMONTH mois"
# Recuperation des parametres
while getopts "d:-:f:m:hn:" OPT
do

# 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'aide
if test $HELP = 1; then

echo "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 ldapsearch
LDAPSEARCH="ldapsearch -H $SERVEUR -b $BASE -x"
# formatage de la date
if test -z $DATE; then

ANNEE=`date "+%Y"`

MOIS=`date "+%m"`

JOUR=`date "+%d"`

else

ANNEE=${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 > $TMP
echo "Nombre de mois sans modification : "$NBMONTH >>$TMP
echo "Date recherche : "`date -d @$DATERECHERCHE "+%d/%m/%Y"` >>$TMP
DATERECHERCHE=`date -d @$DATERECHERCHE "+%Y%m%d"`"000000Z"
# echo "Date au format timestamp : "$DATETIMESTAMP
# echo "Date au format integer : "$DATEINT
if ! test -z $FICHIER; then

echo "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 concernes
for 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

done
if ! test -z $COURRIEL; then

$MAILCMD -s "$MAILSUJET" "$COURRIEL" < $TMP

else

cat $TMP

fi