[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 <?php 2 3 /** 4 5 * Reinitialisation/Modification des mots de passe 6 * @Version $Id: reinit_mdp.php 8024 2014-01-07 17:05:36Z crob $ 7 8 * @Projet LCS / SambaEdu 9 10 * @auteurs Olivier LECLUSE 11 12 * @Licence Distribue selon les termes de la licence GPL 13 14 * @note 15 16 */ 17 18 /** 19 20 * @Repertoire: / 21 * file: reinit_mdp.php 22 23 */ 24 25 26 27 require ("entete.inc.php"); 28 require ("ihm.inc.php"); 29 30 require("config.inc.php"); 31 require ("ldap.inc.php"); 32 33 require_once ("lang.inc.php"); 34 bindtextdomain('se3-infos',"/var/www/se3/locale"); 35 textdomain ('se3-infos'); 36 37 // aide en ligne 38 $_SESSION["pageaide"]="Annuaire"; 39 40 41 if (is_admin("annu_is_admin",$login)!="Y") { 42 die (gettext("Vous n'avez pas les droits suffisants pour accéder à cette fonction")."</BODY></HTML>"); 43 } 44 45 echo "<h1>".gettext("Réinitialisation/modification de mots de passe")."</h1>\n"; 46 47 //========================================================== 48 // Phase de choix des parametres 49 if(!isset($_POST['is_posted'])) { 50 //echo "<center>\n"; 51 echo "<form action=\"".$_SERVER['PHP_SELF']."\" enctype='multipart/form-data' method=\"post\">\n"; 52 53 echo "<p>Cette page est destinée à réinitialiser/modifier les mots de passe par lots.</p>\n"; 54 echo "<p>Vous pouvez :</p>\n"; 55 echo "<table summary='Choix du mode'>\n"; 56 // echo "<tr>\n"; 57 // echo "<td valign='top'><input type='radio' name='reinit_mode' id='reinit_mode_naissance' value='naissance' onchange='teste_radio()' checked /></td><td><label for='reinit_mode_naissance'> réinitialiser les mots de passe à la date de naissance pour un ou des groupes.</label></td>\n"; 58 // echo "</tr>\n"; 59 echo "<tr>\n"; 60 echo "<td valign='top'><input type='radio' name='reinit_mode' id='reinit_mode_alea' checked='checked'"; 61 62 switch ($pwdPolicy) { 63 case 0: 64 echo " value='naissance'"; 65 break; 66 case 1: 67 echo " value='semi'"; 68 break; 69 case 2: 70 echo " value='alea'"; 71 break; 72 } 73 74 echo "onchange='teste_radio()' /></td><td><label for='reinit_mode_alea'> modifier les mots de passe pour un ou des groupes.</label><br />"; 75 echo "<span style='color:#FF9900;'>La politique de mot de passe actuelle est : "; 76 77 switch ($pwdPolicy) { 78 case 0: 79 echo "basée sur la date de naissance"; 80 break; 81 case 1: 82 echo "semi-aléatoire (6 car.)"; 83 break; 84 case 2: 85 echo "aléatoire (8 car.)"; 86 break; 87 } 88 89 echo "</span></td>\n"; 90 echo "</tr>\n"; 91 echo "<tr>\n"; 92 echo "<td valign='top'><input type='radio' name='reinit_mode' id='reinit_mode_csv' value='csv' onchange='teste_radio()' /></td><td><label for='reinit_mode_csv'> imposer les mots de passe d'après un fichier CSV au format : <b>LOGIN;MOTDEPASSE;</b></label><br />\n"; 93 echo "Le point-virgule en fin de ligne est recommandé pour éviter des blagues avec les fins de lignes DO$/Unix.<br />\n"; 94 echo "Fichier CSV : <input type='file' name='fich_csv_reinit' onfocus=\"document.getElementById('reinit_mode_csv').checked=true; teste_radio();\" />\n"; 95 echo "</td>\n"; 96 echo "</tr>\n"; 97 echo "</table>\n"; 98 99 100 // Etablissement des listes des groupes disponibles 101 // affiche_all_groups(left, user); 102 // $list_groups=search_groups("(&(cn=*) $filter )"); 103 // // Etablissement des sous listes de groupes : 104 // $j =0; $k =0; 105 // $m = 0; $n=0; 106 // for ($loop=0; $loop < count ($list_groups) ; $loop++) { 107 // // Classe 108 // if ( ereg ("Classe_", $list_groups[$loop]["cn"]) ) { 109 // $classe[$j]["cn"] = $list_groups[$loop]["cn"]; 110 // $classe[$j]["description"] = $list_groups[$loop]["description"]; 111 // $j++; 112 // } 113 // // Equipe 114 // elseif ( ereg ("Equipe_", $list_groups[$loop]["cn"]) ) { 115 // $equipe[$k]["cn"] = $list_groups[$loop]["cn"]; 116 // $equipe[$k]["description"] = $list_groups[$loop]["description"]; 117 // $k++; 118 // } 119 // // Matiere 120 // elseif ( ereg ("Matiere_", $list_groups[$loop]["cn"]) ) { 121 // $matiere[$n]["cn"] = $list_groups[$loop]["cn"]; 122 // $matiere[$n]["description"] = $list_groups[$loop]["description"]; 123 // $n++; 124 // } 125 // // Autres 126 // elseif (!ereg ("^overfill", $list_groups[$loop]["cn"]) && !ereg ("^lcs-users", $list_groups[$loop]["cn"]) && 127 // //!ereg ("^admins", $list_groups[$loop]["cn"]) && 128 // !ereg ("Cours_", $list_groups[$loop]["cn"]) && 129 // !ereg ("^system", $list_groups[$loop]["cn"]) && 130 // !ereg ("^slis", $list_groups[$loop]["cn"]) && 131 // !ereg ("^machines", $list_groups[$loop]["cn"])) { 132 // $autres[$m]["cn"] = $list_groups[$loop]["cn"]; 133 // $autres[$m]["description"] = $list_groups[$loop]["description"]; 134 // $m++; 135 // } 136 // } 137 138 echo "<div id='div_choix_groupes'>\n"; 139 affiche_all_groups(left, user); 140 // echo "<p>Choisissez les groupes auxquels appliquer le traitement :</p>\n"; 141 // echo "<table border='0' cellspacing='10' summary='Choix des groupes'>\n"; 142 // echo "<thead>\n"; 143 // echo "<tr>\n"; 144 // echo "<td>".gettext("Classes")."</td>\n"; 145 // echo "<td>".gettext("Equipes")."</td>\n"; 146 // echo "<td>".gettext("Matières")."</td>\n"; 147 // echo "<td>".gettext("Autres")."</td>\n"; 148 // echo "</tr>\n"; 149 // echo "</thead>\n"; 150 // 151 // echo "<tbody>\n"; 152 // echo "<tr>\n"; 153 // echo "<td valign='top'>\n"; 154 // echo "<select name= \"classe_gr[]\" size=\"8\" multiple=\"multiple\">\n"; 155 // for ($loop=0; $loop < count ($classe) ; $loop++) { 156 // echo "<option value=".$classe[$loop]["cn"].">".$classe[$loop]["cn"]."</option>\n"; 157 // } 158 // echo "</select>\n"; 159 // echo "</td>\n"; 160 // 161 // echo "<td valign=\"top\">\n"; 162 // echo "<select name= \"equipe_gr[]\" size=\"8\" multiple=\"multiple\">\n"; 163 // for ($loop=0; $loop < count ($equipe) ; $loop++) { 164 // echo "<option value=".$equipe[$loop]["cn"].">".$equipe[$loop]["cn"]."</option>\n"; 165 // } 166 // echo "</select>\n"; 167 // echo "</td>\n"; 168 // 169 // echo "<td valign=\"top\">\n"; 170 // echo "<select name= \"matiere_gr[]\" size=\"8\" multiple=\"multiple\">\n"; 171 // for ($loop=0; $loop < count ($matiere) ; $loop++) { 172 // echo "<option value=".$matiere[$loop]["cn"].">".$matiere[$loop]["cn"]."</option>\n"; 173 // } 174 // echo "</select>\n"; 175 // echo "</td>\n"; 176 // 177 // echo "<td valign=\"top\">"; 178 // echo "<select name=\"autres_gr[]\" size=\"8\" multiple=\"multiple\">"; 179 // for ($loop=0; $loop < count ($autres) ; $loop++) { 180 // echo "<option value=".$autres[$loop]["cn"].">".$autres[$loop]["cn"]."</option>\n"; 181 // } 182 // echo "</select>\n"; 183 // echo "</td>\n"; 184 // echo "</tr>\n"; 185 // echo "</table>\n"; 186 187 echo "<div id=\"attribution\" align='center'>\n"; 188 echo "<input type=\"hidden\" name=\"is_posted\" value=\"1\">\n"; 189 echo "<input type=\"submit\" value=\"".gettext("Valider")."\">\n"; 190 echo "<input type=\"reset\" value=\"".gettext("Réinitialiser")."\">\n"; 191 echo "</div>\n"; 192 193 echo "</div>\n"; 194 195 echo "<div id=\"div_validation\" align='center'>\n"; 196 echo "<input type=\"submit\" value=\"".gettext("Valider")."\">\n"; 197 echo "</div>\n"; 198 199 echo "</form>\n"; 200 201 echo "<script type='text/javascript'> 202 function teste_radio() { 203 /*if(document.getElementById('reinit_mode_naissance').checked==true) { 204 document.getElementById('div_choix_groupes').style.display=''; 205 document.getElementById('div_validation').style.display='none'; 206 }*/ 207 208 if(document.getElementById('reinit_mode_alea').checked==true) { 209 document.getElementById('div_choix_groupes').style.display=''; 210 document.getElementById('div_validation').style.display='none'; 211 } 212 213 if(document.getElementById('reinit_mode_csv').checked==true) { 214 document.getElementById('div_choix_groupes').style.display='none'; 215 document.getElementById('div_validation').style.display=''; 216 } 217 } 218 219 teste_radio(); 220 </script>\n"; 221 222 223 include ("pdp.inc.php"); 224 die(); 225 } 226 //========================================================== 227 228 // Phase de traitement 229 230 //echo "<center>\n"; 231 232 $reinit_mode=isset($_POST['reinit_mode']) ? $_POST['reinit_mode'] : NULL; 233 234 if(!isset($reinit_mode)) { 235 echo "<p style='color:red'>Le mode de réinitialisation/changement des mots de passe n'a pas été choisi.</p>"; 236 echo "<p><a href='".$_SERVER['PHP_SELF']."'>Retour</a></p>"; 237 238 include ("pdp.inc.php"); 239 die(); 240 } 241 242 $tab_reinit_mode=array('naissance','alea','semi','csv'); 243 if(!in_array($reinit_mode, $tab_reinit_mode)) { 244 echo "<p style='color:red'>Le mode de réinitialisation/changement des mots de passe choisi est invalide.</p>"; 245 echo "<p><a href='".$_SERVER['PHP_SELF']."'>Retour</a></p>"; 246 247 include ("pdp.inc.php"); 248 die(); 249 } 250 251 252 if($reinit_mode=='csv') { 253 if($_FILES["fich_csv_reinit"]["name"]=="") { 254 echo "<p style='color:red;'><b>ERREUR:</b> Aucun fichier n'a été fourni!</p>\n"; 255 echo "<p><a href='".$_SERVER['PHP_SELF']."'>Retour</a>.</p>\n"; 256 include ("pdp.inc.php"); 257 exit(); 258 } 259 260 $tmp_csv_file=$HTTP_POST_FILES['fich_csv_reinit']['tmp_name']; 261 $csv_file=$HTTP_POST_FILES['fich_csv_reinit']['name']; 262 $size_ecsv_file=$HTTP_POST_FILES['fich_csv_reinit']['size']; 263 264 if(($csv_file!='')&&($tmp_csv_file=='')) { 265 echo "<p>L'upload du fichier <span style='color:red;'>$csv_file</span> a semble-t-il échoué.</p>"; 266 267 $upload_max_filesize=ini_get('upload_max_filesize'); 268 $post_max_size=ini_get('post_max_size'); 269 270 echo "<p>Il se peut que le fichier fourni ait été trop volumineux.<br />PHP est actuellement paramétré avec:<br />\n"; 271 echo "</p>\n"; 272 echo "<blockquote>\n"; 273 echo "<span style='color:blue;'>upload_max_filesize</span>=<span style='color:green;'>".$upload_max_filesize."</span><br />\n"; 274 echo "<span style='color:blue;'>post_max_size</span>=<span style='color:green;'>".$post_max_size."</span><br />\n"; 275 echo "</blockquote>\n"; 276 echo "<p>\n"; 277 echo "Si ces valeurs sont insuffisantes pour vos fichiers XML, il est possible de modifier les valeurs limites dans <span style='color:green;'>/etc/php5/apache2/php.ini</span>\n"; 278 echo "</p>\n"; 279 280 echo "<p><a href='".$_SERVER['PHP_SELF']."'>Retour</a>.</p>\n"; 281 include ("pdp.inc.php"); 282 exit(); 283 } 284 285 $dossier_tmp="/var/lib/se3/import_comptes"; 286 $dest_file="$dossier_tmp/fichier_csv_reinit_mdp.csv"; 287 if(file_exists($dest_file)){ 288 unlink($dest_file); 289 } 290 291 if(is_uploaded_file($tmp_csv_file)){ 292 $source_file=stripslashes("$tmp_csv_file"); 293 $res_copy=copy("$source_file" , "$dest_file"); 294 295 echo "<h4>".gettext("Modification des mots de passe d'après le fichier CSV fourni")."</h4>\n"; 296 297 echo "<pre class='listing'>"; 298 system ("/usr/bin/sudo /usr/share/se3/scripts/se3_reinit_mdp.sh 'csv=$dest_file' 'nettoyage'"); 299 echo "</pre>\n"; 300 echo "<hr />\n"; 301 302 } 303 } 304 else { 305 306 switch ($pwdPolicy) { 307 case 1: 308 $option=" 'semi'"; 309 break; 310 case 2: 311 $option=" 'alea'"; 312 break; 313 default: 314 $option=""; 315 } 316 317 // Liste des groupes a traiter 318 $classe_gr=isset($_POST['classe_gr']) ? $_POST['classe_gr'] : array(); 319 $equipe_gr=isset($_POST['equipe_gr']) ? $_POST['equipe_gr'] : array(); 320 $matiere_gr=isset($_POST['matiere_gr']) ? $_POST['matiere_gr'] : array(); 321 $autres_gr=isset($_POST['autres_gr']) ? $_POST['autres_gr'] : array(); 322 323 // On lance l'operation pour chaque groupe demande !!! 324 325 if (count($classe_gr) ) { 326 foreach ($classe_gr as $grp){ 327 if($reinit_mode=='alea') { 328 echo "<h4>".gettext("Modification des mots de passe (<i>pour une valeur aléatoire</i>) pour les membres du groupe ".$grp." :")."</h4>\n"; 329 } 330 else { 331 echo "<h4>".gettext("Réinitialisation des mots de passe à la date de naissance pour les membres du groupe ".$grp." :")."</h4>\n"; 332 } 333 echo "<pre class='listing'>"; 334 system ("/usr/bin/sudo /usr/share/se3/scripts/se3_reinit_mdp.sh $grp $option"); 335 echo "</pre>\n"; 336 echo "<hr />\n"; 337 } 338 } 339 340 if (count($equipe_gr) ) { 341 foreach ($equipe_gr as $grp){ 342 if($reinit_mode=='alea') { 343 echo "<h4>".gettext("Modification des mots de passe (<i>pour une valeur aléatoire</i>) pour les membres du groupe ".$grp." :")."</h4>\n"; 344 } 345 else { 346 echo "<h4>".gettext("Réinitialisation des mots de passe à la date de naissance pour les membres du groupe ".$grp." :")."</h4>\n"; 347 } 348 echo "<pre class='listing'>"; 349 system ("/usr/bin/sudo /usr/share/se3/scripts/se3_reinit_mdp.sh $grp $option"); 350 echo "</pre>\n"; 351 echo "<hr />\n"; 352 } 353 } 354 355 356 if (count($matiere_gr) ) { 357 foreach ($matiere_gr as $grp){ 358 if($reinit_mode=='alea') { 359 echo "<h4>".gettext("Modification des mots de passe (<i>pour une valeur aléatoire</i>) pour les membres du groupe ".$grp." :")."</h4>\n"; 360 } 361 else { 362 echo "<h4>".gettext("Réinitialisation des mots de passe à la date de naissance pour les membres du groupe ".$grp." :")."</h4>\n"; 363 } 364 echo "<pre class='listing'>"; 365 system ("/usr/bin/sudo /usr/share/se3/scripts/se3_reinit_mdp.sh $grp $option"); 366 echo "</pre>\n"; 367 echo "<hr />\n"; 368 } 369 } 370 371 372 if (count($autres_gr) ) { 373 foreach ($autres_gr as $grp){ 374 if($reinit_mode=='alea') { 375 echo "<h4>".gettext("Modification des mots de passe (<i>pour une valeur aléatoire</i>) pour les membres du groupe ".$grp." :")."</h4>\n"; 376 } 377 else { 378 echo "<h4>".gettext("Réinitialisation des mots de passe à la date de naissance pour les membres du groupe ".$grp." :")."</h4>\n"; 379 } 380 echo "<pre class='listing'>"; 381 system ("/usr/bin/sudo /usr/share/se3/scripts/se3_reinit_mdp.sh $grp $option"); 382 echo "</pre>\n"; 383 echo "<hr />\n"; 384 } 385 } 386 } 387 //echo "</center>\n"; 388 389 if (file_exists("/tmp/changement_mdp.csv")) { 390 // dédoublonner les utilisateurs qui auraient été modifiés plusieurs fois : garder le dernier uniquement 391 392 if ($hdle = fopen("/tmp/changement_mdp.csv", "r")) { 393 394 $listing = array(array()); // une ligne par compte ; le deuxieme parametre est, dans l'ordre nom, prenom, classe (si groupe classe), uid, password 395 array_splice($listing, 0, 1); 396 397 while ($data = fgetcsv($hdle, 0, ";")) { 398 // nom;prenom;uid;mdp;classe 399 $num = count($data); 400 if ($num >= 5) { 401 $nouveau = array('nom'=>"$data[0]", 'pre'=>"$data[1]", 'cla' => "$data[4]", 'uid'=>"$data[2]", 'pwd'=>"$data[3]"); 402 $doublon = false; 403 foreach($listing as &$key) { 404 if ($key['uid'] == $nouveau['uid']){ // doublon 405 $doublon = true; 406 $key['pwd'] = $nouveau['pwd']; 407 //mettre à jour la classe si besoin ou la conserver 408 if ($nouveau['cla'] != '') { $key['cla'] = $nouveau['cla'] ;} 409 break; 410 } 411 } 412 unset($key); 413 414 if (!$doublon) { $listing[] = $nouveau; } 415 } 416 417 } 418 fclose($hdle); 419 } 420 421 } 422 423 // Lien pour la récupération du mailing 424 if (count($listing, COUNT_RECURSIVE) > 1) { 425 $serial_listing=serialize($listing); 426 427 $lien="<a href=\"#\" onclick=\"document.getElementById('postlisting').submit(); return false;\" target=\"_blank\">Télécharger le listing des mots de passe modifiés...</a>"; 428 429 echo("<table><tr><td><img src='../elements/images/pdffile.png'></td><td>"); 430 echo($lien); 431 echo("<form id='postlisting' action='../annu/listing.php' method='post''>"); 432 echo("<input type='hidden' name='hiddeninput' value='$serial_listing' />"); 433 echo("<input type='checkbox' name='purge_csv_data' value='y' checked='checked' /> Purger le fichier temporaire après téléchargement du fichier"); 434 echo("<br />Il n'est peut-être pas très prudent de conserver inutilement ces données sur le serveur"); 435 echo("</form></td></tr></table>"); 436 } 437 438 include ("pdp.inc.php"); 439 440 ?> 441
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 |