2016-05-22 10:22:38 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
define('__ROOT__', dirname(dirname(__FILE__)));
|
|
|
|
|
|
|
|
|
|
|
|
/* CHARGE LA CONFIGURATION DES DROITS
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
function loadConfig(){
|
|
|
|
|
|
|
|
$config = json_decode( file_get_contents(__ROOT__.'/doc/permissions.json'), true );
|
|
|
|
|
|
|
|
// Si erreur
|
|
|
|
if( is_null($config) )
|
|
|
|
return false;
|
|
|
|
|
|
|
|
return $config;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* DEFINIT LES DROITS DE MANIERE RECURSIVE
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
function chmodR($dirOrFile, $chmod=null, $chown=null){
|
|
|
|
|
|
|
|
/* [0] On vérifie que la ressource existe
|
|
|
|
=========================================================*/
|
|
|
|
if( !file_exists($dirOrFile) )
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
|
|
/* [1] Si c'est un fichier simple ou un dossier
|
|
|
|
=========================================================*/
|
|
|
|
echo "$dirOrFile, $chown, $chmod\n";
|
|
|
|
|
|
|
|
// On lui donne les droits
|
|
|
|
if( !is_null($chmod) )
|
|
|
|
chmod($dirOrFile, intval($chmod, 8) );
|
|
|
|
|
|
|
|
// Et un propriétaire
|
|
|
|
if( !is_null($chown) ){
|
|
|
|
// On decupde 'owner:group' en un tableau
|
|
|
|
$owners = explode(':', $chown);
|
|
|
|
|
|
|
|
// On définit le propriétaire
|
|
|
|
chown($dirOrFile, $owners[0]);
|
|
|
|
|
|
|
|
// On définit le groupe
|
|
|
|
chgrp($dirOrFile, $owners[1]);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* [2] Si c'est un dossier
|
|
|
|
=========================================================*/
|
|
|
|
if( is_dir($dirOrFile) ){
|
|
|
|
|
|
|
|
// On récupère son contenu
|
|
|
|
$content = scandir($dirOrFile);
|
|
|
|
|
|
|
|
// On supprime les valeurs inutiles et on met le chemin en absolu
|
|
|
|
foreach($content as $i=>$file){
|
|
|
|
// Si c'est . ou .., on passe au suivant
|
|
|
|
if( $file == '.' || $file == '..' ){
|
|
|
|
unset($content[$i]);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Sinon, on lance recursivement
|
2016-09-12 16:04:53 +00:00
|
|
|
chmodR( implode('/', array_merge(explode('/', $dirOrFile), [$file])), $chmod, $chown );
|
2016-05-22 10:22:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* APPLIQUE LES DROITS SUR UN DOSSIER EN FONCTION DE LA CONFIG
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
function applyPermissions($parent, $children, $permissions){
|
|
|
|
|
|
|
|
/* [0] Si une permission est définie, on l'applique
|
|
|
|
=========================================================*/
|
|
|
|
/* (0) Si la permission existe et est référencée */
|
|
|
|
if( isset($children['permissions']) && isset($permissions[$children['permissions']]) ){
|
|
|
|
// On récupère les permissions
|
|
|
|
$permission = $permissions[$children['permissions']];
|
|
|
|
|
|
|
|
|
|
|
|
/* (1) Valeur par défaut des propriétaires si n'est pas défini */
|
|
|
|
if( !isset($permission['chown']) )
|
|
|
|
$permission['chown'] = null;
|
|
|
|
|
|
|
|
/* (2) Valeur par défaut des droits si n'est pas défini */
|
|
|
|
if( !isset($permission['chmod']) )
|
|
|
|
$permission['chmod'] = null;
|
|
|
|
|
|
|
|
/* (3) Gestion du .htaccess, si défini et si un dossier */
|
|
|
|
if( isset($permission['.htaccess']) && is_dir($parent) ){
|
|
|
|
|
|
|
|
echo 'creating '."$parent/.htaccess\n";
|
|
|
|
$fht = fopen("$parent/.htaccess", 'w');
|
|
|
|
fwrite($fht, $permission['.htaccess']);
|
|
|
|
fclose($fht);
|
|
|
|
|
|
|
|
/* (4) On applique les permissions sur le .htaccess (par défaut depuis config) */
|
|
|
|
chmodR("$parent/.htaccess", $permissions['.htaccess']['chmod'], $permissions['.htaccess']['chown']);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* (5) On retire les permissions de la liste des enfants pour la suite */
|
|
|
|
unset($children['permissions']);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* [1] Pour chaque enfant, s'il y en a
|
|
|
|
=========================================================*/
|
|
|
|
/* (1) On lance récursivement sur tous les enfants */
|
|
|
|
if( is_array($children) )
|
|
|
|
foreach($children as $child=>$subChildren)
|
|
|
|
applyPermissions("$parent/$child", $subChildren, $permissions);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* [1] On charge la configuration
|
|
|
|
=========================================================*/
|
|
|
|
$config = loadConfig();
|
|
|
|
|
|
|
|
// Si erreur de configuration
|
|
|
|
if( is_null($config) ){
|
|
|
|
echo 'Config error';
|
|
|
|
exit();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* [2] Gestion de 'umask' si défini
|
|
|
|
=========================================================*/
|
|
|
|
chdir($config['root']);
|
|
|
|
|
|
|
|
if( isset($config['umask']) )
|
|
|
|
umask( decoct($config['umask']) );
|
|
|
|
|
|
|
|
|
|
|
|
/* [3] On traite toute l'arborescence
|
|
|
|
=========================================================*/
|
|
|
|
applyPermissions($config['root'], $config['files'], $config['permissions']);
|
|
|
|
|
|
|
|
?>
|