[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3master/usr/share/se3/sbin/ -> synchro_ldap.sh (source)

   1  #!/bin/bash
   2  
   3  #
   4  ## $Id: synchro_ldap.sh 7745 2013-03-31 23:53:39Z keyser $ ##
   5  #
   6  ##### Script de mise en place de la réplication entre le LDAP du Slis et du Se3 #####
   7  
   8  if [ "$1" = "--help" -o "$1" = "-h" ]
   9  then
  10      echo "Permet de mettre en place la réplication" 
  11      echo "avec l'annuaire LDAP du Slis / lcs ou tout autre annuaire distant"
  12      echo "Usage : aucune option"
  13      exit
  14  fi
  15  
  16  #SCRIPT DE MISE EN PLACE DE LA REPLICATION
  17  #DU LDAP DU SLIS VERS LE LDAP DU SE3
  18  # Stephane Boireau / Franck Molle
  19  # 01/2005
  20  # modif keyser 13/04/05
  21  # 11/2005 ajout tests  sur root et cn=profs
  22  
  23  #Couleurs
  24  COLTITRE="\033[1;35m"    # Rose
  25  COLPARTIE="\033[1;34m"    # Bleu
  26  
  27  COLTXT="\033[0;37m"    # Gris
  28  COLCHOIX="\033[1;33m"    # Jaune
  29  COLDEFAUT="\033[0;33m"    # Brun-jaune
  30  COLSAISIE="\033[1;32m"    # Vert
  31  
  32  COLCMD="\033[1;37m"    # Blanc
  33  
  34  COLERREUR="\033[1;31m"    # Rouge
  35  COLINFO="\033[0;36m"    # Cyan
  36  
  37  ERREUR()
  38  {
  39      echo -e "$COLERREUR"
  40      echo "ERREUR!"
  41      echo -e "$1"
  42      echo -e "$COLTXT"
  43      exit 1
  44  }
  45  
  46  POURSUIVRE()
  47  {
  48      REPONSE=""
  49      while [ "$REPONSE" != "o" -a "$REPONSE" != "O" -a "$REPONSE" != "n" ]
  50      do
  51          echo -e "$COLTXT"
  52          echo -e "Peut-on poursuivre? ($COLCHOIX}O/n$COLTXT}) $COLSAISIE\c"
  53          read REPONSE
  54          if [ -z "$REPONSE" ]; then
  55              REPONSE="o"
  56          fi
  57      done
  58  
  59      if [ "$REPONSE" != "o" -a "$REPONSE" != "O" ]; then
  60          ERREUR "Abandon!"
  61      fi
  62  }
  63  
  64  clear
  65  echo -e "$COLTITRE"
  66  echo "*************************"
  67  echo "* SCRIPT DE REPLICATION *"
  68  echo "* DU LDAP DU LCS / SLIS *"
  69  echo "*  VERS LE LDAP DU SE3  *"
  70  echo "*************************"
  71  
  72  echo -e "$COLINFO"
  73  echo "ATTENTION: Ce script nécessite que l'installation SE3 utilise"
  74  echo "           pour unique LDAP celui du LCS ou SLIS."
  75  echo "           Cela signifie que le LDAP du SE3 doit être pour le moment"
  76  echo "           inutilisé."
  77  echo
  78  echo -e "$COLTXT"
  79  echo "       Appuyez sur Entree pour continuer........"
  80  read
  81  
  82  echo -e $COLPARTIE
  83  echo "--------"
  84  echo "Partie 1 : Récupération des données"
  85  echo "--------"
  86  echo -e "$COLTXT"
  87  
  88  ### on suppose que l'on est sous debian ;) ####
  89  WWWPATH="/var/www"
  90  
  91  DEBVER=`cat /etc/debian_version`
  92  echo -e "$COLINFO\c"
  93  if [ "$DEBVER" = "3.0" ]; then
  94      echo "Debian woody détectée."
  95      SLAPDCONFIN=slapd_ldbm.conf.in
  96      SMBCONFIN=smb.conf.in
  97  else
  98      echo "Debian sarge/sid détectée."
  99      SLAPDCONFIN=slapd_bdb.conf.in
 100      SMBCONFIN=smb_3.conf.in
 101      SMBVERSION="samba3"
 102  fi
 103  
 104  echo -e "$COLTXT"
 105  echo "Recherche des informations dans $WWWPATH/se3/includes/config.inc.php"
 106  
 107  ## recuperation des variables necessaires pour interoger mysql ###
 108  echo -e "$COLCMD"
 109  if [ -e $WWWPATH/se3/includes/config.inc.php ]; then
 110      dbhost=`cat $WWWPATH/se3/includes/config.inc.php | grep "dbhost=" | cut -d = -f2 | cut -d \" -f2`
 111      dbname=`cat $WWWPATH/se3/includes/config.inc.php | grep "dbname=" | cut    -d = -f 2 |cut -d \" -f 2`
 112       dbuser=`cat $WWWPATH/se3/includes/config.inc.php | grep "dbuser=" | cut -d = -f 2 | cut -d \" -f 2`
 113       dbpass=`cat $WWWPATH/se3/includes/config.inc.php | grep "dbpass=" | cut -d = -f 2 | cut -d \" -f 2`
 114  else
 115      ERREUR "Fichier de configuration inaccessible, le script ne peut se poursuivre."
 116  
 117  fi
 118  
 119  ### Verification que le serveur ldap est bien sur se3 et non pas déporté"
 120  
 121  IPLDAPMASTER=`echo "SELECT value FROM params WHERE name=\"ldap_server\"" | mysql -h $dbhost $dbname -u $dbuser -p$dbpass -N`
 122  IPSE3=`cat /etc/network/interfaces | grep address | sed -e s/address\ // | cut -f2`
 123  if [ "$IPSE3" != "$IPLDAPMASTER" ] ; then
 124      ### recuperation des parametres actuels de l'annuaire dans la base ####
 125      #echo "BASEDN=`echo "SELECT value FROM params WHERE name=\"ldap_base_dn\"" | mysql -h $dbhost $dbname -u $dbuser -p$dbpass -N`"
 126  
 127      BASEDN=`echo "SELECT value FROM params WHERE name=\"ldap_base_dn\"" | mysql -h $dbhost $dbname -u $dbuser -p$dbpass -N`
 128      ADMINRDN=`echo "SELECT value FROM params WHERE name=\"adminRdn\"" | mysql -h $dbhost $dbname -u $dbuser -p$dbpass -N`
 129      ADMINPW=`echo "SELECT value FROM params WHERE name=\"adminPw\"" | mysql -h $dbhost $dbname -u $dbuser -p$dbpass -N`
 130   else
 131       ERREUR "Il semble que le LDAP utilisé par votre SE3 soit celui du SE3 lui-même ! "
 132  
 133   fi
 134  
 135  ## verificiation de la bonne configuration du ldap local au cas ou la section 3 du script
 136  ## d'install aurait ete zappee
 137  RDN_LOCAL=`grep rootdn /etc/ldap/slapd.conf | cut -f3 | sed -e "s/\"//g"`
 138  ADMINPW_LOCAL=`grep rootpw /etc/ldap/slapd.conf | cut -f3`
 139  
 140  # echo "valeurs trouvees"
 141  # echo $RDN_LOCAL
 142  # echo $ADMINPW_LOCAL
 143  # read
 144  
 145  if [ "$RDN_LOCAL" == "$ADMINRDN,$BASEDN" -a "$ADMINPW_LOCAL" == "$ADMINPW" ]; then
 146      echo -e $COLTXT
 147      echo "Ldap local configuré correctement par rapport au ldap distant,"
 148      echo "le script peut se poursuivre."
 149  else
 150      echo -e $COLTXT
 151      echo "Le ldap local n'est pas configuré correctement par rapport au ldap distant."
 152      echo "Sans doute la section 3 a t-elle été passée lors de l'installation de se3."
 153      echo "Il est indispensable que slapd soit configuré correctement."
 154  
 155      echo "Le script va maintenant configurer ldap en local."
 156      POURSUIVRE
 157      SCHEMADIR="\/etc\/ldap\/schema"
 158      SLAPDCONF='/etc/ldap/slapd.conf'
 159  
 160      # Configuration du slapd
 161      echo -e "$COLTXT"
 162      echo -e "Arrêt du serveur LDAP..."
 163      echo -e "$COLCMD"
 164      /etc/init.d/slapd stop
 165      STOPLDAPOK=`ps aux | grep slapd | sed -e '/grep slapd/d'`
 166      if [ ! -z "$STOPLDAPOK" ]; then
 167          ERREUR "Le serveur Ldap n'a pas été arrêté correctement, arrêtez-le et relancez le script."
 168      else
 169          echo -e "$COLTXT}Le serveur ldap de se3 a été arrêté avec succès."
 170          LDAPSTOP="yes"
 171      fi
 172      echo -e "$COLCMD\c"
 173  
 174      if [ ! -d /var/lib/ldap ]; then
 175          mkdir /var/lib/ldap
 176      fi
 177      #echo "cp -a /var/lib/ldap /var/lib/ldap.se3sav"
 178      cp -a /var/lib/ldap /var/lib/ldap.se3sav
 179      SCHEMAD=`echo $SCHEMADIR | sed -e 's/\\\//g'`
 180      cd /var/cache/se3_install/
 181      cp -af conf/*.schema $SCHEMAD/
 182      mv $SLAPDCONF $SLAPDCONF.se3sav
 183      cat conf/$SLAPDCONFIN | sed -e "s/#SCHEMADIR#/$SCHEMADIR/g" | sed -e "s/#BASEDN#/$BASEDN/g" | sed -e "s/#ADMINRDN#/$ADMINRDN/g" | sed -e "s/#ADMINPW#/$ADMINPW/g" > $SLAPDCONF
 184  
 185  
 186      # Prise en compte des lignes spécifiques à la version 2.1.x backportée
 187      dpkg -s slapd |grep "Version" | grep "2.1." && slapd21="OK"
 188      if [ ! -z "$slapd21" ]; then
 189          mv $SLAPDCONF $SLAPDCONF.bak
 190          echo "allow bind_v2" > $SLAPDCONF
 191          echo "modulepath /usr/lib/ldap">>$SLAPDCONF
 192          echo "moduleload back_ldbm" >>$SLAPDCONF
 193          cat $SLAPDCONF.bak >> $SLAPDCONF
 194          rm  $SLAPDCONF.bak
 195      fi
 196      chmod 640 $SLAPDCONF
 197      chown root.$LDAPGRP $SLAPDCONF
 198      /usr/sbin/slapindex 2>/dev/null
 199      echo "UPDATE params SET value=\"/etc/$SLAPDIR/slapd.conf\" WHERE name=\"path2slapdconf\""|mysql -h $dbhost se3db -u se3db_admin -p$dbpass
 200  fi
 201  #read
 202  
 203  ladate=$(date +"%Y.%m.%d-%H.%M.%S")
 204  DOSSIERTMP="/root/export_ldap/$ladate"
 205  mkdir -p $DOSSIERTMP
 206  
 207  echo -e "$COLTXT"
 208  echo "Certaines informations sensibles vont maintenant être affichées."
 209  echo "Veillez à ce qu'aucun oeil malicieux ne traine derrière votre dos."
 210  POURSUIVRE
 211  
 212  echo -e "$COLTXT"
 213  echo "Voici les informations récupérées de vos fichiers de config:"
 214  echo -e "Base du LDAP:             ${COLINFO}$BASEDN${COLTXT}"
 215  echo -e "Administrateur du LDAP:   ${COLINFO}$ADMINRDN${COLTXT}"
 216  echo -e "Mot de passe de"
 217  echo -e "l'administrateur du LDAP: ${COLINFO}$ADMINPW${COLTXT}"
 218  echo -e "IP du LDAP maitre:        ${COLINFO}$IPLDAPMASTER${COLTXT}"
 219  echo ""
 220  echo "Ces informations vont permettre l'extraction des données du LDAP."
 221  
 222  
 223  echo -e $COLPARTIE
 224  echo "--------"
 225  echo "Partie 2 : Extraction de l'annuaire distant"
 226  echo "--------"
 227  echo -e "$COLTXT"
 228  POURSUIVRE
 229  
 230  #TST_ROOT_PEOPLE=$(ldapsearch -x -LLL -D $ADMINRDN,$BASEDN -w $ADMINPW  uid=root | grep People | cut -d " " -f2)
 231  TST_ROOT_PEOPLE=$(ldapsearch -x -LLL -D $ADMINRDN,$BASEDN -w $ADMINPW  uid=root | grep -i People | cut -d, -f2)
 232  if [ ! -z "$TST_ROOT_PEOPLE" ]; then
 233  
 234      #echo -e "$COLCMD"
 235      #echo "$TST_ROOT_PEOPLE"
 236      
 237      echo -e  "$COLINFO"
 238      echo -e  "Attention, vous avez un compte root dans la branche People de l'annuaire, \nIl est nécessaire de la supprimer afin d'éviter des dysfonctionnements."
 239      echo -e "Par sécurité, une sauvegarde préalable de l'annuaire sera effectuée."
 240      echo -e "$COLCMD"
 241      ldapsearch -x -LLL -D $ADMINRDN,$BASEDN -w $ADMINPW > $DOSSIERTMP/export_original.ldif || ERREUR "L'exportation LDIF a échoué!"
 242      echo "ldapdelete -x -D $ADMINRDN,$BASEDN "$TST_ROOT_PEOPLE" -w "$ADMINPW""
 243      ldapdelete -x -D $ADMINRDN,$BASEDN "uid=root,$TST_ROOT_PEOPLE,$BASEDN" -w "$ADMINPW"
 244  fi
 245  
 246  TST_PROFCN=$(ldapsearch -x -LLL -D $ADMINRDN,$BASEDN -w $ADMINPW  cn=profs | grep -v memberUid | grep profs)
 247  if [ ! -z "$TST_PROFCN" ]; then
 248  echo -e "$COLINFO"
 249  echo -e "Attention, vous avez une entrée cn=profs dans votre annuaire à la place de cn=Profs"
 250  echo -e "Il est nécessaire de modifier cette entrée afin d'éviter des dysfonctionnements."
 251  echo -e "$COLCMD"
 252  ldapsearch -x -LLL -D $ADMINRDN,$BASEDN -w $ADMINPW "cn=Profs" | grep -v "memberUid" | sed -e "s/cn: profs/cn: Profs/"> $DOSSIERTMP/profscn.ldif
 253  ldapmodify -x -D $ADMINRDN,$BASEDN -w "$ADMINPW"  -f $DOSSIERTMP/profscn.ldif
 254  fi
 255  
 256  
 257  #Extraction LDIF
 258  echo -e "$COLCMD"
 259  echo "ldapsearch -x -LLL -D $ADMINRDN,$BASEDN -w $ADMINPW > $DOSSIERTMP/export.ldif"
 260  ldapsearch -x -LLL -D $ADMINRDN,$BASEDN -w $ADMINPW > $DOSSIERTMP/export.ldif || ERREUR "L'exportation LDIF a échoué!"
 261  
 262  echo -e "$COLTXT\c"
 263  echo "L'export LDIF a été effectué avec succès."
 264  
 265  
 266  echo -e $COLPARTIE
 267  echo "--------"
 268  echo "Partie 3 : Importation de l'annuaire extrait sur se3 "
 269  echo "--------"
 270  echo -e "$COLTXT"
 271  
 272  
 273  POURSUIVRE
 274  #Arrêt du serveur LDAP local si necessaire
 275  if [ "$LDAPSTOP" != "yes" ]; then
 276      echo -e "$COLTXT"
 277      echo "Arrêt du serveur LDAP du SE3:"
 278      echo -e "${COLCMD}"
 279      /etc/init.d/slapd stop
 280  
 281      STOPLDAPOK=`ps aux | grep slapd | sed -e '/grep slapd/d'`
 282      if [ ! -z "$STOPLDAPOK" ]; then
 283          ERREUR "Le serveur Ldap n'a pas été arrêté correctement, arrêtez-le et relancez le script."
 284      else
 285          echo -e "${COLTXT}Le serveur ldap de se3 a été arrêté avec succès."
 286      fi
 287  fi
 288  
 289  # sauvegarde et vidage du ldap du se3
 290  mv /var/lib/ldap /var/lib/ldap.sauve_$ladate
 291  mkdir /var/lib/ldap
 292  if [ "$DEBVER" != "3.0" ]; then
 293  cp -a /var/lib/ldap.sauve_${ladate}/DB_CONFIG  /var/lib/ldap
 294  fi
 295  
 296  #Import LDIF
 297  echo -e "$COLTXT"
 298  echo "Importation de l'extraction LDIF dans la base LDAP du SE3:"
 299  echo "Cela peut être long si votre annuaire contient beaucoup de données..."
 300  echo -e "$COLCMD"
 301  echo "slapadd -b $BASEDN -l $DOSSIERTMP/export.ldif"
 302  slapadd -b $BASEDN -l $DOSSIERTMP/export.ldif || ERREUR "L'importation du fichier LDIF a échoué!"
 303  slapindex
 304  
 305  echo -e "${COLTXT}L'importation LDIF est effectuée."
 306  
 307  echo -e "$COLTXT"
 308  
 309  echo -e $COLPARTIE
 310  echo "--------"
 311  echo "Partie 4 : Basculement du ldap en mode autonome sur se3 "
 312  echo "--------"
 313  echo -e "$COLTXT"
 314  
 315  echo -e "Les deux annuaires sont désormais identiques, on repasse le ldap se3 en mode autonome."
 316  echo -e "$COLTXT"
 317  
 318  echo "Arrêt du serveur Samba de SE3:"
 319  echo -e "${COLCMD}\c"
 320  /etc/init.d/samba stop
 321  
 322  echo -e "$COLTXT"
 323  echo -e "Mise à jour des fichiers de configuration Ldap et Samba..."
 324  echo -e "${COLCMD}\c"
 325  
 326  # mise a jour du parametre mysql
 327  echo "UPDATE params SET value=\"$IPSE3\" WHERE name=\"ldap_server\""|mysql -h $dbhost se3db -u se3db_admin -p$dbpass
 328  # Mise à jour de /etc/ldap/slapd.conf
 329  
 330  #
 331  cp -f /etc/ldap/slapd.conf /etc/ldap/slapd.conf.ori
 332  cat /etc/ldap/slapd.conf.ori | sed -e "s/$IPLDAPMASTER/$IPSE3/g" > /etc/ldap/slapd.conf
 333  chmod 600 /etc/ldap/slapd.conf
 334  #
 335  # Mise à jour de /etc/ldap/ldap.conf
 336  #
 337  cp -f /etc/ldap/ldap.conf /etc/ldap/ldap.conf.ori
 338  cat /etc/ldap/ldap.conf.ori | sed -e "s/$IPLDAPMASTER/$IPSE3/g" >/etc/ldap/ldap.conf
 339  chmod 644 /etc/ldap/ldap.conf
 340  #
 341  # Mise à jour de /etc/pam_ldap.conf
 342  #
 343  cp -f /etc/pam_ldap.conf /etc/pam_ldap.conf.ori
 344  cat /etc/pam_ldap.conf.ori | sed -e "s/$IPLDAPMASTER/$IPSE3/g" > /etc/pam_ldap.conf
 345  chmod 644 /etc/pam_ldap.conf
 346  #
 347  # Mise à jour de /etc/libnss-ldap.conf
 348  #
 349  cp -f /etc/libnss-ldap.conf /etc/libnss-ldap.conf.ori
 350  cat /etc/libnss-ldap.conf.ori | sed -e "s/$IPLDAPMASTER/$IPSE3/g"> /etc/libnss-ldap.conf
 351  chmod 644 /etc/libnss-ldap.conf
 352  #
 353  # Mise à jour de /etc/samba/smb.conf
 354  #
 355  cp -f /etc/samba/smb.conf /etc/samba/smb.conf.ori
 356  if [ "$SMBVERSION" = "samba3" ]; then
 357      cat /etc/samba/smb.conf.ori | sed -e "s/ldap:\/\/$IPLDAPMASTER/ldap:\/\/$IPSE3/g" > /etc/samba/smb.conf
 358  else
 359      cat /etc/samba/smb.conf.ori | sed -e "s/ldap server = $IPLDAPMASTER/ldapserver = $IPSE3/g" > /etc/samba/smb.conf
 360  fi
 361  chmod 644 /etc/samba/smb.conf
 362  
 363  #Redémarrage des service LDAP et Samba du SE3:
 364  echo -e "$COLTXT"
 365  echo "Démarrage des serveurs LDAP et Samba de SE3:"
 366  echo -e "${COLCMD}"
 367  /etc/init.d/slapd start
 368  STARTLDAPOK=`ps aux | grep slapd | sed -e '/grep slapd/d'`
 369  if [ -z "$STARTLDAPOK" ]; then
 370      ERREUR "Le serveur Ldap n'a pas été relancé correctement."
 371  else
 372      echo -e "${COLTXT}Le serveur Ldap a été relancé correctement."
 373  fi
 374  
 375  echo -e "${COLCMD}"
 376  /etc/init.d/samba start
 377  STARTSMBOK=`ps aux | grep slapd | sed -e '/grep smbd/d'`
 378  if [ -z "$STARTSMBOK" ]; then
 379      ERREUR "Le serveur Samba n'a pas été relancé correctement."
 380  else
 381      echo -e "${COLTXT}Le serveur Samba a été relancé correctement."
 382  fi
 383  echo ""
 384  echo -e "$COLTITRE"
 385  echo "/!\ ------- ATTENTION A LIRE ATTENTIVEMENT ------- /!\ "
 386  echo ""
 387  echo "Les annuaires du SLIS / LCS et du SE3 sont maintenant identiques."
 388  echo "Votre annuaire est désormais hébergé sur se3, mais n'est pas encore répliqué."
 389  echo ""
 390  echo "                AVANT TOUTE CRÉATION DE COMPTE,"
 391  echo "ACTIVEZ LA RÉPLICATION DANS LES INTERFACES WEB SE3 ET SLIS / LCS."
 392  
 393  
 394  echo -e "$COLTITRE"
 395  echo -e "Terminé $COLTXT"
 396  
 397  exit 0
 398  


Generated: Tue Mar 17 22:47:18 2015 Cross-referenced by PHPXref 0.7.1