$low_sec), "id_auteur = $id_auteur");
}
}
return $low_sec;
}
// Inclure les arguments significatifs pour le hachage
// cas particulier du statut pour compatibilite ancien rss/suivi_revisions
function param_low_sec($op, $args=array(), $lang='', $mime='rss')
{
$a = $b = '';
foreach ($args as $val => $var)
if ($var) {
if ($val<>'statut') $a .= ':' . $val.'-'.$var;
$b .= $val.'='.$var . '&';
}
$a = substr($a,1);
$id = intval(@$GLOBALS['connect_id_auteur']);
return $b
. "op="
. $op
. "&id="
. $id
. "&cle="
. afficher_low_sec($id, "$mime $op $a")
. (!$a ? '' : "&args=$a")
. (!$lang ? '' : "&lang=$lang");
}
// http://doc.spip.org/@afficher_low_sec
function afficher_low_sec ($id_auteur, $action='') {
return substr(md5($action.low_sec($id_auteur)),0,8);
}
// http://doc.spip.org/@verifier_low_sec
function verifier_low_sec ($id_auteur, $cle, $action='') {
return ($cle == afficher_low_sec($id_auteur, $action));
}
// http://doc.spip.org/@effacer_low_sec
function effacer_low_sec($id_auteur) {
if (!$id_auteur = intval($id_auteur)) return; // jamais trop prudent ;)
sql_updateq("spip_auteurs", array("low_sec" => ''), "id_auteur = $id_auteur");
}
// http://doc.spip.org/@initialiser_sel
function initialiser_sel() {
global $htsalt;
if (CRYPT_MD5) $htsalt = '$1$'.creer_pass_aleatoire();
else return "";
}
// Cette fonction ne sert qu'a la connexion en mode http_auth.non LDAP
// Son role est de creer le fichier htpasswd
// Voir le plugin "acces restreint"
// http://doc.spip.org/@ecrire_acces
function ecrire_acces() {
$htaccess = _DIR_RESTREINT . _ACCESS_FILE_NAME;
$htpasswd = _DIR_TMP . _AUTH_USER_FILE;
// Cette variable de configuration peut etre posee par un plugin
// par exemple acces_restreint ;
// si .htaccess existe, outrepasser spip_meta
if (($GLOBALS['meta']['creer_htpasswd'] != 'oui')
AND !@file_exists($htaccess)) {
spip_unlink($htpasswd);
spip_unlink($htpasswd."-admin");
return;
}
# remarque : ici on laisse passer les "nouveau" de maniere a leur permettre
# de devenir redacteur le cas echeant (auth http)... a nettoyer
// attention, il faut au prealable se connecter a la base (necessaire car utilise par install)
if (spip_connect_ldap()) return;
$p1 = ''; // login:htpass pour tous
$p2 = ''; // login:htpass pour les admins
$s = sql_select("login, htpass, statut", "spip_auteurs", sql_in("statut", array('1comite','0minirezo','nouveau')));
while ($t = sql_fetch($s)) {
if (strlen($t['login']) AND strlen($t['htpass'])) {
$p1 .= $t['login'].':'.$t['htpass']."\n";
if ($t['statut'] == '0minirezo')
$p2 .= $t['login'].':'.$t['htpass']."\n";
}
}
if ($p1) {
ecrire_fichier($htpasswd, $p1);
ecrire_fichier($htpasswd.'-admin', $p2);
spip_log("Ecriture de $htpasswd et $htpasswd-admin");
}
}
// http://doc.spip.org/@generer_htpass
function generer_htpass($pass) {
global $htsalt;
if (function_exists('crypt'))
return crypt($pass, $htsalt);
}
//
// Installe ou verifie un .htaccess, y compris sa prise en compte par Apache
//
// http://doc.spip.org/@verifier_htaccess
function verifier_htaccess($rep, $force=false) {
$htaccess = rtrim($rep,"/") . "/" . _ACCESS_FILE_NAME;
if (((@file_exists($htaccess)) OR defined('_TEST_DIRS')) AND !$force)
return true;
if ($_SERVER['SERVER_ADMIN'] == 'www@nexenservices.com')
return nexen($rep);
if ($ht = @fopen($htaccess, "w")) {
fputs($ht, "deny from all\n");
fclose($ht);
@chmod($htaccess, _SPIP_CHMOD & 0666);
$t = rtrim($rep,"/") . "/.ok";
if ($ht = @fopen($t, "w")) {
@fclose($ht);
include_spip('inc/distant');
$t = substr($t,strlen(_DIR_RACINE));
$t = url_de_base() . $t;
$ht = recuperer_lapage($t, false, 'HEAD', 0);
// htaccess inoperant si on a recupere des entetes HTTP
// (ignorer la reussite si connexion par fopen)
$ht = !(isset($ht[0]) AND $ht[0]);
}
}
spip_log("Creation de $htaccess " . ($ht ? " reussie" : " manquee"));
return $ht;
}
function nexen($rep)
{
echo "IMPORTANT : ";
echo "Votre hébergeur est Nexen Services.
";
echo "La protection du répertoire $rep/ doit se faire
par l'intermédiaire de ";
echo "l'espace webmestres.";
echo "Veuillez créer manuellement la protection pour
ce répertoire (un couple login/mot de passe est
nécessaire).
";
return false;
}
// http://doc.spip.org/@gerer_htaccess
function gerer_htaccess() {
// Cette variable de configuration peut etre posee par un plugin
// par exemple acces_restreint
$f = ($GLOBALS['meta']['creer_htaccess'] === 'oui');
$dirs = sql_allfetsel('extension', 'spip_types_documents');
$dirs[] = array('extension' => 'distant');
foreach($dirs as $e) {
if (is_dir($dir = _DIR_IMG . $e['extension'])) {
if ($f)
verifier_htaccess($dir);
else spip_unlink($dir . '/' . _ACCESS_FILE_NAME);
}
}
return $GLOBALS['meta']['creer_htaccess'];
}
initialiser_sel();
?>