[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 <?php 2 3 4 /** 5 6 * Permet de creer un partage 7 * @Version $Id: create_share.php 7575 2012-12-09 18:14:58Z keyser $ 8 9 * @Projet LCS / SambaEdu 10 11 * @auteurs jLCF >:> jean-luc.chretien@tice.ac-caen.fr 12 * @auteurs Equipe TICE Crdp de Caen 13 * @auteurs Olivier LECLUSE 14 15 * @Licence Distribue selon les termes de la licence GPL 16 17 * @note 18 19 */ 20 21 /** 22 23 * @Repertoire: partages/ 24 * file: create_share.php 25 26 */ 27 28 29 include "entete.inc.php"; 30 include "ldap.inc.php"; 31 include "ihm.inc.php"; 32 33 require_once ("lang.inc.php"); 34 bindtextdomain('se3-partages',"/var/www/se3/locale"); 35 textdomain ('se3-partages'); 36 37 foreach ($_POST as $cle=>$val) { 38 $$cle = $val; 39 } 40 41 // Fonctions internes a create_share.php 42 43 /** 44 * Verifie si l'entree est bien un groupe ou un uid 45 * @Parametres $entry l'entree a tester 46 * @return true ou false 47 */ 48 49 50 function valid_uid_or_group($entry) { 51 if ($entry !="") { 52 // Splitage de $share_user_list 53 $tmp = preg_split ("/\[ \]/",$entry,20); 54 for ( $loop=0; $loop < count($tmp); $loop++) { 55 // Recherche si c'est un utilisateur ou un groupe 56 $return=strpos( $tmp[$loop], "@"); 57 if ( strpos( $tmp[$loop], "@") === 0) { 58 // Cette entree est un groupe 59 $name_group = substr ($tmp[$loop], 1); 60 // Recherche si le groupe existe 61 $group=search_groups ("(cn=".$name_group.")"); 62 if ( count ($group) == 0 ) return false; 63 } else { 64 // Cette entree est un uid 65 // Recherche si l'uid existe 66 $users = search_people ("(uid=".$tmp[$loop].")"); 67 if ( count ($users) == 0 ) return false; 68 } 69 } 70 } 71 return true; 72 } 73 74 75 76 /** 77 * Supprime les accents d'une chaine 78 * @Parametres $chaine a nettoyer 79 * @return la chaine sans accent 80 */ 81 82 83 84 function cleanEntry ($chaine) { 85 $chaine = stripslashes(strtr($chaine, 86 "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ ", 87 "aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn_")); 88 return $chaine; 89 } 90 91 92 /** 93 * Normalise un path (supprime les accents et les espaces, met en minuscule ... 94 * @Parametres $path a nettoyer 95 * @return le chemin sans accent ... 96 */ 97 98 99 function cleanPath ( $path ) { 100 // Enleve les accents et «minusculise» 101 $path = strtolower(cleanEntry($path)); 102 // Enleve les .,;:!&~#'{}()[]`^@°+- 103 $path = strtr($path,"\.,;:!&~#'{}()[]`^@§°+-*"," "); 104 // Enleve les espaces 105 $path = str_replace(" ", "", $path); 106 // Enleve / en debut et en fin du chemin 107 while (preg_match("/^\//",$path) ) $path = preg_replace ("/^\//", "", $path); 108 while (preg_match("/\/$/",$path) ) $path = preg_replace ("/\/$/", "", $path); 109 return $path; 110 } 111 112 113 114 115 116 if (is_admin("se3_is_admin",$login)=="Y") { 117 118 //aide 119 $_SESSION["pageaide"]="Ressources_et_partages"; 120 121 122 echo "<h1>".gettext("Création de partage")."</h1>"; 123 124 // Definition des messages d'alerte 125 $alerte_1="<div class='error_msg'>\n".gettext("Votre demande de création d'un nouveau partage n'a pas été prise en compte car une tâche d'administration est en cours sur le serveur")." <b>\n"; 126 $alerte_2="</b>,".gettext(" veuillez réitérer votre demande plus tard. Si le problème persiste, veuillez contacter le super-utilisateur du serveur SE3.")."</div><BR>\n"; 127 $alerte_3="<div class='error_msg'>".gettext("Votre demande de création d'un nouveau partage a échoué. Si le problème persiste, veuillez contacter le super-utilisateur du serveur SE3.")."</div><BR>\n"; 128 129 // gettext a revoir: boireaus: J'ai ajoute un 's' a 'incoherente' et vire un 'e' 130 $alerte_4="<div class='error_msg'>".gettext("Votre demande de création d'un nouveau partage a échoué car les informations collectées sont incohérentes !!")."\n"; 131 132 // gettext a revoir: boireaus: J'ai ajoute modifie 133 $share_name_alert = "<div class='error_msg'><li>".gettext("Le partage")." <strong>$share_name</strong> ".gettext("est déja présent dans un des fichiers smb*.conf.")."\n"; 134 135 $share_user_list_alert = "<div class='error_msg'><li>".gettext("La liste des Utilisateur(s) ou groupe(s) autorisés ou refusés comporte une ou des entrées invalides.")."\n"; 136 $share_admin_alert = "<div class='error_msg'><li>".gettext("La liste des utilisateur(s) ou groupe(s) ayant les droits d'administration sur ce partage comporte une ou des enrées invalides.")."\n"; 137 // Definition des messages d'info 138 $info_1 = gettext("Cette tâche est ordonnancée, vous recevrez un mèl de confirmation de création dans quelques instants..."); 139 140 // A gettextiser: boireaus 141 $Alert_ShareName_User_Ldap=gettext("<div class='error_msg'>Le nom de partage ne doit pas être le nom de login d'un utilisateur dans l'annuaire LDAP.</div>"); 142 143 #------------------------------------------ 144 // Prepositionnement variables 145 $Verif_Empty = true; 146 147 if ( mono_srv() ) { 148 // configuration mono serveur : determination des parametres du serveur 149 $serveur=search_machines ("(l=maitre)", "computers"); 150 $cn_srv= $serveur[0]["cn"]; 151 $stat_srv = $serveur[0]["l"]; 152 $ipHostNumber = $serveur[0]["ipHostNumber"]; 153 } else { 154 // configuration multi-serveurs : presentation d'un form de selection du serveur 155 if ( !$selected_srv && !$End_ph1) { 156 echo "<H3>".gettext("Sélection du serveur ou vous souhaitez créer ce partage :")." </H3>\n"; 157 $servers=search_computers ("(|(l=esclave)(l=maitre))"); 158 echo "<form action=\"create_share.php\" method=\"post\">\n"; 159 for ($loop=0; $loop < count($servers); $loop++) { 160 echo $servers[$loop]["description"]." ".$servers[$loop]["cn"]." <input type=\"radio\" name=\"cn_srv\" value =\"".$servers[$loop]["cn"]."\""; 161 if ($loop==0) echo "checked"; 162 echo "><BR>\n"; 163 } 164 $form="<input type=\"reset\" value=\"".gettext("Réinitialiser la sélection")."\">\n"; 165 $form ="<input type=\"hidden\" name=\"selected_srv\" value=\"true\">\n"; 166 $form.="<input type=\"submit\" value=\"".gettext("Valider")."\">\n"; 167 $form.="</form>\n"; 168 echo $form; 169 } else { 170 // Determination des parametres du serveur cible dans le cas d'une conf multi-serveurs 171 $serveur=search_machines ("(cn=$cn_srv)", "computers"); 172 $stat_srv = $serveur[0]["l"]; 173 $ipHostNumber = $serveur[0]["ipHostNumber"]; 174 } 175 } 176 // Fin selection et recherche des caracteristiques du serveur 177 178 // Recherche si il y a des champs obligatoires vides 179 if ( $End_ph1 && ( !$share_name || !$share_path ) ) $Verif_Empty = false; 180 181 // Phase 1 : Saisie des donnees 182 if ( ( !$End_ph1 && $stat_srv ) || ($End_ph1 && $Verif_Empty == false ) ) { 183 echo "<H3>".gettext("Création d'un partage sur ")."$cn_srv : </h3>\n"; 184 echo "<H6>".gettext("[Phase1] Collecte des informations relatives au partage :")."</h6>\n"; 185 // Liste des parcs 186 $list_parcs=search_machines("objectclass=groupOfNames","parcs"); 187 // Preparation du formulaire 188 $form ="<form action='create_share.php' method='post'>\n"; 189 $form .="<table border='0'><tr>\n"; 190 // Nom du partage 191 $form .="<td colspan='2'>".gettext("Nom du partage")."</td>\n"; 192 $form .="<td><input type='text' name='share_name' size='15'></td>\n"; 193 $form .="<td> *</td>\n"; 194 $form .="</tr><tr>\n"; 195 // Chemin du partage 196 $form .="<td colspan='2'>".gettext("Chemin")." /var/se3/</td>\n"; 197 $form .="<td><input type='text' name='share_path' size='15'></td>\n"; 198 $form .="<td> *</td>\n"; 199 // Commentaire 200 $form .="</tr><tr>\n"; 201 $form .="<td colspan='2'>".gettext("Commentaire")."</td>\n"; 202 $form .="<td><input type='text' name='share_comment' size='15'></td>\n"; 203 $form .="<td></td>\n"; 204 // Groupe propietiare du rep correspondant au partage 205 $form .="</tr><tr>\n"; 206 $form .="<td colspan='2'>".gettext("Groupe propriétaire du répertoire")."</td>\n"; 207 $form .="<td><select name='dir_grp_owner'> 208 <option value=\"$defaultgid\">".gettext("Tous")."</option> 209 <option value=\"eleves\">".gettext("Elèves")."</option> 210 <option value=\"profs\">".gettext("Profs")."</option> 211 <option value=\"admins\">".gettext("Admins")."</option> 212 </select> 213 <select name='dir_grp_perm'> 214 <option value=\"rwx\">".gettext("Ecriture")."</option> 215 <option value=\"rx\">".gettext("Lecture")."</option> 216 </select> 217 </td>\n"; 218 $form .="<td></td>\n"; 219 $form .="</tr><tr>\n"; 220 // Droits pour les autres 221 $form .="</tr><tr>\n"; 222 $form .="<td colspan='2'>".gettext("Droits pour les autres")."</td>\n"; 223 $form .="<td><select name='dir_rights_other'> 224 <option value=\"rx-\">".gettext("Lecture")."</option> 225 <option value =\"---\">".gettext("Aucun")."</option> 226 </select></td>\n"; 227 $form .="<td></td>\n"; 228 $form .="</tr><tr>\n"; 229 // Utilisateurs autorises ou refuses 230 $form .="<td>Utilisateur(s)</td>\n"; 231 $form .="<td><select name='share_user_type'><option value=\"autorises\">".gettext("autorisés")."</option><option value=\"refuses\">".gettext("refusés")."</option></select></td>\n"; 232 $form .="<td><input type='text' name='share_user_list' size='15'></td>\n"; 233 $form .="<td></td>\n"; 234 $form .="</tr><tr>\n"; 235 $form .="<td colspan='2'>".gettext("Utilisateur(s) ayant les droits")."</td>\n"; 236 $form .="<td rowspan='2'><input type='text' name='share_admin' size='15'></td>\n"; 237 $form .="<td></td>\n"; 238 $form .="</tr><tr>\n"; 239 $form .="<td colspan='2'>".gettext("d'administration sur ce partage")."</td>\n"; 240 $form .="<td></td>\n"; 241 $form .="</tr><tr>\n"; 242 $form .="<td colspan='2'>".gettext("Limitation d'accés à un parc")."</td>\n"; 243 $form .= "<td>\n<SELECT NAME=\"parc_restrict\" SIZE=\"1\">"; 244 $form.= "<option value=\"\">\n"; 245 for ($loop=0; $loop < count($list_parcs); $loop++) { 246 $form.= "<option value=".$list_parcs[$loop]["cn"].">".$list_parcs[$loop]["cn"]."\n"; 247 } 248 $form .= "</SELECT> \n</td>"; 249 $form .="<td></td>\n"; 250 $form .="</tr><tr>\n"; 251 $form .="<td colspan='4'>"; 252 $form .= "<input type='hidden' value='true' name='End_ph1'>\n"; 253 $form .= "<input type='hidden' name='cn_srv' value='$cn_srv'>\n"; 254 $form .= "<input type='hidden' name='stat_srv' value='$stat_srv'>\n"; 255 $form .= "<input type='hidden' name='ipHostNumber' value='$ipHostNumber'>\n"; 256 $form .="</td></tr>\n"; 257 $form .="<td><input type='submit' value='".gettext("Soumettre")."' name='submit'></td>\n"; 258 $form .="<td> </td>\n"; 259 $form .="<td><input type='reset' value='".gettext("Recommencer")."' name='reset'></td>\n"; 260 $form .="<td> </td>\n"; 261 $form .="</tr></table>\n"; 262 $form .="</form>\n"; 263 echo $form; 264 265 if ( $End_ph1 && $Verif_Empty == false ) 266 echo gettext ("<div class='error_msg'>".gettext("Les champs marqués d'une étoile doivent être complétés !")."</div>")."\n"; 267 268 } elseif ( $End_ph1 ) { 269 270 // Convertion des infos valid users ou invalid users 271 if ( $share_user_type == "autorises" ) $share_user_type = "valid users"; else $share_user_type = "invalid users"; 272 // Phase 2 : Verification coherence des informations collectees 273 $Verif_Result = true; $Verif_share_user_list = true; $Verif_share_admin = true; 274 ## Cas du maitre ou de l'esclave 275 ## Verifier validite des entrees du formulaire et nettoyage 276 $share_name = strtolower(cleanEntry($share_name)); 277 $share_comment = cleanEntry($share_comment); 278 $share_path = cleanPath($share_path); 279 $share_user_list = strtolower(cleanEntry($share_user_list)); 280 $share_admin = strtolower(cleanEntry($share_admin)); 281 /* 282 echo "DEBUG >> share_name $share_name<br> 283 share_comment $share_comment<br> 284 share_path [$share_path]<br> 285 share_user_list $share_user_list<br> 286 share_admin $share_admin<br>"; 287 */ 288 ## Verifier validite de la liste valid ou invalid users 289 if (! valid_uid_or_group($share_user_list) ) { 290 $Verif_Result = false; 291 $Verif_share_user_list = false; 292 #echo "DEBUG >> Invalid user list<br>"; 293 } 294 ## Verifier validite de la liste admin users 295 if (! valid_uid_or_group($share_admin) ) { 296 $Verif_Result = false; 297 $Verif_share_admin = false; 298 #echo "DEBUG >> Invalid admin user list<br>"; 299 } 300 ## Fine verification des entrees du formulaire et du nettoyage 301 if ( $stat_srv == "maitre" ) { 302 // Cas du maitre 303 // Verifier la presence du partage dans smb.conf 304 //exec ("/bin/grep \"<$share_name>\" /etc/samba/smb.conf", $AllOutPut, $ReturnValueShareName); 305 // Le test n'etait pas bon: Il ne detectait que les partages ajoutes par l'utilisateur 306 // pas ceux existant en standard dans SE3 307 // Et il ne tient pas compte de la casse. 308 // Et il ne teste pas les smb_*.conf 309 exec ("/bin/grep -i \"\[$share_name\]\" /etc/samba/smb*.conf", $AllOutPut, $ReturnValueShareName); 310 if ( $ReturnValueShareName == 0 ) $Verif_Result = false; 311 } elseif ( $stat_srv == "esclave" ) { 312 // Cas de l'esclave 313 // Verifier la presence du partage dans smb.conf 314 //exec ("ssh -l remote_adm $ipHostNumber '/bin/grep \"$share_name\" /etc/samba/smb.conf'", $AllOutPut, $ReturnValueShareName); 315 // Correction du test: idem 316 exec ("ssh -l remote_adm $ipHostNumber '/bin/grep -i \"\[$share_name\]\" /etc/samba/smb*.conf'", $AllOutPut, $ReturnValueShareName); 317 if ( $ReturnValueShareName == 0 ) $Verif_Result = false; 318 } 319 320 // Est-ce que le nom de partage correspond a un utilisateur dans l'annuaire: 321 $ReturnValueShareName_User_Ldap=1; 322 $tab_test_user=people_get_variables($share_name, false); 323 /* 324 echo "count($tab_test_user)=".count($tab_test_user)."<br />"; 325 foreach($tab_test_user as $cle => $valeur){ 326 echo "\$tab_test_user[$cle]=$valeur<br />"; 327 } 328 echo "count($tab_test_user[0])=".count($tab_test_user[0])."<br />"; 329 foreach($tab_test_user[0] as $cle => $valeur){ 330 echo "\$tab_test_user[0][$cle]=$valeur<br />"; 331 } 332 */ 333 if(count($tab_test_user[0])!=0){ 334 $ReturnValueShareName_User_Ldap=0; 335 $Verif_Result = false; 336 } 337 338 #### $Verif_Result = false; // Forcee a false pour DEBUG ! 339 // Phase 2' : Affichage des caracteristique du nouveau partage 340 echo "<H3>".gettext("Création d'un partage sur")." $cn_srv : </h3>\n"; 341 echo "<H6>".gettext("[Phase 2] Controle de cohérence :")."</h6>\n"; 342 if ( !$Verif_Result ) { 343 echo $alerte_4; 344 if ( $ReturnValueShareName == 0 ) echo $share_name_alert; 345 if ( $Verif_share_user_list == false ) echo $share_user_list_alert; 346 if ( $Verif_share_admin == false ) echo $share_admin_alert; 347 348 if($ReturnValueShareName_User_Ldap==0){ 349 // Le nom de partage correspond a un utilisateur dans l'annuaire: 350 echo $Alert_ShareName_User_Ldap; 351 } 352 353 echo "</div><br>\n"; 354 } else { 355 // Si creation sur serveur maitre 356 if ( $stat_srv == "maitre" ) 357 { 358 system("sudo /usr/share/se3/scripts/create_share.sh \ 359 \"$share_name\" \"$share_comment\" \"$share_path\"\ 360 \"$REMOTE_ADDR\" \"$share_user_type\" \"$dir_rights_other\"\ 361 \"$dir_grp_owner\" \"$dir_grp_perm\" admin=\"$share_admin\"\ 362 parc=\"$parc_restrict\" user_list=\"$share_user_list\""); 363 364 // Si creation sur un esclave 365 } elseif ( $stat_srv == "esclave" ) { 366 system("ssh -l remote_adm $ipHostNumber sudo /usr/share/se3/scripts/create_share.sh\ 367 \"$share_name\" \"$share_comment\" \"$share_path\"\ 368 \"$REMOTE_ADDR\" \"$share_user_type\" \"$dir_rights_other\"\ 369 \"$dir_grp_owner\" \"$dir_grp_perm\" admin=\"$share_admin\"\ 370 parc=\"$parc_restrict\" user_list=\"$share_user_list\""); 371 } // Fin elseif ( $stat_srv == "esclave" ) 372 } // Fin if ( !$Verif_Result ) 373 // Fin elseif End_ph1 374 } 375 376 } // Fin if is_admin 377 include ("pdp.inc.php"); 378 ?>
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 |