#!/bin/bash
#############################################
# Création/Mise à niveau de l'annuaire ldap #
#############################################
. /usr/lib/eole/ihm.sh
option=$1
other_option=$2
container_path_annuaire=$(CreoleGet container_path_annuaire)
base_dn=$(CreoleGet ldap_base_dn)
reader="cn=reader,$base_dn"
DATAFILE=/var/lib/ldap/data.mdb

GenReader() {
    # génération/modification du compte ldap en lecteur seule
    if [ ! -f /root/.reader ];then
        echo "Erreur : fichier /root/.reader introuvable !"
        exit 1
    fi
    pass=`cat /root/.reader`
    if [ "$1" = "create" ];then
        READER=/var/lib/ldap/reader.ldif
        C_READER=$container_path_annuaire/$READER
        cpass=`CreoleRun "slappasswd -s \"$pass\"" annuaire`
        echo "dn: $reader" > $C_READER
        echo "objectClass: person" >> $C_READER
        echo "cn: reader" >> $C_READER
        echo "sn: Compte en lecture seule" >> $C_READER
        echo "userPassword: $cpass" >> $C_READER
        $CHROOT su openldap -s /bin/bash -c "slapadd -l $READER -f /etc/ldap/slapd.conf"
        rm -f $C_READER
    else
        pwd=`grep ldap_passwd /etc/eole/eoleldap.conf | cut -d '"' -f 2`
        ldappasswd -D "cn=admin,$base_dn" -w "$pwd" -s "$pass" "$reader"
        if [ ! $? = 0 ]; then
            EchoRouge "Une erreur est survenue au changement de mot de passe de l'utilisateur \"reader\""
            echo
            exit 1
        fi
    fi
}

ToggleReplication() {
    # chroot opéré avant normalement
    mode=$1
    if [ "$mode" = 'on' ]
    then
        sed -i "s;^#include /etc/ldap/replication.conf;include /etc/ldap/replication.conf;" /etc/ldap/slapd.conf
    elif [ "$mode" = 'off' ]
    then
        sed -i "s;^include /etc/ldap/replication.conf;#include /etc/ldap/replication.conf;" /etc/ldap/slapd.conf
    fi
}

if [ $(CreoleGet activer_client_ldap) = "local" ];then
    Regen="1"
    CHROOT=''
    [ ! "$container_path_annuaire" = "" ] && CHROOT="chroot $container_path_annuaire"
    if [ "$option" = "instance" ];then
        CreoleService slapd stop -c annuaire
        #Il est possible de lancer le script "/usr/share/eole/posttemplate instance force"
        #pour forcer la regeneration de l'annuaire sans poser des questions
        #utile pour AAF
        if [ -e $container_path_annuaire$DATAFILE ] && [ ! "$other_option" = "force" ]
        then
            echo
            Question_ouinon "Voulez vous re-générer l'annuaire LDAP (attention, cela detruira l'existant !) ?" "True" "non" "warn"
            Regen=$?
        else
            Regen="0"
        fi
        if [ "$Regen" = "0" ]
        then
            echo -e "\n## Initialisation de l'annuaire ##"
            rm -f $container_path_annuaire/var/lib/ldap/*.*
            # création de l'arborescence LDAP et des entrées de base
            unset DISPLAY
            cd $container_path_annuaire/var/lib/eole/
            # test si le SID a bien été réappliqué (si est différent de [sambasid])
            grep -q ^"sambaSID: \[sambasid\]" *.ldif
            if [ $? = 1 ]; then
                for ldif in `ls *.ldif`;do
                    $CHROOT su openldap -s /bin/bash -c "slapadd -l /var/lib/eole/${ldif} -f /etc/ldap/slapd.conf" > /dev/null
                done
                GenReader "create"
            else
                need_exit='yes'
            fi
            cd - > /dev/null
            [ "$need_exit" = "yes" ] && EchoRouge "Le SID n'a pas été modifié dans le fichier LDIF" && exit 1
            [ ! "$other_option" = "force" ] && CreoleService slapd restart -c 'annuaire'
        fi
    elif [ ! -e $container_path_annuaire$DATAFILE ];then
        # reconfigure sans annuaire (#6053)
        echo
        EchoRouge "L'annuaire n'est pas créé correctement."
        EchoRouge "Pour générer l'annuaire, il est nécessaire d'utiliser la commande \"instance\"".
        echo
        exit 1
    fi
    if [ "$Regen" != "0" ]
    then
        # vérification du reader
        $CHROOT slapcat -f /etc/ldap/slapd.conf -a cn=reader | grep "dn: $reader" >/dev/null
        if [ $? -ne 0 ];then
            echo "Création de l'utilisateur ldap en lecture seule"
            GenReader "create"
        else
            # deactivate replication to avoid shadow mode
            ToggleReplication off
            CreoleService slapd start -c 'annuaire'
            GenReader "modify"
            # reactivate replication
            ToggleReplication on
            CreoleService slapd restart -c 'annuaire'
        fi
    fi
fi

exit 0
