Grouper:Test LDAPPC
Un article de Wiki ESCO-Portail.
Sommaire |
Test de LDAPPC
Références :
Configuration de LDAP
- Ajouter le schéma conf/ldappc.schema au LDAP.
- La définition des index suit les recommandations de la documentation LDAPPC :
index objectClass eq index uid pres,eq index cn pres,eq,sub index sn pres,eq,sub index hasMember eq index member eq index isMemberOf eq
Configuration de LDAPPC
Fichier d'exemple (décrit les différentes options) : conf/ldappcTemplate.xml.
Fichier de configuration : conf/ldappc.xml.
<?xml version="1.0" encoding="utf-8"?> <!-- * This file contains data for testing Ldappc. * * See ldappcTemplate.xml for documentation regarding how to use these * elements. --> <ldappc> <grouper> <group-queries> <!-- Racine des groupes a exporter dans le ldap. --> <subordinate-stem-queries> <stem-list> <stem>ESCO</stem> </stem-list> </subordinate-stem-queries> </group-queries> <groups structure="flat" root-dn="ou=groups,dc=esco-centre,dc=fr" ldap-object-class="groupOfNames" ldap-rdn-attribute="cn" grouper-attribute="name" > <group-members-dn-list list-object-class="groupOfNames" list-attribute="member" list-empty-value=""/> <group-members-name-list list-object-class="eduMember" list-attribute="hasMember" > <source-subject-name-mapping> <source-subject-name-map source="esco:ldap" subject-attribute="uid" /> </source-subject-name-mapping> </group-members-name-list> </groups> <memberships> <member-groups-list list-object-class="eduMember" list-attribute="isMemberOf" naming-attribute="name" /> </memberships> </grouper> <source-subject-identifiers> <source-subject-identifier source="esco:ldap" subject-attribute="uid" > <ldap-search base="ou=people,dc=esco-centre,dc=fr" scope="subtree_scope" filter="(uid={0})" /> </source-subject-identifier> </source-subject-identifiers> <ldap> <context> <parameter-list> <parameter name="initial_context_factory" value="com.sun.jndi.ldap.LdapCtxFactory" /> <parameter name="provider_url" value="ldap://<hostname>:389" /> <parameter name="security_authentication" value="simple" /> <parameter name="security_principal" value="cn=<user>,dc=esco-centre,dc=fr" /> <parameter name="security_credentials" value="<password>" /> </parameter-list> </context> </ldap> </ldappc
- Configuration de l'entrée grouper :
- group-query : la requête concernant les groupes porte sur l'espace de noms racine : esco.
- groups : conservation de la structure arborescente.
- source-subject-name-mapping : configuration de la source de données (id, nom) idem à celle utilisée pour grouper (Subject API).
- Entrée Signet : désactivé.
- Entrée Subject : source-subject-identifiers : idem à celle utilisée pour Grouper (Subject API).
Exécution via Eclipse
Le jar pour la connexion à la base de données ainsi que les fichiers de conf de grouper doivent être dans le classpath :
- grouper.properties,
- grouper.hibernate.properties et
- sources.xml.
Seule la cible ant install est utilisée, les tests unitaires ne sont pas exécutés.
LDAPPC est invoqué via Eclipse avec les paramètres suivants :
- Classe : edu.internet2.middleware.ldappc.Ldappc
- Arguments du programme : -subject GrouperSystem -memberships -groups
Résultats
Soit le groupe suivant définit dans grouper :
Au niveau de LDAP, la structure de groupe obtenue, avec conservation de l'arborescence est la suivante :
Sans conservation de l'arborescence :
La liste des groupes auxquels appartient une personne est stockée dans l'attribut isMemberOf :
dn: uid=Akd09200, ou=people, dc=esco-centre,dc=fr (...) uid: Akd09200 objectClass: ENTEleve objectClass: eduMember isMemberOf: esco:ENT_Groupes:etb2:GT1
Invocation en tache de fond
LDAPPC peut être invoqué dans une boucle via le paramètre -interval.
Exemples de scripts :
#! /bin/bash # -------------------------------------# # Variables de configuration # -------------------------------------# LDAPPC_USER=grouper LDAPPC_HOME=/opt/ldappc SUBJECT=GrouperSystem INTERVAL=500 MEMORY=256m GROUPER_API_HOME=/opt/grouper-esco/grouper-api-1.2.1/ # -------------------------------------# #--- Verification de l utilisateur. check_user="false" echo "USER=$USER" if [ ! "$USER" = "$LDAPPC_USER" -a "$check_user" = "true" ] then echo -ne "\n\n!!! Attention !!!\n" echo "Le script /etc/init.d/ldappcctl devrait etre utilise pour lancer ldappc." echo -ne "Termine.\n\n" exit fi CMD_LINE="-subject $SUBJECT -memberships -groups -interval $INTERVAL" cd $LDAPPC_HOME if [ $? -ne 0 ] then echo "Erreur: impossible d'aller dans $LDAPPC_HOME" exit 1 fi # Construction du classpath CP=./conf if [ -z "$GROUPER_API_HOME" ] then echo "Error: GROUPER_API_HOME is not set." exit 1 elif [ ! -d $GROUPER_API_HOME ] then echo "Error: $GROUPER_API_HOME non trouve." exit 1 else if [ ! -r "$GROUPER_API_HOME/conf/sources.xml" ] then echo "Erreur: Impossible de trouver le fichier $GROUPER_API_HOME/conf/sources.xml." exit 1 fi if [ ! -r "$GROUPER_API_HOME/conf/grouper.hibernate.properties" ] then echo "Erreur: Impossible de trouver le fichier $GROUPER_API_HOME/conf/grouper.hibernate.properties." exit 1 fi CP=$CP:"$GROUPER_API_HOME/conf" fi for f in ./lib/*.jar do CP=${CP}:${f}; done exec java -classpath ${CP} -Xmx$MEMORY edu.internet2.middleware.ldappc.Ldappc $CMD_LINE
Script pour l invocation en mode démon (à placer dans /etc/init.d) :
#! /bin/bash LDAPPC_USER=ardem RESTART_DELAY=10 CONF_FILE="/etc/default/ldappc1.1.x" LDAPPC_HOME=/opt/ldappc PIDFILE=/var/run/ldappc.pid # ---------------------------------------------- # # Verification des variables d environnement # # ---------------------------------------------- # if [ -z "$JAVA_HOME" ] then echo "Erreur : variable JAVA_HOME non definie." exit 1 fi LDAPPC_SCRIPT=$LDAPPC_HOME/scripts/runLdappc if [ -z "$LDAPPC_HOME" ] then echo "Erreur : variable LDAPPC_HOME non definie." exit 1 elif [ ! -x $LDAPPC_SCRIPT ] then echo "Erreur script $LDAPPC_SCRIPT non trouve ou non executable." exit 1 fi # Fonctionnement IDEM Apache. NO_START=0 test -f $CONF_FILE && . $CONF_FILE if [ "$NO_START" != "0" -a "$1" != "stop" ]; then echo "Ne demarre pas ldappc - editer $CONF_FILE et changer NO_START a 0."; exit 0; fi # Verification de l utilisateur if [ -z "`cat /etc/passwd | grep $LDAPPC_USER`" ] then echo "Utilisateur $LCAPPC_USER non valide." exit 1 fi case "$1" in start) if [ -f $PIDFILE ] then echo "Le fichier $PIDFILE existe deja. Essayer `basename $0` --stop ou supprimer le fichier." exit 1 fi echo -ne "\nStarting LDAPPC.\n\n" start-stop-daemon --start --quiet --pidfile $PIDFILE --background --make-pidfile --chuid $LDAPPC_USER --exec $LDAPPC_SCRIPT ;; stop) if [ ! -f $PIDFILE ] then echo "Fichier $PIDFILE non trouve, le programme $LDAPPC_SCRIPT ne semble pas actif." exit 1 fi echo -ne "\nStopping LDAPPC.\n\n" start-stop-daemon --stop --quiet --pidfile $PIDFILE rm $PIDFILE ;; restart) echo -ne "\nStopping LDAPPC.\n\n" start-stop-daemon --stop --quiet --pidfile $PIDFILE sleep $RESTART_DELAY echo -ne "\nStarting LDAPPC.\n\n" start-stop-daemon --start --quiet --pidfile $PIDFILE --background --make-pidfile --chuid $LDAPPC_USER --exec $LDAPPC_SCRIPT ;; *) echo "Usage: $0 {start|stop|restart}" ;; esac
Remarque le script suivant lis le fichier /etc/default/ldappc1.1.x, pour déterminer s'il doit être lancé au démarrage.
NO_START=0
Problèmes / Solutions
- Failed to find GrouperSession: cannot realize interface edu.internet2.middleware.grouper.internal.cache.SimpleSubjectCache: edu.internet2.middleware.grouper.internal.cache.SimpleSubjectCache
=> Mettre à jour le jar pour l'API de Grouper.
- java.lang.IllegalStateException: null dto in class edu.internet2.middleware.grouper.GrouperSession
=> Dans la méthode GrouperSessionControl.stopSession() (package edu.internet2.middleware.ldappc) remplacer : session.stop(); DebugLog.info("Stopped GrouperSession: " + session); Par : final String info = "Stopped GrouperSession: " + session; session.stop(); DebugLog.info(info);

