#!/bin/bash

. /usr/lib/eole/ihm.sh
ad_user=$(CreoleGet ad_user)
ad_domain=$(CreoleGet ad_domain)
ad_address=$(CreoleGet ad_address)
ad_server_fullname=$(CreoleGet ad_server_fullname)
ad_local=$(CreoleGet ad_local)

if [ $(systemctl is-enabled winbind.service) = 'masked' ]; then
    systemctl unmask winbind.service
    systemctl enable winbind.service
fi

# disable nmbd #31408
if  systemctl is-enabled nmbd.service >/dev/null ;then
    systemctl stop nmbd.service
    systemctl disable nmbd.service
fi

sync=1
initkrb()
{
    DOMAIN=`echo $ad_domain | tr 'a-z' 'A-Z'`
    echo $1 | kinit $ad_user@$DOMAIN >/dev/null
    if [ "$?" == "0" ]; then
        systemctl stop winbind.service
        systemctl stop smbd.service
        rm -rf /var/lib/samba/winbindd_privileged
        net cache flush
	rm -f /var/lib/samba/winbindd*.tdb
	rm -f /var/lib/samba/group_mapping.ldb
        rm -rf /var/cache/samba/*
        net ads join -U $ad_user%$passwd -S $ad_server_fullname
        if [ "$?" == "0" ]; then
            sync=0
        else
            echo "Ticket Kerberos valide, la jonction au serveur Samba a échoué"
            return 4
        fi
        systemctl start smbd.service
        systemctl start winbind.service
    else
        echo "Mauvais mot de passe administrateur du domaine"
        return 1
    fi
}

pwdfile=/root/.eolead
if [ "$1" == 'instance' ];then
    tcpcheck 3 $ad_address:88 > /dev/null
    if [ "$?" != "0" ]; then
        echo
        EchoRouge "Impossible de joindre le serveur Kerberos"
        echo
        exit 1
    fi
    for (( i=1; i<=3 ; i++ )); do
        echo
        EchoCyan "Intégration au domaine Active Directory"
        echo -n "Mot de passe de l'utilisateur $ad_user pour le domaine ${ad_domain^^} : "
        read -s passwd
        echo
        echo $passwd > $pwdfile
        initkrb $passwd
        case $? in
            0) break;;
            4) i=3;;
        esac
    done
    if [ $i -eq 4 ];then
        echo
        EchoRouge "Impossible d'effectuer l'intégration au domaine"
        echo
        exit 1
    fi
else
    tcpcheck 3 $ad_address:88 > /dev/null
    if [ "$?" != "0" ]; then
        EchoOrange "Serveur Kerberos impossible à joindre"
    elif [ -f $pwdfile ];then
        passwd=$(cat $pwdfile)
        initkrb $passwd
        if [ $? -ne 0 ];then
            echo
            EchoRouge "Erreur de récupération du ticket Kerberos"
            echo "Il est nécessaire de relancer la procédure d'instanciation"
            echo
            exit 1
        fi
    else
        echo
        EchoRouge "Le mot de passe Active Directory n'est pas paramétré"
        echo "Il est nécessaire de relancer la procédure d'instanciation"
        echo
        exit 1
    fi
fi

# Mise à jour du mot de passe AD dans /etc/lsc/lsc.xml et smbldap_bind.conf
echo "Mise à jour du mot de passe dans les fichiers de configuration"
systemctl stop eole-wait-addc
systemctl stop eole-lsc
passwdrecode=$(echo $passwd | recode ascii..html)
sed "22c\      <password>$passwdrecode</password>" </etc/eole/lsc.xml >/etc/lsc/lsc.xml
sed -i "15c\adpassword = \"$passwd\";" /etc/smbldap-tools/smbldap_bind.conf

if [ $sync -eq 0 ];then
    echo
    EchoCyan "Synchronisation ldap"
    lsc -f /etc/lsc -s all -t1
    echo
fi
if [ "$ad_local" = "oui" ]; then
    systemctl enable eole-wait-addc
    systemctl start eole-wait-addc eole-lsc
else
    systemctl disable eole-wait-addc
    systemctl start eole-lsc
fi

exit 0
