#!/bin/bash
MYVER="2.0.0"
## version Date
#  0.7.a    22/10/2010 Version initiale -PP
#  0.7.b    23/10/2010 Version testée -PP
#           Vérification des modifs sur smb.conf et ldap.conf pour chaque option
#
#  0.8.0    27/10/2010 relance de winbind qui se lance parfois mal
#  0.8.a    28/10/2010 forcer le port dans l'URI de /etc/ldap.conf
#  0.9.a    28/10/2010 journalisation dans /var/log/samba
#  0.9.b    21/01/2011 mise en dur du chemins de "/usr/bin/service"
#  0.9.c    12/04/2011 utilisation de exxl service
#  1.0.1    03/08/2011 Plus de purge des tdb, reload de samba au lieu de restart
#  2.0.0    07/05/2012 Adaptation conteneur
#
# Passage franc ldap local ou national
#
p_nom=${0##*/}
if [ "$1" = "-v"  ] ; then
   echo $MYVER
   exit 0
fi
##
log=/var/log/samba/ecdl_bascule_ldap.log
#####

[ -s "/etc/eole/containers.conf" ] && . /etc/eole/containers.conf || container_path_ecdlfichier=""
. /usr/share/eole/FonctionsEoleNg

#pas le lancement nscd
nscd=0
# si 1 relance nscd en fin
#nscd=1
param=/usr/share/ecdl/param.source
if [ -f "/etc/sysconfig/.site" ]
then
   source /etc/sysconfig/.site
   param=/usr/share/${eq_modele}/param.source
else
   echo "$p_nom:Gaffe pas de  /etc/sysconfig/.site"
fi
if [ -r $param ] ; then
   source  $param
else
   echo "$p_nom:Problème pas de $param utilisable, fin du programme"
   exit 1
fi
#### Serveur ldap en fonctionement normal
port="636"
serv="$eq_serv_ldap"
ldap="ldaps:\/\/${serv}:636"
####serveur maitre ldap
masterPort="636"
masterLDAP="ldapma-01.csac.melanie2.i2"

if   [ "$2" = "-n"  ] ; then
   echo "p_nom:Activation du cache nscd"
   nscd=1
   l="avec activation du cache nscd"
else
   l=""
fi

if   [ "$1" = "-l"  ] ; then
   echo "$p_nom:Passage au ldap local"
   serv="localhost"
   port="389"
   ldap="ldap:\/\/$serv"
   ##utile ou pas ? le master est le local. Les modifs réussissent mais sont perdues
   masterLDAP="localhost"
   masterPort="389"
   echo  "$p_nom: `date -R`, Passage au ldap local $ldap $l" >> $log
elif [ "$1" = "-m" ] ; then
   echo "$p_nom:Passage au mixte ldap central+local"
   ldap="ldaps:\/\/${serv}:636 ldap:\/\/localhost"
   echo  "$p_nom: `date -R`, Passage au ldap mixte $ldap $l" >> $log
elif [ "$1" = "-c" ] ; then
   echo "$p_nom:Passage au ldap central"
   echo  "$p_nom: `date -R`, Passage au ldap central $ldap $l" >> $log
elif [ "$1" = "-t" ] ; then
   port="389"
   masterPort="389"
   echo "$p_nom:Passage au ldap central pour test"
   ldap="ldap:\/\/$serv"
   echo  "$p_nom: `date -R`, Passage au ldap central pour test $ldap $l" >> $log
elif [ "$1" = "-s" ] ; then
   #echo "p_nom:ldap actuellment utilisé"
   R="`perl -ne 'print if /^[ \t]*passdb[ \t]*backend[ \t]*=/i' < $container_path_ecdlfichier/etc/samba/smb.conf| tail -1`"
   R=${R##*=}
   ## Suppression des espaces
   R=`echo $R | sed 's/^[ \t]*//;s/[ \t]*$//'`
   #echo "$R"
   if   [ "$R" = "ldapsam:\"ldaps://$eq_serv_ldap ldap://localhost\"" ] || [ "$R" = "ldapsam:\"ldaps://$eq_serv_ldap:636 ldap://localhost\"" ] ; then
      echo "mixte"
   elif [ "$R" = "ldapsam:\"ldap://localhost\"" ]; then
      echo "local"
   elif [ "$R" = "ldapsam:\"ldaps://$eq_serv_ldap\"" ] || [ "$R" = "ldapsam:\"ldaps://$eq_serv_ldap:636\"" ]  ;  then
      echo "central"
   elif [ "$R" = "ldapsam:\"ldap://$eq_serv_ldap\"" ]; then
      echo "test"
   else
      echo "inconnu:$R"
   fi
   exit 0
else
   echo "usage : $p_nom -l|-c|-t|-m|-s [-n]"
   echo "       -s pour connaitre le mode ldap en cours (statut),"
   echo "       -c pour ldaps (c)entral, le fonctionnement de référence,"
   echo "       -l pour ldap  (l)ocal, en cas de soucis réseau"
   echo "       -m pour ldap (m)ixte ldaps central+local, bascule non déterministe"
   echo "       -t pour ldap central de (t)est (non sécurisé, pour analyse réseau"
   echo "       -c -n pour central avec lancement du cache nscd (expérimental)"
   exit 0
fi
if [ "$port" = "636"  ] ; then
   ssl=1
else
   ssl=0
fi
#echo "$p_nom:*serveurs ldap qui vont être utilisé* $serv port $port URI $ldap masterLDAP=$masterLDAP:$masterPort $l"
###
#echo "$p_nom:Modification de /etc/samba/smb.conf: passdb backend = ldapsam:\"$ldap\""
sed -i".sed" "s/^\( \|\t\)*passdb backend *=.*$/\tpassdb backend = ldapsam\:\"$ldap\"/" $container_path_ecdlfichier/etc/samba/smb.conf
###
#echo "$p_nom:Modification de /etc/ldap.conf et /etc/ldap/ldap.conf: URI	$ldap"
sed -i".sed" "s/^\( \|\t\)*URI.*$/URI $ldap/" $container_path_ecdlfichier/etc/ldap.conf
sed -i".sed" "s/^\( \|\t\)*URI.*$/URI $ldap/" $container_path_ecdlfichier/etc/ldap/ldap.conf
###
#echo "$p_nom:Modification de /etc/smbldap-tools/smbldap.conf ldapSSL=$ssl,slaveLDAP=$serv,slavePort=$port,masterLDAP=$masterLDAP,masterPort=$masterPort"
#ldapSSL="1"
sed -i".sed" "s/^\( \|\t\)*ldapSSL*=.*$/ldapSSL=\"$ssl\"/" $container_path_ecdlfichier/etc/smbldap-tools/smbldap.conf
#slaveLDAP="ldapsmb.ac.melanie2.i2"
sed -i "s/^\( \|\t\)*slaveLDAP*=.*$/\slaveLDAP=\"$serv\"/" $container_path_ecdlfichier/etc/smbldap-tools/smbldap.conf
# If not defined, parameter is set to "389"
#slavePort="636"
sed -i "s/^\( \|\t\)*slavePort*=.*$/\slavePort=\"$port\"/" $container_path_ecdlfichier/etc/smbldap-tools/smbldap.conf
#masterPort="636"
sed -i "s/^\( \|\t\)*masterPort*=.*$/\masterPort=\"$masterPort\"/" $container_path_ecdlfichier/etc/smbldap-tools/smbldap.conf
##masterLDAP="ldapma-01.csac.melanie2.i2"
sed -i "s/^\( \|\t\)*masterLDAP*=.*$/\masterLDAP=\"$masterLDAP\"/" $container_path_ecdlfichier/etc/smbldap-tools/smbldap.conf

### reload de samba restart de winbind
echo "$p_nom:relance des services pour prise en compte du nouveau ldap"
RunCmd "/usr/sbin/service nscd stop  > /dev/null" ecdlfichier
echo -n "."
RunCmd "/usr/bin/service smbd reload > /dev/null" ecdlfichier
RunCmd "/usr/bin/service nmbd reload > /dev/null" ecdlfichier
echo -n "."
RunCmd "/usr/sbin/service winbind restart" ecdlfichier
echo -n "."
if [ "$nscd" = "1" ];then
    echo -n ".nscd."
    RunCmd "/usr/sbin/service nscd start" ecdlfichier
fi
echo "OK"
exit 0

