#!/bin/bash
MYVER="1.0.1"
## version 0.5.0 version initiale
###        0.5.1 debogguée
#          0.9.3 relue par dev
#          0.9.5 testé par dev sur une autre machine
#          0.9.6 workgroup  samba4wins = dom samba
#          0.9.7 plus de socket address pour samba
#          0.9.8 ajout interface local host pour samba
#          0.9.9 templatisation
#          1.0.0 debogguée
#          1.0.1 Correction Inversion  noms et adresse des partenaires, PP le 13/04/2012

p_nom=${0##*/}


## (ref #7009) script à adapter, ce template devrait être utilisé par la suite directement comme script. En attendant, les variables 'smb4_ip_wins', 'smb4_netbios_name_wins', 'smb4_ip_repl_wins' et 'alias_ip_eth0' étant considérées comme 'non définies' sont réinitialisées
%set smb4_ip_wins = ""
%set smb4_netbios_name_wins = ""
%set smb4_ip_repl_wins = ""
%set alias_ip_eth0 = ""

%if %%activer_samba4wins == 'oui'
# smb4_ip_wins  est OK
%else
   echo "SAMBA 4 WINS désactivé"
   dpkg -r samba4wins 2> /dev/null
   exit 0
%end if

#
if [ ""  = "%%smb4_ip_wins" ] ; then
   echo "SAMBA 4 WINS désactivé"
   dpkg -r samba4wins 2> /dev/null
   exit 0
fi




####... depuis le dico
WINS_IP="%%smb4_ip_wins"
WINS_NOM="%%smb4_netbios_name_wins"
#WRN tableau des nom des partenaires de replic
#WRA tableau des ip  des partenaires
%set %%spc=''
declare -a WRN=(%slurp
%for %%ra in %%smb4_ip_repl_wins
%%spc%%ra.smb4_netbios_name_repl_wins%slurp
%set %%spc=' '
%end for
)
%set %%spc=''
declare -a WRA=(%slurp
%for %%rn in %%smb4_ip_repl_wins
%%spc%%rn%slurp
%set %%spc=' '
%end for
)
#    FIn selection des WINS
#echo "Partenaire de réplication (nom et ip)"
#echo "WRN=${WRN[*]}"
#echo "WRA=${WRA[*]}"
X=$WINS_NOM
### Le nom est forcé en maj...
WINS_NOM="`echo -n $X | tr '[:lower:]' '[:upper:]'`"
WINS_NOM=${WINS_NOM:0:15}
nberr=0
### Divers controle à FIXER
if ! [ "%%mode_conteneur_actif"  = "non" ] ; then
    echo "Samba4wins provisoirement non disponible en mode conteneur"
    (( nberr= $nberr + 1))
fi
### A FIXER les [ ] dans l'ip de l'alias ... pourquoi
if ! [ "%%alias_ip_eth0"  = "[%%smb4_ip_wins]" ] ; then
    echo "L'IP de Samba4wins (%%smb4_ip_wins) doit être la même que celle de  l'alias de eth0 (%%alias_ip_eth0)"
    (( nberr= $nberr + 1))
fi

### Vérification ip <> hote
if [ ""  = "%%smb4_ip_wins" ] ; then
     echo "ERREUR l'IP pour WINS est incorrecte (vide)"
     (( nberr= $nberr + 1))
fi
if [ "%%adresse_ip_eth0"  = "$WINS_IP" ] ; then
     echo "ERREUR l'IP pour WINS doit être différente de l'IP du serveur samba"
     (( nberr= $nberr + 1))
fi
### Vérification nom <> hote
eq_serv_nom_maj="`echo -n %%smb_netbios_name | tr '[:lower:]' '[:upper:]'`"
if [ "$eq_serv_nom_maj"  = "$WINS_NOM" ] ; then
     echo "ERREUR le nom pour WINS doit être différent de celui du serveur samba"
     (( nberr= $nberr + 1))
fi
### Vérification nom hote
if [ ""  = "%%smb4_netbios_name_wins" ] ; then
     echo "ERREUR le nom pour WINS est incorrect"
     (( nberr= $nberr + 1))
fi

### Vérification du masque réseau ... A FAIRE !!!
#HOTERES=`exxl_calc_reseau $eq_serv_ip $eq_serv_masque`
#WINSRES=`exxl_calc_reseau "$WINS_IP" $eq_serv_masque`
#WINSDIF=`exxl_calc_broadcast "$WINS_IP" $eq_serv_masque`
#if ! [ "$HOTERES" = "$WINSRES" ] ; then
#     echo "ERREUR l'IP $WIN_IP pour  WINS est sur le reseau $WINSRES, elle devrait être dans le réseau $HOTERES"
#     (( nberr= $nberr + 1))
#fi
### BILAN
if  [ "$nberr" = "0" ] ; then
     MESS="La configuration va commencer avec les éléments suivants : "
else
     MESS="Problème avec les éléments saisis :  "
     echo "$MESS"
     exit 0
fi
#echo "    IP du  service WINS   =$WINS_IP"
#echo "    NOM du service WINS   =$WINS_NOM"
#echo "    Partenaires de réplication "
#echo "    N°            IP              Nom"
#for i in ${!WRN[*]}
#do
# echo "    $i           ${WRA[i]}       ${WRN[i]}"
#done
#echo " "
###
if ! [ -x /usr/sbin/smbd4wins ]; then
   echo "Installation samba4wins"
   ## install , REP la destination
   REP=/data/deb
   mkdir -p $REP
   cd $REP
   #La liste de fic à récupérer
   FICS="samba4wins_1.0.8-2_i386.deb samba4wins-ldbtools_1.0.8-2_i386.deb"
   for FIC in $FICS; do
   if [ -s $FIC ] ; then
     echo "$p_nom: $FIC déjà téléchargé..."
   else
     echo "$p_nom: Téléchargement $FIC ..."
     echo "$p_nom: tentative sur le centre serveur"
     ### FIXER le nom
     wget -nv --no-proxy "ftp://%%serveur_metier[0]/ecdl-updates/deb/${FIC}" -O ${FIC}
     if [ -s $FIC ] ; then
           ### le fihier est ok
           echo "$p_nom: Ok"
     else
           echo "$p_nom: $FIC non trouvé sur centre serveur..."
           echo "$p_nom: tentative depuis un autre site"
           wget -nv --no-proxy "http://%%serveur_metier[1]/deb/${FIC}" -O ${FIC}
     fi
  fi
  ####### Le fic est maintenant normalement local,
  if [ -s $FIC ] ; then
#      echo "$p_nom: Installation de $FIC"
      dpkg -i -E ${FIC}
  else
      echo "$p_nom: Echec de la recupération de $FIC"
      exit 0
  fi
 done
fi

# A FINIR (TEMPLATE)
#echo "#### ETAPE 2 patch du samba4wins.conf"
if test -f /etc/samba4wins/samba4wins.conf ; then
  # echo $0:"Fichier  /etc/samba4wins/samba4wins.conf  déjà en place"
  cp /etc/samba4wins/samba4wins.conf /tmp/samba4wins.conf.`date +"%F-%H-%M"`
fi

cat > /etc/samba4wins/samba4wins.conf  << EOF
#---Fichier produit par  $0 $VER du 09/04/2009 le `date +"%c"`
[global]
        netbios name = $WINS_NOM
        workgroup= %%smb_workgroup
        bind interfaces only = yes
        interfaces = $WINS_IP
        nbtd:disable_broadcast = yes
        wins server = $WINS_IP
        log level = 1
EOF
#echo "#### ETAPE 4 partenaires de replication"
#### On vide la base de configuration
#### on en regénere une avec les bons serveurs wins

echo suppression des partenaires wins existants
ldbsearch -d 1 -H /var/lib/samba4wins/private/wins_config.ldb "objectClass=wreplPartner" dn | grep "^dn:" | cut -c 5- > /tmp/partenaires
nbpart=`wc -l  /tmp/partenaires | cut -f 1 -d " "`
if [[ "$nbpart" = "0" ]] ; then
   echo "Pas de partenaire configuré"
else
   echo "$nbpart partenaires, on les supprime"
   cat /tmp/partenaires | xargs ldbdel -H /var/lib/samba4wins/private/wins_config.ldb

fi
echo "remise en place des partenaires"
for i in ${!WRN[*]}
do
## nom en maj
NNN="`echo -n ${WRN[i]} | tr '[:lower:]' '[:upper:]'`"
echo "Traitement partenaire de réplication $NNN ${WRA[i]}"
echo "
dn: CN=$NNN,CN=PARTNERS
address: ${WRA[i]}
objectClass: wreplPartner
pushChangeCount: 30
ourAddress: ${WINS_IP}
" > /tmp/partenaireparticulier
   ldbadd -d 0 -H /var/lib/samba4wins/private/wins_config.ldb < /tmp/partenaireparticulier
done
service samba4wins restart
exit 0

