[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
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
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Mar 17 22:47:18 2015 | Cross-referenced by PHPXref 0.7.1 |