PageRenderTime 44ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/spip/ecrire/inc/acces.php

https://github.com/eyeswebcrea/espace-couture-sittler.fr
PHP | 262 lines | 187 code | 27 blank | 48 comment | 43 complexity | 46fd4e82a78cb795798aad184e3d2c2a MD5 | raw file
Possible License(s): LGPL-2.1, GPL-3.0
  1. <?php
  2. /***************************************************************************\
  3. * SPIP, Systeme de publication pour l'internet *
  4. * *
  5. * Copyright (c) 2001-2011 *
  6. * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
  7. * *
  8. * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
  9. * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
  10. \***************************************************************************/
  11. if (!defined('_ECRIRE_INC_VERSION')) return;
  12. // http://doc.spip.org/@creer_pass_aleatoire
  13. function creer_pass_aleatoire($longueur = 8, $sel = "") {
  14. $seed = (double) (microtime() + 1) * time();
  15. mt_srand($seed);
  16. srand($seed);
  17. $s = '';
  18. $pass = '';
  19. for ($i = 0; $i < $longueur; $i++) {
  20. if (!$s) {
  21. $s = mt_rand();
  22. if (!$s) $s = rand();
  23. $s = substr(md5(uniqid($s).$sel), 0, 16);
  24. }
  25. $r = unpack("Cr", pack("H2", $s.$s));
  26. $x = $r['r'] & 63;
  27. if ($x < 10) $x = chr($x + 48);
  28. else if ($x < 36) $x = chr($x + 55);
  29. else if ($x < 62) $x = chr($x + 61);
  30. else if ($x == 63) $x = '/';
  31. else $x = '.';
  32. $pass .= $x;
  33. $s = substr($s, 2);
  34. }
  35. $pass = preg_replace("@[./]@", "a", $pass);
  36. $pass = preg_replace("@[I1l]@", "L", $pass);
  37. $pass = preg_replace("@[0O]@", "o", $pass);
  38. return $pass;
  39. }
  40. //
  41. // Creer un identifiant aleatoire
  42. //
  43. // http://doc.spip.org/@creer_uniqid
  44. function creer_uniqid() {
  45. static $seeded;
  46. if (!$seeded) {
  47. $seed = (double) (microtime() + 1) * time();
  48. mt_srand($seed);
  49. srand($seed);
  50. $seeded = true;
  51. }
  52. $s = mt_rand();
  53. if (!$s) $s = rand();
  54. return uniqid($s, 1);
  55. }
  56. //
  57. // Renouvellement de l'alea utilise pour securiser les scripts dans action/
  58. //
  59. // http://doc.spip.org/@renouvelle_alea
  60. function renouvelle_alea() {
  61. if (!isset($GLOBALS['meta']['alea_ephemere'])){
  62. include_spip('base/abstract_sql');
  63. $GLOBALS['meta']['alea_ephemere'] = sql_getfetsel('valeur', 'spip_meta', "nom='alea_ephemere'");
  64. }
  65. ecrire_meta('alea_ephemere_ancien', @$GLOBALS['meta']['alea_ephemere'], 'non');
  66. $GLOBALS['meta']['alea_ephemere'] = md5(creer_uniqid());
  67. ecrire_meta('alea_ephemere', $GLOBALS['meta']['alea_ephemere'], 'non');
  68. ecrire_meta('alea_ephemere_date', time(), 'non');
  69. spip_log("renouvellement de l'alea_ephemere");
  70. }
  71. //
  72. // low-security : un ensemble de fonctions pour gerer de l'identification
  73. // faible via les URLs (suivi RSS, iCal...)
  74. //
  75. // http://doc.spip.org/@low_sec
  76. function low_sec($id_auteur) {
  77. // Pas d'id_auteur : low_sec
  78. if (!$id_auteur = intval($id_auteur)) {
  79. if (!$low_sec = $GLOBALS['meta']['low_sec']) {
  80. ecrire_meta('low_sec', $low_sec = creer_pass_aleatoire());
  81. }
  82. }
  83. else {
  84. $low_sec = sql_getfetsel("low_sec", "spip_auteurs", "id_auteur = $id_auteur");
  85. if (!$low_sec) {
  86. $low_sec = creer_pass_aleatoire();
  87. sql_updateq("spip_auteurs", array("low_sec" => $low_sec), "id_auteur = $id_auteur");
  88. }
  89. }
  90. return $low_sec;
  91. }
  92. // Inclure les arguments significatifs pour le hachage
  93. // cas particulier du statut pour compatibilite ancien rss/suivi_revisions
  94. function param_low_sec($op, $args=array(), $lang='', $mime='rss')
  95. {
  96. $a = $b = '';
  97. foreach ($args as $val => $var)
  98. if ($var) {
  99. if ($val<>'statut') $a .= ':' . $val.'-'.$var;
  100. $b .= $val.'='.$var . '&';
  101. }
  102. $a = substr($a,1);
  103. $id = intval(@$GLOBALS['connect_id_auteur']);
  104. return $b
  105. . "op="
  106. . $op
  107. . "&id="
  108. . $id
  109. . "&cle="
  110. . afficher_low_sec($id, "$mime $op $a")
  111. . (!$a ? '' : "&args=$a")
  112. . (!$lang ? '' : "&lang=$lang");
  113. }
  114. // http://doc.spip.org/@afficher_low_sec
  115. function afficher_low_sec ($id_auteur, $action='') {
  116. return substr(md5($action.low_sec($id_auteur)),0,8);
  117. }
  118. // http://doc.spip.org/@verifier_low_sec
  119. function verifier_low_sec ($id_auteur, $cle, $action='') {
  120. return ($cle == afficher_low_sec($id_auteur, $action));
  121. }
  122. // http://doc.spip.org/@effacer_low_sec
  123. function effacer_low_sec($id_auteur) {
  124. if (!$id_auteur = intval($id_auteur)) return; // jamais trop prudent ;)
  125. sql_updateq("spip_auteurs", array("low_sec" => ''), "id_auteur = $id_auteur");
  126. }
  127. // http://doc.spip.org/@initialiser_sel
  128. function initialiser_sel() {
  129. global $htsalt;
  130. if (CRYPT_MD5) $htsalt = '$1$'.creer_pass_aleatoire();
  131. else return "";
  132. }
  133. // Cette fonction ne sert qu'a la connexion en mode http_auth.non LDAP
  134. // Son role est de creer le fichier htpasswd
  135. // Voir le plugin "acces restreint"
  136. // http://doc.spip.org/@ecrire_acces
  137. function ecrire_acces() {
  138. $htaccess = _DIR_RESTREINT . _ACCESS_FILE_NAME;
  139. $htpasswd = _DIR_TMP . _AUTH_USER_FILE;
  140. // Cette variable de configuration peut etre posee par un plugin
  141. // par exemple acces_restreint ;
  142. // si .htaccess existe, outrepasser spip_meta
  143. if (($GLOBALS['meta']['creer_htpasswd'] != 'oui')
  144. AND !@file_exists($htaccess)) {
  145. spip_unlink($htpasswd);
  146. spip_unlink($htpasswd."-admin");
  147. return;
  148. }
  149. # remarque : ici on laisse passer les "nouveau" de maniere a leur permettre
  150. # de devenir redacteur le cas echeant (auth http)... a nettoyer
  151. // attention, il faut au prealable se connecter a la base (necessaire car utilise par install)
  152. if (spip_connect_ldap()) return;
  153. $p1 = ''; // login:htpass pour tous
  154. $p2 = ''; // login:htpass pour les admins
  155. $s = sql_select("login, htpass, statut", "spip_auteurs", sql_in("statut", array('1comite','0minirezo','nouveau')));
  156. while ($t = sql_fetch($s)) {
  157. if (strlen($t['login']) AND strlen($t['htpass'])) {
  158. $p1 .= $t['login'].':'.$t['htpass']."\n";
  159. if ($t['statut'] == '0minirezo')
  160. $p2 .= $t['login'].':'.$t['htpass']."\n";
  161. }
  162. }
  163. if ($p1) {
  164. ecrire_fichier($htpasswd, $p1);
  165. ecrire_fichier($htpasswd.'-admin', $p2);
  166. spip_log("Ecriture de $htpasswd et $htpasswd-admin");
  167. }
  168. }
  169. // http://doc.spip.org/@generer_htpass
  170. function generer_htpass($pass) {
  171. global $htsalt;
  172. if (function_exists('crypt'))
  173. return crypt($pass, $htsalt);
  174. }
  175. //
  176. // Installe ou verifie un .htaccess, y compris sa prise en compte par Apache
  177. //
  178. // http://doc.spip.org/@verifier_htaccess
  179. function verifier_htaccess($rep, $force=false) {
  180. $htaccess = rtrim($rep,"/") . "/" . _ACCESS_FILE_NAME;
  181. if (((@file_exists($htaccess)) OR defined('_TEST_DIRS')) AND !$force)
  182. return true;
  183. if ($_SERVER['SERVER_ADMIN'] == 'www@nexenservices.com')
  184. return nexen($rep);
  185. if ($ht = @fopen($htaccess, "w")) {
  186. fputs($ht, "deny from all\n");
  187. fclose($ht);
  188. @chmod($htaccess, _SPIP_CHMOD & 0666);
  189. $t = rtrim($rep,"/") . "/.ok";
  190. if ($ht = @fopen($t, "w")) {
  191. @fclose($ht);
  192. include_spip('inc/distant');
  193. $t = substr($t,strlen(_DIR_RACINE));
  194. $t = url_de_base() . $t;
  195. $ht = recuperer_lapage($t, false, 'HEAD', 0);
  196. // htaccess inoperant si on a recupere des entetes HTTP
  197. // (ignorer la reussite si connexion par fopen)
  198. $ht = !(isset($ht[0]) AND $ht[0]);
  199. }
  200. }
  201. spip_log("Creation de $htaccess " . ($ht ? " reussie" : " manquee"));
  202. return $ht;
  203. }
  204. function nexen($rep)
  205. {
  206. echo "<span style='color: #FF0000'>IMPORTANT : </span>";
  207. echo "Votre h&eacute;bergeur est Nexen Services.<br />";
  208. echo "La protection du r&eacute;pertoire <i>$rep/</i> doit se faire
  209. par l'interm&eacute;diaire de ";
  210. echo "<a href=\"http://www.nexenservices.com/Webmestres/index.php\"
  211. target=\"_blank\">l'espace webmestres</a>.";
  212. echo "Veuillez cr&eacute;er manuellement la protection pour
  213. ce r&eacute;pertoire (un couple login/mot de passe est
  214. n&eacute;cessaire).<br />";
  215. return false;
  216. }
  217. // http://doc.spip.org/@gerer_htaccess
  218. function gerer_htaccess() {
  219. // Cette variable de configuration peut etre posee par un plugin
  220. // par exemple acces_restreint
  221. $f = ($GLOBALS['meta']['creer_htaccess'] === 'oui');
  222. $dirs = sql_allfetsel('extension', 'spip_types_documents');
  223. $dirs[] = array('extension' => 'distant');
  224. foreach($dirs as $e) {
  225. if (is_dir($dir = _DIR_IMG . $e['extension'])) {
  226. if ($f)
  227. verifier_htaccess($dir);
  228. else spip_unlink($dir . '/' . _ACCESS_FILE_NAME);
  229. }
  230. }
  231. return $GLOBALS['meta']['creer_htaccess'];
  232. }
  233. initialiser_sel();
  234. ?>