[spip-dev] SPIP 2.1.27, mutualistaion et .htpasswd

Hello

J'ai un SPIP 2.1.27 mutualisé a la facon des articles http://www.spip.net/fr_article3514.html et http://www.spip.net/fr_article3811.html avec six sous repertoires (sites) dans le repertoires "sites".

Un de ces sous repertoires (ou site) est protege par un identification au niveau serveur par .htpasswd.
En installant la version 2.1.27 de SPIP, cette identification conduisait a une session existante mais vide:

En effet dans la noisette:

[(#SESSION|?{' ',''})
<:bienvenue:> <strong>#SESSION{nom}</strong>
<br /><a href='#URL_LOGOUT'><:logout:></a>
]

#SESSION etait toujours renseignee quoique vide et comme j'avais supprime le lien espace prive on ne pouvait rentre dans cette espace qu'en connaissant l'URL.

J'ai decouvert que le probleme venait du fichier /ecrire/inc/session.php qui avait ete modifie par la revision 21818, ligne 22:

$GLOBALS['visiteur_session'] = '';

est devenue:

$GLOBALS['visiteur_session'] = array();

Je precise que j'ai un autre site non mutualise qui est protege par un ..htpasswd et qui n'a pas eu de probleme au passage a la 2.1.27.

George

J'ai un SPIP 2.1.27 mutualisé

..

En installant la version 2.1.27 de SPIP, cette identification conduisait a une session existante mais vide:

...

[(#SESSION|?{' ',''})
<:bienvenue:> <strong>#SESSION{nom}</strong>
<br /><a href='#URL_LOGOUT'><:logout:></a>
]

..

J'ai decouvert que le probleme venait du fichier /ecrire/inc/session.php qui avait ete modifie par la revision 21818, ligne 22:

$GLOBALS['visiteur_session'] = '';

est devenue:

$GLOBALS['visiteur_session'] = array();

Je precise que j'ai un autre site non mutualise qui est protege par un ..htpasswd et qui n'a pas eu de probleme au passage a la 2.1.27.

Comme dit dans le log 21818, cette modif a été faite parce que dans d'autres squelettes on considère que #SESSION est toujours un tableau,
on ne peut pas revenir en arrière sans retomber sur les anciens problèmes.
Le pb vient de la compilation de #SESSION qui se rabat sur celle de #ENV qui produit:

     ('(is_array($a = ('.$src.')) ? serialize($a) : "")')
    
Le fait que ce code renvoie tantôt le résultat d'un serialize tantot autre chose ("" ici) est intrinsèquement problématique,
et comme ça ne concerne pas seulement #SESSION mais #ENV, rechanger ce code qui date de 10129 me paraît dangereux.

Je pense que le mieux est que dans la noisette ci-dessus, on remplace "#SESSION|?" par "#SESSION{nom}|?" étant donnée la suite.

Committo,Ergo:Sum

D'ailleurs ce code était vraiment inutilement compliqué. Depuis le début ceci était plus lisible et plus efficace:

[
<:bienvenue:> <strong>(#SESSION{nom})</strong>
<br /><a href='#URL_LOGOUT'><:logout:></a>
]

Committo,Ergo:Sum

Hi

#SESSION{nom} a regle le probleme merci, mais il fallait que je garde la condition #SESSION{nom}|? pour afficher soit la bienvenue soit le lien du login.

George

Quoting "Committo,Ergo:sum" <esj@rezo.net>:

#SESSION{nom} a regle le probleme merci, mais il fallait que je garde la condition #SESSION{nom}|? pour afficher soit la bienvenue soit le lien du login.

Le lien de login n'apparaissait pas dans le code que tu as donné initialement
(ça sort de quel plugin d'ailleurs ?):

[(#SESSION|?{' ',''})
<:bienvenue:> <strong>#SESSION{nom}</strong>
<br /><a href='#URL_LOGOUT'><:logout:></a>
]

En fait l'écriture (#NOM-DE-BALISE|?{' ',''}) est un hack horrible destiné à contourner les limitations de l'analyseur syntaxique qui ne supporte pas plus de 3 (si je me souviens bien) accolades imbriquées, il faut l'éviter quand il y en a moins de 3 en écrivant directement dans les accolades après "?".

Committo,Ergo:Sum

Committo,Ergo:sum a écrit le 05/06/2015 12:09 :

En fait l'écriture (#NOM-DE-BALISE|?{' ',''}) est un hack horrible destiné à contourner les limitations de l'analyseur syntaxique qui ne supporte pas plus de 3 (si je me souviens bien) accolades imbriquées, il faut l'éviter quand il y en a moins de 3 en écrivant directement dans les accolades après "?".

À propos, est-ce que la syntaxe que tu avais proposée à Avignon résoudrait ça aussi ?

J'aimerais bien qu'on reparle sérieusement de cette nouvelle syntaxe.

Quoting "Committo,Ergo:sum" <esj@rezo.net>:

#SESSION{nom} a regle le probleme merci, mais il fallait que je garde la condition #SESSION{nom}|? pour afficher soit la bienvenue soit le lien du login.

Le lien de login n'apparaissait pas dans le code que tu as donné initialement
(ça sort de quel plugin d'ailleurs ?):

D'un article sur le plugin acces restreint. Le login se trouve dans une autre noisette.

[(#SESSION|?{' ',''})
<:bienvenue:> <strong>#SESSION{nom}</strong>
<br /><a href='#URL_LOGOUT'><:logout:></a>
]

En fait l'écriture (#NOM-DE-BALISE|?{' ',''}) est un hack horrible destiné à contourner les limitations de l'analyseur syntaxique qui ne supporte pas plus de 3 (si je me souviens bien) accolades imbriquées, il faut l'éviter quand il y en a moins de 3 en écrivant directement dans les accolades après "?".

Mon probleme c'est que en utilisant ? comme il faut (?{commande,commade}) je mes chiane de langue ne sont plus interpretees (ou alors j'ai oublie comment faire). de toute facon ca marche aussi bien avec (#SESSION{nom}|oui) et (#SESSION{nom}|non).

George

Mon probleme c'est que en utilisant ? comme il faut (?{commande,commade}) je mes chiane de langue ne sont plus interpretees (ou alors j'ai oublie comment faire).

Tu me surprends. Je viens de vérifier que ceci par exemple se compile sans pb:
[(#SESSION|?{<:foo|strtoupper:>,<:bar:>})]

de toute facon ca marche aussi bien avec (#SESSION{nom}|oui) et (#SESSION{nom}|non).

Leur problème, ainsi que "|?{' ', ''}", c'est que ça rajoute un espace et ça peut parfois être gênant.

Committo,Ergo:Sum

Quoting "Committo,Ergo:sum" <esj@rezo.net>:

Le pb est en amont. Indique moi l'URL du squelette entier.

Committo,Ergo:Sum

Sommaire: #CACHE{432000} <html dir="#LANG_DIR" xmlns= xml:lang="#LANG" lang="#LANG"> [(#NOM_SITE_SPIP|textebrut)] [] <INCLURE{fond=includes/inc-head}>

[(#REM) Entete de la page + titre du site ] <INCLURE{fond=includes/inc-entete}> [(#REM) Fil d’Ariane ]
<:accueil_site:>
[(#REM) Menu de navigation laterale ]
[(#REM) Menu de navigation par rubriques ] <INCLURE{fond=includes/inc-rubriques}>
[(#REM) Contenu principal : derniers articles publies ]
<INCLURE{fond=includes/inc-proj}{env}{ajax}>
<INCLURE{fond=includes/inc-recents}{env}{ajax}>
<INCLURE{fond=includes/inc-documents}{env}>
[(#REM) le calendrier ]
td.occupe a {font-weight:bold;text-decoration:underline;} td.horsperiode {color:#878787;} #CALENDRIER_MINI{#ENV{date},‹ date ›,#SELF}
<INCLURE{fond=includes/inc-annonces}{env}{ajax}>
<INCLURE{fond=noisettes/twidget,user=sdis91,width=305,shell_background=#009ee0,shell_color=#ffffff}>


<INCLURE{fond=includes/inc-liens}>
[(#REM) Pied de page ] [(#INCLURE{fond=includes/inc-pied}{skel=#SQUELETTE})]
inc-rubriques: #CACHE{0}
[[(#REM) noisette de connection, deconnection] <INCLURE{fond=includes/inc_identification}>
<B_alerte> <BOUCLE_alerte(BREVES) {par date} {inverse} {0,1}>
[
(#TITRE)
] [(#TEXTE)]
</BOUCLE_alerte> </B_alerte> [(#REM) Barre de navigation, ouverte sur la hierarchie courante On fait un plan, et, quand on avance vers une rubrique, on l’affiche si son parent est expose ou est la racine du site. ]
<:forms:>
<BOUCLE_mots_form(MOTS) {id_groupe=9} {par num titre, titre}> [(#TITRE)] </BOUCLE_mots_form>
<:annuaires:> <BOUCLE_metier(RUBRIQUES){id_rubrique=1255}{doublons}> [(#TITRE|couper{30})] <B_ssmetier>
<BOUCLE_ssmetier(SITES){id_rubrique} {par nom_site}> #NOM_SITE </BOUCLE_ssmetier>
</B_ssmetier> </BOUCLE_metier> <B_rubriques> <BOUCLE_rubriques(RUBRIQUES) {racine} {id_rubrique!IN 8,111,550} {doublons} {par num titre, titre}> [(#TITRE|couper{30})] <B_sous_rubriques>
<BOUCLE_sous_rubriques(RUBRIQUES) {id_parent} {par num titre, titre}> [(#TITRE)]<BOUCLE_re(BOUCLE_sous_rubriques)></BOUCLE_re> </BOUCLE_sous_rubriques>
</B_sous_rubriques> </BOUCLE_rubriques> </B_rubriques>  
[(#REM) Menu de navigation mots-cles : les autres mots cles du meme groupe ]

<:liens_rapides:>

    <BOUCLE_rub_rapides(RUBRIQUES) {id_rubrique IN 1129,1231,1264,1360,1377} {tout} {par num titre, titre}>
  • <a href="#URL_RUBRIQUE"[ class="(#EXPOSE)"]>#TEXTE
  • </BOUCLE_rub_rapides>
  • <:gpec:>
<INCLURE{fond=includes/inc-random}> <INCLURE{fond=includes/inc-meteo}> inc-identification: [(#REM) Deconnection ] [(#SESSION{nom}|?{ <:bienvenue:> #SESSION{nom}
<:logout:> ,

<:zonep:> <:acces:> <:ident:>

})] avec cette verion j’ai l’affichage: <:bienvenue:> et le lien du logout n’est pas interprete: <?php%20include_once("./%22 . _DIR_RACINE . « ecrire/balise/url_logout.php »);if ($lang_select = « fr ») $lang_select = lang_select($lang_select)inserer_balise_dynamique(balise_URL_LOGOUT_dyn(

Eh bien c'est une sacré mine de bugs.
Pour la partie syntaxique, c'est corrigé par:
https://core.spip.net/projects/spip/repository/revisions/22206

Pour la non interprétation de URL_LOGOUT, comme dit dans le log ça se contourne en écrivant
#SESSION** à la place de la première occurrence de #SESSION, il est d'ailleurs recommandé de toujours utiliser ** quand une balise est suivie de "|?" c'est plus efficace et donc ici contourne un bug qui reste à corriger.

Committo,Ergo:Sum