UnivNautes (historique): Demandeshttps://dev.entrouvert.org/https://dev.entrouvert.org/favicon.ico?15861920342014-12-17T10:43:55ZRedmine Entr’ouvert
Redmine Bug #6165 (Fermé): UnivNautes SP update-metadata-idp: DatabaseError: too many SQL variableshttps://dev.entrouvert.org/issues/61652014-12-17T10:43:55ZCRIMA CRIMAsysadmin@listes.univ-jfc.fr
<p>Hi,</p>
<p>On our instance of UnivNautes, we hit a nasty and critical bug about metadata refreshing.</p>
<p>We have discovered the bug when we have requested a metadata update at Renater federation for our IdP about changing x509 certificate...<br />From that point, UnivNautes SP has cease to work. I finally found an error message on pfSense logs :</p>
<p><code>Dec 15 11:54:19 eduspot update-metadata-idp: DatabaseError: too many SQL variables</code></p>
<p>In Univnaute web config, I have <a class="external" href="https://federation.renater.fr/renater/idps-renater-metadata.xml">https://federation.renater.fr/renater/idps-renater-metadata.xml</a> for both IdP URL and SP URL.</p>
<p>Google : no match... ok. Then explore.<br />In SSH shell, tried :<br /><code>[2.0-RELEASE+UNIVNAUTES-20140807-1543][root@eduspot.univ-jfc.fr]/root(10): univnautes-update-metadata.sh </code></p>
<p>Same error. Then explore.<br /><code>bash<br />cd /usr/local/univnautes/pffedportal<br />MD=/var/db/metadata-idps.xml<br />VIRTUAL_ENV="/usr/local/univnautes" <br />export VIRTUAL_ENV<br />PATH="$VIRTUAL_ENV/bin:$PATH" <br />export PATH<br />python ./manage.py sync-metadata --source="federation" --idp $MD</code></p>
<p>Same error, but on stdout, in red caracters.</p>
<p>Then explore :</p>
<p><code>[2.0-RELEASE+UNIVNAUTES-20140807-1543][root@eduspot.univ-jfc.fr]/usr/local/univnautes/pffedportal(14): ls -lh *db<br />-rw-r--r-- 1 root wheel 82M Dec 16 10:32 pffedportal.db</code></p>
<p>Tried to flush all tables in the DB, restart manage.py, same error. Restore original SQLite DB. Added <code>--verbosity=2</code>.</p>
<p><code>Updating Sciences Po Grenoble, https://shibboleth.sciencespo-grenoble.fr/idp/shibboleth<br />Updating Université de Bordeaux IV - Montesquieu, https://idp.u-bordeaux4.fr/idp/shibboleth<br />Updating Ecole des Mines de Saint-Etienne, https://shibbo.emse.fr/idp/shibboleth<br />Updating CROUS Rouen - Personnels, https://si.crous-rouen.fr/idp/shibboleth<br />DatabaseError: too many SQL variables</code></p>
<p>Import failed when reached about 95% of the metadata entries.</p>
<p>Tried to refresh matadata with <code>univnautes-update-metadata.sh</code> then retry <code>manage.py</code>.<br />Same behavior, but the last log line is about <em>another</em> IdP.</p>
<p>Then explore. Google : django sqlite "too many SQL variables".<br />=> <a class="external" href="http://stackoverflow.com/questions/7106016/too-many-sql-variables-error-in-django-witih-sqlite3">http://stackoverflow.com/questions/7106016/too-many-sql-variables-error-in-django-witih-sqlite3</a></p>
<blockquote>
<p>Many SQL programmers are familiar with using a question mark ("?") as a host parameter. SQLite also supports named host parameters prefaced by ":", "$", or "@" and numbered host parameters of the form "?123".<br />To prevent excessive memory allocations, the maximum value of a host parameter number is SQLITE_MAX_VARIABLE_NUMBER, which defaults to 999.</p>
</blockquote>
<p>This is a SQLite <em>compilation</em> parameter. No hope for dynamic tweaking.</p>
<p>Then explore : Replaced <code>--verbosity=3</code>.<br />Last SQL request found in /var/log/authentic.log is very huge and follow this pattern :</p>
<p><code>2014-12-16 16:27:47 authentic: [DEBUG] django.db.backends.(0.002) SELECT "saml_libertyprovider"."id", "saml_libertyprovider"."name", "saml_libertyprovider"."slug", "saml_libertyprovider"."entity_id", "saml_libertyprovider"."entity_id_sha1", "saml_libertyprovider"."protocol_conformance", "saml_libertyprovider"."metadata", "saml_libertyprovider"."public_key", "saml_libertyprovider"."ssl_certificate", "saml_libertyprovider"."ca_cert_chain", "saml_libertyprovider"."federation_source" FROM "saml_libertyprovider" WHERE ("saml_libertyprovider"."federation_source" = federation AND NOT ("saml_libertyprovider"."entity_id" IN (https://wireless.balliol.ox.ac.uk/shibboleth, https://authenticate.bvdep.com/ukfederation, [...]</code></p>
<p>After the huge "NOT IN", the logger dump the args array that contains a huge quantity of EntityIds. In the args array dump, I found 1842 commas. So we might have 1843 arguments (assuming no comma in URLs, seems reasonable). Crapy.</p>
<p>Some statistics about renater-matadata global XML file :<br /><code>[root@eduspot /var/db]# grep '<md:IDPSSODescriptor' metadata-idps.xml | wc -l<br /> 235<br />[root@eduspot /var/db]# grep '<md:SPSSODescriptor' metadata-idps.xml | wc -l<br /> 1609<br />[root@eduspot /var/db]# grep -E '<md:(IDP|SP)SSODescriptor' metadata-idps.xml | wc -l<br /> 1844</code></p>
<p>So, I think that the problem could happen with <strong>any</strong> big federation. Metadata number of entry should not be bound by SQLite argument count limit.</p>
<p>Workaround found for my case :</p>
<p>Basicaly I replace the URL by : <a class="external" href="https://federation.renater.fr/renater/idps-renater-metadata.xml">https://federation.renater.fr/renater/idps-renater-metadata.xml</a><br />I don't use UnivNaute internal IdP so it don't need SP knowledge.<br />idps-renater-metadata.xml is significantly shorter than renater-metadata.xml and don't trigger the bug.</p>
<p>To apply this correctly, I change the config with web interface, then I was forced to flush SQLite copy of current metadata infos :</p>
<p><code>bash<br />cd /usr/local/univnautes/pffedportal<br />MD=/var/db/metadata-idps.xml<br />VIRTUAL_ENV="/usr/local/univnautes" <br />export VIRTUAL_ENV<br />PATH="$VIRTUAL_ENV/bin:$PATH" <br />export PATH<br />python ./manage.py sync-metadata --source="federation" --idp --delete --verbosity=2 $MD<br />python ./manage.py sync-metadata --source="federation" --sp --delete --verbosity=2 $MD<br />python ./manage.py sync-metadata --source="federation" --idp --verbosity=2 $MD<br />reboot<br /></code></p>
<p>Additionnal info, I've tried to instrument the code to see where the big SQL request is generated, but first guess was unsuccessful :</p>
<p>In <code>/usr/local/univnautes/lib/python2.7/site-packages/authentic2/saml/management/commands/sync-metadata.py</code> :<br />Some "print" added :<br /><code> <br /> provider.name = name<br /> provider.metadata = etree.tostring(tree, encoding='utf-8').decode('utf-8').strip()<br /> provider.protocol_conformance = 3<br /> provider.federation_source = options['source']<br /> print "before provider.save()" <br /> provider.save()<br /> print "after provider.save()" <br /> options['count'] = options.get('count', 0) + 1<br /> if idp:<br /> identity_provider, created = LibertyIdentityProvider.objects.get_or_create(<br /> liberty_provider=provider)<br /> identity_provider.enabled = True<br /> if idp_policy:<br /> identity_provider.idp_options_policy = idp_policy<br /> print "before identity_provider.save()" <br /> identity_provider.save()<br /> print "after identity_provider.save()" <br /></code></p>
<p>Log when this version run with --idp option and metadata-renater.xml (the big one) :</p>
<p><code><br />[...]<br />Updating Université de Paris 8 - Vincennes, https://idp.univ-paris8.fr/idp/shibboleth<br />before provider.save()<br />after provider.save()<br />before identity_provider.save()<br />after identity_provider.save()<br />Updating INSA de Lyon, https://login.insa-lyon.fr/idp/shibboleth<br />before provider.save()<br />after provider.save()<br />before identity_provider.save()<br />after identity_provider.save()<br />DatabaseError: too many SQL variables<br /></code></p>
<p>Unfortunatly, I have never practiced Django and it's ORM so don't know how correct and make a patch proposal.</p>
<p>Cheers,<br />Ludovic Pouzenc</p> Bug #6164 (Rejeté): Log level handling in sync-metadata.pyhttps://dev.entrouvert.org/issues/61642014-12-17T09:23:03ZCRIMA CRIMAsysadmin@listes.univ-jfc.fr
<p>Hi,</p>
<p>When I was trying to troubleshot a problem with Univnautes's SP metadata refereshing, I hit something that seems unintentionnal about log verbosity.</p>
<p>I ran manually this sequence in a root bash shell :</p>
<p><code>cd /usr/local/univnautes/pffedportal<br />MD=/var/db/metadata-idps.xml<br />VIRTUAL_ENV="/usr/local/univnautes" <br />export VIRTUAL_ENV<br />PATH="$VIRTUAL_ENV/bin:$PATH" <br />export PATH<br />python ./manage.py sync-metadata --source="federation" --idp --verbosity=3 $MD</code></p>
<p>Excepted behavior :<br />On stdout, messages like (variable replaced...) :<br /><code>Creating %(what)s %(name)s, %(id)s</code><br />and <br /><code>Updating %(what)s %(name)s, %(id)s<br /></code><br />Actual Behavior :<br />No output except the fatal error that I am tracking.</p>
<p>(Work as expected if <code>--verbosity=2</code>)</p>
<p>(Dumb) patch attached.</p> Project management #4864 (Fermé): Captures nouvelle carte de Francehttps://dev.entrouvert.org/issues/48642014-05-29T15:58:02ZThomas NoëlBug #4250 (Fermé): carte de france et IE11https://dev.entrouvert.org/issues/42502014-01-23T16:06:57ZThomas Noël
<p>Signalé par O.S. de univ-catholyon.fr :</p>
<p>« Nous sommes en train de mettre en place UnivNautes à l'Université<br />Catholique de Lyon (version 20130503-1132) et nos clients avec Internet<br />Explorer 11 ont des problèmes avec la carte qui reste vierge (les<br />universités n'apparaissent pas) et le champ de recherche ne réduit pas<br />la liste des universités. Avez-vous connaissance de ce problème et<br />a-t-il été corrigé dans cette version beta ? »</p> Bug #4092 (Rejeté): plus de syslog après un reboothttps://dev.entrouvert.org/issues/40922013-12-11T11:45:39ZThomas Noël
<p>Version 2.0-RELEASE+UNIVNAUTES-20130503-1122 (i386)</p>
<p>Suite à redémarrage d'un serveur univnautes, les logs n'étaient plus envoyés<br />au serveur syslog distant.<br />La situation s'est rétablie en ne changeant rien au paramétrage, juste en<br />cliquant sur le bouton save.</p>
<p>Menu Status / System Logs<br />onglet Settings</p>
<p>Constaté et vérifié sur 3 serveurs différents.</p>
<p>(Signalé par le crous-grenoble.fr)</p>
<p>=> Regarder si modifs dans la gestion des logs dans les derniers commits pfSense</p> Bug #4033 (Rejeté): permettre plusieurs IdP "favoris"https://dev.entrouvert.org/issues/40332013-12-02T09:59:29ZThomas Noël
<p>Actuellement on ne peut indiquer qu'une seule EntityId "préférée" dans la config. Voir comment en permettre plusieurs, avec une liste dans un textarea du genre :</p>
<pre>
nom de l'IdP1:entityid
nom de l'IdP2:entityid
nom de l'IdP3:entityid
</pre> Bug #3914 (Fermé): migrer en django 1.5https://dev.entrouvert.org/issues/39142013-10-30T16:57:54ZThomas Noël
<p>Voir si c'est faisable facilement, car on gagnerait une bonne gestion des sessions avec le backend "file".</p>
<p>Sinon, rester en 1.4.x (toujours supportée) et programmer un cleanup tel que dans <a class="external" href="https://github.com/django/django/blob/stable/1.5.x/django/contrib/sessions/backends/file.py#L176">https://github.com/django/django/blob/stable/1.5.x/django/contrib/sessions/backends/file.py#L176</a></p> Bug #3898 (Fermé): ne pas stocker les sessions dans la basehttps://dev.entrouvert.org/issues/38982013-10-28T10:16:25ZThomas Noël
<p>la base est sqlite, quand le nombre de sessions devient important (>10000) on se retrouve avec des "database locked" (et notamment quand on veut supprimer les anciennes sessions, ce qui provoque un cercle vicieux).</p>
Il faut :
<ul>
<li>stocker les session autre part => en fichier (memcached non disponible)</li>
<li>modifier le cleanup et script del_sessions_by_pfsenseid.py pour gérer ce genre de session (on n'a plus l'ORM sur les sessions).</li>
</ul> Bug #3891 (Fermé): optimiser la coupure des sessions django lors de la coupure CPhttps://dev.entrouvert.org/issues/38912013-10-25T16:38:07ZThomas Noël
<p>Retirer l'appel à /usr/local/bin/cp_del_sessions.sh dans source:/copy_overlay/usr/src/univnautes-patches/captiveportal.inc.diff#L59</p>
<p>Remplacer cela par un script appelé à la fin de /etc/rc.prunecaptiveportal et qui va vérifier si les sessions django existent toujours dans /var/db/captiveportal.db, du genre :<br /><pre>
from django.contrib.sessions.models import Session
for s in Session.objects.all():
pfsenseid = s.get_decoded().get('pfsenseid')
if pfsenseid n'est pas dans /var/db/captiveportal.db:
s.delete()
</pre></p> Bug #3890 (Fermé): URLs à ne pas considérerhttps://dev.entrouvert.org/issues/38902013-10-25T16:22:51ZThomas Noël
<p>Mettre en place un système pour ne pas ouvrir de session si l'URL demandée est dans la liste :</p>
<ul>
<li><a class="external" href="http://www.airport.us/">http://www.airport.us/</a>*</li>
<li><a class="external" href="http://www.apple.com/library/test/success.html">http://www.apple.com/library/test/success.html</a></li>
<li><a class="external" href="http://www.msftncsi.com/ncsi.txt">http://www.msftncsi.com/ncsi.txt</a></li>
<li><a class="external" href="http://captive.apple.com/">http://captive.apple.com/</a>*</li>
<li><a class="external" href="http://configuration.apple.com/">http://configuration.apple.com/</a>*</li>
<li>*.crl</li>
<li><a class="external" href="http://www.itools.info/">http://www.itools.info/</a>*</li>
<li><a class="external" href="http://www.ibook.info/">http://www.ibook.info/</a>*</li>
<li><a class="external" href="http://conn.skype.com/">http://conn.skype.com/</a>*</li>
<li><a class="external" href="http://*.windowsupdate.com/">http://*.windowsupdate.com/</a>*</li>
<li><a class="external" href="http://download.mcafee.com/">http://download.mcafee.com/</a>*</li>
<li><a class="external" href="http://download.microsoft.com/">http://download.microsoft.com/</a>*</li>
<li><a class="external" href="http://*.update.microsoft.com/">http://*.update.microsoft.com/</a>*</li>
<li><a class="external" href="http://*.push.apple.com/">http://*.push.apple.com/</a>*</li>
<li><a class="external" href="http://ocsp">http://ocsp</a>.*</li>
<li><a class="external" href="http://crl">http://crl</a>.*</li>
<li><a class="external" href="http://rss">http://rss</a>.*</li>
<li><a class="external" href="http://www.appleiphonecell.com/">http://www.appleiphonecell.com/</a>*</li>
<li><a class="external" href="http://www.blackberry.com/select/wifiloginsuccess/">http://www.blackberry.com/select/wifiloginsuccess/</a>*</li>
<li><a class="external" href="http://www.thinkdifferent.us/">http://www.thinkdifferent.us/</a>*</li>
<li><a class="external" href="http://conn.skype.com/">http://conn.skype.com/</a></li>
<li><a class="external" href="http://*.ws.microsoft.com/">http://*.ws.microsoft.com/</a></li>
<li><a class="external" href="http://*.windowsupdate.com/">http://*.windowsupdate.com/</a>*</li>
<li>*.xml</li>
<li>*.cab</li>
<li><a class="external" href="http://images.apple.com/fr/main/rss/">http://images.apple.com/fr/main/rss/</a>*</li>
</ul> Bug #3233 (Rejeté): redirection CP sur httpshttps://dev.entrouvert.org/issues/32332013-07-10T12:38:37ZThomas Noël
<p>Faire en sorte que le CP accepte, malgré les erreurs de certif, les demandes sur 443.</p>
Donc :
<ul>
<li>pfsense: rediriger aussi les appels sur 443 et les envoyer sur le 443 (c'est le point compliqué)</li>
<li>pffed: lancer une redirection si le hostname demandé n'est pas bon</li>
</ul> Bug #2769 (Fermé): sync pfSense 2.0.3https://dev.entrouvert.org/issues/27692013-04-17T13:20:29ZThomas Noël
<p><a class="external" href="http://blog.pfsense.org/?p=694">http://blog.pfsense.org/?p=694</a></p>
<p>pfSense 2.0.3, extraits du changelog à étudier:</p>
Captive Portal
<ul>
<li>Fix Captive Portal Redirect URL trimming</li>
<li>Voucher sync fixes</li>
<li>Captive portal pruning/locking fixes</li>
<li>Fix problem with fastcgi crashing which caused CP issues on 2.0.2</li>
</ul> Bug #2768 (Fermé): cohérence logs idp local / sphttps://dev.entrouvert.org/issues/27682013-04-17T13:16:32ZThomas Noël
<p>(demande upmc)</p>
<p>J'ai un petit soucis avec les logs de l'idp local :</p>
<p>Les logs sont issues à la fois de logportal (comme d'habitude) et des log de l'idp local<br />mais<br />Il semble difficile de recoller les morceaux entre ces 2 sources.</p>
<p>idpauth donne le login et un eduPersonTargetedID<br />logportalauth donne quant à lui le nameID, l'ip, adresse mac,</p>
<p>et seul l'horodatage permet de recoller ces 2 informations.</p>
<p>Est-il possible d'ajouter l'ip source aux log de "idpauth" <br />histoire d'avoir les 2 informations vitales (login et ip) dans la même ligne,<br />ou bien d'avoir la même info [eduPersonTargetedID/nameID] entre idpauth et logportalauth ?</p> Bug #2555 (Fermé): tcpdump trop gourmandhttps://dev.entrouvert.org/issues/25552013-02-28T13:03:57ZThomas Noël
<p>Au bout d'un certain temps (1 mois par exemple) le tcpdump qui tourne pour logger les transactions prend énormément de RAM et de CPU.</p>
<p>Seule solution trouvée actuellement : faire un restart de ce tcpdump la nuit... Ajouter un minicron pour cela ?</p> Bug #2545 (Rejeté): Rejet de connexion ?https://dev.entrouvert.org/issues/25452013-02-25T11:23:12ZJoann MOUNIAMAjoann.mouniama@univ-reunion.fr
<p>Bonjour,<br />Mon provider UnivNautes se connecte sans problème à des IdP "extèrieurs" mais pas à celui de la Réunion. Je rencontre les erreurs suivantes:</p>
<p>08:49:13.716 - WARN [org.opensaml.common.binding.security.MessageReplayRule:92] - Replay detected of message '_F2885568D0177F1CC799E1918CBD47C9' from iss<br />uer <a class="external" href="https://eduspotcp-moufia.univ-reunion.fr/authsaml2/metadata">https://eduspotcp-moufia.univ-reunion.fr/authsaml2/metadata</a><br />08:49:13.717 - WARN [edu.internet2.middleware.shibboleth.idp.profile.saml2.SSOProfileHandler:316] - Message did not meet security requirements<br />org.opensaml.ws.security.SecurityPolicyException: Rejecting replayed message ID '_F2885568D0177F1CC799E1918CBD47C9' from issuer <a class="external" href="https://eduspotcp-moufia">https://eduspotcp-moufia</a>.<br />univ-reunion.fr/authsaml2/metadata</p>
<p>Si j'ai bien compris, mon provider rejette la connexion ?</p>