[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 <?php 2 3 4 /** 5 6 * Met en place la replication d'annuaire 7 * @Version $Id: replica.php 8084 2014-03-24 22:12:01Z keyser $ 8 9 * @Projet LCS / SambaEdu 10 11 * @auteurs Philippe Chadefaux 12 13 * @Licence Distribue selon les termes de la licence GPL 14 15 * @note 16 * @sudo /usr/share/se3/scripts/mkSlapdConf.sh 17 */ 18 19 /** 20 21 * @Repertoire: annu 22 * file: replica.php 23 */ 24 25 26 27 28 require "entete.inc.php"; 29 require "ihm.inc.php"; 30 require "config.inc.php"; 31 32 require_once ("lang.inc.php"); 33 bindtextdomain('se3-annu',"/var/www/se3/locale"); 34 textdomain ('se3-annu'); 35 36 if (is_admin("system_is_admin",$login)!="Y") 37 die (gettext("Vous n'avez pas les droits suffisants pour accéder à cette fonction")."</BODY></HTML>"); 38 39 $texte_alert=gettext("Attention vous risquez de perdre le contrôle de votre serveur. Voir la documentation avant de mettre cela en oeuvre. Etes vous sure de vouloir continuer ?"); 40 41 ?> 42 <script language="JavaScript"> 43 44 45 /** 46 * Affiche une boite de dialogue pour demander confirmation 47 * @language Javascript 48 * @Parametres 49 * @return 50 */ 51 52 function areyousure() 53 { 54 var messageb = "<?php echo "$texte_alert"; ?>"; 55 if (confirm(messageb)) 56 return true; 57 else 58 return false; 59 } 60 </script> 61 62 <?php 63 // Aide 64 $_SESSION["pageaide"]="R%C3%A9plication_d%27annuaires"; 65 66 echo "<h1>".gettext("Réplication de l'annuaire LDAP")."</h1>"; 67 68 69 // *******************************// 70 $action = $_POST['action']; 71 $replica = $_POST['replica']; 72 $ip = $_POST['ip']; 73 $syncrepl = $_POST['syncrepl']; 74 75 76 // ###################################################################### 77 // ################### Creation du champ manquant ######################### 78 79 $result=mysql_query("SELECT name from params where name='replica_status'"); 80 $num = mysql_numrows( $result); 81 if ($num == "0" ) { 82 $resultat=mysql_query("INSERT into params set id='NULL', name='replica_status', value='0', srv_id='0',descr='Etat du serveur de réplication',cat='4'"); 83 $resultat=mysql_query("UPDATE params set descr='Adresse du serveur Lcs ou Slis (optionnel)' where name='lcsIp'"); 84 $resultat=mysql_query("INSERT into params set id='NULL', name='replica_ip', value='', srv_id='0',descr='Adresse IP du serveur de réplication',cat='4'"); 85 86 } 87 88 // ###################### FIN ############################################# 89 90 // Si replica est vide 91 if ($action != "") { 92 if ($replica == "") { 93 $result=mysql_query("SELECT * from params where name='replica_status'"); 94 if ($result) 95 while ($r=mysql_fetch_array($result)) { 96 $replica=$r[2]; 97 } 98 } 99 } 100 101 // Validation de la page 102 if ($action == "Ok" || $replica=="0") { 103 // Test la connexion au serveur LDAP maitre ou esclave 104 if ($replica == "1" || $replica == "2" || $replica == "3" || $replica == "4") { 105 // test la validite de l'ip 106 if (!is_string($ip)) { $ok = 0;} 107 $ip_long = ip2long($ip); 108 $ip_revers = long2ip($ip_long); 109 if ($ip != $ip_revers) { $ok = 0; } 110 111 $result=mysql_query("SELECT * from params where name='adminRdn'"); 112 if ($result) 113 while ($r=mysql_fetch_array($result)) { 114 $adminRdn=$r[2]; 115 } 116 117 $result=mysql_query("SELECT * from params where name='adminPw'"); 118 if ($result) 119 while ($r=mysql_fetch_array($result)) { 120 $adminPw=$r[2]; 121 } 122 123 $result=mysql_query("SELECT * from params where name='ldap_base_dn'"); 124 if ($result) 125 while ($r=mysql_fetch_array($result)) { 126 $basedn=$r[2]; 127 } 128 129 $admin_dn="$adminRdn,$basedn"; 130 131 $ldapconn = ldap_connect("$ip"); 132 if ($ldapconn) { //Connexion au serveur LDAP 133 $ldapbind = @ldap_bind($ldapconn, $admin_dn, $adminPw); // Identification 134 if ($ldapbind) { 135 $ldap_ok="1"; // Connexion LDAP reussie 136 } else { 137 $ldap_ok="0"; // Connexion LDAP echouee 138 } 139 } else { 140 $ldap_ok="0"; 141 } 142 } 143 144 //Si pas d'erreurs on peut modifier dans la table et lancer le script 145 if ($ok != "0" && $ldap_ok != "0") { 146 147 //Lance le script mkslapd 148 $resultat=mysql_query("SELECT * from params where name='ldap_server'"); 149 if ($resultat) 150 while ($r=mysql_fetch_array($resultat)) { 151 $IP_ldap=$r[2]; 152 } 153 //On verifie l'etat anterieur avant de modifier 154 $result=mysql_query("SELECT * from params where name='replica_status'"); 155 if ($result) 156 while ($r=mysql_fetch_array($result)) { 157 $maitre=$r[2]; 158 } 159 if ($maitre=="2" || $maitre=="4") { // etait en esclave avant on recupere l'adresse ip du maitre 160 $result=mysql_query("SELECT * from params where name='replica_ip'"); 161 if ($result) 162 while ($r=mysql_fetch_array($result)) { 163 $ip_maitre=$r[2]; 164 } 165 } else { // sinon son adresse IP 166 $result=mysql_query("SELECT * from params where name='ldap_server'"); 167 if ($result) 168 while ($r=mysql_fetch_array($result)) { 169 $ip_maitre=$r[2]; 170 } 171 } 172 173 if ($replica == "0") { 174 $ip = ""; 175 $options = "-e"; 176 $resultat=mysql_query("UPDATE params set cat='2' where name='ldap_server'"); 177 //Si on etait esclave avant on doit changer l'IP 178 179 if ($maitre == $replica) { 180 $resultat=mysql_query("UPDATE params set value='' where name='replica_ip'"); 181 // } 182 // elseif ($maitre=="1" || $maitre=="3") { 183 // $resultat=mysql_query("UPDATE params set value='$ip_maitre' where name='ldap_server'"); 184 // $resultat=mysql_query("UPDATE params set value='$ip' where name='replica_ip'"); 185 186 } else { 187 $resultat=mysql_query("UPDATE params set value='$ip_maitre' where name='ldap_server'"); 188 $resultat=mysql_query("UPDATE params set value='$ip' where name='replica_ip'"); 189 } 190 } 191 192 if ($replica == "1" || $replica == "3") { 193 //si pas de compte indique on utilise le compte AdmRdn et le MdP AdmPw 194 $options = "-c -m"; 195 $resultat=mysql_query("UPDATE params set cat='4' where name='ldap_server'"); 196 if ($maitre == $replica) { 197 $resultat=mysql_query("UPDATE params set value='$ip' where name='replica_ip'"); 198 } 199 elseif ($maitre=="2") { 200 $resultat=mysql_query("UPDATE params set value='$ip_maitre' where name='ldap_server'"); 201 $resultat=mysql_query("UPDATE params set value='$ip' where name='replica_ip'"); 202 } else { 203 $resultat=mysql_query("UPDATE params set value='$ip' where name='replica_ip'"); 204 $resultat=mysql_query("UPDATE params set value='$ip_maitre' where name='ldap_server'"); 205 } 206 } 207 208 if ($replica == "2" || $replica == "4") { 209 //si pas de compte indique on utilise le compte AdmRdn et le MdP AdmPw 210 $options = "-c -s"; 211 $resultat=mysql_query("UPDATE params set cat='4' where name='ldap_server'"); 212 if ($maitre == $replica) { 213 $resultat=mysql_query("UPDATE params set value='$ip' where name='ldap_server'"); 214 } else { 215 $resultat=mysql_query("UPDATE params set value='$ip_maitre' where name='replica_ip'"); 216 $resultat=mysql_query("UPDATE params set value='$ip' where name='ldap_server'"); 217 } 218 } 219 220 221 $resultat=mysql_query("UPDATE params set value='$replica' where name='replica_status'"); 222 223 // Lancement des scripts 224 exec ("/usr/bin/sudo /usr/share/se3/scripts/mkSlapdConf.sh"); 225 } else { 226 if ($ok == "0") { 227 echo "<font color=\"rouge\">".gettext("L'adresse IP n'est pas conforme ou absente")."</font><br>"; 228 } 229 if ($ldap_ok == "0") { 230 echo "<font color=\"rouge\">".gettext("Impossible de se connecter au serveur LDAP distant")."</font>"; 231 } 232 } 233 } 234 235 // Interface 236 $replica_status="$replica"; 237 if ($replica == "") { 238 $result=mysql_query("SELECT * from params where name='replica_status'"); 239 if ($result) 240 while ($r=mysql_fetch_array($result)) { 241 $replica_status=$r[2]; 242 } 243 } 244 245 246 // Verification si l'annuaire est deporte 247 $nom_se3=exec('/bin/hostname'); 248 $ip_se3=gethostbyname($nom_se3); 249 if (($ip_se3 == $ldap_server) || ($ldap_server == "localhost") || ($ldap_server == "127.0.0.1")) { 250 251 $ldap_deport = "no"; 252 } else { 253 //cas ou il est en esclave 254 if($replica_ip!="") { 255 $ldap_deport = "no"; 256 } else { 257 $ldap_deport = "yes"; 258 } 259 } 260 261 ?> 262 263 <H3><?php echo gettext("Mise en place de la réplication de l'annuaire"); ?></H3> 264 265 <form name = "auth" action="replica.php" method="post"> 266 <table border="0" width="90%"> 267 <tbody> 268 <tr> 269 <td colspan=3> 270 <font color="orange"><center><?php echo gettext("Attention, la mise en place de la réplication peut provoquer la perte de votre annuaire, <br>Il est vivement conseillé de faire une sauvegarde de celui-ci avant toute modification."); ?></center></font><br><br> 271 <?php 272 if ($ldap_deport=="yes") { 273 ?> 274 <font color="orange"><center><?php echo gettext("Votre annuaire est actuellement déporté sur une autre machine. Il risque donc de ne contenir aucune entrée. Vous ne pouvez pas en conséquence le placer comme serveur d'annuaire maître"); ?></center></font><br><br> 275 <?php } ?> 276 </td> 277 </tr> 278 <tr> 279 <td><?php echo gettext("Etat du serveur"); ?> : </td> 280 <td> 281 <input type="hidden" name="action" value="SUB"> 282 <select name="replica" onchange=submit()> 283 <?php 284 // Cas ou l'annuaire est deporte 285 if ($ldap_deport=="no") { 286 ?> 287 <option <?php if ($replica_status == "0") {echo "selected"; } ?> value="0"><?php echo gettext("Serveur non répliqué"); ?></option> 288 // Cas ou l'annuaire est deporte 289 if ($ldap_deport=="no") { 290 ?> 291 <option <?php if ($replica_status == "3") {echo "selected"; } ?> value="3"><?php echo gettext("Serveur LDAP principal (méthode syncrepl)"); ?></option> 292 <?php } ?> 293 <option <?php if ($replica_status == "4") {echo "selected"; } ?> value="4"><?php echo gettext("Serveur LDAP secondaire (méthode syncrepl)"); ?></option> 294 </select> 295 </td> 296 <td> 297 <?php 298 if ($ldap_deport=="no") { 299 echo "<u onmouseover=\"this.T_SHADOWWIDTH=5;this.T_STICKY=1;return escape".gettext("('Vous pouvez choisir de mettre en place une réplication, ou de la supprimer pour votre annuaire LDAP.<br>Le but est de disposer d\'un second annuaire sur une seconde machine.<br> Pour cela vous avez quatre possibilités :<br><br><b>Serveur LDAP principal (ou maître)</b><br>Cette machine dispose de l\'annuaire de réferrence. Les autres machines, ne disposeront que d\'une réplique. Seule les modifications faites sur l\'annuaire de cette machine seront prises en compte.<br><br><b>Serveur LDAP secondaire (ou esclave)</b><br>Cette machine ne disposera que d\'une réplique de l\'annuaire du serveur principal.<br><br><b>Serveur principal (méthode syncrepl)</b><br>Même chose que pour le serveur LDAP principal, mais la méthode change. Celle-ci est plus performante que la précédente, mais ne peut fonctionner avec tous les serveurs. Voir la documentation.<br><br><b>Serveur secondaire (méthode syncrepl)</b><br>Idem, mais attention cette option détruit complétement l\'annuaire local (il est sauvegardé automatiquement dans /var/se3/save).<br><br><b>Attention</b><br>Toutes les entrées existant dans cet annuaire et n\'existant pas sur le maître seront perdues.<br><br>Si vous souhaitez déporter l\'annuaire sur une autre machine, il vous faut aller dans le mode sans échec, et indiquer l\'adresse IP du serveur disposant de votre annuaire.<br><br><b>Il est vivement conseillé de faire une sauvegarde de votre annuaire avant de faire des modifications.</b> ')")."\"><img name=\"action_image2\" src=\"../elements/images/system-help.png\"></u>\n"; 300 } else { 301 302 echo "<u onmouseover=\"this.T_SHADOWWIDTH=5;this.T_STICKY=1;return escape".gettext("('Votre annuaire LDAP est actuellement déporté sur un autre serveur. Il est possible qu\'il ne contienne aucune entrée. Vous ne pouvez donc pas le définir comme maître, au risque d\'en perdre le contrôle.<br>Pour le reconstruire complétement à partir de votre serveur LDAP actuel, placez vous en esclave méthode syncrepl et l\'autre serveur en maître. Il vous sera alors possible de le rebasculer en maître par la suite.<br><b>Attention : toute modification sur l\'annuaire peut avoir des conséquences importantes. Il est donc conseillé de le sauvegarder avant.')")."\"><img name=\"action_image2\" src=\"../elements/images/system-help.png\"></u>\n"; 303 } 304 ?> 305 306 </td> 307 </tr> 308 </form> 309 <form name="truc" action="replica.php" method="post" onSubmit="return areyousure()"> 310 311 <?php 312 313 // Affichage si on a un esclave ou un maitre 314 if ($replica == "1" || $replica == "2" || $replica_status=="1" || $replica_status=="2" || $replica == "3" || $replica == "4" || $replica_status == "3" || $replica_status == "4") { 315 $resultat=mysql_query("SELECT * from params where name='replica_ip'"); 316 317 if ($resultat) 318 while ($r=mysql_fetch_array($resultat)) { 319 $replica_ip=$r[2]; 320 } 321 322 echo "<tr>\n"; 323 324 // recup l'adresse IP de l'esclave dans la base sql 325 if($replica== "1" || $replica_status=="1" || $replica == "3" || $replica_status=="3") { 326 echo"<td>".gettext("Adresse IP du serveur esclave")." : </td>"; 327 $resultat=mysql_query("SELECT * from params where name='replica_ip'"); 328 if ($resultat) 329 while ($r=mysql_fetch_array($resultat)) { 330 $replica_ip=$r[2]; 331 } 332 } 333 334 // recup l'adresse IP du maitre dans la base sql 335 if($replica== "2" || $replica_status=="2" || $replica == "4" || $replica_status == "4") { 336 echo"<td>".gettext("Adresse IP du serveur maître")." : </td>"; 337 $resultat=mysql_query("SELECT * from params where name='ldap_server'"); 338 if ($resultat) 339 while ($r=mysql_fetch_array($resultat)) { 340 $replica_ip=$r[2]; 341 } 342 343 } 344 345 // Pour vider l'adresse IP en cas de re-select 346 if ($action=="SUB") { 347 $replica_ip=""; 348 } 349 ?> 350 351 <td><input type="text" name="ip" value="<?php echo "$replica_ip"; ?>" size="20"></td> 352 <td> 353 354 <?php 355 echo "<u onmouseover=\"this.T_SHADOWWIDTH=5;this.T_STICKY=1;return escape".gettext("('<b>Adresse IP du serveur maître</b><br>Vous devez indiquer l\'adresse IP du serveur LDAP maître.<br><br><b>Adresse IP du serveur esclave</b><br>Vous devez indiquer l\'adresse IP du serveur esclave.<br><br><b>Attention</b> Afin de pouvoir mettre en place la réplication, il faut que le serveur distant (maître ou esclve) soit joignable.')")."\"><img name=\"action_image2\" src=\"../elements/images/system-help.png\"></u>\n"; 356 echo "</td>\n"; 357 echo "</tr>\n"; 358 359 360 ?> 361 362 <tr> 363 <td></td> 364 <td align="left"> 365 <?php 366 echo"<input type=\"hidden\" name=\"replica\" value=\"$replica\">"; 367 ?> 368 <input type="hidden" name="action" value="Ok"> 369 <input type="submit" value="<?php echo gettext("Modifier"); ?>"> 370 </td> 371 <td></td> 372 </tr> 373 <?php } ?> 374 </tbody> 375 </table> 376 </form> 377 378 <?php 379 380 //log l'etat de la replication 381 382 $result=mysql_query("SELECT * from params where name='replica_status'"); 383 if ($result) 384 while ($r=mysql_fetch_array($result)) 385 { 386 $status=$r[2]; 387 } 388 389 if ($status == "1" || $status == "2" || $status == "3" || $status == "4") { 390 if ($status == "1" || $status == "3") { $options = "m"; } 391 if ($status == "2" || $status == "4") { $options = "s"; } 392 ?> 393 <br> 394 <H3><?php echo gettext("Contrôler et synchroniser les annuaires"); ?></H3> 395 <form action="replica_log.php" method="post"> 396 <input type="hidden" name="ip" value=<?php echo "$replica_ip"; ?>> 397 <input type="hidden" name="status" value=<?php echo"$options"; ?>> 398 <input type="hidden" name="action" value="ok"> 399 400 <table border="0" width="70%"> 401 <tbody> 402 <tr> 403 <td align='left'><input type="radio" name="type" value="anonymous" checked="on"></td> 404 <td><?php echo gettext("Comparer les deux annuaires"); ?></td> 405 <td> 406 <?php 407 echo "<u onmouseover=\"this.T_SHADOWWIDTH=5;this.T_STICKY=1;return escape".gettext("('Compare les annuaires entre le serveur principal (maître) et le serveur secondaire (esclave).<br><br>Cette fonction ne modifie aucun des deux annuaires. ')")."\"><img name=\"action_image2\" src=\"../elements/images/system-help.png\"></u>\n"; 408 ?> 409 </td> 410 </tr> 411 <tr> 412 <td align="center" colspan="3" height="51"><font color="orange"><?php echo gettext("Il est vivement conseillé pour les deux autres choix de faire un export LDAP avant"); ?></font></td> 413 <tr> 414 415 <td align='left'><input type="radio" name="type" value="only_pass"></td> 416 <td><?php echo gettext("Ajouter les entrees manquantes et synchroniser les mots de passe (par rapport au maître)"); ?></td> 417 <td> 418 <?php 419 echo "<u onmouseover=\"this.T_SHADOWWIDTH=5;this.T_STICKY=1;return escape".gettext("('Cette option va modifier les entrées de l\'annuaire secondaire (esclave) en modifiant les entrées qui ne sont pas identiques, entre le maître et l\'esclave.<br> Les entrées du serveur secondaire (esclave) seront modifiées.')")."\"><img name=\"action_image2\" src=\"../elements/images/system-help.png\"></u>\n"; 420 ?> 421 </td> 422 </tr> 423 <tr> 424 425 <td align='left' height="51"><input type="radio" name="type" value="full"></td> 426 <td><?php echo gettext("Synchroniser la totalité des deux annuaires (par rapport au maître)"); ?></td> 427 <td> 428 <?php 429 echo "<u onmouseover=\"this.T_SHADOWWIDTH=5;this.T_STICKY=1;return escape".gettext("('Cette option va modifier les entrées de l\'annuaire secondaire (esclave) en modifiant les entrées qui ne sont pas identiques entre le maître et l\'esclave, et en ajoutant les entrées manquantes et en supprimant les entrées en trop dans l\'esclave.<br><br><b>Les entrées du serveur secondaire (esclave) seront modifiées, voire supprimées</b>.')")."\"><img name=\"action_image2\" src=\"../elements/images/system-help.png\"></u>\n"; 430 ?> 431 </td> 432 </tr> 433 <tr> 434 435 <td align="center" colspan='2'><input type="submit" value="<?php echo gettext("Contrôler la réplication"); ?>"><td> 436 </tr> 437 </tbody> 438 </table> 439 </form> 440 <?php 441 } 442 443 include "pdp.inc.php"; 444 ?>
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 |