[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3master/usr/share/se3/scripts/ -> se3_reinit_mdp.sh (source)

   1  #!/bin/bash
   2  
   3  #
   4  ## $Id: se3_reinit_mdp.sh 7716 2013-03-16 23:52:10Z christian.westphal $ ##
   5  #
   6  ##### Reinitialisation de mot de passe pour les utilisateurs #####
   7  # Stephane Boireau, Academie de Rouen
   8  
   9  
  10  if [ "$1" = "--help" -o "$1" = "-h" -o -z "$1" ]
  11  then
  12          echo "Reinitialisation des mots de passe pour les utilisateurs"
  13          echo "membres d'un groupe."
  14          echo "Usage : Passer en parametre \$1 le nom du groupe (posix)."
  15          echo "        Ex.: sh $0 Profs"
  16          echo "             ou"
  17          echo "             sh $0 Classe_2ND3"
  18          echo "             ou"
  19          echo "             sh $0 Eleves"
  20          echo "        Vous pouvez aussi mettre en \$2 'alea' pour mettre des mots de passe"
  21          echo "        aleatoires ou 'semi' pour mettre des mots de passe semi-aleatoires."
  22          echo "        Dernière alternative: Fournir en parametre \$1 la chaine:"
  23          echo "             sh $0 csv=CHEMIN/FICHIER.csv"
  24          echo "        au format:"
  25          echo "             LOGIN;MDP;"
  26          echo "        pour imposer les mots de passe d'apres le fichier fourni."
  27          echo "        Remarque: Le ';' de fin est destine a eviter des blagues avec les fins"
  28          echo "                  de lignes do$/unix."
  29          exit
  30  fi
  31  
  32  if [ -e "/usr/share/se3/includes/config.inc.sh" ]; then
  33      #. /usr/share/se3/includes/config.inc.sh -lv
  34      . /usr/share/se3/includes/config.inc.sh -l
  35  
  36      LDAPIP="$ldap_server"
  37      BASEDN="$ldap_base_dn"
  38      ADMINRDN="$adminRdn"
  39      ADMINPW="$adminPw"
  40  
  41      #PEOPLERDN="$peopleRdn"
  42      #GROUPSRDN="$groupsRdn"
  43      #RIGHTSRDN="$rightsRdn"
  44  
  45      ROOTDN=$ADMINRDN,$BASEDN
  46      PASSDN=$ADMINPW
  47  
  48      #echo "BASEDN=$BASEDN"
  49      #echo "ROOTDN=$ROOTDN"
  50      #echo "PASSDN=$PASSDN"
  51  else
  52      LDAPIP=$(grep "^HOST" /etc/ldap/ldap.conf|cut -d" " -f2)
  53      if [ -z "$LDAPIP" ]; then
  54          echo "ABANDON: L'adresse IP du serveur LDAP n'a pas ete identifiee."
  55          exit
  56      fi
  57  
  58      if [ -e "/usr/share/se3/sbin/variables_admin_ldap.sh" ]; then
  59          . /usr/share/se3/sbin/variables_admin_ldap.sh lib > /dev/null
  60      fi
  61  fi
  62  
  63  # Si le variables_admin_ldap.sh n'est pas assez recent
  64  if [ -z "$BASEDN" -o -z "$ROOTDN" -o -z "$PASSDN" ]; then
  65      # On utilise les parametres locaux... en esperant que le ldap est bien local
  66      echo "On utilise les parametres locaux... en esperant que le ldap est bien local"
  67      BASEDN=$(cat /etc/ldap/ldap.conf | grep "^BASE" | tr "\t" " " | sed -e "s/ \{2,\}/ /g" | cut -d" " -f2)
  68      ROOTDN=$(cat /etc/ldap/slapd.conf | grep "^rootdn" | tr "\t" " " | cut -d'"' -f2)
  69      PASSDN=$(cat /etc/ldap.secret)
  70  fi
  71  
  72  echo "Sauvegarde de l'annuaire..."
  73  #echo "ldapsearch -xLLL -D $ROOTDN -w $PASSDN > /var/se3/save/ldap_$(date +%Y%m%d%H%M%S).ldif"
  74  ldapsearch -xLLL -D $ROOTDN -w $PASSDN > /var/se3/save/ldap_$(date +%Y%m%d%H%M%S).ldif
  75  
  76  if [ "$?" != "0" ]; then
  77      echo "ERREUR lors de la sauvegarde de l'annuaire."
  78      echo "Abandon."
  79      exit
  80  fi
  81  
  82  groupe=$1
  83  
  84  fichcsv=""
  85  
  86  if [ "$2" = "alea" -o "$2" = "semi" ]; then
  87      alea=y
  88      dest=/home/admin/Bureau/changement_mdp_$1}_$(date +%Y%m%d%H%M%S).csv
  89      touch $dest}
  90      chown admin $dest}
  91  else
  92      alea=n
  93      if [ "$1:0:4}" = "csv=" -a -e "$1:4}" ]; then
  94          fichcsv=$1:4}
  95      fi
  96  fi
  97  
  98  # fichier csv temporaire destine a l'impression pdf du listing des comptes modifies
  99  temp=/tmp/changement_mdp.csv
 100  if [ ! -e $temp} ]; then
 101      touch $temp}
 102      chown admin $temp}
 103  fi
 104  
 105  if [ -n "$fichcsv" ]; then
 106      while read ligne
 107      do
 108          uid=$(echo "$ligne"|cut -d";" -f1)
 109          pass=$(echo "$ligne"|cut -d";" -f2)
 110          if [ -n "$uid" -a -n "$pass" ]; then
 111              t=$(ldapsearch -xLLL -b ou=People,$BASEDN uid=$uid)
 112              if [ -z "$t" ]; then
 113                  echo "Le login $uid n'existe pas dans la branche People de l'annuaire."
 114              else
 115                  echo -e "$uid: \tModificatiation du mot de passe en $pass"
 116                  /usr/share/se3/sbin/userChangePwd.pl $uid $pass
 117  # a faire...                echo "$nom;$prenom;$uid;$mdp;$classe;" | tee -a $temp
 118              fi
 119          fi
 120      done < $fichcsv
 121  
 122      if echo "$*" | grep -q nettoyage; then
 123          rm -f $fichcsv
 124      fi
 125  else
 126      ldapsearch -xLLL cn=$groupe | grep memberUid | while read A
 127      do
 128          uid=$(echo "$A" | cut -d" " -f2)
 129          if [ "$alea" = "n" ]; then
 130              # On fait une reinitialisation a la date de naissance le mot de passe:
 131              date=$(ldapsearch -xLLL uid=$uid | grep "^gecos:" | cut -d"," -f2)
 132              if smbclient -L 127.0.0.1 -U $uid%$date > /dev/null 2>&1; then
 133                  echo -e "$uid: \tLa date de naissance est le mot de passe."
 134              else
 135                  tmp_test=$(echo "$date" | sed -e "s/[0-9]//g")
 136                  if [ -z "$tmp_test}" -a ! -z "$date" ]; then
 137                      echo -e "$uid: \tReinitialisation du mot de passe a $date:\c"
 138                      /usr/share/se3/sbin/userChangePwd.pl $uid $date
 139                      if [ "$?" = "0" ]; then
 140                          echo "OK"
 141  # a faire...                        echo "$nom;$prenom;$uid;$mdp;$classe;" | tee -a $temp
 142                      else
 143                          echo "ERREUR"
 144                      fi
 145                  else
 146                      echo "ERREUR (mot de passe non identifie)"
 147                  fi
 148              fi
 149          else
 150              # On met un mot de passe aleatoire ou semi-aleatoire
 151              if [ "$2" = "alea" ]; then
 152                  mdp=$(/usr/share/se3/sbin/gen_pwd.sh -a)
 153              else
 154                  mdp=$(/usr/share/se3/sbin/gen_pwd.sh -s)
 155              fi
 156  
 157              mail=$(ldapsearch -xLLL uid=$uid mail | grep "^mail:" | sed -e "s/^mail: //")
 158              nom=$(ldapsearch -xLLL uid=$uid sn | grep "^sn:" | sed -e "s/^sn: //")
 159              prenom=$(ldapsearch -xLLL uid=$uid givenName | grep "^givenName:" | sed -e "s/^givenName: //")
 160      
 161              classe=""
 162              if [ "$groupe" = "Eleves" ]; then
 163                  classe=$(ldapsearch -xLLL "(&(memberUid=$uid)(cn=Classe_*))" cn | grep "^cn:" | sed -e "s/^cn: //")
 164              fi
 165      
 166              if [ -n "$mdp" ]; then
 167      
 168                  /usr/share/se3/sbin/userChangePwd.pl $uid $mdp
 169                  if [ "$?" = "0" ]; then
 170                      echo "$groupe;$nom;$prenom;$mail;$uid;$mdp;$classe" | tee -a $dest
 171                      echo "$nom;$prenom;$uid;$mdp;$classe" | tee -a $temp
 172                  else
 173                      echo "$groupe;$nom;$prenom;$mail;$uid;ECHEC changement MDP;$classe" | tee -a $dest
 174                  fi
 175              else
 176                  echo "$groupe;$nom;$prenom;$mail;$uid;ECHEC generation MDP???;$classe  sortie : $mdp" | tee -a $dest
 177              fi
 178  
 179              chown www-se3 $temp}  # pour permettre sa suppression
 180  
 181          fi
 182      done
 183  fi
 184  
 185  if [ "$alea" = "y" ]; then
 186      echo "Un fichier CSV a ete genere en"
 187      echo "   $dest}"
 188      echo "Il contient aussi des adresses mail pour un publipostage mail, mais si l'adresse"
 189      echo "mail renseignee correspond a une authentification sur l'annuaire LDAP pour"
 190      echo "lequel on vient de changer le mot de passe, cette adresse ne sera pas une bonne"
 191      echo "solution de communication du changement."
 192  fi
 193  
 194  echo "Termine."
 195  


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