From dfad5bf2598a1c5a6a65c7ae6ea18efd3ebbb5bd Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 17 May 2006 21:12:49 +0000 Subject: [PATCH] Fix: La fonction open_basedir tient compte des codes retours de is_dir non correctes dans le cas d'une config PHP qui utilise open_basedir. --- htdocs/lib/functions.inc.php | 40 +++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/htdocs/lib/functions.inc.php b/htdocs/lib/functions.inc.php index afbce94e52e..32abf308ed6 100644 --- a/htdocs/lib/functions.inc.php +++ b/htdocs/lib/functions.inc.php @@ -1797,22 +1797,34 @@ function create_exdir($dir) { if ($i > 0) $ccdir .= '/'.$cdir[$i]; else $ccdir = $cdir[$i]; - if (eregi("^.:$",$ccdir,$regs)) continue; // Si chemin Windows incomplet, on poursuit par rep suivant + if (eregi("^.:$",$ccdir,$regs)) continue; // Si chemin Windows incomplet, on poursuit par rep suivant - //print "${ccdir}
\n"; - if ($ccdir && ! is_dir($ccdir)) + // Attention, le is_dir() peut échouer bien que le rep existe. + // (ex selon config de open_basedir) + if ($ccdir) { - umask(0); - if (! @mkdir($ccdir, 0755)) - { - dolibarr_syslog("functions.inc.php::create_exdir Erreur: Le répertoire '$ccdir' n'existe pas et Dolibarr n'a pu le créer."); - $nberr++; - } - else - { - dolibarr_syslog("functions.inc.php::create_exdir Directory '$ccdir' created"); - $nbcreated++; - } + if (! is_dir($ccdir)) + { + dolibarr_syslog("functions.inc.php::create_exdir Directory '$ccdir' does not exists or is outside open_basedir PHP setting."); + + umask(0); + if (! @mkdir($ccdir, 0755)) + { + // Si le is_dir a renvoyé une fausse info, alors on passe ici. + dolibarr_syslog("functions.inc.php::create_exdir Error: Fails to create directory '$ccdir'."); + $nberr++; + } + else + { + dolibarr_syslog("functions.inc.php::create_exdir Directory '$ccdir' created"); + $nberr=0; // On remet à zéro car si on arrive ici, cela veut dire que les échecs précédents peuvent etre ignorés + $nbcreated++; + } + } + else + { + $nberr=0; // On remet à zéro car si on arrive ici, cela veut dire que les échecs précédents peuvent etre ignorés + } } } return ($nberr ? -$nberr : $nbcreated);