# addacl GroupeAUF:read,write

<<TableOfContents>>

= Tests d'intégration SOGo et SAML =

== Serveur de test ==
 * copie du CT sogo-test.ca.auf.org ==> sogo-test-saml.ca.auf.org
 * installation en local de : dovecot-imapd (1:1.2.15-7) + postfix
 * sogo : 2.2.16-1

== Configuration de SOGo ==
 * modification de la config SOGo :
  {{{
  /* SAML */
    SOGoAuthenticationType = saml2;
    SOGoSAML2CertificateLocation = "/etc/ssl/certs/saml-sogo-test-saml.ca.auf.org-cert.pem";
    SOGoSAML2PrivateKeyLocation = "/etc/ssl/private/saml-sogo-test-saml.ca.auf.org-key.pem";

    SOGoSAML2IdpCertificateLocation = "/etc/ssl/certs/GandiStandardSSLCA.pem";
    SOGoSAML2IdpMetadataLocation = "/etc/ssl/saml-id.auf.org-metadata.xml";
    SOGoSAML2IdpPublicKeyLocation = /etc/ssl/certs/_.auf.org-cert.pem;

    SOGoSAML2LogoutEnabled = YES;
    SOGoSAML2LogoutURL = "http://sogo.auf.org";
  }}}

 * Adapter les droits {{{
chgrp sogo /etc/ssl/private/saml-sogo-test-saml.ca.auf.org-key.pem
chmod g+r /etc/ssl/private/saml-sogo-test-saml.ca.auf.org-key.pem
adduser sogo ssl-cert
}}}

 * restart de SOGo

== Compilation de Lasso et CrudeSAML ==
 * [[https://dev.entrouvert.org/lasso/lasso-2.3.6.tar.gz|lasso]] (on appliquera le patch de Wolfgang)
  * pré-requis :
   * aptitude install zlib1g-dev
   * aptitude install pkg-config
   * `configure: error: Package requirements (glib-2.0 >= 2.4.0 gobject-2.0 >= 2.4.0 libxml-2.0 xmlsec1 >= 1.2.6 xmlsec1-openssl >= 1.2.6 openssl) were not met` :
    * aptitude install libglib2.0-dev (==> glib-2.0 >= 2.4.0 gobject-2.0)
    * aptitude install libxmlsec1-dev ==> libxml-2.0 xmlsec1 >= 1.2.6 xmlsec1-openssl >= 1.2.6 openssl
  * appliquer le [[attachment:lasso-export.diff|patch de Inverse]] : `patch -p0 < lasso-export.diff`
  * ./configure ; make ; make install (lire le `INSTALL`)

 * crudesaml (http://ftp.espci.fr/pub/crudesaml/crudesaml-1.4.tar.gz)
  * pré-requis :
   * aptitude install libsasl2-dev
   * aptitude install libpam0g-dev
   * modif du fichier plugin_common.h
    {{{
#include <saslplug.h> :
+typedef int (*sasl_callback_ft)(void);
    }}}

  * patch apporté par JC
  {{{
2ème problème : il y avait un souci dans l'interprétation des dates SAML par le module PAM. Nous avons « hacké » ça en quelques lignes de code C pour supprimer automatiquement les microsecondes quand elles sont présentes : elles ne sont pas vraiment utiles et elles ne sont pas comprises par la fonction C "strptime".
  }}}

  . L'erreur rencontrée est la suivante {{{
Aug 19 15:45:32 sogo-test-saml auth: SAML assertion AuthnStatement AuthnInstant = -1
Aug 19 15:45:32 sogo-test-saml auth: invalid authn AuthnInstant 2015-08-19T19:40:40.652611Z
}}}

  {{{
root@sogo-test-saml:/# git diff usr/local/src/crudesaml-1.4/saml.c
diff --git a/usr/local/src/crudesaml-1.4/saml.c b/usr/local/src/crudesaml-1.4/saml.c
index 415479a..f3121bb 100644
--- a/usr/local/src/crudesaml-1.4/saml.c
+++ b/usr/local/src/crudesaml-1.4/saml.c
@@ -153,9 +153,15 @@ saml_get_date(date)
        struct tm tm;
        const char *format = "%Y-%m-%dT%TZ";
 
-       if (strptime(date, format, &tm) == NULL)
-               return (time_t)-1;
+        char *date2 = strdup(date);
+        if (strchr(date2,'.') != NULL && strchr(date2,'Z') != NULL)
+               strcpy(strchr(date2,'.'), strchr(date2,'Z'));
 
+       if (strptime(date2, format, &tm) == NULL){
+               free(date2);
+               return (time_t)-1;
+       }
+       free(date2);
        return (timegm(&tm));
 }
 
root@sogo-test-saml:/#
  }}}

  * Une erreur après une compile {{{
Feb  3 08:24:26 mail-montreal auth: PAM unable to dlopen(pam_saml.so): /lib/security/pam_saml.so: undefined symbol: rpl_malloc
Feb  3 08:24:26 mail-montreal auth: PAM adding faulty module: pam_saml.so
}}} avec une solution ici https://groups.google.com/forum/#!topic/ikarus-users/_R0QHqwyYz8 {{{
If you get a problem about an undefined reference to rpl_malloc, you
probably need to do:
$ export ac_cv_func_malloc_0_nonnull=yes
before running ./configure ...
}}}

  * On compile : {{{
$ export ac_cv_func_malloc_0_nonnull=yes
$ ./configure && make && make install
}}}

  * les librairies aux bons endroits :
   {{{
root@sogo-test-saml:/usr/lib/sasl2# chmod -x /lib/sasl2/*.so*
root@sogo-test-saml:/usr/lib/sasl2# cp -aiv /lib/sasl2/*.so* /usr/lib/i386-linux-gnu/sasl2/
root@sogo-test-saml:/usr/lib/sasl2# chown root:root /usr/local/lib/security/*.so*
root@sogo-test-saml:/usr/lib/sasl2# chmod -x /usr/local/lib/security/*.so*
root@sogo-test-saml:/usr/lib/sasl2# cp -aiv /usr/local/lib/security/pam_saml.so.0.2.0 /lib/i386-linux-gnu/security/pam_saml.so
root@sogo-test-saml:/usr/lib/sasl2# cp -aiv /usr/local/lib/liblasso.so.3.9.4 /lib/i386-linux-gnu/liblasso.so.3
   }}}

  * vérification
   {{{
root@sogo-test-saml:/usr/lib/sasl2# aptitude install sasl2-bin
root@sogo-test-saml:/usr/lib/sasl2# saslpluginviewer
Plugin "saml" [loaded],         API version: 4
        SASL mechanism: SAML, best SSF: 0
        security flags: NO_ANONYMOUS
        features: WANT_CLIENT_FIRST|PROXY_AUTHENTICATION
   }}}

== Dovecot pour authentification SAML ==

 * Patcher Dovecot (version 2.1.7) pour agrandir la taille du buffer de connexion
  * récupérer le paquet source : `mnombre@sogo-test-saml:~/dovecot$ dget http://http.debian.net/debian/pool/main/d/dovecot/dovecot_2.2.13-11~bpo70+1.dsc` 
   . En cas d'erreur {{{
dscverify: dovecot_2.1.7-7+deb7u1.dsc failed signature check:
gpg: Signature faite le dim 08 jun 2014 10:33:54 EDT avec la clef RSA d'identifiant 1343CF44
gpg: Impossible de vérifier la signature : clef publique introuvable
Validation FAILED!!
}}} ajouter {{{
DSCVERIFY_KEYRINGS=$HOME/.gnupg/pubring.gpg
DGET_VERIFY=no
}}} dans le fichier ~/.devscripts)
  * vérifier  les dépendances et les conflits de construction : `mnombre@sogo-test-saml:~/dovecot$ cd dovecot-2.2.13/ ; dpkg-checkbuilddeps`
  * mettre [[attachment:auf_saml.patch|le patch]] dans le dossier des patchs Debian : `cp ../auf_saml.patch debian/patches/`
  * déclarer notre patch dans le fichier de suivi de Debian : `mnombre@sogo-test-saml:~/dovecot/dovecot-2.2.13$ echo "auf_saml.patch" >> debian/patches/series`
  * mettre à jour le changelog `mnombre@sogo-test-saml:~/dovecot/dovecot-2.2.13$ dch -l ~auf1`
  * reconstruire les paquets Debian : `mnombre@sogo-test-saml:~/dovecot/dovecot-2.2.13$ debuild -us -uc`
   . en cas d'erreur {{{
...
checking whether we are cross compiling... configure: error: in `/home/mnombre/labo-debian/dov2.2.13/dovecot-2.2.13':
configure: error: cannot run C compiled programs.
...
}}} faire `sudo aptitude reinstall libc6-dev` et relancer le debuild.
   . pour l'erreur {{{
...
capabilities-posix.c:8:28: fatal error: sys/capability.h: Aucun fichier ou dossier de ce type
compilation terminated.
...
}}} il faut un `sudo aptitude reinstall libcap-dev` et ... relancer le debuild.

  * réinstaller les paquets : `mnombre@sogo-test-saml:~/dovecot/dovecot-2.2.13$ sudo debi`

 * Intégrer SAML dans pam : modifier le fichier `/etc/pam.d/dovecot`
  {{{
#%PAM-1.0

# SAML : cf man pam_saml
# http://www.ossir.org/paris/supports/2010/2010-02-09/saml.pdf
#auth required pam_saml.so grace=86400 userid=uid idp=/etc/ssl/saml-id.auf.org-metadata.xml trusted_sp=https://sogo-test-saml.ca.auf.org/SOGo/saml2-metadata saml_check_session_timeframe=0 saml_check_assertion_timeframe=0
auth required pam_saml.so grace=600 userid=uid idp=/etc/ssl/saml-id.auf.org-metadata.xml trusted_sp=https://sogo-test-saml.ca.auf.org/SOGo/saml2-metadata
account required                        pam_permit.so
session required                        pam_permit.so
  }}}

== Côté IdP ==

Les attributs à fournir : 
 * pour SOGo : nom, prénom, adél
 * pour Dovecot : nom, prénom, adél, uid (pour nous (id.auf) '''Attribute policy :''' '''''Default+''''')


----