[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3master/var/www/se3/annu/ -> reinit_mdp.php (source)

   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&#233;der &#224; cette fonction")."</BODY></HTML>");
  43  }
  44  
  45  echo "<h1>".gettext("R&#233;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&#233;e &#224; r&#233;initialiser/modifier les mots de passe par lots.</p>\n";
  54      echo "<p>Vous pouvez&nbsp;:</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&#233;initialiser les mots de passe &#224; 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&#233;e sur la date de naissance";
  80              break;
  81          case 1:
  82              echo "semi-al&#233;atoire (6 car.)";
  83              break;
  84          case 2:
  85              echo "al&#233;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&#232;s un fichier CSV au format&nbsp;: <b>LOGIN;MOTDEPASSE;</b></label><br />\n";
  93      echo "Le point-virgule en fin de ligne est recommand&#233; pour &#233;viter des blagues avec les fins de lignes DO$/Unix.<br />\n";
  94      echo "Fichier CSV&nbsp;: <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&nbsp;:</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&#232;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&#233;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&#233;initialisation/changement des mots de passe n'a pas &#233;t&#233; 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&#233;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 &#233;t&#233; 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 &eacute;chou&eacute;.</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 &eacute;t&eacute; trop volumineux.<br />PHP est actuellement param&eacute;tr&eacute; 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&#232;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&#233;atoire</i>) pour les membres du groupe ".$grp."&nbsp;:")."</h4>\n";
 329              }
 330              else {
 331                  echo "<h4>".gettext("R&#233;initialisation des mots de passe &#224; la date de naissance pour les membres du groupe ".$grp."&nbsp;:")."</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&#233;atoire</i>) pour les membres du groupe ".$grp."&nbsp;:")."</h4>\n";
 344              }
 345              else {
 346                  echo "<h4>".gettext("R&#233;initialisation des mots de passe &#224; la date de naissance pour les membres du groupe ".$grp."&nbsp;:")."</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&#233;atoire</i>) pour les membres du groupe ".$grp."&nbsp;:")."</h4>\n";
 360              }
 361              else {
 362                  echo "<h4>".gettext("R&#233;initialisation des mots de passe &#224; la date de naissance pour les membres du groupe ".$grp."&nbsp;:")."</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&#233;atoire</i>) pour les membres du groupe ".$grp."&nbsp;:")."</h4>\n";
 376              }
 377              else {
 378                  echo "<h4>".gettext("R&#233;initialisation des mots de passe &#224; la date de naissance pour les membres du groupe ".$grp."&nbsp;:")."</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&#233;l&#233;charger le listing des mots de passe modifi&#233;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&#232;s t&#233;l&#233;chargement du fichier");
 434          echo("<br />Il n'est peut-&#234;tre pas tr&#232;s prudent de conserver inutilement ces donn&#233;es sur le serveur");
 435          echo("</form></td></tr></table>");
 436      }
 437  
 438  include ("pdp.inc.php");
 439  
 440  ?>
 441  


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