function formulaires_configurer_preferences_traiter_dist() { if ($couleur = _request('couleur')) { $GLOBALS['visiteur_session']['prefs']['couleur'] = $couleur; } if ($display = _request('display')) { $GLOBALS['visiteur_session']['prefs']['display'] = $display; } if ($display_navigation = _request('display_navigation')) { $GLOBALS['visiteur_session']['prefs']['display_navigation'] = $display_navigation; } if (!is_null($display_outils = _request('display_outils'))) { $GLOBALS['visiteur_session']['prefs']['display_outils'] = $display_outils; } if (intval($GLOBALS['visiteur_session']['id_auteur'])) { include_spip('action/editer_auteur'); $c = array('prefs' => serialize($GLOBALS['visiteur_session']['prefs'])); if (_request('imessage')) { $c['imessage'] = _request('imessage'); } auteur_modifier($GLOBALS['visiteur_session']['id_auteur'], $c); } if ($spip_ecran = _request('spip_ecran')) { // Poser un cookie, // car ce reglage depend plus du navigateur que de l'utilisateur $GLOBALS['spip_ecran'] = $spip_ecran; include_spip('inc/cookie'); spip_setcookie('spip_ecran', $_COOKIE['spip_ecran'] = $spip_ecran, time() + 365 * 24 * 3600); } return array('message_ok' => _T('config_info_enregistree'), 'editable' => true); }
function action_zengarden_activer_theme_dist() { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); if (strncmp('defaut:', $arg, 7) == 0) { $dir_theme = _DIR_RACINE . substr($arg, 7); $flux = pipeline('zengarden_activer_theme', array('args' => array('dir' => $dir_theme, 'action' => 'effacer'), 'data' => true)); if ($flux) { include_spip('inc/meta'); effacer_meta("zengarden_theme"); } } elseif (strncmp('apercu:', $arg, 7) == 0) { $theme = substr($arg, 7); $dir_theme = _DIR_RACINE . $theme; if (is_dir($dir_theme)) { $flux = pipeline('zengarden_activer_theme', array('args' => array('dir' => $dir_theme, 'action' => 'apercevoir'), 'data' => true)); if ($flux) { include_spip('inc/cookie'); spip_setcookie('spip_zengarden_theme', $theme); } } } elseif (strncmp('activation:', $arg, 11) == 0) { $theme = substr($arg, 11); $dir_theme = _DIR_RACINE . $theme; if (is_dir($dir_theme)) { $flux = pipeline('zengarden_activer_theme', array('args' => array('dir' => $dir_theme, 'action' => 'activer'), 'data' => true)); if ($flux) { include_spip('inc/meta'); ecrire_meta("zengarden_theme", $theme); } } } }
/** * Se deloger * Pour eviter les CSRF on passe par une etape de confirmation si pas de jeton, * avec un autosubmit js pour ne pas compliquer l'experience utilisateur * * http://doc.spip.org/@action_logout_dist * */ function action_logout_dist() { $logout =_request('logout'); $url = _request('url'); // seul le loge peut se deloger // (mais id_auteur peut valoir 0 apres une restauration avortee) if (isset($GLOBALS['visiteur_session']['id_auteur']) AND is_numeric($GLOBALS['visiteur_session']['id_auteur']) // des sessions anonymes avec id_auteur=0 existent, // mais elles n'ont pas de statut : verifier ca aussi AND isset($GLOBALS['visiteur_session']['statut'])) { // relancer si pas de jeton if (!action_logout_secu($logout, $url, _request('jeton'))) { return; // page submit retournee } elseif (isset($_COOKIE['spip_session'])) { // le logout explicite vaut destruction de toutes les sessions $session = charger_fonction('session', 'inc'); $session($GLOBALS['visiteur_session']['id_auteur']); spip_setcookie('spip_session', $_COOKIE['spip_session'], time()-3600); } include_spip('inc/auth'); auth_trace($GLOBALS['visiteur_session'],'0000-00-00 00:00:00'); } // Action terminee (ou non faite si pas les droits) on redirige. // Cas particulier, logout dans l'espace public $url = securiser_redirect_action($url); if ($logout == 'public' AND !$url) $url = url_de_base(); include_spip('inc/headers'); redirige_par_entete($url // contrer le cache navigateur (Safari3) ? parametre_url($url, 'var_hasard', uniqid(rand()), '&') : generer_url_public('login')); }
function action_logout_dist() { global $visiteur_session, $ignore_auth_http; $logout = _request('logout'); $url = securiser_redirect_action(_request('url')); // cas particulier, logout dans l'espace public if ($logout == 'public' and !$url) { $url = url_de_base(); } // seul le loge peut se deloger (mais id_auteur peut valoir 0 apres une restauration avortee) if (is_numeric($visiteur_session['id_auteur'])) { include_spip('inc/auth'); auth_trace($visiteur_session, '0000-00-00 00:00:00'); // le logout explicite vaut destruction de toutes les sessions if (isset($_COOKIE['spip_session'])) { $session = charger_fonction('session', 'inc'); $session($visiteur_session['id_auteur']); spip_setcookie('spip_session', $_COOKIE['spip_session'], time() - 3600); } // si authentification http, et que la personne est loge, // pour se deconnecter, il faut proposer un nouveau formulaire de connexion http if (isset($_SERVER['PHP_AUTH_USER']) and !$ignore_auth_http and $GLOBALS['auth_can_disconnect']) { ask_php_auth(_T('login_deconnexion_ok'), _T('login_verifiez_navigateur'), _T('login_retour_public'), "redirect=" . _DIR_RESTREINT_ABS, _T('login_test_navigateur'), true); } } // Rediriger en contrant le cache navigateur (Safari3) include_spip('inc/headers'); redirige_par_entete($url ? parametre_url($url, 'var_hasard', uniqid(rand()), '&') : generer_url_public('login')); }
function action_converser_post($lang, $ecrire=false) { if ($lang) { include_spip('inc/lang'); if (changer_langue($lang)) { spip_setcookie('spip_lang', $_COOKIE['spip_lang'] = $lang, time() + 365 * 24 * 3600); if ($ecrire) spip_setcookie('spip_lang_ecrire', $_COOKIE['spip_lang_ecrire'] = $lang, time() + 365 * 24 * 3600); } } }
function exec_test_ajax_dist() { switch (_request('js')) { // on est appele par <noscript> case -1: spip_setcookie('spip_accepte_ajax', -1); include_spip('inc/headers'); redirige_par_entete(chemin_image('puce-orange-anim.gif')); break; // ou par ajax case 1: default: spip_setcookie('spip_accepte_ajax', 1); break; } }
/** * Se deloger * Pour eviter les CSRF on passe par une etape de confirmation si pas de jeton fourni * avec un autosubmit js pour ne pas compliquer l'experience utilisateur * * Déconnecte l'utilisateur en cours et le redirige sur l'URL indiquée par * l'argument de l'action sécurisée, et sinon sur la page d'accueil * de l'espace public. * */ function action_logout_dist() { $logout = _request('logout'); $url = securiser_redirect_action(_request('url')); // cas particulier, logout dans l'espace public if ($logout == 'public' and !$url) { $url = url_de_base(); } // seul le loge peut se deloger (mais id_auteur peut valoir 0 apres une restauration avortee) if (isset($GLOBALS['visiteur_session']['id_auteur']) and is_numeric($GLOBALS['visiteur_session']['id_auteur']) and isset($GLOBALS['visiteur_session']['statut'])) { // il faut un jeton pour fermer la session (eviter les CSRF) if (!($jeton = _request('jeton')) or !verifier_jeton_logout($jeton, $GLOBALS['visiteur_session'])) { $jeton = generer_jeton_logout($GLOBALS['visiteur_session']); $action = generer_url_action("logout", "jeton={$jeton}"); $action = parametre_url($action, 'logout', _request('logout')); $action = parametre_url($action, 'url', _request('url')); include_spip("inc/minipres"); include_spip("inc/filtres"); $texte = bouton_action(_T('spip:icone_deconnecter'), $action); $texte = "<div class='boutons'>{$texte}</div>"; $texte .= '<script type="text/javascript">document.write("<style>body{visibility:hidden;}</style>");window.document.forms[0].submit();</script>'; $res = minipres(_T('spip:icone_deconnecter'), $texte, '', true); echo $res; return; } include_spip('inc/auth'); auth_trace($GLOBALS['visiteur_session'], '0000-00-00 00:00:00'); // le logout explicite vaut destruction de toutes les sessions if (isset($_COOKIE['spip_session'])) { $session = charger_fonction('session', 'inc'); $session($GLOBALS['visiteur_session']['id_auteur']); spip_setcookie('spip_session', $_COOKIE['spip_session'], time() - 3600); } // si authentification http, et que la personne est loge, // pour se deconnecter, il faut proposer un nouveau formulaire de connexion http if (isset($_SERVER['PHP_AUTH_USER']) and !$GLOBALS['ignore_auth_http'] and $GLOBALS['auth_can_disconnect']) { ask_php_auth(_T('login_deconnexion_ok'), _T('login_verifiez_navigateur'), _T('login_retour_public'), "redirect=" . _DIR_RESTREINT_ABS, _T('login_test_navigateur'), true); } } // Rediriger en contrant le cache navigateur (Safari3) include_spip('inc/headers'); redirige_par_entete($url ? parametre_url($url, 'var_hasard', uniqid(rand()), '&') : generer_url_public('login')); }
function action_preferer_dist() { // // Preferences de presentation de l'espace prive // if ($_GET['arg'] !== 'display:4') { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); } else { $arg = $_GET['arg']; } if (!preg_match(",^(.+):(.*)\$,", $arg, $r)) { spip_log("action_preferer_dist: {$arg} pas compris"); } else { $prefs_mod = false; list(, $op, $val) = $r; if ($op == 'couleur') { $GLOBALS['visiteur_session']['prefs']['couleur'] = $val; $prefs_mod = true; } elseif ($op == 'display') { $GLOBALS['visiteur_session']['prefs']['display'] = $val; $prefs_mod = true; } elseif ($op == 'display_outils') { $GLOBALS['visiteur_session']['prefs']['display_outils'] = $val; $prefs_mod = true; } if ($prefs_mod and intval($GLOBALS['visiteur_session']['id_auteur'])) { sql_updateq('spip_auteurs', array('prefs' => serialize($GLOBALS['visiteur_session']['prefs'])), "id_auteur=" . intval($GLOBALS['visiteur_session']['id_auteur'])); } if ($op == 'spip_ecran') { // Poser un cookie, // car ce reglage depend plus du navigateur que de l'utilisateur $GLOBALS['spip_ecran'] = $val; include_spip('inc/cookie'); spip_setcookie('spip_ecran', $val, time() + 365 * 24 * 3600); } // Si modif des couleurs en ajax, redirect inutile on a change de CSS if ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') { exit; } } }
function balise_LANGUE_PREFEREE_LIEN_EFFACE_COOKIE_dyn($texte = '') { if ($texte == '') { $texte = _T('languepreferee:efface_cookie'); } include_spip('inc/meta'); $lien = ''; if (isset($_COOKIE['spip_langue_preferee']) && $_COOKIE['spip_langue_preferee'] != '') { if (isset($_GET['var_langue_preferee_efface_cookie'])) { include_spip('inc/cookie'); spip_setcookie('spip_langue_preferee', '', time() - 3600*24*10, chemin_cookie()); } else { $url = preg_replace("/([?&])var_langue_preferee_efface_cookie=[^&]+(&)?/", "$1", self()); $url .= (strpos($url, '?') > 0 ? '&' : '?').'var_langue_preferee_efface_cookie=oui'; $lien = '<a href="'.$url.'">'.$texte.'</a>'; } } return $lien; }
function formulaires_login_verifier_dist($cible = "", $login = "", $prive = null) { $session_login = _request('var_login'); $session_password = _request('password'); $session_remember = _request('session_remember'); if (!$session_login) { # pas de login saisi ! return array('var_login' => _T('info_obligatoire')); } // appeler auth_identifier_login qui va : // - renvoyer un string si echec (message d'erreur) // - un array decrivant l'auteur identifie si possible // - rediriger vers un SSO qui renverra in fine sur action/auth qui finira l'authentification include_spip('inc/auth'); $auteur = auth_identifier_login($session_login, $session_password); // on arrive ici si on ne s'est pas identifie avec un SSO if (!is_array($auteur)) { $erreurs = array(); if (is_string($auteur)) { $erreurs['var_login'] = $auteur; } include_spip('inc/cookie'); spip_setcookie("spip_admin", "", time() - 3600); if (strlen($session_password)) { $erreurs['password'] = _T('login_erreur_pass'); } else { $erreurs['password'] = '******'; } return $erreurs; } // on a ete authentifie, construire la session // en gerant la duree demandee pour son cookie if ($session_remember !== NULL) { $auteur['cookie'] = $session_remember; } auth_loger($auteur); return is_null($prive) ? is_url_prive($cible) : $prive ? login_autoriser() : array(); }
function balise_LANGUE_PREFEREE_SECTEUR_REDIRECTION_dyn($liste_rub_exclues="") { include_spip('inc/meta'); // Recuperation des langues des secteurs $langues_secteurs = array(); include_spip('base/abstract_sql'); $query = 'SELECT DISTINCT(lang) FROM spip_rubriques WHERE id_parent=0 AND statut="publie" GROUP BY lang'; if ($res = sql_query($query)) { // was spip_query($query)) { while($row = sql_fetch($res)) { // was spip_fetch_array $langues_secteurs[] = $row['lang']; } } // Détection de la langue preferee if (isset($_GET['lang']) && in_array($_GET['lang'], $langues_secteurs)) { // Soit passee dans l'url, auquel cas c'est un choix qu'on conserve pour la suite $langue_preferee = $_GET['lang']; include_spip('inc/cookie'); // On pose un cookie d'un an de duree de vie spip_setcookie('spip_langue_preferee', $langue_preferee, time() + 3660*24*365, chemin_cookie()); } elseif(isset($_COOKIE['spip_lang']) && in_array($_COOKIE['spip_lang'], $langues_secteurs)){ //Soit un cookie lang est présent $langue_preferee = $_COOKIE['spip_lang']; include_spip('inc/cookie'); // On pose un cookie d'un an de duree de vie spip_setcookie('spip_langue_preferee', $langue_preferee, time() + 3660*24*365, chemin_cookie()); }elseif (isset($_COOKIE['spip_langue_preferee']) && in_array($_COOKIE['spip_langue_preferee'], $langues_secteurs)) { // Soit deja enregistree dans un cookie $langue_preferee = $_COOKIE['spip_langue_preferee']; } else { // Soit indeterminee $langues_navigateur = getenv('HTTP_ACCEPT_LANGUAGE'); // On supprime les taux de pertinence des langues acceptees $langues_navigateur = preg_replace("/;q=[.0-9]+(,)?/", "$1", $langues_navigateur); $langues_navigateur = explode(',', $langues_navigateur); // Quelles sont les langues acceptees disponibles dans les secteurs $langues_possibles = array_intersect($langues_navigateur, $langues_secteurs); if (count($langues_possibles)) { list(, $langue_preferee) = each($langues_possibles); } else { // fr-ca -> fr $langues_navigateur_reduites = array(); foreach($langues_navigateur as $langue) { $langue_reduite = substr($langue, 0, 2); if (!in_array($langue_reduite, $langues_navigateur_reduites)) { $langues_navigateur_reduites[] = $langue_reduite; } } // Quelles sont les langues acceptees reduites disponibles dans les secteurs $langues_reduites_possibles = array_intersect($langues_navigateur_reduites, $langues_secteurs); if (count($langues_reduites_possibles)) { list(, $langue_preferee) = each($langues_reduites_possibles); } elseif (in_array(lire_meta('langue_site'), $langues_secteurs)) { // Quelle est alors la langue par defaut du site $langue_preferee = lire_meta('langue_site'); } else { // Tant pis, on prend le premier secteur qui vient... list(, $langue_preferee) = each($langues_secteurs); } } } // On recupere l'id du premier secteur trouve correspondant a la langue preferee (tant pis s'il y en a plusieurs) if (!empty($liste_rub_exclues)) { $query='SELECT id_rubrique FROM spip_rubriques WHERE id_parent=0 AND lang='._q($langue_preferee).' AND id_rubrique NOT IN ('.$liste_rub_exclues.') LIMIT 0,1'; } else { $query = 'SELECT id_rubrique FROM spip_rubriques WHERE id_parent=0 AND lang='._q($langue_preferee).' LIMIT 0,1'; } $res = sql_query($query) ; // was spip_query($query); if ($row = sql_fetch($res)) { // was spip_fetch_array $id_rubrique = $row['id_rubrique']; if ( $GLOBALS['spip_version_code']<1.93) { // spip 1.9.x if (!function_exists('generer_url_rubrique')) { include_spip('urls/'.$GLOBALS['type_urls']); } $url_rubrique = generer_url_rubrique($id_rubrique); } else { // spip 2.x if (!function_exists('generer_url_entite')) { include_spip('inc/utils'); } $url_rubrique = generer_url_entite($id_rubrique,'rubrique'); } spip_log('Redirection vers '.$url_rubrique); header('Location: '.$url_rubrique); exit; } }
* */ if (!defined("_ECRIRE_INC_VERSION")) { return; } // definition des balises et filtres boites include_spip('inc/filtres_boites'); // verifier une seule fois que l'on peut utiliser APL si demande if (defined('_Z_AJAX_PARALLEL_LOAD')) { // les pages APL contiennent un <noscript> // avec une meta refresh sur self()+var_zapl=non // ainsi, les clients sans javascript rechargent la page, // se voient poser un cookie, et voient ensuite le site sans APL if (_request('var_zapl') == 'non') { include_spip('inc/cookie'); spip_setcookie('no_zapl', $_COOKIE['no_zapl'] = 'no_zapl'); } if (!isset($_COOKIE['no_zapl']) and !_IS_BOT and !_request('var_zajax') and _request('var_mode') !== "debug" and $_SERVER['REQUEST_METHOD'] == 'GET') { define('_Z_AJAX_PARALLEL_LOAD_OK', true); $GLOBALS['marqueur'] = isset($GLOBALS['marqueur']) ? $GLOBALS['marqueur'] . ":Zapl" : ":Zapl"; } } /** * Inutilise mais permet le chargement de ce fichier avant le decodage des urls * et l'utilisation de _DEFINIR_CONTEXTE_TYPE * * @param <type> $flux * * @return <type> */ function zcore_declarer_url_objets($flux)
/** * Ajoute une session pour l'auteur décrit par un tableau issu d'un SELECT-SQL * * @param array $auteur * Description de la session de l'auteur. Peut contenir (par exemple) * les clés : id_auteur, nom, login, email, statut, lang, ... * @return bool|string */ function ajouter_session($auteur) { // Si le client a deja une session valide pour son id_auteur // on conserve le meme fichier // Attention un visiteur peut avoir une session et un id=0, // => ne pas melanger les sessions des differents visiteurs $id_auteur = isset($auteur['id_auteur']) ? intval($auteur['id_auteur']) : 0; // Si ce n'est pas un inscrit (les inscrits ont toujours des choses en session) // on va vérifier s'il y a vraiment des choses à écrire if (!$id_auteur) { // On supprime les données de base pour voir le contenu réel de la session $auteur_verif = $auteur; if (isset($auteur_verif['id_auteur'])) { unset($auteur_verif['id_auteur']); } if (isset($auteur_verif['hash_env'])) { unset($auteur_verif['hash_env']); } if (isset($auteur_verif['ip_change'])) { unset($auteur_verif['ip_change']); } if (isset($auteur_verif['date_session'])) { unset($auteur_verif['date_session']); } // Les variables vraiment nulle ne sont pas à prendre en compte non plus foreach ($auteur_verif as $variable => $valeur) { if ($valeur === null) { unset($auteur_verif[$variable]); } } // Si après ça la session est vide alors on supprime l'éventuel fichier et on arrête là if (!$auteur_verif) { if (isset($_COOKIE['spip_session']) and isset($_SESSION[$_COOKIE['spip_session']])) { unset($_SESSION[$_COOKIE['spip_session']]); } if (isset($_COOKIE['spip_session'])) { unset($_COOKIE['spip_session']); } return false; } } if (!isset($_COOKIE['spip_session']) or !preg_match(',^' . $id_auteur . '_,', $_COOKIE['spip_session'])) { $_COOKIE['spip_session'] = $id_auteur . '_' . md5(uniqid(rand(), true)); } // Maintenant on sait qu'on a des choses à écrire // On s'assure d'avoir au moins ces valeurs $auteur['id_auteur'] = $id_auteur; if (!isset($auteur['hash_env'])) { $auteur['hash_env'] = hash_env(); } if (!isset($auteur['ip_change'])) { $auteur['ip_change'] = false; } if (!isset($auteur['date_session'])) { $auteur['date_session'] = time(); } if (isset($auteur['prefs']) and is_string($auteur['prefs'])) { $auteur['prefs'] = unserialize($auteur['prefs']); } // les sessions anonymes sont stockees dans $_SESSION if (!$id_auteur) { if (!isset($_SESSION[$_COOKIE['spip_session']])) { session_start(); } $_SESSION[$_COOKIE['spip_session']] = preparer_ecriture_session($auteur); } else { $fichier_session = fichier_session('alea_ephemere'); if (!ecrire_fichier_session($fichier_session, $auteur)) { spip_log('Echec ecriture fichier session ' . $fichier_session, "session" . _LOG_HS); include_spip('inc/minipres'); echo minipres(); exit; } } // poser le cookie de session SPIP include_spip('inc/cookie'); $duree = _RENOUVELLE_ALEA * (!isset($auteur['cookie']) ? 2 : (is_numeric($auteur['cookie']) ? $auteur['cookie'] : 20)); spip_setcookie('spip_session', $_COOKIE['spip_session'], time() + $duree); spip_log("ajoute session {$fichier_session} cookie {$duree}", "session"); # on en profite pour purger les vieilles sessions anonymes abandonnees # supprimer_sessions(0, true, false); return $_COOKIE['spip_session']; }
/** * Complements d'initialisation non critiques pouvant etre realises * par les plugins * */ function spip_initialisation_suite() { static $too_late = 0; if ($too_late++) return; // taille mini des login if (!defined('_LOGIN_TROP_COURT')) define('_LOGIN_TROP_COURT', 4); // la taille maxi des logos (0 : pas de limite) if (!defined('_LOGO_MAX_SIZE')) define('_LOGO_MAX_SIZE', 0); # poids en ko if (!defined('_LOGO_MAX_WIDTH')) define('_LOGO_MAX_WIDTH', 0); # largeur en pixels if (!defined('_LOGO_MAX_HEIGHT')) define('_LOGO_MAX_HEIGHT', 0); # hauteur en pixels if (!defined('_DOC_MAX_SIZE')) define('_DOC_MAX_SIZE', 0); # poids en ko if (!defined('_IMG_MAX_SIZE')) define('_IMG_MAX_SIZE', 0); # poids en ko if (!defined('_IMG_MAX_WIDTH')) define('_IMG_MAX_WIDTH', 0); # largeur en pixels if (!defined('_IMG_MAX_HEIGHT')) define('_IMG_MAX_HEIGHT', 0); # hauteur en pixels if (!defined('_COPIE_LOCALE_MAX_SIZE')) define('_COPIE_LOCALE_MAX_SIZE',16777216); // poids en octet // qq chaines standard if (!defined('_ACCESS_FILE_NAME')) define('_ACCESS_FILE_NAME', '.htaccess'); if (!defined('_AUTH_USER_FILE')) define('_AUTH_USER_FILE', '.htpasswd'); if (!defined('_SPIP_DUMP')) define('_SPIP_DUMP', 'dump@nom_site@@stamp@.xml'); if (!defined('_CACHE_RUBRIQUES')) define('_CACHE_RUBRIQUES', _DIR_TMP.'menu-rubriques-cache.txt'); if (!defined('_CACHE_RUBRIQUES_MAX')) define('_CACHE_RUBRIQUES_MAX', 500); if (!defined('_EXTENSION_SQUELETTES')) define('_EXTENSION_SQUELETTES', 'html'); if (!defined('_DOCTYPE_ECRIRE')) define('_DOCTYPE_ECRIRE', // "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>\n"); //"<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>\n"); "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>\n"); // "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1 //EN' 'http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd'>\n"); if (!defined('_DOCTYPE_AIDE')) define('_DOCTYPE_AIDE', "<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Frameset//EN' 'http://www.w3.org/TR/1999/REC-html401-19991224/frameset.dtd'>"); // L'adresse de base du site ; on peut mettre '' si la racine est geree par // le script de l'espace public, alias index.php if (!defined('_SPIP_SCRIPT')) define('_SPIP_SCRIPT', 'spip.php'); // argument page, personalisable en cas de conflit avec un autre script if (!defined('_SPIP_PAGE')) define('_SPIP_PAGE', 'page'); // le script de l'espace prive // Mettre a "index.php" si DirectoryIndex ne le fait pas ou pb connexes: // les anciens IIS n'acceptent pas les POST sur ecrire/ (#419) // meme pb sur thttpd cf. http://forum.spip.org/fr_184153.html if (!defined('_SPIP_ECRIRE_SCRIPT')) define('_SPIP_ECRIRE_SCRIPT', // true ? #decommenter ici et commenter la preg_match(',IIS|thttpd,',$_SERVER['SERVER_SOFTWARE']) ? 'index.php' : ''); // Gestion AJAX sauf pour le mode oo (et en espace prive) if (isset($GLOBALS['visiteur_session']['prefs'])AND !_DIR_RESTREINT) { $x = $GLOBALS['visiteur_session']['prefs']; if (!is_array($x)) $x = unserialize($x); // prive.php l'a fait if ($x['display'] == 4) { define('_SPIP_AJAX', -1); if (isset($_COOKIE['spip_accepte_ajax'])) spip_setcookie('spip_accepte_ajax', -1, 0); } } if (!defined('_SPIP_AJAX')) define('_SPIP_AJAX', ((!isset($_COOKIE['spip_accepte_ajax'])) ? 1 : (($_COOKIE['spip_accepte_ajax'] != -1) ? 1 : 0))); // La requete est-elle en ajax ? define('_AJAX', (isset($_SERVER['HTTP_X_REQUESTED_WITH']) # ajax jQuery OR @$_REQUEST['var_ajax_redir'] # redirection 302 apres ajax jQuery OR @$_REQUEST['var_ajaxcharset'] # compat ascendante pour plugins ) AND !@$_REQUEST['var_noajax'] # horrible exception, car c'est pas parce que la requete est ajax jquery qu'il faut tuer tous les formulaires ajax qu'elle contient ); # nombre de pixels maxi pour calcul de la vignette avec gd # au dela de 5500000 on considere que php n'est pas limite en memoire pour cette operation # les configurations limitees en memoire ont un seuil plutot vers 1MPixel if (!defined('_IMG_GD_MAX_PIXELS')) define('_IMG_GD_MAX_PIXELS', (isset($GLOBALS['meta']['max_taille_vignettes'])&&$GLOBALS['meta']['max_taille_vignettes']<5500000)?$GLOBALS['meta']['max_taille_vignettes']:0); if (!defined('_IMG_GD_QUALITE')) define('_IMG_GD_QUALITE', 85); if (!defined('_MEMORY_LIMIT_MIN')) define('_MEMORY_LIMIT_MIN', 16); // si on est dans l'espace prive et si le besoin est superieur a 8Mo (qui est vraiment le standard) // on verifie que la memoire est suffisante pour le compactage css+js pour eviter la page blanche // il y aura d'autres problemes et l'utilisateur n'ira pas tres loin, mais ce sera plus comprehensible qu'une page blanche if (test_espace_prive() AND _MEMORY_LIMIT_MIN>8){ if ($memory = trim(ini_get('memory_limit'))){ $unit = strtolower(substr($memory,strlen($memory/1),1)); switch($unit) { // Le modifieur 'G' est disponible depuis PHP 5.1.0 case 'g': $memory *= 1024; case 'm': $memory *= 1024; case 'k': $memory *= 1024; } if ($memory<_MEMORY_LIMIT_MIN*1024*1024){ ini_set('memory_limit',$m=_MEMORY_LIMIT_MIN.'M'); if (trim(ini_get('memory_limit'))!=$m){ define('_INTERDIRE_COMPACTE_HEAD_ECRIRE',true); // evite une page blanche car on ne saura pas calculer la css dans ce hit } } } else define('_INTERDIRE_COMPACTE_HEAD_ECRIRE',true); // evite une page blanche car on ne saura pas calculer la css dans ce hit } // Protocoles a normaliser dans les chaines de langues if (!defined('_PROTOCOLES_STD')) define('_PROTOCOLES_STD', 'http|https|ftp|mailto|webcal'); init_var_mode(); }
fich_debug("DBG >> $cookie_session\n"); // On poste le cookie de session spip_setcookie('spip_session', $cookie_session); // On loge l'authentification spip_log("login de $login depuis LCS"); } } elseif ( $action=="logout" ) { close_session($idpers); @define('_DIR_RESTREINT_ABS', 'ecrire/'); include_once _DIR_RESTREINT_ABS.'inc_version.php'; include_spip('inc/cookie'); include_once _DIR_RESTREINT_ABS.'auth/ldap.php'; include_spip('inc/session'); $result = spip_query("SELECT id_auteur FROM spip_auteurs WHERE login='******' AND source='ldap'"); $row_auteur = spip_fetch_array($result); ### DBG fich_debug("DBG >> id auteur : ".$row_auteur['id_auteur']."\n"); supprimer_sessions($row_auteur['id_auteur']); spip_setcookie('spip_session', '', 0); } else fich_debug("DBG >> No login No logout\n"); #On redirige vesr la page d'accueil dans tous les cas echo "<script language=\"JavaScript\" type=\"text/javascript\">\n"; echo "<!--\n"; echo "top.location.href = '../lcs/index.php?url_redirect=accueil.php';\n"; echo "//-->\n"; echo "</script>\n"; ?>
function action_cookie_dist($set_cookie_admin = null, $change_session = null) { $redirect_echec = $redirect = null; $test_echec_cookie = null; $url = ""; if (is_null($set_cookie_admin)) { $set_cookie_admin = _request('cookie_admin'); $change_session = _request('change_session'); $test_echec_cookie = _request('test_echec_cookie'); // La cible de notre operation de connexion $url = securiser_redirect_action(_request('url')); $redirect = $url ? $url : generer_url_ecrire('accueil'); $redirect_echec = _request('url_echec'); if (!isset($redirect_echec)) { if (strpos($redirect, _DIR_RESTREINT_ABS) !== false) { $redirect_echec = generer_url_public('login', '', true); } else { $redirect_echec = $redirect; } } } // rejoue le cookie pour renouveler spip_session if ($change_session == 'oui') { $session = charger_fonction('session', 'inc'); $session(true); spip_log("statut 204 pour " . $_SERVER['REQUEST_URI']); http_status(204); // No Content return; } // tentative de connexion en auth_http if (_request('essai_auth_http') and !$GLOBALS['ignore_auth_http']) { include_spip('inc/auth'); if (@$_SERVER['PHP_AUTH_USER'] and @$_SERVER['PHP_AUTH_PW'] and $auteur = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])) { auth_loger($auteur); redirige_par_entete(parametre_url($redirect, 't', time(), '&')); } else { ask_php_auth(_T('info_connexion_refusee'), _T('login_login_pass_incorrect'), _T('login_retour_site'), "url=" . rawurlencode($redirect), _T('login_nouvelle_tentative'), strpos($url, _DIR_RESTREINT_ABS) !== false); } } else { // en cas de login sur bonjour=oui, on tente de poser un cookie // puis de passer au login qui diagnostiquera l'echec de cookie // le cas echeant. if ($test_echec_cookie == 'oui') { spip_setcookie('spip_session', 'test_echec_cookie'); if ($redirect) { $redirect = parametre_url(parametre_url($redirect_echec, 'var_echec_cookie', 'oui', '&'), 'url', rawurlencode($redirect), '&'); } } else { $cook = isset($_COOKIE['spip_admin']) ? $_COOKIE['spip_admin'] : ''; // Suppression cookie d'admin ? if ($set_cookie_admin == "non") { if ($cook) { spip_setcookie('spip_admin', $cook, time() - 3600 * 24); } } else { if ($set_cookie_admin) { spip_setcookie('spip_admin', $set_cookie_admin, time() + 14 * 24 * 3600); } } } } // Redirection finale if ($redirect) { redirige_par_entete($redirect, true); } }
function ajouter_session($auteur) { // Si le client a deja une session valide pour son id_auteur // on conserve le meme fichier // Attention un visiteur peut avoir une session et un id=0, // => ne pas melanger les sessions des differents visiteurs $id_auteur = intval($auteur['id_auteur']); if (!isset($_COOKIE['spip_session']) OR !preg_match(',^'.$id_auteur.'_,', $_COOKIE['spip_session'])) $_COOKIE['spip_session'] = $id_auteur.'_'.md5(uniqid(rand(),true)); $fichier_session = fichier_session('alea_ephemere'); // Si ce n'est pas un inscrit (les inscrits ont toujours des choses en session) // on verifie qu'il y a vraiment des choses if (!$id_auteur){ // On supprime les basiques pour voir le contenu effectif $auteur_verif = $auteur; if (isset($auteur_verif['id_auteur'])) unset($auteur_verif['id_auteur']); if (isset($auteur_verif['hash_env'])) unset($auteur_verif['hash_env']); if (isset($auteur_verif['ip_change'])) unset($auteur_verif['ip_change']); // Les variables vraiment nulle ne sont pas à prendre en compte non plus foreach($auteur_verif as $variable=>$valeur){ if ($valeur === null){ unset($auteur_verif[$variable]); } } // Si c'est vide alors on supprime et on ne fait rien if (!$auteur_verif){ if (@file_exists($fichier_session)) spip_unlink($fichier_session); return false; } } // Maintenant on sait qu'il faut memoriser. // On s'assure d'avoir au moins ces valeurs $auteur['id_auteur'] = $id_auteur; if (!isset($auteur['hash_env'])) $auteur['hash_env'] = hash_env(); if (!isset($auteur['ip_change'])) $auteur['ip_change'] = false; if (!ecrire_fichier_session($fichier_session, $auteur)) { include_spip('inc/minipres'); echo minipres(); exit; } else { include_spip('inc/cookie'); $duree = _RENOUVELLE_ALEA * (!isset($auteur['cookie']) ? 2 : (is_numeric($auteur['cookie']) ? $auteur['cookie'] : 20)); spip_setcookie( 'spip_session', $_COOKIE['spip_session'], time() + $duree ); spip_log("ajoute session $fichier_session cookie $duree"); // purger au passage les vieux fichiers de session supprimer_sessions(-1); return $_COOKIE['spip_session']; } }
/** * Loger un auteur suite a son identification * * @param array $auteur */ function auth_loger($auteur, $refuse_cookie_admin=false){ if (!is_array($auteur) OR !count($auteur)) return false; $session = charger_fonction('session', 'inc'); $session($auteur); $p = ($auteur['prefs']) ? unserialize($auteur['prefs']) : array(); $p['cnx'] = ($auteur['cookie'] == 'oui') ? 'perma' : ''; $p = array('prefs' => serialize($p)); sql_updateq('spip_auteurs', $p, "id_auteur=" . $auteur['id_auteur']); if ($auteur['statut'] == 'nouveau') { $session(); // charger la session car on va la modifier $auteur['statut'] = acces_statut($auteur['id_auteur'], $auteur['statut'], $auteur['bio']); } // Si on est admin, poser le cookie de correspondance include_spip('inc/cookie'); if (!$refuse_cookie_admin AND $auteur['statut'] == '0minirezo') { spip_setcookie('spip_admin', '@'.$auteur['login'], time() + 7 * 24 * 3600); } // sinon le supprimer ... else { spip_setcookie('spip_admin', '',1); } // bloquer ici le visiteur qui tente d'abuser de ses droits verifier_visiteur(); return true; }
<?php /* * Paiement Bancaire * module de paiement bancaire multi prestataires * stockage des transactions * * Auteurs : * Cedric Morin, Nursit.com * (c) 2012 - Distribue sous licence GNU/GPL * */ if (!defined('_ECRIRE_INC_VERSION')) { return; } // verifier qu'on sait poser un cookie if (!isset($_COOKIE['accept_cookie'])) { include_spip('inc/cookie'); spip_setcookie('accept_cookie', $_COOKIE['accept_cookie'] = 1); } if (isset($GLOBALS['meta']['bank_paiement']) and $prestas = unserialize($GLOBALS['meta']['bank_paiement']) and count($prestas = $prestas['presta'])) { // initialiser la config de chaque presta actif foreach ($prestas as $p => $actif) { // TODO ajouter une secu !preg_match(',[\W],',$p) ? if ($actif) { #_chemin(_DIR_PLUGIN_BANK."presta/$p"); // pour les pages de retour include_spip("presta/{$p}/config"); // pour la config par defaut } } }
if (isset($_GET['set_disp'])) { $GLOBALS['prefs']['display'] = floor($_GET['set_disp']); $prefs_mod = true; } if (isset($_GET['set_options']) AND ($_GET['set_options'] == 'avancees' OR $_GET['set_options'] == 'basiques')) { $GLOBALS['prefs']['options'] = $_GET['set_options']; $prefs_mod = true; } if ($prefs_mod AND !$var_auth) spip_query("UPDATE spip_auteurs SET prefs = " . _q(serialize($GLOBALS['prefs'])) . " WHERE id_auteur = " .intval($GLOBALS['auteur_session']['id_auteur'])); if (isset($_GET['set_ecran'])) { // Poser un cookie, // car ce reglage depend plus du navigateur que de l'utilisateur $GLOBALS['spip_ecran'] = $_GET['set_ecran']; spip_setcookie('spip_ecran', $GLOBALS['spip_ecran'], time() + 365 * 24 * 3600); } else $GLOBALS['spip_ecran'] = isset($_COOKIE['spip_ecran']) ? $_COOKIE['spip_ecran'] : "etroit"; // deux globales (compatibilite ascendante) $GLOBALS['options'] = $GLOBALS['prefs']['options']; $GLOBALS['spip_display'] = $GLOBALS['prefs']['display']; $choix_couleur = $GLOBALS['prefs']['couleur']; if (!isset($GLOBALS['couleurs_spip'][$choix_couleur])) $choix_couleur = 1; $GLOBALS['couleur_foncee'] = $GLOBALS['couleurs_spip'][$choix_couleur]['couleur_foncee']; $GLOBALS['couleur_claire'] = $GLOBALS['couleurs_spip'][$choix_couleur]['couleur_claire']; // charger l'affichage minimal et initialiser a la langue par defaut include_spip('inc/minipres');
function formulaires_login_traiter_dist($cible="",$login="",$prive=null){ $res = array(); // Si on se connecte dans l'espace prive, // ajouter "bonjour" (repere a peu pres les cookies desactives) if (is_null($prive) ? is_url_prive($cible) : $prive) { $cible = parametre_url($cible, 'bonjour', 'oui', '&'); } if ($cible=='@page_auteur') $cible = generer_url_entite($GLOBALS['auteur_session']['id_auteur'],'auteur'); if ($cible) { $cible = parametre_url($cible, 'var_login', '', '&'); // transformer la cible absolue en cible relative // pour pas echouer quand la meta adresse_site est foireuse if (strncmp($cible,$u = url_de_base(),strlen($u))==0){ $cible = "./".substr($cible,strlen($u)); } // si c'est une url absolue, refuser la redirection // sauf si cette securite est levee volontairement par le webmestre elseif (tester_url_absolue($cible) AND !defined('_AUTORISER_LOGIN_ABS_REDIRECT')) { $cible = ""; } } // Si on est admin, poser le cookie de correspondance if ($GLOBALS['auteur_session']['statut'] == '0minirezo') { include_spip('inc/cookie'); spip_setcookie('spip_admin', '@'.$GLOBALS['auteur_session']['login'], time() + 7 * 24 * 3600); } // Si on est connecte, envoyer vers la destination if ($cible AND ($cible!=self())) { if (!headers_sent() AND !$_GET['var_mode']) { include_spip('inc/headers'); $res['redirect'] = $cible; } else { $res['message_ok'] .= inserer_attribut( "<a>" . _T('login_par_ici') . "</a>", 'href', $cible ); } } return $res; }
/***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2014 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ // Script pour appeler un squelette apres s'etre authentifie include_once 'inc_version.php'; include_spip('inc/cookie'); $auth = charger_fonction('auth', 'inc'); $var_auth = $auth(); if ($var_auth !== '') { if (!is_int($var_auth)) { // si l'authentifie' n'a pas acces a l'espace de redac // c'est qu'on voulait forcer sa reconnaissance en tant que visiteur. // On reexecute pour deboucher sur le include public. // autrement on insiste if (is_array($var_auth)) { $var_auth = '../?' . $_SERVER['QUERY_STRING']; spip_setcookie('spip_session', $_COOKIE['spip_session'], time() + 3600 * 24 * 14); } include_spip('inc/headers'); redirige_formulaire($var_auth); } } // En somme, est prive' ce qui est publiquement nomme'... include 'public.php';
/** * Loger un auteur suite a son identification * * @param array $auteur * @return bool */ function auth_loger($auteur) { if (!is_array($auteur) or !count($auteur)) { return false; } // initialiser et poser le cookie de session unset($_COOKIE['spip_session']); auth_init_droits($auteur); // initialiser les prefs $p = $GLOBALS['visiteur_session']['prefs']; $p['cnx'] = $auteur['cookie'] == 'oui' ? 'perma' : ''; sql_updateq('spip_auteurs', array('prefs' => serialize($p)), "id_auteur=" . $auteur['id_auteur']); // Si on est admin, poser le cookie de correspondance include_spip('inc/cookie'); if ($auteur['statut'] == '0minirezo') { spip_setcookie('spip_admin', '@' . $auteur['login'], time() + 7 * 24 * 3600); } else { spip_setcookie('spip_admin', '', 1); } // bloquer ici le visiteur qui tente d'abuser de ses droits verifier_visiteur(); return true; }
$desc['login'] = $login; $desc['source'] = 'ldap'; $desc['pass'] = ''; $r = sql_insertq('spip_auteurs', $desc); $result = spip_query("SELECT * FROM spip_auteurs WHERE login="******" AND source='ldap'"); } $row_auteur = spip_fetch_array($result); ### DBG fich_debug("DBG >> statut :".$row_auteur['statut']."\n"); if ($row_auteur['statut'] == '0minirezo') $cookie_admin = "@".$session_login; $var_f = charger_fonction('session', 'inc'); $cookie_session = $var_f($row_auteur); ### DBG fich_debug("DBG >> $cookie_session\n"); // On poste le cookie de session spip_setcookie('spip_session', $cookie_session); // On loge l'authentification spip_log("login de $login depuis LCS"); ////////////// test de recup des zones/groupes ////////////// // dans un premier temps on ne s'occupe que des groupes principaux // pour les groupes secondaire, des verifs supplementaires seront a effectuer // # // # - on teste l'existence d'une zone d'acces restreint intitulee Profs ou Administratifs // # - on recupere les groupe d'appartenance du user // # - on verifie l'appartenance du user a la/les zone/s de meme intitule que le/les groupe/s // # - si il n'est pas dans la zone on l'ajoute //Verifier la presence des plugins Tispip et Acces-restreint
return; } if (!defined('_DIR_PLUGIN_THEME')) { // si on est en mode apercu, il suffit de repasser dans l'espace prive pour desactiver l'apercu if (test_espace_prive()) { if (isset($_COOKIE['spip_zengarden_theme'])) { include_spip('inc/cookie'); spip_setcookie('spip_zengarden_theme', $_COOKIE['spip_zengarden_theme'] = '', -1); } } elseif (isset($GLOBALS['meta']['zengarden_switcher']) or defined('_ZEN_VAR_THEME')) { if (!is_null($arg = _request('var_theme'))) { include_spip('inc/cookie'); if ($arg) { spip_setcookie('spip_zengarden_theme', $_COOKIE['spip_zengarden_theme'] = $arg); } else { spip_setcookie('spip_zengarden_theme', $_COOKIE['spip_zengarden_theme'] = '', -1); } } } // ajouter le theme au path if ((isset($_COOKIE['spip_zengarden_theme']) and $t = $_COOKIE['spip_zengarden_theme'] or isset($GLOBALS['meta']['zengarden_theme']) and $t = $GLOBALS['meta']['zengarden_theme']) and is_dir(_DIR_RACINE . $t)) { _chemin(_DIR_RACINE . $t); $GLOBALS['marqueur'] = (isset($GLOBALS['marqueur']) ? $GLOBALS['marqueur'] : "") . ":theme-{$t}"; // @experimental : sauver le nom du repertoire theme utilise // a defaut de connaitre le vrai prefixe if (!defined('NOM_THEME')) { define('NOM_THEME', basename($t)); } } // @experimental : balise #THEME qui retourne le nom du theme selectionne function balise_THEME_dist($p)