Changeset 1173 in spip-zone


Ignore:
Timestamp:
Oct 26, 2005, 9:25:45 PM (14 years ago)
Author:
james@…
Message:

spip_gen: rattrapage du chmod

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _dev_/spip_gen/spip_loader.php3

    r723 r1173  
    132132        global $dir_base;
    133133        global $_fread;
     134        global $chmod;
    134135
    135136        $chaine = $_fread($f, 4);
     
    137138                return false;
    138139        }
     140        $chmod_dir = $chmod;
     141        $chmod_file = $chmod & ~0111;
    139142        while (($fichier = lire_chaine($f)) != '') {
    140143                $n = lire_long($f);
    141144                $chemin = "$dir_base$fichier";
    142145                if (!$n) {
    143                         @mkdir($chemin, 0777);
    144                         @chmod($chemin, 0777);
     146                        @mkdir($chemin, $chmod_dir);
     147                        @chmod($chemin, $chmod_dir);
    145148                }
    146149                else {
     
    150153                                fwrite($dest, $bin, $n);
    151154                                fclose($dest);
    152                                 @chmod($chemin, 0777);
     155                                @chmod($chemin, $chmod_file);
    153156                        }
    154157                }
     
    186189        $ok = unpacker_fichier($f);
    187190        $_fclose($f);
     191        @unlink($fichier);
    188192        if (!$ok) {
    189                 @unlink($fichier);
    190193                die ("<h4>Donn&eacute;es incorrectes. Veuillez r&eacute;essayer, ou utiliser l'installation manuelle.</h4>");
    191194        }
     
    218221
    219222//
    220 // Tester les droits d'acces
     223// Gestion des droits d'acces
    221224//
    222225
    223226$ok = false;
    224 @mkdir('test', 0777);
    225 @chmod('test', 0777);
    226 $f = @fopen('test/test.php3', 'w');
     227$self = basename($PHP_SELF);
     228$uid = @fileowner('.');
     229$uid2 = @fileowner($self);
     230$gid = @filegroup('.');
     231$gid2 = @filegroup($self);
     232$perms = @fileperms($self);
     233
     234// Comparer l'appartenance d'un fichier cree par PHP
     235// avec celle du script et du repertoire courant
     236@rmdir('test');
     237@unlink('test'); // effacer au cas ou
     238@touch('test');
     239if ($uid > 0 && $uid == $uid2 && @fileowner('test') == $uid)
     240        $chmod = 0700;
     241else if ($gid > 0 && $gid == $gid2 && @filegroup('test') == $gid)
     242        $chmod = 0770;
     243else
     244        $chmod = 0777;
     245// Appliquer de plus les droits d'acces du script
     246if ($perms > 0) {
     247        $perms = ($perms & 0777) | (($perms & 0444) >> 2);
     248        $chmod |= $perms;
     249}
     250@unlink('test');
     251
     252//echo "uids: $uid, $uid2<br>gids: $gid, $gid2<br>chmod: ".(($chmod & (7 << 9)) >> 9).(($chmod & (7 << 6)) >> 6).(($chmod & (7 << 3)) >> 3).($chmod & 7)."<br>";
     253
     254// Verifier que les valeurs sont correctes
     255
     256@mkdir('test', $chmod);
     257@chmod('test', $chmod);
     258$f = @fopen('test/test.php', 'w');
    227259if ($f) {
    228260        @fputs($f, '<?php $ok = true; ?>');
    229261        @fclose($f);
    230         @chmod('test/test.php3', 0777);
    231         include('test/test.php3');
    232 }
    233 @unlink('test/test.php3');
     262        @chmod('test/test.php', $chmod);
     263        include('test/test.php');
     264}
     265@unlink('test/test.php');
    234266@rmdir('test');
    235267
     
    312344        fclose($http);
    313345        // Passer a l'etape suivante (desarchivage)
    314         header("Location: spip_loader.php3?fichier=$fichier&hash=$hash&id_auteur=$id_auteur");
     346        header("Location: spip_loader.php3?fichier=$fichier&hash=$hash&id_auteur=$id_auteur&chmod=$chmod");
    315347        exit;
    316348}
Note: See TracChangeset for help on using the changeset viewer.