https://dev.entrouvert.org/
https://dev.entrouvert.org/favicon.ico?1586192034
2020-05-21T17:21:42Z
Redmine Entr’ouvert
django-mellon - Development #43193: absence de décodage XML des attributs
https://dev.entrouvert.org/issues/43193?journal_id=236647
2020-05-21T17:21:42Z
Frédéric Péters
fpeters@entrouvert.com
<ul><li><strong>Fichier</strong> <a href="/attachments/44764">0001-misc-don-t-treat-basic-attributes-as-XML-43193.patch</a> <a class="icon-only icon-download" title="Télécharger" href="/attachments/download/44764/0001-misc-don-t-treat-basic-attributes-as-XML-43193.patch">0001-misc-don-t-treat-basic-attributes-as-XML-43193.patch</a> ajouté</li><li><strong>Statut</strong> changé de <i>Nouveau</i> à <i>Solution proposée</i></li><li><strong>Patch proposed</strong> changé de <i>Non</i> à <i>Oui</i></li></ul><p>Ma proposition basique/conservatrice serait de juste prendre le texte tel quel en situation de lasso.SAML2_ATTRIBUTE_NAME_FORMAT_BASIC.</p>
django-mellon - Development #43193: absence de décodage XML des attributs
https://dev.entrouvert.org/issues/43193?journal_id=236653
2020-05-21T18:39:58Z
Benjamin Dauvergne
<ul></ul><p>Le NameFormat n'a pas vraiment de rapport avec le contenu; je vais proposer autre chose.</p>
django-mellon - Development #43193: absence de décodage XML des attributs
https://dev.entrouvert.org/issues/43193?journal_id=236654
2020-05-21T18:40:15Z
Benjamin Dauvergne
<ul><li><strong>Assigné à</strong> mis à <i>Benjamin Dauvergne</i></li></ul>
django-mellon - Development #43193: absence de décodage XML des attributs
https://dev.entrouvert.org/issues/43193?journal_id=236655
2020-05-21T18:41:07Z
Benjamin Dauvergne
<ul><li><strong>Assigné à</strong> <del><i>Benjamin Dauvergne</i></del> supprimé</li></ul>
django-mellon - Development #43193: absence de décodage XML des attributs
https://dev.entrouvert.org/issues/43193?journal_id=236662
2020-05-21T19:03:14Z
Benjamin Dauvergne
<ul><li><strong>Assigné à</strong> mis à <i>Benjamin Dauvergne</i></li></ul>
django-mellon - Development #43193: absence de décodage XML des attributs
https://dev.entrouvert.org/issues/43193?journal_id=236663
2020-05-21T19:03:15Z
Benjamin Dauvergne
<ul><li><strong>Fichier</strong> <a href="/attachments/44767">0001-views-ignore-XML-content-in-SAML-attributes-43193.patch</a> <a class="icon-only icon-download" title="Télécharger" href="/attachments/download/44767/0001-views-ignore-XML-content-in-SAML-attributes-43193.patch">0001-views-ignore-XML-content-in-SAML-attributes-43193.patch</a> ajouté</li><li><strong>Tracker</strong> changé de <i>Bug</i> à <i>Development</i></li></ul>
django-mellon - Development #43193: absence de décodage XML des attributs
https://dev.entrouvert.org/issues/43193?journal_id=236665
2020-05-21T19:05:11Z
Benjamin Dauvergne
<ul><li><strong>Fichier</strong> <a href="/attachments/44768">0001-views-ignore-XML-content-in-SAML-attributes-43193.patch</a> <a class="icon-only icon-download" title="Télécharger" href="/attachments/download/44768/0001-views-ignore-XML-content-in-SAML-attributes-43193.patch">0001-views-ignore-XML-content-in-SAML-attributes-43193.patch</a> ajouté</li></ul><p>J'ai changé pour logger tout l'attribut en cas d'erreur c'est plus simple.</p>
django-mellon - Development #43193: absence de décodage XML des attributs
https://dev.entrouvert.org/issues/43193?journal_id=237212
2020-05-25T15:10:20Z
Paul Marillonnet
<ul><li><strong>Statut</strong> changé de <i>Solution proposée</i> à <i>Solution validée</i></li></ul><p>Du détail, mais j'aurais bien vu une modif du genre<br /><pre><code class="diff syntaxhl"><span class="gh">diff --git a/mellon/views.py b/mellon/views.py
index 899989f..222edc2 100644
</span><span class="gd">--- a/mellon/views.py
</span><span class="gi">+++ b/mellon/views.py
</span><span class="p">@@ -212,7 +212,7 @@</span> class LoginView(ProfileMixin, LogMixin, View):
def get_attribute_value(self, attribute, attribute_value):
# check attribute_value contains only text
for node in attribute_value.any:
<span class="gd">- if not isinstance(node, lasso.MiscTextNode) or not node.textChild:
</span><span class="gi">+ if not isinstance(node, lasso.MiscTextNode) or node.content is None:
</span> self.log.warning('unsupported attribute %s', attribute.exportToXml())
return None
return ''.join(lasso_decode(node.content) for node in attribute_value.any)
</code></pre><br />parce qu'après une lecture rapide j'ai l'impression que c'est équivalent, mais aussi parce que ce patch y gagne en lisibilité.</p>
<p>Sinon c'est ok pour moi.</p>
django-mellon - Development #43193: absence de décodage XML des attributs
https://dev.entrouvert.org/issues/43193?journal_id=237602
2020-05-26T17:33:43Z
Benjamin Dauvergne
<ul></ul><p>Paul Marillonnet a écrit :</p>
<blockquote>
<p>Du détail, mais j'aurais bien vu une modif du genre<br />[...]<br />parce qu'après une lecture rapide j'ai l'impression que c'est équivalent, mais aussi parce que ce patch y gagne en lisibilité.</p>
</blockquote>
<p>Je ne crois pas que node.content puisse être à None, il me semble que libxml2 contrairement à ElementTree ne retourne jamais NULL comme contenu texte d'un noeud même s'il est vide (mais je me trompe peut-être, je n'ai pas tenté l'expérience, c'est vague un souvenir sur libxml2 qui est assez cohérent en général).</p>
<p>Si t'as <code><saml:AttributeValue><trucmuche></trucmuche></saml:AttributeValue></code> ça donne :<br /><pre>
atv.any = [mtn]
mtn.textChild = False
mtn.content = ''
mtn.name = 'trucmuche'
</pre><br /><code><saml:AttributeValue></saml:AttributeValue></code> ça donne :<br /><pre>
atv.any = [mtn]
mtn.textChild = True
mtn.content = ''
mtn.name = None
</pre><br />le but étant de supporter un contenu mixte (texte/noeuds) qui n'arrive jamais.</p>
django-mellon - Development #43193: absence de décodage XML des attributs
https://dev.entrouvert.org/issues/43193?journal_id=237670
2020-05-27T06:52:22Z
Paul Marillonnet
<ul></ul><p>Benjamin Dauvergne a écrit :</p>
<blockquote>
<p>Je ne crois pas que node.content puisse être à None, il me semble que libxml2 contrairement à ElementTree ne retourne jamais NULL comme contenu texte d'un noeud même s'il est vide (mais je me trompe peut-être, je n'ai pas tenté l'expérience, c'est vague un souvenir sur libxml2 qui est assez cohérent en général).</p>
</blockquote>
<p>J'ai trituré un peu le patch parce qu'il me semblait d'abord, à tort, qu'avoir le “<code>if not isinstance(node, lasso.MiscTextNode):</code>” était suffisant. Mais dans notre cas au moins, les <code>node</code> qui vérifient “<code>not node.textChild</code>” ont l'attribut <code>content</code> valant <code>None</code>, ce qui casserait le <code>join</code> quelques lignes plus bas si on n'ajoute ni “<code>or not node.textChild</code>” ni “<code>or node.content is None</code>” au <code>if</code>.</p>
django-mellon - Development #43193: absence de décodage XML des attributs
https://dev.entrouvert.org/issues/43193?journal_id=237738
2020-05-27T09:23:34Z
Benjamin Dauvergne
<ul></ul><p>Je ne comprends toujours pas, tu peux me donner un exemple de code et contenu XML qui donnerait <code>.content is None</code> quand <code>.textChild is True</code> ?</p>
django-mellon - Development #43193: absence de décodage XML des attributs
https://dev.entrouvert.org/issues/43193?journal_id=237742
2020-05-27T09:43:39Z
Paul Marillonnet
<ul></ul><p>Benjamin Dauvergne a écrit :</p>
<blockquote>
<p>Je ne comprends toujours pas, tu peux me donner un exemple de code et contenu XML qui donnerait <code>.content is None</code> quand <code>.textChild is True</code> ?</p>
</blockquote>
<p>Non justement mon impression à la relecture c'était qu'il y a équivalence entre <code>.content is None</code> et <code>not .textChild</code>. Je vais vérifier.</p>
django-mellon - Development #43193: absence de décodage XML des attributs
https://dev.entrouvert.org/issues/43193?journal_id=237755
2020-05-27T10:18:08Z
Benjamin Dauvergne
<ul></ul><p>Paul Marillonnet a écrit :</p>
<blockquote>
<p>Benjamin Dauvergne a écrit :</p>
<blockquote>
<p>Je ne comprends toujours pas, tu peux me donner un exemple de code et contenu XML qui donnerait <code>.content is None</code> quand <code>.textChild is True</code> ?</p>
</blockquote>
<p>Non justement mon impression à la relecture c'était qu'il y a équivalence entre <code>.content is None</code> et <code>not .textChild</code>. Je vais vérifier.</p>
</blockquote>
<p>Ben non, je viens de le montrer plus haut.<br /><pre>
In [5]: mtn = lasso.MiscTextNode.newWithString('coucou')
In [6]: mtn.name = 'coin'
In [7]: mtn.exportToXml()
Out[7]: '<coin>coucou</coin>'
In [8]: mtn.textChild
Out[8]: False
In [9]: mtn.content
Out[9]: 'coucou'
</pre></p>
<p>Après je suis d'accord que la classe MiscTextNode est super mal nommée, mais c'est historique ©.</p>
django-mellon - Development #43193: absence de décodage XML des attributs
https://dev.entrouvert.org/issues/43193?journal_id=237775
2020-05-27T10:33:40Z
Paul Marillonnet
<ul></ul><p>Benjamin Dauvergne a écrit :</p>
<blockquote>
<p>Ben non, je viens de le montrer plus haut.<br />[...]</p>
<p>Après je suis d'accord que la classe MiscTextNode est super mal nommée, mais c'est historique ©.</p>
</blockquote>
<p>Ah pardon, je n'ai pas vu que c'était ce que tu montrais plus haut. Il faudrait alors s'assurer qu'on n'a pas de cas possible où un <code>node</code> peut vérifier “<code>isinstance(node, lasso.MiscTextNode) and node.textChild and node.content is None</code>", auquel cas le <code>''.join(…)</code> casserait.</p>
<p>Tu disais “il me semble que libxml2 contrairement à ElementTree ne retourne jamais NULL comme contenu texte d'un noeud même s'il est vide […]” et pourtant en appliquant :</p>
<pre><code class="diff syntaxhl"><span class="CodeRay"><span class="line head"><span class="head">--- </span><span class="filename">a/mellon/views.py</span></span>
<span class="line head"><span class="head">+++ </span><span class="filename">b/mellon/views.py</span></span>
<span class="change"><span class="change">@@</span> -212,7 +212,7 <span class="change">@@</span></span> <span class="keyword">class</span> <span class="class">LoginView</span>(ProfileMixin, LogMixin, View):
<span class="keyword">def</span> <span class="function">get_attribute_value</span>(<span class="predefined-constant">self</span>, attribute, attribute_value):
<span class="comment"># check attribute_value contains only text</span>
<span class="keyword">for</span> node <span class="keyword">in</span> attribute_value.any:
<span class="line delete"><span class="delete">-</span> <span class="keyword">if</span> <span class="keyword">not</span> <span class="predefined">isinstance</span>(node, lasso.MiscTextNode)<span class="eyecatcher"> <span class="keyword">or</span> <span class="keyword">not</span> node.textChild</span>:</span>
<span class="line insert"><span class="insert">+</span> <span class="keyword">if</span> <span class="keyword">not</span> <span class="predefined">isinstance</span>(node, lasso.MiscTextNode):</span>
<span class="predefined-constant">self</span>.log.warning(<span class="string"><span class="delimiter">'</span><span class="content">unsupported attribute %s</span><span class="delimiter">'</span></span>, attribute.exportToXml())
<span class="keyword">return</span> <span class="predefined-constant">None</span>
<span class="keyword">return</span> <span class="string"><span class="delimiter">'</span><span class="delimiter">'</span></span>.join(lasso_decode(node.content) <span class="keyword">for</span> node <span class="keyword">in</span> attribute_value.any)>
</span></code></pre><br />les tests cassent pour cette raison :<br /><pre>
[…]
mellon/views.py:416: in get
return self.continue_sso_artifact(request, lasso.HTTP_METHOD_ARTIFACT_GET)
mellon/views.py:394: in continue_sso_artifact
return self.sso_success(request, login)
mellon/views.py:227: in sso_success
content = self.get_attribute_value(at, attribute_value)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <mellon.views.LoginView object at 0x7f1ed8feca90>, attribute = <lasso.Saml2Attribute object at 0x7f1ed910e7c0>, attribute_value = <lasso.Saml2AttributeValue object at 0x7f1ed910ebb0>
def get_attribute_value(self, attribute, attribute_value):
# check attribute_value contains only text
for node in attribute_value.any:
if not isinstance(node, lasso.MiscTextNode):
self.log.warning('unsupported attribute %s', attribute.exportToXml())
return None
> return ''.join(lasso_decode(node.content) for node in attribute_value.any)
E TypeError: sequence item 1: expected str instance, NoneType found
</pre>
django-mellon - Development #43193: absence de décodage XML des attributs
https://dev.entrouvert.org/issues/43193?journal_id=238736
2020-06-02T04:14:34Z
Benjamin Dauvergne
<ul><li><strong>Statut</strong> changé de <i>Solution validée</i> à <i>Résolu (à déployer)</i></li></ul><pre>commit c05f4a3129ee85388c29d7170f3e7f52d0425a95
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date: Thu May 21 21:01:49 2020 +0200
views: ignore XML content in SAML attributes (#43193)</pre>
django-mellon - Development #43193: absence de décodage XML des attributs
https://dev.entrouvert.org/issues/43193?journal_id=240940
2020-06-10T10:16:37Z
Frédéric Péters
fpeters@entrouvert.com
<ul><li><strong>Statut</strong> changé de <i>Résolu (à déployer)</i> à <i>Solution déployée</i></li></ul>