#!/bin/bash
#
# get_last_logon_by_dc
#
# Author        : Nohaj
# Contact       : johan@slashroot.fr
# Date          : 27/01/21
# Version       : 1.0
# Description   : Script basique qui renvoi les dates de dernieres connexions d'un compte donnee en parametre par DC Active Directory
# Require       : ldapsearch, klist et un ticket kerberos
#

#
# Domaine d'action
#
DOMAIN="slashroot.fr"

#
# Variables déduites
#
DOMAIN_UPPER=${DOMAIN^^}
X=$(echo $DOMAIN | tr "." "\n" | wc -l)

for i in $(seq 1 ${X}) ; do
    S=$(echo $DOMAIN | cut -d "." -f $i)
    BASE_DN_TMP="${BASE_DN_TMP},DC=$S"
done

BASE_DN=${BASE_DN_TMP:1}

#
# Checks
#
type ldapsearch &> /dev/null || { echo >&2 "ERREUR - Ce script a besoin de ldapsearch pour fonctionner"; exit 1; }
type klist &> /dev/null || { echo >&2 "ERREUR - Ce script a besoin de klist pour fonctionner"; exit 1; }

if [[ $# -ne 1 ]] ; then
    echo "ERREUR - Le script accepte un parametre et un seul (sAMAccountName)"
    echo ""
    exit 1
fi

#
# Check ticket sinon on s'authentifie
#
if ( ! klist -s &> /dev/null ) ; then
    kinit $USER
    if ( ! klist -s &> /dev/null ) ; then
        echo "ERREUR - Probleme de ticket Kerberos"
        echo ""
        exit 1
    fi
fi

#
# Au boulot
#
echo ""
echo "Utilisateur : $1"
echo ""
# On verifie que l'utilisateur existe
if ( ! /usr/bin/ldapsearch -LLL -h $(host -t srv _ldap._tcp.${DOMAIN_UPPER} | awk '{print $8}' | head -n 1) -b "${BASE_DN}" "(&(objectClass=user)(sAMAccountName=$1))" sAMAccountName 2>/dev/null | grep -q sAMAccountName ) ; then
    echo "ERREUR - L'utilisateur $1 ne semble pas exister"
    echo ""
    exit 1
fi

# On recupere les dates de derniere connexion
for ad_server in $(host -t srv _ldap._tcp.${DOMAIN_UPPER} | awk '{print $8}') ; do
    ts=$(/usr/bin/ldapsearch -LLL -h $ad_server -b "${BASE_DN}" "(&(objectClass=user)(sAMAccountName=$1))" lastLogon 2>/dev/null | grep lastLogon | awk '{print $2}')
    ts_unix=$((ts / 10000000 - 11644473600))
    ts_human=$(date -d @$ts_unix +'%d-%m-%Y')
    echo -e "$ad_server \t => $ts_human"
done

echo ""
