- Ajout d'un module de récupération de mot de passe (Feature Requests #1662)

- Externalisation de la fonction generatePassword()
- LSform : ajout de la méthode setPostData()
- LSsession_login.js : externalisation du code pour masque la sélection du niveau
- LSformRule : externalisation de la fonction checkMail()
- debug : gestion de l'affichage de dump d'objet
- Mise à jour de LSexample
This commit is contained in:
Benjamin Renard 2008-06-05 13:21:18 +00:00
parent 7d9399bffe
commit 1c2991bc5b
20 changed files with 750 additions and 1010 deletions

View file

@ -257,7 +257,8 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
'required' => 1, 'required' => 1,
'check_data' => array ( 'check_data' => array (
'email' => array( 'email' => array(
'msg' => _("L'adresse e-mail entrée n'est pas valide.") 'msg' => _("L'adresse e-mail entrée n'est pas valide."),
'param' => array('checkDomain' => false)
), ),
), ),
'rights' => array( 'rights' => array(
@ -293,100 +294,6 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
'Mlle' => 'Mlle' 'Mlle' => 'Mlle'
) )
), ),
'maildrop' => array (
'label' => _('Mail indésirable'),
'ldap_type' => 'ascii',
'html_type' => 'text',
'multiple' => true,
'check_data' => array (
'email' => array(
'msg' => _("L'adresse e-mail entrée n'est pas valide.")
),
),
'rights' => array(
'self' => 'w',
'admin' => 'w'
),
'view' => 1,
'form' => array (
'modify' => 1,
)
),
'vacationActive' => array (
'label' => _('Réponse automatique'),
'ldap_type' => 'ascii',
'html_type' => 'select_list',
'default_value' => '',
'check_data' => array (
'email' => array(
'msg' => _("L'adresse e-mail entrée n'est pas valide.")
),
),
'rights' => array(
'self' => 'w',
'admin' => 'w',
'user' => 'r'
),
'view' => 1,
'form' => array (
'modify' => 1,
),
'possible_values' => array(
'' => 'Non',
'%{uid}@autoreponse.example.fr' => 'Oui'
)
),
'vacationInfo' => array (
'label' => _('Message en reponse'),
'ldap_type' => 'ascii',
'html_type' => 'textarea',
'multiple' => true,
'rights' => array(
'self' => 'w',
'admin' => 'w'
),
'view' => 1,
'form' => array (
'modify' => 1,
)
),
'vacationForward' => array (
'label' => _('Transfert de mail'),
'ldap_type' => 'ascii',
'html_type' => 'text',
'check_data' => array (
'email' => array(
'msg' => _("L'adresse e-mail entrée n'est pas valide.")
),
),
'rights' => array(
'self' => 'w',
'user' => 'r',
'admin' => 'w'
),
'view' => 1,
'form' => array (
'modify' => 1,
)
),
'mailQuota' => array (
'label' => _('Quota boite mail'),
'ldap_type' => 'ascii',
'html_type' => 'text',
'check_data' => array (
'numeric' => array(
'msg' => _("Le quota de l'adresse mail entrée n'est pas valide.")
),
),
'rights' => array(
'self' => 'r',
'admin' => 'w'
),
'view' => 1,
'form' => array (
'modify' => 1,
)
),
'description' => array ( 'description' => array (
'label' => _('Description'), 'label' => _('Description'),
'ldap_type' => 'ascii', 'ldap_type' => 'ascii',
@ -423,7 +330,21 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
), ),
'form' => array ( 'form' => array (
'modify' => 1, 'modify' => 1,
'create' => 1 'create' => 1,
'lostPassword' => 1
)
),
'lsRecoveryHash' => array (
'label' => _('Hash de recouvrement du mot de passe'),
'ldap_type' => 'ascii',
'html_type' => 'text',
'required' => 0,
'form' => array (
'lostPassword' => 1
),
'rights' => array(
'self' => 'w',
'admin' => 'w'
) )
), ),
'sambaLMPassword' => array ( 'sambaLMPassword' => array (

View file

@ -43,11 +43,11 @@ $GLOBALS['LSerror_code'] = array (
'level' => 'c' 'level' => 'c'
), ),
4 => array ( 4 => array (
'msg' => _("LSldap : Erreur durant la récupération de l'entrée Ldap."), 'msg' => _("LSldap : Erreur durant la récupération de l'entrée Ldap."),
'level' => 'c' 'level' => 'c'
), ),
5 => array ( 5 => array (
'msg' => _("LSldap : Erreur durant la mise à jour de l'entrée Ldap (DN : %{dn})."), 'msg' => _("LSldap : Erreur durant la mise à jour de l'entrée Ldap (DN : %{dn})."),
'level' => 'c' 'level' => 'c'
), ),
6 => array ( 6 => array (
@ -73,43 +73,43 @@ $GLOBALS['LSerror_code'] = array (
'level' => 'c' 'level' => 'c'
), ),
25 => array ( 25 => array (
'msg' => _("LSldapObject : Des données de configuration sont manquant pour la validation de l'attribut %{attr} de l'objet %{obj}."), 'msg' => _("LSldapObject : Des données de configuration sont manquant pour la validation de l'attribut %{attr} de l'objet %{obj}."),
'level' => 'c' 'level' => 'c'
), ),
26 => array ( 26 => array (
'msg' => _("LSldapObject : Erreur de configuration : L'objet %{obj} ne possède pas d'attribut %{attr}."), 'msg' => _("LSldapObject : Erreur de configuration : L'objet %{obj} ne possède pas d'attribut %{attr}."),
'level' => 'c' 'level' => 'c'
), ),
27 => array ( 27 => array (
'msg' => _("LSldapObject : La fonction %{func} devant être executée avant l'enregistrement n'existe pas."), 'msg' => _("LSldapObject : La fonction %{func} devant être executée avant l'enregistrement n'existe pas."),
'level' => 'c' 'level' => 'c'
), ),
28 => array ( 28 => array (
'msg' => _("LSldapObject : L'execution de la fonction %{func} devant être executée avant l'enregistrement a échouée."), 'msg' => _("LSldapObject : L'execution de la fonction %{func} devant être executée avant l'enregistrement a échouée."),
'level' => 'c' 'level' => 'c'
), ),
29 => array ( 29 => array (
'msg' => _("LSldapObject : La fonction %{func} devant être executée après l'enregistrement n'existe pas."), 'msg' => _("LSldapObject : La fonction %{func} devant être executée après l'enregistrement n'existe pas."),
'level' => 'c' 'level' => 'c'
), ),
30 => array ( 30 => array (
'msg' => _("LSldapObject : L'execution de la fonction %{func} devant être executée après l'enregistrement a échouée."), 'msg' => _("LSldapObject : L'execution de la fonction %{func} devant être executée après l'enregistrement a échouée."),
'level' => 'c' 'level' => 'c'
), ),
31 => array ( 31 => array (
'msg' => _("LSldapObject : Il manque des informations de configuration du type d'objet %{obj} pour la création du nouveau DN."), 'msg' => _("LSldapObject : Il manque des informations de configuration du type d'objet %{obj} pour la création du nouveau DN."),
'level' => 'c' 'level' => 'c'
), ),
32 => array ( 32 => array (
'msg' => _("LSldapObject : L'attribut %{attr} de l'objet n'est pas encore définis. Il est impossible de generer un nouveau DN."), 'msg' => _("LSldapObject : L'attribut %{attr} de l'objet n'est pas encore définis. Il est impossible de generer un nouveau DN."),
'level' => 'c' 'level' => 'c'
), ),
33 => array ( 33 => array (
'msg' => _("LSldapObject : Sans DN, l'objet n'a put être modifié."), 'msg' => _("LSldapObject : Sans DN, l'objet n'a put être modifié."),
'level' => 'c' 'level' => 'c'
), ),
34 => array ( 34 => array (
'msg' => _("LSldapObject : L'attribut %{attr_depend} dépendant de l'attribut %{attr} n'existe pas."), 'msg' => _("LSldapObject : L'attribut %{attr_depend} dépendant de l'attribut %{attr} n'existe pas."),
'level' => 'w' 'level' => 'w'
), ),
35 => array ( 35 => array (
@ -127,11 +127,11 @@ $GLOBALS['LSerror_code'] = array (
'level' => 'c' 'level' => 'c'
), ),
43 => array ( 43 => array (
'msg' => _("LSattribute : La règle %{rule} pour valider l'attribut %{attr} est inconnue."), 'msg' => _("LSattribute : La règle %{rule} pour valider l'attribut %{attr} est inconnue."),
'level' => 'c' 'level' => 'c'
), ),
44 => array ( 44 => array (
'msg' => _("LSattribute : Les données de configuration pour vérifié l'attribut %{attr} sont incorrects."), 'msg' => _("LSattribute : Les données de configuration pour vérifié l'attribut %{attr} sont incorrects."),
'level' => 'c' 'level' => 'c'
), ),
45 => array ( 45 => array (
@ -139,43 +139,43 @@ $GLOBALS['LSerror_code'] = array (
'level' => 'c' 'level' => 'c'
), ),
46 => array ( 46 => array (
'msg' => _("LSattribute : La valeur de l'attribut %{attr} ne peut pas être générée."), 'msg' => _("LSattribute : La valeur de l'attribut %{attr} ne peut pas être générée."),
'level' => 'c' 'level' => 'c'
), ),
47 => array ( 47 => array (
'msg' => _("LSattribute : La valeur de l'attribut %{attr} n'a pas put être générée."), 'msg' => _("LSattribute : La valeur de l'attribut %{attr} n'a pas put être générée."),
'level' => 'c' 'level' => 'c'
), ),
48 => array ( 48 => array (
'msg' => _("LSattribute : La génération de l'attribut %{attr} n'a pas retourné une valeur correcte."), 'msg' => _("LSattribute : La génération de l'attribut %{attr} n'a pas retourné une valeur correcte."),
'level' => 'c' 'level' => 'c'
), ),
// LSattr_html // LSattr_html
101 => array ( 101 => array (
'msg' => _("LSattr_html : La fonction addToForm() du type html de l'attribut %{attr} n'est pas définie."), 'msg' => _("LSattr_html : La fonction addToForm() du type html de l'attribut %{attr} n'est pas définie."),
'level' => 'c' 'level' => 'c'
), ),
102 => array ( 102 => array (
'msg' => _("LSattr_html_select_list : Des données de configuration sont manquante pour la génération de la liste deroulante de l'attribut %{attr}."), 'msg' => _("LSattr_html_select_list : Des données de configuration sont manquante pour la génération de la liste deroulante de l'attribut %{attr}."),
'level' => 'c' 'level' => 'c'
), ),
103 => array ( 103 => array (
'msg' => _("LSattr_html_%{type} : Les données multiples ne sont pas gérés pour ce type d'attribut."), 'msg' => _("LSattr_html_%{type} : Les données multiples ne sont pas gérés pour ce type d'attribut."),
'level' => 'c' 'level' => 'c'
), ),
// LSform // LSform
201 => array( 201 => array(
'msg' => _("LSform : Erreur durant la recupération des valeurs du formulaire."), 'msg' => _("LSform : Erreur durant la recupération des valeurs du formulaire."),
'level' => 'c' 'level' => 'c'
), ),
202 => array( 202 => array(
'msg' => _("LSform : Erreur durant la récupération de la valeur du formulaire du champ '%{element}'."), 'msg' => _("LSform : Erreur durant la récupération de la valeur du formulaire du champ '%{element}'."),
'level' => 'c' 'level' => 'c'
), ),
203 => array( 203 => array(
'msg' => _("LSform : Les données du champ %{element} ne sont pas valides."), 'msg' => _("LSform : Les données du champ %{element} ne sont pas valides."),
'level' => 'c' 'level' => 'c'
), ),
204 => array( 204 => array(
@ -187,16 +187,16 @@ $GLOBALS['LSerror_code'] = array (
'level' => 'c' 'level' => 'c'
), ),
206 => array( 206 => array(
'msg' => _("LSform : Erreur durant la création de l'élement '%{element}'."), 'msg' => _("LSform : Erreur durant la création de l'élement '%{element}'."),
'level' => 'c' 'level' => 'c'
), ),
207 => array( 207 => array(
'msg' => _("LSform : Aucune valeur de rentrée pour le champs '%{element}'."), 'msg' => _("LSform : Aucune valeur de rentrée pour le champs '%{element}'."),
'level' => 'c' 'level' => 'c'
), ),
301 => array( 301 => array(
'msg' => _("LSformRule : Aucune regex n'a été fournis pour la validation des données."), 'msg' => _("LSformRule : Aucune regex n'a été fournis pour la validation des données."),
'level' => 'w' 'level' => 'w'
), ),
@ -208,15 +208,15 @@ $GLOBALS['LSerror_code'] = array (
// LSsession // LSsession
1001 => array ( 1001 => array (
'msg' => _("LSsession : La constante %{const} n'est pas définie."), 'msg' => _("LSsession : La constante %{const} n'est pas définie."),
'level' => 'c' 'level' => 'c'
), ),
1002 => array ( 1002 => array (
'msg' => _("LSsession : Le support %{addon} n'est pas assuré. Vérifier la compatibilité du système et la configuration de l'addon"), 'msg' => _("LSsession : Le support %{addon} n'est pas assuré. Vérifier la compatibilité du système et la configuration de l'addon"),
'level' => 'c' 'level' => 'c'
), ),
1003 => array ( 1003 => array (
'msg' => _("LSsession : Données de configuration du serveur LDAP invalide. Impossible d'établir une connexion."), 'msg' => _("LSsession : Données de configuration du serveur LDAP invalide. Impossible d'établir une connexion."),
'level' => 'c' 'level' => 'c'
), ),
1004 => array ( 1004 => array (
@ -232,7 +232,7 @@ $GLOBALS['LSerror_code'] = array (
'level' => 'c' 'level' => 'c'
), ),
1007 => array ( 1007 => array (
'msg' => _("LSsession : Impossible de vous identifier : Duplication d'authentité."), 'msg' => _("LSsession : Impossible de vous identifier : Duplication d'authentité."),
'level' => 'c' 'level' => 'c'
), ),
1008 => array ( 1008 => array (
@ -248,7 +248,7 @@ $GLOBALS['LSerror_code'] = array (
'level' => 'c' 'level' => 'c'
), ),
1011 => array ( 1011 => array (
'msg' => _("LSsession : Vous n'êtes pas authorisé à effectuer cette action."), 'msg' => _("LSsession : Vous n'êtes pas authorisé à effectuer cette action."),
'level' => 'c' 'level' => 'c'
), ),
1012 => array ( 1012 => array (
@ -260,7 +260,7 @@ $GLOBALS['LSerror_code'] = array (
'level' => 'c' 'level' => 'c'
), ),
1014 => array ( 1014 => array (
'msg' => _("LSrelations : La fonction de mise à jour pour la relation %{relation} est inconnu."), 'msg' => _("LSrelations : La fonction de mise à jour pour la relation %{relation} est inconnu."),
'level' => 'c' 'level' => 'c'
), ),
1015 => array ( 1015 => array (
@ -274,6 +274,18 @@ $GLOBALS['LSerror_code'] = array (
1017 => array ( 1017 => array (
'msg' => _("LSsession : Impossible de créer correctement la liste des niveaux. Vérifier la configuration."), 'msg' => _("LSsession : Impossible de créer correctement la liste des niveaux. Vérifier la configuration."),
'level' => 'c' 'level' => 'c'
),
1018 => array (
'msg' => _("LSsession : La récupération de mot de passe est désactivée pour ce serveur LDAP."),
'level' => 'c'
),
1019 => array (
'msg' => _("LSsession : Des informations sont manquantes pour la récupération de votre mot de passe. Contactez l'administrateur du système."),
'level' => 'c'
),
1020 => array (
'msg' => _("LSsession : Erreur durant la récupération de votre mot de passe. Contactez l'administrateur du système."),
'level' => 'c'
) )
); );
?> ?>

View file

@ -34,7 +34,7 @@ $GLOBALS['LSconfig'] = array(
'port' => 389, 'port' => 389,
'version' => 3, 'version' => 3,
'starttls' => false, 'starttls' => false,
'binddn' => 'uid=eeggs,ou=people,o=ls', 'binddn' => 'uid=ldapsaisie,ou=sysaccounts,o=ls',
'bindpw' => 'toto', 'bindpw' => 'toto',
'basedn' => 'o=ls', 'basedn' => 'o=ls',
'options' => array(), 'options' => array(),
@ -55,6 +55,21 @@ $GLOBALS['LSconfig'] = array(
'cacheLSrights' => false, 'cacheLSrights' => false,
'authobject' => 'LSeepeople', 'authobject' => 'LSeepeople',
'authobject_pwdattr' => 'userPassword', 'authobject_pwdattr' => 'userPassword',
'recoverPassword' => array(
'mailAttr' => 'mail',
'passwordAttr' => 'userPassword',
'recoveryHashAttr' => 'lsRecoveryHash',
'recoveryEmailSender' => 'noreply-recover@lsexample.net',
'recoveryHashMail' => array(
'subject' => 'LSexample : Récupération de votre mot de passe.',
'msg' => "Pour poursuivre le processus de récupération de votre mot de passe,\nmerci de cliquer de vous rendre à l'adresse suivante :\n%{url}"
),
'newPasswordMail' => array(
'subject' => 'LSexample : Votre nouveau mot de passe.',
'msg' => "Votre nouveau mot de passe : %{mdp}"
)
),
'emailSender' => 'noreply@lsexample.net',
'LSobjects' => array ( 'LSobjects' => array (
'LSeepeople', 'LSeepeople',
'LSeegroup', 'LSeegroup',

View file

@ -266,6 +266,35 @@ class LSform {
return; return;
} }
/**
* Défini arbitrairement des données en POST
*
* @author Benjamin Renard <brenard@easter-eggs.com>
*
* @param[in] $data array('attr' => array(values)) Tableau des données du formulaire
* @param[in] $consideredAsSubmit Définie si on force le formualaire comme envoyer
*
* @retval boolean true si les données ont été définies, false sinon
*/
function setPostData($data,$consideredAsSubmit=false) {
if (is_array($data)) {
foreach($data as $key => $values) {
if (!is_array($values)) {
$values = array($values);
}
$_POST[$key] = $values;
}
if ($consideredAsSubmit) {
$_POST['validate']='LSform';
$_POST['idForm']=$this -> idForm;
}
return true;
}
return;
}
/** /**
* Récupère les valeurs postées dans le formulaire * Récupère les valeurs postées dans le formulaire
* *

View file

@ -96,7 +96,7 @@ class LSformElement_password extends LSformElement {
} }
else { else {
if (empty($this -> values)) { if (empty($this -> values)) {
$return['html'] = _('Aucunes valeur definie'); $return['html'] = _('Aucune valeur definie');
} }
else { else {
$return['html'] = "********"; $return['html'] = "********";
@ -107,25 +107,7 @@ class LSformElement_password extends LSformElement {
} }
function generatePassword() { function generatePassword() {
if (isset($this -> params['html_options']['chars'])) { return generatePassword($this -> params['html_options']['chars'],$this -> params['html_options']['lenght']);
$chars=$this -> params['html_options']['chars'];
}
else {
$chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-';
}
$nbChars=strlen($chars);
if (isset($this -> params['html_options']['lenght'])) {
$lenght=$this -> params['html_options']['lenght'];
}
else {
$lenght=8;
}
$retVal='';
for($i=0;$i<$lenght;$i++){
$retVal.=$chars[rand(0,$nbChars-1)];
}
return $retVal;
} }
} }

View file

@ -59,7 +59,7 @@ class LSformElement_text extends LSformElement {
else { else {
$return['html'] = "<ul class='LSform'>\n"; $return['html'] = "<ul class='LSform'>\n";
if (empty($this -> values)) { if (empty($this -> values)) {
$return['html'] .= "<li>"._('Aucunes valeur definie')."</li>\n"; $return['html'] .= "<li>"._('Aucune valeur definie')."</li>\n";
} }
else { else {
foreach ($this -> values as $value) { foreach ($this -> values as $value) {

View file

@ -57,7 +57,7 @@ class LSformElement_textarea extends LSformElement {
} }
else { else {
if (empty($this -> values)) { if (empty($this -> values)) {
$return['html'].="<li class='LSform'>"._('Aucunes valeur definie')."</li>\n"; $return['html'].="<li class='LSform'>"._('Aucune valeur definie')."</li>\n";
} }
else { else {
foreach ($this -> values as $value) { foreach ($this -> values as $value) {

View file

@ -38,20 +38,7 @@ class LSformRule_email extends LSformRule {
* @return boolean true si la valeur est valide, false sinon * @return boolean true si la valeur est valide, false sinon
*/ */
function validate($value,$option=array(),$formElement) { function validate($value,$option=array(),$formElement) {
$regex = '/^((\"[^\"\f\n\r\t\v\b]+\")|([\w\!\#\$\%\&\'\*\+\-\~\/\^\`\|\{\}]+(\.[\w\!\#\$\%\&\'\*\+\-\~\/\^\`\|\{\}]+)*))@((\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9\-])+\.)+[A-Za-z\-]+))$/'; return checkEmail($value,$option['param']['checkDomain']);
if (!preg_match($regex, $value)) {
return false;
}
if ($option['params']['checkDomain'] && function_exists('checkdnsrr')) {
$tokens = explode('@', $email);
if (!(checkdnsrr($tokens[1], 'MX') || checkdnsrr($tokens[1], 'A'))) {
return false;
}
}
return true;
} }
} }

View file

@ -25,7 +25,7 @@ define('LS_DEFAULT_CONF_DIR','conf');
/** /**
* Gestion des sessions * Gestion des sessions
* *
* Cette classe gère les sessions d'utilisateurs. * Cette classe gère les sessions d'utilisateurs.
* *
* @author Benjamin Renard <brenard@easter-eggs.com> * @author Benjamin Renard <brenard@easter-eggs.com>
*/ */
@ -67,11 +67,11 @@ class LSsession {
/** /**
* Chargement de la configuration * Chargement de la configuration
* *
* Chargement des fichiers de configuration et création de l'objet Smarty. * Chargement des fichiers de configuration et création de l'objet Smarty.
* *
* @author Benjamin Renard <brenard@easter-eggs.com> * @author Benjamin Renard <brenard@easter-eggs.com>
* *
* @retval true si tout c'est bien passé, false sinon * @retval true si tout c'est bien passé, false sinon
*/ */
function loadConfig() { function loadConfig() {
if (loadDir($this -> confDir, '^config\..*\.php$')) { if (loadDir($this -> confDir, '^config\..*\.php$')) {
@ -93,11 +93,11 @@ class LSsession {
/** /**
* Initialisation de la gestion des erreurs * Initialisation de la gestion des erreurs
* *
* Création de l'objet LSerror * Création de l'objet LSerror
* *
* @author Benjamin Renard <brenard@easter-eggs.com * @author Benjamin Renard <brenard@easter-eggs.com
* *
* @retval boolean true si l'initialisation a réussi, false sinon. * @retval boolean true si l'initialisation a réussi, false sinon.
*/ */
function startLSerror() { function startLSerror() {
if(!$this -> loadLSclass('LSerror')) if(!$this -> loadLSclass('LSerror'))
@ -109,12 +109,12 @@ class LSsession {
/** /**
* Chargement d'une classe d'LdapSaisie * Chargement d'une classe d'LdapSaisie
* *
* @param[in] $class Nom de la classe à charger (Exemple : LSeepeople) * @param[in] $class Nom de la classe à charger (Exemple : LSeepeople)
* @param[in] $type (Optionnel) Type de classe à charger (Exemple : LSobjects) * @param[in] $type (Optionnel) Type de classe à charger (Exemple : LSobjects)
* *
* @author Benjamin Renard <brenard@easter-eggs.com * @author Benjamin Renard <brenard@easter-eggs.com
* *
* @retval boolean true si le chargement a réussi, false sinon. * @retval boolean true si le chargement a réussi, false sinon.
*/ */
function loadLSclass($class,$type='') { function loadLSclass($class,$type='') {
if (class_exists($class)) if (class_exists($class))
@ -127,9 +127,9 @@ class LSsession {
/** /**
* Chargement d'un object LdapSaisie * Chargement d'un object LdapSaisie
* *
* @param[in] $object Nom de l'objet à charger * @param[in] $object Nom de l'objet à charger
* *
* @retval boolean true si le chargement a réussi, false sinon. * @retval boolean true si le chargement a réussi, false sinon.
*/ */
function loadLSobject($object) { function loadLSobject($object) {
$this -> loadLSclass('LSldapObject'); $this -> loadLSclass('LSldapObject');
@ -148,7 +148,7 @@ class LSsession {
* Chargement des LSobjects contenue dans la variable * Chargement des LSobjects contenue dans la variable
* $this -> ldapServer['LSobjects'] * $this -> ldapServer['LSobjects']
* *
* @retval boolean true si le chargement a réussi, false sinon. * @retval boolean true si le chargement a réussi, false sinon.
*/ */
function loadLSobjects() { function loadLSobjects() {
@ -170,11 +170,11 @@ class LSsession {
/** /**
* Chargement d'un addons d'LdapSaisie * Chargement d'un addons d'LdapSaisie
* *
* @param[in] $addon Nom de l'addon à charger (Exemple : samba) * @param[in] $addon Nom de l'addon à charger (Exemple : samba)
* *
* @author Benjamin Renard <brenard@easter-eggs.com * @author Benjamin Renard <brenard@easter-eggs.com
* *
* @retval boolean true si le chargement a réussi, false sinon. * @retval boolean true si le chargement a réussi, false sinon.
*/ */
function loadLSaddon($addon) { function loadLSaddon($addon) {
return require_once LS_ADDONS_DIR .'LSaddons.'.$addon.'.php'; return require_once LS_ADDONS_DIR .'LSaddons.'.$addon.'.php';
@ -186,7 +186,7 @@ class LSsession {
* Chargement des LSaddons contenue dans la variable * Chargement des LSaddons contenue dans la variable
* $GLOBALS['LSaddons']['loads'] * $GLOBALS['LSaddons']['loads']
* *
* @retval boolean true si le chargement a réussi, false sinon. * @retval boolean true si le chargement a réussi, false sinon.
*/ */
function loadLSaddons() { function loadLSaddons() {
if(!is_array($GLOBALS['LSaddons']['loads'])) { if(!is_array($GLOBALS['LSaddons']['loads'])) {
@ -207,19 +207,19 @@ class LSsession {
* Initialisation de la session LdapSaisie * Initialisation de la session LdapSaisie
* *
* Initialisation d'une LSsession : * Initialisation d'une LSsession :
* - Authentification et activation du mécanisme de session de LdapSaisie * - Authentification et activation du mécanisme de session de LdapSaisie
* - ou Chargement des paramètres de la session à partir de la variable * - ou Chargement des paramètres de la session à partir de la variable
* $_SESSION['LSsession']. * $_SESSION['LSsession'].
* - ou Destruction de la session en cas de $_GET['LSsession_logout']. * - ou Destruction de la session en cas de $_GET['LSsession_logout'].
* *
* @retval boolean True si l'initialisation à réussi (utilisateur authentifié), false sinon. * @retval boolean True si l'initialisation à réussi (utilisateur authentifié), false sinon.
*/ */
function startLSsession() { function startLSsession() {
$this -> loadLSaddons(); $this -> loadLSaddons();
session_start(); session_start();
// Déconnexion // Déconnexion
if (isset($_GET['LSsession_logout'])) { if (isset($_GET['LSsession_logout'])||isset($_GET['LSsession_recoverPassword'])) {
session_destroy(); session_destroy();
if (is_array($_SESSION['LSsession']['tmp_file'])) { if (is_array($_SESSION['LSsession']['tmp_file'])) {
@ -229,6 +229,10 @@ class LSsession {
unset($_SESSION['LSsession']); unset($_SESSION['LSsession']);
} }
// Récupération de mot de passe
if (isset($_GET['recoveryHash'])) {
$_POST['LSsession_user'] = 'a determiner plus tard';
}
if(isset($_SESSION['LSsession'])) { if(isset($_SESSION['LSsession'])) {
// Session existante // Session existante
@ -272,6 +276,7 @@ class LSsession {
} }
else { else {
// Session inexistante // Session inexistante
$recoveryPasswordInfos=array();
if (isset($_POST['LSsession_user'])) { if (isset($_POST['LSsession_user'])) {
if (isset($_POST['LSsession_ldapserver'])) { if (isset($_POST['LSsession_ldapserver'])) {
@ -297,32 +302,178 @@ class LSsession {
if ( $this -> loadLSobject($this -> ldapServer['authobject']) ) { if ( $this -> loadLSobject($this -> ldapServer['authobject']) ) {
$authobject = new $this -> ldapServer['authobject'](); $authobject = new $this -> ldapServer['authobject']();
$result = $authobject -> searchObject($_POST['LSsession_user'],$this -> topDn); $find=true;
$nbresult=count($result); if (isset($_GET['recoveryHash'])) {
$filter=$this -> ldapServer['recoverPassword']['recoveryHashAttr']."=".$_GET['recoveryHash'];
$result = $authobject -> listObjects($filter,$this -> topDn);
$nbresult=count($result);
if ($nbresult==1) {
$_POST['LSsession_user'] = $result[0] -> getValue('rdn');
$find=false;
}
}
if ($find) {
$result = $authobject -> searchObject($_POST['LSsession_user'],$this -> topDn);
$nbresult=count($result);
}
if ($nbresult==0) { if ($nbresult==0) {
// identifiant incorrect // identifiant incorrect
debug('identifiant incorrect'); debug('identifiant incorrect');
$GLOBALS['LSerror'] -> addErrorCode(1006); $GLOBALS['LSerror'] -> addErrorCode(1006);
} }
else if ($nbresult>1) { else if ($nbresult>1) {
// duplication d'authentité // duplication d'authentité
$GLOBALS['LSerror'] -> addErrorCode(1007); $GLOBALS['LSerror'] -> addErrorCode(1007);
} }
else { else {
if ( $this -> checkUserPwd($result[0],$_POST['LSsession_pwd']) ) { if (isset($_GET['LSsession_recoverPassword'])) {
// Authentification réussi debug('Recover : Id trouvé');
$this -> LSuserObject = $result[0]; if ($this -> ldapServer['recoverPassword']) {
$this -> dn = $result[0]->getValue('dn'); debug('Récupération active');
$this -> rdn = $_POST['LSsession_user']; $user=$result[0];
$this -> loadLSrights(); $emailAddress = $user -> getValue($this -> ldapServer['recoverPassword']['mailAttr']);
$this -> loadLSaccess();
$GLOBALS['Smarty'] -> assign('LSsession_username',$this -> LSuserObject -> getDisplayValue()); // Header des mails
$_SESSION['LSsession']=get_object_vars($this); $headers="Content-Type: text/plain; charset=UTF-8; format=flowed";
return true; if ($this -> ldapServer['recoverPassword']['recoveryEmailSender']) {
$headers.="\nFrom: ".$this -> ldapServer['recoverPassword']['recoveryEmailSender'];
}
else if($this -> ldapServer['emailSender']) {
$headers.="\nFrom: ".$this -> ldapServer['emailSender'];
}
if (checkEmail($emailAddress)) {
debug('Email : '.$emailAddress);
$this -> dn = $user -> getDn();
// 1ère étape : envoie du recoveryHash
if (!isset($_GET['recoveryHash'])) {
// Generer un hash
$recovery_hash = md5($user -> getValue('rdn') . strval(time()) . strval(rand()));
$lostPasswdForm = $user -> getForm('lostPassword');
$lostPasswdForm -> setPostData(
array(
$this -> ldapServer['recoverPassword']['recoveryHashAttr'] => $recovery_hash
)
,true
);
if($lostPasswdForm -> validate()) {
if ($user -> updateData('lostPassword')) {
// recoveryHash de l'utilisateur mis à jour
if ($_SERVER['HTTPS']=='on') {
$recovery_url='https://';
}
else {
$recovery_url='http://';
}
$recovery_url .= $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].'&recoveryHash='.$recovery_hash;
if (
mail(
$emailAddress,
$this -> ldapServer['recoverPassword']['recoveryHashMail']['subject'],
getFData($this -> ldapServer['recoverPassword']['recoveryHashMail']['msg'],$recovery_url),
$headers
)
){
// Mail a bien été envoyé
$recoveryPasswordInfos['recoveryHashMail']=$emailAddress;
}
else {
// Problème durant l'envoie du mail
debug("Problème durant l'envoie du mail");
$GLOBALS['LSerror'] -> addErrorCode(1020);
}
}
else {
// Erreur durant la mise à jour de l'objet
debug("Erreur durant la mise à jour de l'objet");
$GLOBALS['LSerror'] -> addErrorCode(1020);
}
}
else {
// Erreur durant la validation du formulaire de modification de perte de password
debug("Erreur durant la validation du formulaire de modification de perte de password");
$GLOBALS['LSerror'] -> addErrorCode(1020);
}
}
// 2nd étape : génération du mot de passe + envoie par mail
else {
$attr=$user -> attrs[$this -> ldapServer['recoverPassword']['passwordAttr']];
if ($attr instanceof LSattribute) {
$mdp = generatePassword($attr -> config['html_options']['chars'],$attr -> config['html_options']['lenght']);
debug('Nvx mpd : '.$mdp);
$lostPasswdForm = $user -> getForm('lostPassword');
$lostPasswdForm -> setPostData(
array(
$this -> ldapServer['recoverPassword']['recoveryHashAttr'] => array(''),
$this -> ldapServer['recoverPassword']['passwordAttr'] => array($mdp)
)
,true
);
if($lostPasswdForm -> validate()) {
if ($user -> updateData('lostPassword')) {
if (
mail(
$emailAddress,
$this -> ldapServer['recoverPassword']['newPasswordMail']['subject'],
getFData($this -> ldapServer['recoverPassword']['newPasswordMail']['msg'],$mdp),
$headers
)
){
// Mail a bien été envoyé
$recoveryPasswordInfos['newPasswordMail']=$emailAddress;
}
else {
// Problème durant l'envoie du mail
debug("Problème durant l'envoie du mail");
$GLOBALS['LSerror'] -> addErrorCode(1020);
}
}
else {
// Erreur durant la mise à jour de l'objet
debug("Erreur durant la mise à jour de l'objet");
$GLOBALS['LSerror'] -> addErrorCode(1020);
}
}
else {
// Erreur durant la validation du formulaire de modification de perte de password
debug("Erreur durant la validation du formulaire de modification de perte de password");
$GLOBALS['LSerror'] -> addErrorCode(1020);
}
}
else {
// l'attribut password n'existe pas
debug("L'attribut password n'existe pas");
$GLOBALS['LSerror'] -> addErrorCode(1020);
}
}
}
else {
$GLOBALS['LSerror'] -> addErrorCode(1019);
}
}
else {
$GLOBALS['LSerror'] -> addErrorCode(1018);
}
} }
else { else {
$GLOBALS['LSerror'] -> addErrorCode(1006); if ( $this -> checkUserPwd($result[0],$_POST['LSsession_pwd']) ) {
debug('mdp incorrect'); // Authentification réussi
$this -> LSuserObject = $result[0];
$this -> dn = $result[0]->getValue('dn');
$this -> rdn = $_POST['LSsession_user'];
$this -> loadLSrights();
$this -> loadLSaccess();
$GLOBALS['Smarty'] -> assign('LSsession_username',$this -> LSuserObject -> getDisplayValue());
$_SESSION['LSsession']=get_object_vars($this);
return true;
}
else {
$GLOBALS['LSerror'] -> addErrorCode(1006);
debug('mdp incorrect');
}
} }
} }
} }
@ -338,15 +489,20 @@ class LSsession {
$GLOBALS['Smarty'] -> assign('ldapServerId',$this -> ldapServerId); $GLOBALS['Smarty'] -> assign('ldapServerId',$this -> ldapServerId);
} }
$GLOBALS['Smarty'] -> assign('topDn',$this -> topDn); $GLOBALS['Smarty'] -> assign('topDn',$this -> topDn);
$this -> displayLoginForm(); if (isset($_GET['LSsession_recoverPassword'])) {
$this -> displayRecoverPasswordForm($recoveryPasswordInfos);
}
else {
$this -> displayLoginForm();
}
return; return;
} }
} }
/** /**
* Définition du serveur Ldap de la session * Définition du serveur Ldap de la session
* *
* Définition du serveur Ldap de la session à partir de son ID dans * Définition du serveur Ldap de la session à partir de son ID dans
* le tableau $GLOBALS['LSconfig']['ldap_servers']. * le tableau $GLOBALS['LSconfig']['ldap_servers'].
* *
* @param[in] integer Index du serveur Ldap * @param[in] integer Index du serveur Ldap
@ -440,12 +596,12 @@ class LSsession {
} }
/** /**
* Retourne les options d'une liste déroulante pour le choix du topDn * Retourne les options d'une liste déroulante pour le choix du topDn
* de connexion au serveur Ldap * de connexion au serveur Ldap
* *
* Liste les subdn ($this ->ldapServer['subDn']) * Liste les subdn ($this ->ldapServer['subDn'])
* *
* @retval string Les options (<option>) pour la sélection du topDn. * @retval string Les options (<option>) pour la sélection du topDn.
*/ */
function getSubDnLdapServerOptions($selected=NULL) { function getSubDnLdapServerOptions($selected=NULL) {
$list = $this -> getSubDnLdapServer(); $list = $this -> getSubDnLdapServer();
@ -483,9 +639,9 @@ class LSsession {
* Test un bind sur le serveur avec le dn de l'objet et le mot de passe fourni. * Test un bind sur le serveur avec le dn de l'objet et le mot de passe fourni.
* *
* @param[in] LSobject L'object "user" pour l'authentification * @param[in] LSobject L'object "user" pour l'authentification
* @param[in] string Le mot de passe à tester * @param[in] string Le mot de passe à tester
* *
* @retval boolean True si l'authentification à ussi, false sinon. * @retval boolean True si l'authentification à réussi, false sinon.
*/ */
function checkUserPwd($object,$pwd) { function checkUserPwd($object,$pwd) {
return $GLOBALS['LSldap'] -> checkBind($object -> getValue('dn'),$pwd); return $GLOBALS['LSldap'] -> checkBind($object -> getValue('dn'),$pwd);
@ -494,7 +650,7 @@ class LSsession {
/** /**
* Affiche le formulaire de login * Affiche le formulaire de login
* *
* Défini les informations pour le template Smarty du formulaire de login. * Défini les informations pour le template Smarty du formulaire de login.
* *
* @retval void * @retval void
*/ */
@ -523,12 +679,72 @@ class LSsession {
$GLOBALS['Smarty'] -> assign('loginform_label_user',_('Identifiant')); $GLOBALS['Smarty'] -> assign('loginform_label_user',_('Identifiant'));
$GLOBALS['Smarty'] -> assign('loginform_label_pwd',_('Mot de passe')); $GLOBALS['Smarty'] -> assign('loginform_label_pwd',_('Mot de passe'));
$GLOBALS['Smarty'] -> assign('loginform_label_submit',_('Connexion')); $GLOBALS['Smarty'] -> assign('loginform_label_submit',_('Connexion'));
$GLOBALS['Smarty'] -> assign('loginform_label_lostpassword',_('Mot de passe oublié ?'));
$this -> setTemplate('login.tpl');
$this -> addJSscript('LSsession_login.js'); $this -> addJSscript('LSsession_login.js');
} }
/** /**
* Défini le template Smarty à utiliser * Affiche le formulaire de récupération de mot de passe
*
* Défini les informations pour le template Smarty du formulaire de
* récupération de mot de passe
*
* @param[in] $infos array() Information sur le status du processus de
* recouvrement de mot de passe
*
* @retval void
*/
function displayRecoverPasswordForm($recoveryPasswordInfos) {
$GLOBALS['Smarty'] -> assign('pagetitle',_('Récupération de votre mot de passe'));
$GLOBALS['Smarty'] -> assign('recoverpasswordform_action','index.php?LSsession_recoverPassword');
if (count($GLOBALS['LSconfig']['ldap_servers'])==1) {
$GLOBALS['Smarty'] -> assign('recoverpasswordform_ldapserver_style','style="display: none"');
}
$GLOBALS['Smarty'] -> assign('recoverpasswordform_label_ldapserver',_('Serveur LDAP'));
$ldapservers_name=array();
$ldapservers_index=array();
foreach($GLOBALS['LSconfig']['ldap_servers'] as $id => $infos) {
$ldapservers_index[]=$id;
$ldapservers_name[]=$infos['name'];
}
$GLOBALS['Smarty'] -> assign('recoverpasswordform_ldapservers_name',$ldapservers_name);
$GLOBALS['Smarty'] -> assign('recoverpasswordform_ldapservers_index',$ldapservers_index);
$GLOBALS['Smarty'] -> assign('recoverpasswordform_label_user',_('Identifiant'));
$GLOBALS['Smarty'] -> assign('recoverpasswordform_label_submit',_('Valider'));
$GLOBALS['Smarty'] -> assign('recoverpasswordform_label_back',_('Retour'));
if (isset($recoveryPasswordInfos['recoveryHashMail'])) {
$GLOBALS['Smarty'] -> assign(
'recoverpassword_msg',
getFData(
_("Un mail vient de vous être envoyé à l'adresse %{mail}. " .
"Merci de suivre les indications contenus dans ce mail."),
$recoveryPasswordInfos['recoveryHashMail']
)
);
}
if (isset($recoveryPasswordInfos['newPasswordMail'])) {
$GLOBALS['Smarty'] -> assign(
'recoverpassword_msg',
getFData(
_("Votre nouveau mot de passe vient de vous être envoyé à l'adresse %{mail}. "),
$recoveryPasswordInfos['newPasswordMail']
)
);
}
$this -> setTemplate('recoverpassword.tpl');
$this -> addJSscript('LSsession_recoverpassword.js');
}
/**
* Défini le template Smarty à utiliser
* *
* Remarque : les fichiers de templates doivent se trouver dans le dossier * Remarque : les fichiers de templates doivent se trouver dans le dossier
* templates/. * templates/.
@ -544,9 +760,9 @@ class LSsession {
/** /**
* Ajoute un script JS au chargement de la page * Ajoute un script JS au chargement de la page
* *
* Remarque : les scripts doivents être dans le dossier LS_JS_DIR. * Remarque : les scripts doivents être dans le dossier LS_JS_DIR.
* *
* @param[in] $script Le nom du fichier de script à charger. * @param[in] $script Le nom du fichier de script à charger.
* *
* @retval void * @retval void
*/ */
@ -559,9 +775,9 @@ class LSsession {
/** /**
* Ajoute une feuille de style au chargement de la page * Ajoute une feuille de style au chargement de la page
* *
* Remarque : les scripts doivents être dans le dossiers templates/css/. * Remarque : les scripts doivents être dans le dossiers templates/css/.
* *
* @param[in] $script Le nom du fichier css à charger. * @param[in] $script Le nom du fichier css à charger.
* *
* @retval void * @retval void
*/ */
@ -572,7 +788,7 @@ class LSsession {
/** /**
* Affiche le template Smarty * Affiche le template Smarty
* *
* Charge les dépendances et affiche le template Smarty * Charge les dépendances et affiche le template Smarty
* *
* @retval void * @retval void
*/ */
@ -631,7 +847,7 @@ class LSsession {
/** /**
* Charge les droits LS de l'utilisateur * Charge les droits LS de l'utilisateur
* *
* @retval boolean True si le chargement à ussi, false sinon. * @retval boolean True si le chargement à réussi, false sinon.
**/ **/
function loadLSrights() { function loadLSrights() {
if (is_array($this -> ldapServer['LSadmins'])) { if (is_array($this -> ldapServer['LSadmins'])) {
@ -650,11 +866,11 @@ class LSsession {
} }
} }
else { else {
debug('Impossible de chargé le dn : '.$dn); debug('Impossible de chargé le dn : '.$dn);
} }
} }
else { else {
debug('Impossible de créer l\'objet de type : '.$conf['LSobject']); debug('Impossible de créer l\'objet de type : '.$conf['LSobject']);
} }
} }
else { else {
@ -682,7 +898,7 @@ class LSsession {
} }
/** /**
* Charge les droits d'accès de l'utilisateur pour construire le menu de l'interface * Charge les droits d'accès de l'utilisateur pour construire le menu de l'interface
* *
* @retval void * @retval void
*/ */
@ -710,7 +926,7 @@ class LSsession {
} }
/** /**
* Dit si l'utilisateur est admin de le DN spécifié * Dit si l'utilisateur est admin de le DN spécifié
* *
* @param[in] string DN de l'objet * @param[in] string DN de l'objet
* *
@ -729,11 +945,11 @@ class LSsession {
} }
/** /**
* Retourne qui est l'utilisateur par rapport à l'object * Retourne qui est l'utilisateur par rapport à l'object
* *
* @param[in] string Le DN de l'objet * @param[in] string Le DN de l'objet
* *
* @retval string 'admin'/'self'/'user' pour Admin , l'utilisateur lui même ou un simple utilisateur * @retval string 'admin'/'self'/'user' pour Admin , l'utilisateur lui même ou un simple utilisateur
*/ */
function whoami($dn) { function whoami($dn) {
if ($this -> isAdmin($dn)) { if ($this -> isAdmin($dn)) {
@ -748,14 +964,14 @@ class LSsession {
} }
/** /**
* Retourne le droit de l'utilisateur à accèder à un objet * Retourne le droit de l'utilisateur à accèder à un objet
* *
* @param[in] string $LSobject Le type de l'objet * @param[in] string $LSobject Le type de l'objet
* @param[in] string $dn Le DN de l'objet (le container_dn du type de l'objet par défaut) * @param[in] string $dn Le DN de l'objet (le container_dn du type de l'objet par défaut)
* @param[in] string $right Le type de droit d'accès à tester ('r'/'w') * @param[in] string $right Le type de droit d'accès à tester ('r'/'w')
* @param[in] string $attr Le nom de l'attribut auquel on test l'accès * @param[in] string $attr Le nom de l'attribut auquel on test l'accès
* *
* @retval boolean True si l'utilisateur a accès, false sinon * @retval boolean True si l'utilisateur a accès, false sinon
*/ */
function canAccess($LSobject,$dn=NULL,$right=NULL,$attr=NULL) { function canAccess($LSobject,$dn=NULL,$right=NULL,$attr=NULL) {
if (!$this -> loadLSobject($LSobject)) if (!$this -> loadLSobject($LSobject))
@ -812,49 +1028,49 @@ class LSsession {
} }
/** /**
* Retourne le droit de l'utilisateur à editer à un objet * Retourne le droit de l'utilisateur à editer à un objet
* *
* @param[in] string $LSobject Le type de l'objet * @param[in] string $LSobject Le type de l'objet
* @param[in] string $dn Le DN de l'objet (le container_dn du type de l'objet par défaut) * @param[in] string $dn Le DN de l'objet (le container_dn du type de l'objet par défaut)
* @param[in] string $attr Le nom de l'attribut auquel on test l'accès * @param[in] string $attr Le nom de l'attribut auquel on test l'accès
* *
* @retval boolean True si l'utilisateur a accès, false sinon * @retval boolean True si l'utilisateur a accès, false sinon
*/ */
function canEdit($LSobject,$dn=NULL,$attr=NULL) { function canEdit($LSobject,$dn=NULL,$attr=NULL) {
return $this -> canAccess($LSobject,$dn,'w',$attr); return $this -> canAccess($LSobject,$dn,'w',$attr);
} }
/** /**
* Retourne le droit de l'utilisateur à supprimer un objet * Retourne le droit de l'utilisateur à supprimer un objet
* *
* @param[in] string $LSobject Le type de l'objet * @param[in] string $LSobject Le type de l'objet
* @param[in] string $dn Le DN de l'objet (le container_dn du type de l'objet par défaut) * @param[in] string $dn Le DN de l'objet (le container_dn du type de l'objet par défaut)
* *
* @retval boolean True si l'utilisateur a accès, false sinon * @retval boolean True si l'utilisateur a accès, false sinon
*/ */
function canRemove($LSobject,$dn) { function canRemove($LSobject,$dn) {
return $this -> canAccess($LSobject,$dn,'w','rdn'); return $this -> canAccess($LSobject,$dn,'w','rdn');
} }
/** /**
* Retourne le droit de l'utilisateur à créer un objet * Retourne le droit de l'utilisateur à créer un objet
* *
* @param[in] string $LSobject Le type de l'objet * @param[in] string $LSobject Le type de l'objet
* *
* @retval boolean True si l'utilisateur a accès, false sinon * @retval boolean True si l'utilisateur a accès, false sinon
*/ */
function canCreate($LSobject) { function canCreate($LSobject) {
return $this -> canAccess($LSobject,NULL,'w','rdn'); return $this -> canAccess($LSobject,NULL,'w','rdn');
} }
/** /**
* Retourne le droit de l'utilisateur à gérer la relation d'objet * Retourne le droit de l'utilisateur à gérer la relation d'objet
* *
* @param[in] string $dn Le DN de l'objet (le container_dn du type de l'objet par défaut) * @param[in] string $dn Le DN de l'objet (le container_dn du type de l'objet par défaut)
* @param[in] string $relationName Le nom de la relation avec l'objet * @param[in] string $relationName Le nom de la relation avec l'objet
* @param[in] string $right Le type de droit a vérifier ('r' ou 'w') * @param[in] string $right Le type de droit a vérifier ('r' ou 'w')
* *
* @retval boolean True si l'utilisateur a accès, false sinon * @retval boolean True si l'utilisateur a accès, false sinon
*/ */
function relationCanAccess($dn,$relationName,$right=NULL) { function relationCanAccess($dn,$relationName,$right=NULL) {
$LSobject=$this -> LSuserObject -> getType(); $LSobject=$this -> LSuserObject -> getType();
@ -876,12 +1092,12 @@ class LSsession {
} }
/** /**
* Retourne le droit de l'utilisateur à modifier la relation d'objet * Retourne le droit de l'utilisateur à modifier la relation d'objet
* *
* @param[in] string $dn Le DN de l'objet (le container_dn du type de l'objet par défaut) * @param[in] string $dn Le DN de l'objet (le container_dn du type de l'objet par défaut)
* @param[in] string $relationName Le nom de la relation avec l'objet * @param[in] string $relationName Le nom de la relation avec l'objet
* *
* @retval boolean True si l'utilisateur a accès, false sinon * @retval boolean True si l'utilisateur a accès, false sinon
*/ */
function relationCanEdit($dn,$relationName) { function relationCanEdit($dn,$relationName) {
return $this -> relationCanAccess($dn,$relationName,'w'); return $this -> relationCanAccess($dn,$relationName,'w');
@ -922,8 +1138,8 @@ class LSsession {
/** /**
* Retourne le chemin du fichier temporaire * Retourne le chemin du fichier temporaire
* *
* Retourne le chemin du fichier temporaire qu'il créera à partir de la valeur * Retourne le chemin du fichier temporaire qu'il créera à partir de la valeur
* s'il n'existe pas déjà. * s'il n'existe pas déjà.
* *
* @author Benjamin Renard <brenard@easter-eggs.com> * @author Benjamin Renard <brenard@easter-eggs.com>
* *

View file

@ -112,7 +112,7 @@ function return_data($data) {
function debug($data,$get=true) { function debug($data,$get=true) {
if ($get) { if ($get) {
if (is_array($data)) { if (is_array($data)||is_object($data)) {
$GLOBALS['LSdebug']['fields'][]=$data; $GLOBALS['LSdebug']['fields'][]=$data;
} }
else { else {
@ -126,7 +126,7 @@ function debug_print($return=false) {
if (( $GLOBALS['LSdebug']['fields'] ) && ( $GLOBALS['LSdebug']['active'] )) { if (( $GLOBALS['LSdebug']['fields'] ) && ( $GLOBALS['LSdebug']['active'] )) {
$txt='<ul>'; $txt='<ul>';
foreach($GLOBALS['LSdebug']['fields'] as $debug) { foreach($GLOBALS['LSdebug']['fields'] as $debug) {
if (is_array($debug)) { if (is_array($debug)||is_object($debug)) {
$txt.='<li><pre>'.print_r($debug,true).'</pre></li>'; $txt.='<li><pre>'.print_r($debug,true).'</pre></li>';
} }
else { else {
@ -135,11 +135,11 @@ function debug_print($return=false) {
} }
$txt.='</ul>'; $txt.='</ul>';
$GLOBALS['Smarty'] -> assign('LSdebug',$txt); $GLOBALS['Smarty'] -> assign('LSdebug',$txt);
if ($return) { if ($return) {
return $txt; return $txt;
} }
} }
return; return;
} }
/** /**
@ -224,4 +224,39 @@ function debug_print($return=false) {
return $basedn; return $basedn;
} }
function checkEmail($value,$checkDns=true) {
$regex = '/^((\"[^\"\f\n\r\t\v\b]+\")|([\w\!\#\$\%\&\'\*\+\-\~\/\^\`\|\{\}]+(\.[\w\!\#\$\%\&\'\*\+\-\~\/\^\`\|\{\}]+)*))@((\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9\-])+\.)+[A-Za-z\-]+))$/';
if (!preg_match($regex, $value)) {
debug('checkEmail : regex fail');
return false;
}
if ($checkDns && function_exists('checkdnsrr')) {
$tokens = explode('@', $value);
if (!(checkdnsrr($tokens[1], 'MX') || checkdnsrr($tokens[1], 'A'))) {
debug('checkEmail : DNS fail');
return false;
}
}
return true;
}
function generatePassword($chars=NULL,$lenght=NULL) {
if (!$chars) {
$chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-';
}
$nbChars=strlen($chars);
if (!$lenght) {
$lenght=8;
}
$retVal='';
for($i=0;$i<$lenght;$i++){
$retVal.=$chars[rand(0,$nbChars-1)];
}
return $retVal;
}
?> ?>

View file

@ -43,6 +43,7 @@ var LSsession_login = new Class({
} }
if (data.LSerror) { if (data.LSerror) {
varLSdefault.displayError(data.LSerror); varLSdefault.displayError(data.LSerror);
this.loginformLevelHide();
return; return;
} }
if (data.list_topDn) { if (data.list_topDn) {
@ -53,18 +54,20 @@ var LSsession_login = new Class({
}); });
} }
else { else {
$$('.loginform-level').each(function(el) { this.loginformLevelHide();
el.setStyle('display','none');
});
} }
} }
else { else {
$$('.loginform-level').each(function(el) { this.loginformLevelHide();
el.setStyle('display','none');
});
$('LSsession_topDn').empty();
} }
this.enableInput(); this.enableInput();
},
loginformLevelHide: function(){
$$('.loginform-level').each(function(el) {
el.setStyle('display','none');
});
$('LSsession_topDn').empty();
} }
}); });
window.addEvent(window.ie ? 'load' : 'domready', function() { window.addEvent(window.ie ? 'load' : 'domready', function() {

View file

@ -33,9 +33,6 @@ if($LSsession -> startLSsession()) {
// Template // Template
$GLOBALS['LSsession'] -> setTemplate('accueil.tpl'); $GLOBALS['LSsession'] -> setTemplate('accueil.tpl');
} }
else {
$GLOBALS['LSsession'] -> setTemplate('login.tpl');
}
// Affichage des retours d'erreurs // Affichage des retours d'erreurs
$GLOBALS['LSsession'] -> displayTemplate(); $GLOBALS['LSsession'] -> displayTemplate();

View file

@ -1,175 +1,48 @@
# Easter-eggs OID: 1.3.6.1.4.1.10650 # LdapSaisie - LDAP Schema - Example
# 1.3.6.1.4.1.10650.2 LDAP OID # Web Site : http://ldapsaisie.labs.libre-entreprise.org
# 1.3.6.1.4.1.10650.3 Customers OID objectIdentifier EeRoot 1.3.6.1.4.1.10650
# objectIdentifier LeRoot EeRoot:4
# 1.3.6.1.4.1.10650.2.1 Ldap Attributes objectIdentifier LsRoot LeRoot:10000
# 1.3.6.1.4.1.10650.2.1.1 Admin sys Ldap Attributes objectIdentifier LsLDAP LsRoot:2
# 1.3.6.1.4.1.10650.2.1.2 Dev Ldap Attributes objectIdentifier LsLDAPAttribute LsLDAP:1
# 1.3.6.1.4.1.10650.2.1.3 Global Attributes objectIdentifier LsLDAPObjectClass LsLDAP:2
# 1.3.6.1.4.1.10650.2.2 Ldap Objectclass
# 1.3.6.1.4.1.10650.2.2.1 Admin sys Ldap Objectclass
# 1.3.6.1.4.1.10650.2.2.2 Dev Ldap Objectclass
# 1.3.6.1.4.1.10650.2.2.3 Global OC
# Ost # <Ls attributes>
# 1.3.6.1.4.1.10650.3.1127.2.1 Ldap attributes attributetype (LsLDAPAttribute:1
# 1.3.6.1.4.1.10650.3.1127.2.2 Ldap OC NAME 'lsAllowedServices'
# <Ee attributes>
attributetype (1.3.6.1.4.1.10650.2.1.1.1
NAME 'eeallowedservices'
DESC 'List of allowed services' DESC 'List of allowed services'
EQUALITY caseIgnoreMatch EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} )
# </Ee attributes> attributetype ( LsLDAPAttribute:2 NAME 'lsRecoveryHash'
DESC 'Password Recover Hash'
EQUALITY caseIgnoreMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)
# </Ls attributes>
# <From qmail schema> # <Ls Objectclass>
attributetype ( 1.3.6.1.4.1.7914.1.2.1.4 NAME 'mailAlternateAddress' objectclass (LsLDAPObjectClass:1
SUBSTR caseIgnoreSubstringsMatch
DESC 'Secondary (alias) mailaddresses for the same user'
EQUALITY caseIgnoreIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
attributetype ( 1.3.6.1.4.1.7914.1.2.1.7 NAME 'mailForwardingAddress'
DESC 'Address(es) to forward all incoming messages to.'
EQUALITY caseIgnoreIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
# </From qmail schema>
# <From courier.schema>
attributetype ( 1.3.6.1.4.1.10018.1.1.1 NAME 'mailbox'
DESC 'The absolute path to the mailbox for a mail account in a non-default location'
EQUALITY caseExactIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
attributetype ( 1.3.6.1.4.1.10018.1.1.4 NAME 'maildrop'
DESC 'RFC822 Mailbox - mail alias'
EQUALITY caseIgnoreIA5Match
SUBSTR caseIgnoreIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
# </From courier.schema>
# <From postfix>
attributetype ( 1.3.6.1.4.1.7914.1.2.1.5 NAME 'mailQuota'
DESC 'The amount of space the user can use until all further messages get bounced.'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.44
SINGLE-VALUE )
# </From postfix>
# <From gnarwl>
# Original
#attributetype ( 1.3.6.1.4.1.11048.1.1.1.1
# NAME 'vacationActive'
# SINGLE-VALUE
# EQUALITY booleanMatch
# DESC 'A flag, for marking the user as being away'
# SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 )
# Ee
attributetype ( 1.3.6.1.4.1.11048.1.1.1.1
NAME 'vacationActive'
SINGLE-VALUE
DESC 'Equal to uid@autoreponse.foo.bar, for marking the user as being away'
EQUALITY caseIgnoreIA5Match
SUBSTR caseIgnoreIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
attributetype ( 1.3.6.1.4.1.11048.1.1.1.3
NAME 'vacationInfo'
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.40
DESC 'Absentee note to leave behind, while on vacation'
EQUALITY octetStringMatch )
attributetype ( 1.3.6.1.4.1.11048.1.1.1.4
NAME 'vacationStart'
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.40
DESC 'Beginning of vacation'
EQUALITY octetStringMatch )
# Original
#attributetype ( 1.3.6.1.4.1.11048.1.1.1.5
# NAME 'vacationEnd'
# SINGLE-VALUE
# SYNTAX 1.3.6.1.4.1.1466.115.121.1.40
# DESC 'End of vacation'
# EQUALITY octetStringMatch )
# Ee
attributetype ( 1.3.6.1.4.1.11048.1.1.1.5
NAME 'vacationEnd'
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
DESC 'End of vacation'
ORDERING generalizedTimeOrderingMatch
EQUALITY generalizedTimeMatch )
attributetype (1.3.6.1.4.1.11048.1.1.1.10
NAME 'vacationForward'
EQUALITY caseIgnoreIA5Match
SUBSTR caseIgnoreIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256}
DESC 'Where to forward mails to, while on vacation' )
# </From gnarwl>
## Objectclasses
# LS people
objectclass (1.3.6.1.4.1.10650.3.1127.2.2.1
NAME 'lspeople' NAME 'lspeople'
DESC 'LS people Objectclass' DESC 'LS people Objectclass'
STRUCTURAL STRUCTURAL
MUST ( uid $ cn ) MUST ( uid $ cn )
MAY ( jpegPhoto $ sn $ givenName $ postalAddress $ postalCode $ l $ st $ c $ telephoneNumber $ mobile $ fax $ mail $ mailalternateaddress $ personalTitle $ description $ userPassword $ eeallowedservices $ mailforwardingaddress $ maildrop $ mailquota $ mailbox $ vacationActive $ vacationInfo $ vacationEnd $ vacationForward )) MAY ( jpegPhoto $ sn $ givenName $ postalAddress $ postalCode $ l $ st $ c $
telephoneNumber $ mobile $ fax $ mail $ personalTitle $ description $
userPassword $ lsallowedservices $ lsRecoveryHash ))
# LS Alias objectclass (LsLDAPObjectClass:3
objectclass (1.3.6.1.4.1.10650.3.1127.2.2.2
NAME 'lsalias'
DESC 'LS alias Objectclass'
STRUCTURAL
MUST ( mail $ maildrop )
MAY ( mailalternateaddress $ description ))
# LS group
objectclass (1.3.6.1.4.1.10650.3.1127.2.2.3
NAME 'lsgroup' NAME 'lsgroup'
DESC 'LS group Objectclass' DESC 'LS group Objectclass'
STRUCTURAL STRUCTURAL
MUST ( cn ) MUST ( cn )
MAY ( uniquemember $ description )) MAY ( uniquemember $ description ))
# LS system account objectclass (LsLDAPObjectClass:4
objectclass (1.3.6.1.4.1.10650.3.1127.2.2.4
NAME 'lssysaccount' NAME 'lssysaccount'
DESC 'LS system account Objectclass' DESC 'LS system account Objectclass'
STRUCTURAL STRUCTURAL
MUST ( uid ) MUST ( uid )
MAY (userpassword $ description)) MAY (userPassword $ description))
# </Ls Objectclass>
# Ost mailbox
objectclass (1.3.6.1.4.1.10650.3.1127.2.2.5
NAME 'lsmailbox'
DESC 'LS custom mailbox Objectclass'
STRUCTURAL
MUST ( uid )
MAY ( userPassword $ description $ eeallowedservices $ maildrop $ mailbox $ mail $ mailalternateaddress $ mailforwardingaddress $ mailquota ))
# Ost computer
objectclass (1.3.6.1.4.1.10650.3.1127.2.2.6
NAME 'lscomputer'
DESC 'LS computer Objectclass'
STRUCTURAL
MUST ( uid ))
# Ost samba domains
objectclass (1.3.6.1.4.1.10650.3.1127.2.2.8
NAME 'lssambadomain'
DESC 'LS samba domain Objectclass'
STRUCTURAL)

View file

@ -3,110 +3,39 @@ objectClass: top
objectClass: organization objectClass: organization
o: ls o: ls
structuralObjectClass: organization structuralObjectClass: organization
entryUUID: 2229e388-825b-1029-838c-b10e837060e0
creatorsName: cn=anonymous
modifiersName: cn=anonymous
createTimestamp: 20050706111624Z
modifyTimestamp: 20050706111624Z
entryCSN: 20050706111624.000000Z#000001#000#000000
dn: ou=sysaccounts,o=ls dn: ou=sysaccounts,o=ls
objectClass: top objectClass: top
objectClass: organizationalUnit objectClass: organizationalUnit
ou: sysaccounts ou: sysaccounts
structuralObjectClass: organizationalUnit structuralObjectClass: organizationalUnit
entryUUID: 2238a738-825b-1029-838d-b10e837060e0
creatorsName: cn=anonymous
modifiersName: cn=anonymous
createTimestamp: 20050706111624Z
modifyTimestamp: 20050706111624Z
entryCSN: 20050706111624.000000Z#000002#000#000000
dn: ou=people,o=ls dn: uid=mail,ou=sysaccounts,o=ls
objectClass: top objectClass: top
objectClass: organizationalUnit objectClass: lssysaccount
ou: people uid: mail
structuralObjectClass: organizationalUnit structuralObjectClass: lssysaccount
entryUUID: 223b67e8-825b-1029-838e-b10e837060e0 userPassword: toto
creatorsName: cn=anonymous
modifiersName: cn=anonymous
createTimestamp: 20050706111624Z
modifyTimestamp: 20050706111624Z
entryCSN: 20050706111624.000000Z#000003#000#000000
dn: ou=mailboxes,o=ls dn: uid=samba,ou=sysaccounts,o=ls
objectClass: top objectClass: top
objectClass: organizationalUnit objectClass: lssysaccount
ou: mailboxes uid: samba
structuralObjectClass: organizationalUnit structuralObjectClass: lssysaccount
entryUUID: 2240f622-825b-1029-8390-b10e837060e0 userPassword: toto
creatorsName: cn=anonymous
modifiersName: cn=anonymous
createTimestamp: 20050706111624Z
modifyTimestamp: 20050706111624Z
entryCSN: 20050706111624.000000Z#000005#000#000000
dn: ou=aliases,o=ls dn: uid=ldapsaisie,ou=sysaccounts,o=ls
objectClass: top objectClass: top
objectClass: organizationalUnit objectClass: lssysaccount
ou: aliases uid: ldapsaisie
structuralObjectClass: organizationalUnit structuralObjectClass: lssysaccount
entryUUID: 2243b88a-825b-1029-8391-b10e837060e0 userPassword: toto
creatorsName: cn=anonymous
modifiersName: cn=anonymous
createTimestamp: 20050706111624Z
modifyTimestamp: 20050706111624Z
entryCSN: 20050706111624.000000Z#000006#000#000000
dn: ou=computers,o=ls
objectClass: top
objectClass: organizationalUnit
ou: computers
structuralObjectClass: organizationalUnit
entryUUID: 22468588-825b-1029-8392-b10e837060e0
creatorsName: cn=anonymous
modifiersName: cn=anonymous
createTimestamp: 20050706111624Z
modifyTimestamp: 20050706111624Z
entryCSN: 20050706111624.000000Z#000007#000#000000
dn: ou=sambadomains,o=ls
objectClass: top
objectClass: organizationalUnit
ou: sambadomains
structuralObjectClass: organizationalUnit
entryUUID: 224cf30a-825b-1029-8394-b10e837060e0
creatorsName: cn=anonymous
modifiersName: cn=anonymous
createTimestamp: 20050706111624Z
modifyTimestamp: 20050706111624Z
entryCSN: 20050706111624.000000Z#000009#000#000000
dn: sambaDomainName=LS_NT,ou=sambadomains,o=ls
objectClass: top
objectClass: lssambadomain
objectClass: sambaDomain
sambaDomainName: LS_NT
sambaSID: S-1-5-21-2421470416-3566881284-3047381809
structuralObjectClass: lssambadomain
entryUUID: 2250d4ac-825b-1029-8395-b10e837060e0
creatorsName: cn=anonymous
modifiersName: cn=anonymous
createTimestamp: 20050706111624Z
modifyTimestamp: 20050706111624Z
entryCSN: 20050706111624.000000Z#00000a#000#000000
dn: ou=groups,o=ls dn: ou=groups,o=ls
objectClass: top objectClass: top
objectClass: organizationalUnit objectClass: organizationalUnit
ou: groups ou: groups
structuralObjectClass: organizationalUnit structuralObjectClass: organizationalUnit
entryUUID: 224947d2-825b-1029-8393-b10e837060e0
creatorsName: cn=anonymous
modifiersName: cn=anonymous
createTimestamp: 20050706111624Z
modifyTimestamp: 20050706111624Z
entryCSN: 20050706111624.000000Z#000008#000#000000
dn: cn=adminldap,ou=groups,o=ls dn: cn=adminldap,ou=groups,o=ls
objectClass: top objectClass: top
@ -118,91 +47,81 @@ gidNumber: 70000
sambaSID: S-1-5-21-2421470416-3566881284-3047381809-70000 sambaSID: S-1-5-21-2421470416-3566881284-3047381809-70000
sambaGroupType: 2 sambaGroupType: 2
structuralObjectClass: lsgroup structuralObjectClass: lsgroup
entryUUID: 226bb240-825b-1029-8396-b10e837060e0
creatorsName: cn=anonymous
createTimestamp: 20050706111625Z
uniqueMember: uid=eeggs,ou=people,o=ls uniqueMember: uid=eeggs,ou=people,o=ls
entryCSN: 20080211142717.746402Z#000000#000#000000
modifiersName: uid=eeggs,ou=people,o=ls
modifyTimestamp: 20080211142717Z
dn: uid=mail,ou=sysaccounts,o=ls dn: cn=invite,ou=groups,o=ls
objectClass: top objectClass: top
objectClass: lssysaccount objectClass: lsgroup
uid: mail objectClass: posixGroup
structuralObjectClass: lssysaccount objectClass: sambaGroupMapping
userPassword: toto cn: invite
entryUUID: 22958d72-825b-1029-839c-b10e837060e0 gidNumber: 101009
creatorsName: cn=anonymous sambaSID: S-1-5-21-2421470416-3566881284-3047381809-203019
modifiersName: cn=anonymous sambaGroupType: 2
createTimestamp: 20050706111625Z structuralObjectClass: lsgroup
modifyTimestamp: 20050706111625Z
entryCSN: 20050706111625.000000Z#000007#000#000000
dn: uid=ftp,ou=sysaccounts,o=ls dn: cn=ls,ou=groups,o=ls
objectClass: top objectClass: top
objectClass: lssysaccount objectClass: lsgroup
uid: ftp objectClass: posixGroup
structuralObjectClass: lssysaccount objectClass: sambaGroupMapping
userPassword: toto cn: ls
entryUUID: 22a46608-825b-1029-839d-b10e837060e0 gidNumber: 102001
creatorsName: cn=anonymous sambaSID: S-1-5-21-2421470416-3566881284-3047381809-205003
modifiersName: cn=anonymous sambaGroupType: 2
createTimestamp: 20050706111625Z structuralObjectClass: lsgroup
modifyTimestamp: 20050706111625Z uniqueMember: uid=secretariat,ou=people,o=ls
entryCSN: 20050706111625.000000Z#000008#000#000000
dn: uid=http,ou=sysaccounts,o=ls dn: cn=informatique,ou=groups,o=ls
objectClass: top objectClass: top
objectClass: lssysaccount objectClass: lsgroup
uid: http objectClass: posixGroup
structuralObjectClass: lssysaccount objectClass: sambaGroupMapping
userPassword: toto gidNumber: 102009
entryUUID: 22a7274e-825b-1029-839e-b10e837060e0 sambaSID: S-1-5-21-2421470416-3566881284-3047381809-205019
creatorsName: cn=anonymous sambaGroupType: 2
modifiersName: cn=anonymous structuralObjectClass: lsgroup
createTimestamp: 20050706111625Z cn: informatique
modifyTimestamp: 20050706111625Z uniqueMember: uid=eeggs,ou=people,o=ls
entryCSN: 20050706111625.000000Z#000009#000#000000
dn: uid=samba,ou=sysaccounts,o=ls dn: cn=direction,ou=groups,o=ls
objectClass: top objectClass: top
objectClass: lssysaccount objectClass: lsgroup
uid: samba objectClass: posixGroup
structuralObjectClass: lssysaccount objectClass: sambaGroupMapping
entryUUID: 22a9f44c-825b-1029-839f-b10e837060e0 cn: direction
creatorsName: cn=anonymous gidNumber: 102007
createTimestamp: 20050706111625Z sambaSID: S-1-5-21-2421470416-3566881284-3047381809-205015
userPassword: toto sambaGroupType: 2
entryCSN: 20050706115506.000000Z#000001#000#000000 structuralObjectClass: lsgroup
modifiersName: uid=eeggs,ou=people,o=ls
modifyTimestamp: 20050706115506Z
dn: uid=ldapsaisie,ou=sysaccounts,o=ls dn: cn=administratif,ou=groups,o=ls
objectClass: top objectClass: top
objectClass: lssysaccount objectClass: lsgroup
uid: ldapsaisie objectClass: posixGroup
structuralObjectClass: lssysaccount objectClass: sambaGroupMapping
userPassword: toto cn: administratif
entryUUID: 22acb6aa-825b-1029-83a0-b10e837060e0 gidNumber: 102005
creatorsName: cn=anonymous sambaSID: S-1-5-21-2421470416-3566881284-3047381809-205011
modifiersName: cn=anonymous sambaGroupType: 2
createTimestamp: 20050706111625Z structuralObjectClass: lsgroup
modifyTimestamp: 20050706111625Z
entryCSN: 20050706111625.000000Z#00000b#000#000000
dn: uid=nss,ou=sysaccounts,o=ls dn: cn=communication,ou=groups,o=ls
objectClass: top objectClass: top
objectClass: lssysaccount objectClass: lsgroup
uid: nss objectClass: posixGroup
structuralObjectClass: lssysaccount objectClass: sambaGroupMapping
entryUUID: 22b06d40-825b-1029-83a1-b10e837060e0 cn: communication
creatorsName: cn=anonymous gidNumber: 102003
createTimestamp: 20050706111625Z sambaSID: S-1-5-21-2421470416-3566881284-3047381809-205007
userPassword: toto sambaGroupType: 2
entryCSN: 20050706115152.000000Z#000001#000#000000 structuralObjectClass: lsgroup
modifiersName: uid=eeggs,ou=people,o=ls
modifyTimestamp: 20050706115152Z dn: ou=people,o=ls
objectClass: top
objectClass: organizationalUnit
ou: people
structuralObjectClass: organizationalUnit
dn: uid=eeggs,ou=people,o=ls dn: uid=eeggs,ou=people,o=ls
objectClass: top objectClass: top
@ -213,35 +132,22 @@ uid: eeggs
uidNumber: 100000 uidNumber: 100000
sambaSID: S-1-5-21-2421470416-3566881284-3047381809-201000 sambaSID: S-1-5-21-2421470416-3566881284-3047381809-201000
structuralObjectClass: lspeople structuralObjectClass: lspeople
entryUUID: 22b70a42-825b-1029-83a3-b10e837060e0
creatorsName: cn=anonymous
createTimestamp: 20050706111625Z
gidNumber: 102009 gidNumber: 102009
mail: eeggs@ldapsaisie.biz mail: eeggs@ldapsaisie.biz
facsimileTelephoneNumber: 030000000 facsimileTelephoneNumber: 030000000
vacationInfo: Je suis absent pour le moment lsallowedservices: MAIL
vacationEnd: 20070101000000Z lsallowedservices: FTP
vacationForward: brenard@easter-eggs.com
eeallowedservices: MAIL
eeallowedservices: FTP
description: Utilisateur test Easter-eggs description: Utilisateur test Easter-eggs
cn: Easter Eggs cn: Easter Eggs
sambaPrimaryGroupSID: S-1-5-21-2421470416-3566881284-3047381809-205019 sambaPrimaryGroupSID: S-1-5-21-2421470416-3566881284-3047381809-205019
mailbox: eeggs/
personalTitle: M. personalTitle: M.
userPassword: toto userPassword: toto
sambaLMPassword: AAD3B435B51404EEAAD3B435B51404EE sambaLMPassword: AAD3B435B51404EEAAD3B435B51404EE
sambaNTPassword: 31D6CFE0D16AE931B73C59D7E0C089C0 sambaNTPassword: 31D6CFE0D16AE931B73C59D7E0C089C0
mailQuota: 5
homeDirectory: /home/eeggs homeDirectory: /home/eeggs
loginShell: /bin/false loginShell: /bin/false
givenName: Easter givenName: Easter
maildrop: eeggs@ldapsaisie.biz
vacationActive:
sn: Eggs sn: Eggs
entryCSN: 20080211134602.394624Z#000000#000#000000
modifiersName: uid=eeggs,ou=people,o=ls
modifyTimestamp: 20080211134602Z
dn: uid=invite,ou=people,o=ls dn: uid=invite,ou=people,o=ls
objectClass: top objectClass: top
@ -260,22 +166,13 @@ userPassword: toto
sambaAcctFlags: [U ] sambaAcctFlags: [U ]
sambaPrimaryGroupSID: S-1-5-21-2421470416-3566881284-3047381809-203019 sambaPrimaryGroupSID: S-1-5-21-2421470416-3566881284-3047381809-203019
sambaSID: S-1-5-21-2421470416-3566881284-3047381809-203024 sambaSID: S-1-5-21-2421470416-3566881284-3047381809-203024
mailbox: invite/ lsallowedservices: MAIL
mailQuota: 52428800 lsallowedservices: SAMBA
eeallowedservices: MAIL lsallowedservices: FTP
eeallowedservices: SAMBA
eeallowedservices: FTP
mail: invite@ldapsaisie.biz mail: invite@ldapsaisie.biz
maildrop: invite@ldapsaisie.biz
structuralObjectClass: lspeople structuralObjectClass: lspeople
entryUUID: 233dd144-825b-1029-9a9d-8f6e2b792dd2
creatorsName: cn=anonymous
createTimestamp: 20050706111626Z
sambaNTPassword: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX sambaNTPassword: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
sambaLMPassword: NO PASSWORDXXXXXXXXXXXXXXXXXXXXX sambaLMPassword: NO PASSWORDXXXXXXXXXXXXXXXXXXXXX
entryCSN: 20050706133832.000000Z#000008#000#000000
modifiersName: uid=eeggs,ou=people,o=ls
modifyTimestamp: 20050706133832Z
dn: uid=hmartin,ou=people,o=ls dn: uid=hmartin,ou=people,o=ls
objectClass: top objectClass: top
@ -289,30 +186,19 @@ uidNumber: 101022
sambaAcctFlags: [U ] sambaAcctFlags: [U ]
sambaSID: S-1-5-21-2421470416-3566881284-3047381809-203044 sambaSID: S-1-5-21-2421470416-3566881284-3047381809-203044
structuralObjectClass: lspeople structuralObjectClass: lspeople
entryUUID: 234393a4-825b-1029-9a9f-8f6e2b792dd2
creatorsName: cn=anonymous
createTimestamp: 20050706111626Z
givenName: Henri givenName: Henri
sn: MARTIN sn: MARTIN
gidNumber: 102001 gidNumber: 102001
mail: henri.martin@ldapsaisie.biz mail: henri.martin@ldapsaisie.biz
maildrop: henri.martin@ldapsaisie.biz lsallowedservices: MAIL
mailAlternateAddress: hmartin@ldapsaisie.biz lsallowedservices: SAMBA
vacationEnd: 20060101000000Z lsallowedservices: FTP
mailQuota: 52428800
eeallowedservices: MAIL
eeallowedservices: SAMBA
eeallowedservices: FTP
cn: Henri MARTIN cn: Henri MARTIN
sambaPrimaryGroupSID: S-1-5-21-2421470416-3566881284-3047381809-205003 sambaPrimaryGroupSID: S-1-5-21-2421470416-3566881284-3047381809-205003
mailbox: hmartin/
personalTitle: M. personalTitle: M.
userPassword: toto userPassword: toto
sambaLMPassword: AAD3B435B51404EEAAD3B435B51404EE sambaLMPassword: AAD3B435B51404EEAAD3B435B51404EE
sambaNTPassword: 31D6CFE0D16AE931B73C59D7E0C089C0 sambaNTPassword: 31D6CFE0D16AE931B73C59D7E0C089C0
entryCSN: 20080211164417.161923Z#000000#000#000000
modifiersName: uid=eeggs,ou=people,o=ls
modifyTimestamp: 20080211164417Z
dn: uid=secretariat,ou=people,o=ls dn: uid=secretariat,ou=people,o=ls
objectClass: top objectClass: top
@ -327,27 +213,17 @@ userPassword: toto
sambaAcctFlags: [U ] sambaAcctFlags: [U ]
sambaSID: S-1-5-21-2421470416-3566881284-3047381809-203072 sambaSID: S-1-5-21-2421470416-3566881284-3047381809-203072
structuralObjectClass: lspeople structuralObjectClass: lspeople
entryUUID: 239920bc-825b-1029-9abb-8f6e2b792dd2
creatorsName: cn=anonymous
createTimestamp: 20050706111627Z
sambaNTPassword: 8DB716B655D71DF6BD056A41B22B9EA9 sambaNTPassword: 8DB716B655D71DF6BD056A41B22B9EA9
sambaLMPassword: 6CE56DC112C920EF0F5E44C88BF9DC39 sambaLMPassword: 6CE56DC112C920EF0F5E44C88BF9DC39
givenName: Secretariat givenName: Secretariat
sn: Secretariat sn: Secretariat
gidNumber: 70513 gidNumber: 70513
mail: secretariat@ldapsaisie.biz mail: secretariat@ldapsaisie.biz
maildrop: secretariat@ldapsaisie.biz lsallowedservices: MAIL
vacationEnd: 20050101000000Z lsallowedservices: SAMBA
mailQuota: 52428800 lsallowedservices: FTP
eeallowedservices: MAIL
eeallowedservices: SAMBA
eeallowedservices: FTP
cn: Secretariat Secretariat cn: Secretariat Secretariat
mailbox: secretariat/
sambaPrimaryGroupSID: S-1-5-21-2421470416-3566881284-3047381809-513 sambaPrimaryGroupSID: S-1-5-21-2421470416-3566881284-3047381809-513
entryCSN: 20050706144306.000000Z#000001#000#000000
modifiersName: uid=eeggs,ou=people,o=ls
modifyTimestamp: 20050706144306Z
dn: uid=ls,ou=people,o=ls dn: uid=ls,ou=people,o=ls
objectClass: top objectClass: top
@ -364,192 +240,15 @@ sambaLMPassword: 6E72264E11F708C0AAD3B435B51404EE
sambaNTPassword: 8D9B9B87EE8C0423691F4F0E00C5BDE1 sambaNTPassword: 8D9B9B87EE8C0423691F4F0E00C5BDE1
sambaSID: S-1-5-21-2421470416-3566881284-3047381809-203136 sambaSID: S-1-5-21-2421470416-3566881284-3047381809-203136
structuralObjectClass: lspeople structuralObjectClass: lspeople
entryUUID: 23afa346-825b-1029-9ac3-8f6e2b792dd2
creatorsName: cn=anonymous
createTimestamp: 20050706111627Z
givenName: _ givenName: _
sn: LdapSaisie sn: LdapSaisie
gidNumber: 102001 gidNumber: 102001
mail: ls@ldapsaisie.biz mail: ls@ldapsaisie.biz
maildrop: ls@ldapsaisie.biz lsallowedservices: MAIL
vacationEnd: 20060101000000Z lsallowedservices: SAMBA
mailQuota: 52428800 lsallowedservices: FTP
eeallowedservices: MAIL
eeallowedservices: SAMBA
eeallowedservices: FTP
cn: LS cn: LS
sambaPrimaryGroupSID: S-1-5-21-2421470416-3566881284-3047381809-205003 sambaPrimaryGroupSID: S-1-5-21-2421470416-3566881284-3047381809-205003
mailbox: ls/
entryCSN: 20061212145541.000000Z#000001#000#000000
modifiersName: uid=catbo,ou=people,o=ls
modifyTimestamp: 20061212145541Z
dn: cn=invite,ou=groups,o=ls
objectClass: top
objectClass: lsgroup
objectClass: posixGroup
objectClass: sambaGroupMapping
cn: invite
gidNumber: 101009
sambaSID: S-1-5-21-2421470416-3566881284-3047381809-203019
sambaGroupType: 2
structuralObjectClass: lsgroup
entryUUID: 2425636a-825b-1029-9ae1-8f6e2b792dd2
creatorsName: cn=anonymous
createTimestamp: 20050706111628Z
entryCSN: 20070308165544.000000Z#000000#000#000000
modifiersName: uid=eeggs,ou=people,o=ls
modifyTimestamp: 20070308165544Z
dn: cn=ls,ou=groups,o=ls
objectClass: top
objectClass: lsgroup
objectClass: posixGroup
objectClass: sambaGroupMapping
cn: ls
gidNumber: 102001
sambaSID: S-1-5-21-2421470416-3566881284-3047381809-205003
sambaGroupType: 2
structuralObjectClass: lsgroup
entryUUID: 242bef1e-825b-1029-9ae3-8f6e2b792dd2
creatorsName: cn=anonymous
createTimestamp: 20050706111628Z
uniqueMember: uid=secretariat,ou=people,o=ls
entryCSN: 20080211142555.171664Z#000000#000#000000
modifiersName: uid=eeggs,ou=people,o=ls
modifyTimestamp: 20080211142555Z
dn: cn=informatique,ou=groups,o=ls
objectClass: top
objectClass: lsgroup
objectClass: posixGroup
objectClass: sambaGroupMapping
gidNumber: 102009
sambaSID: S-1-5-21-2421470416-3566881284-3047381809-205019
sambaGroupType: 2
structuralObjectClass: lsgroup
entryUUID: 2438d9d6-825b-1029-9ae7-8f6e2b792dd2
creatorsName: cn=anonymous
createTimestamp: 20050706111628Z
cn: informatique
uniqueMember: uid=eeggs,ou=people,o=ls
entryCSN: 20070309093000.000000Z#000000#000#000000
modifiersName: uid=eeggs,ou=people,o=ls
modifyTimestamp: 20070309093000Z
dn: cn=direction,ou=groups,o=ls
objectClass: top
objectClass: lsgroup
objectClass: posixGroup
objectClass: sambaGroupMapping
cn: direction
gidNumber: 102007
sambaSID: S-1-5-21-2421470416-3566881284-3047381809-205015
sambaGroupType: 2
structuralObjectClass: lsgroup
entryUUID: 243f7a34-825b-1029-9ae9-8f6e2b792dd2
creatorsName: cn=anonymous
createTimestamp: 20050706111628Z
entryCSN: 20070309093009.000000Z#000000#000#000000
modifiersName: uid=eeggs,ou=people,o=ls
modifyTimestamp: 20070309093009Z
dn: cn=administratif,ou=groups,o=ls
objectClass: top
objectClass: lsgroup
objectClass: posixGroup
objectClass: sambaGroupMapping
cn: administratif
gidNumber: 102005
sambaSID: S-1-5-21-2421470416-3566881284-3047381809-205011
sambaGroupType: 2
structuralObjectClass: lsgroup
entryUUID: 245e0cb0-825b-1029-9af4-8f6e2b792dd2
creatorsName: cn=anonymous
createTimestamp: 20050706111628Z
entryCSN: 20070308180424.000000Z#000001#000#000000
modifiersName: uid=eeggs,ou=people,o=ls
modifyTimestamp: 20070308180424Z
dn: cn=communication,ou=groups,o=ls
objectClass: top
objectClass: lsgroup
objectClass: posixGroup
objectClass: sambaGroupMapping
cn: communication
gidNumber: 102003
sambaSID: S-1-5-21-2421470416-3566881284-3047381809-205007
sambaGroupType: 2
structuralObjectClass: lsgroup
entryUUID: 2460db34-825b-1029-9af5-8f6e2b792dd2
creatorsName: cn=anonymous
createTimestamp: 20050706111628Z
entryCSN: 20070308180413.000000Z#000000#000#000000
modifiersName: uid=eeggs,ou=people,o=ls
modifyTimestamp: 20070308180413Z
dn: uid=spam,ou=mailboxes,o=ls
uid: spam
userPassword: toto
mailQuota: 104857600
eeallowedservices: MAIL
mail: spam@ldapsaisie.biz
maildrop: spam@ldapsaisie.biz
mailbox: spam/
objectClass: top
objectClass: lsmailbox
structuralObjectClass: lsmailbox
entryUUID: c88b9eb4-8301-1029-9567-dda2c03231d0
creatorsName: uid=eeggs,ou=people,o=ls
createTimestamp: 20050707070920Z
entryCSN: 20050707070920.000000Z#000001#000#000000
modifiersName: uid=eeggs,ou=people,o=ls
modifyTimestamp: 20050707070920Z
dn: uid=virus,ou=mailboxes,o=ls
uid: virus
userPassword: toto
mailbox: virus/
objectClass: top
objectClass: lsmailbox
structuralObjectClass: lsmailbox
entryUUID: 974dac8c-8303-1029-9569-dda2c03231d0
creatorsName: uid=eeggs,ou=people,o=ls
createTimestamp: 20050707072216Z
mailQuota: 104857600
eeallowedservices: MAIL
mail: virus@ldapsaisie.biz
maildrop: virus@ldapsaisie.biz
entryCSN: 20050707072249.000000Z#000001#000#000000
modifiersName: uid=eeggs,ou=people,o=ls
modifyTimestamp: 20050707072249Z
dn: uid=gnarwl,ou=sysaccounts,o=ls
objectClass: top
objectClass: lssysaccount
uid: gnarwl
structuralObjectClass: lssysaccount
entryUUID: f55954e0-fdcc-1029-9d72-de06c303d7ef
creatorsName: uid=eeggs,ou=people,o=ls
createTimestamp: 20051210133105Z
userPassword: toto
entryCSN: 20051210133237.000000Z#000001#000#000000
modifiersName: uid=eeggs,ou=people,o=ls
modifyTimestamp: 20051210133237Z
dn: mail=informatique@ldapsaisie.biz,ou=aliases,o=ls
objectClass: top
objectClass: lsalias
structuralObjectClass: lsalias
entryUUID: 081e6612-fdd0-1029-9d73-de06c303d7ef
creatorsName: uid=eeggs,ou=people,o=ls
createTimestamp: 20051210135305Z
mail: informatique@ldapsaisie.biz
description: Service Informatique
maildrop: eeggs@ldapsaisie.biz
entryCSN: 20051210141428.000000Z#000001#000#000000
modifiersName: uid=eeggs,ou=people,o=ls
modifyTimestamp: 20051210141428Z
dn: uid=erwpa,ou=people,o=ls dn: uid=erwpa,ou=people,o=ls
uid: erwpa uid: erwpa
@ -563,42 +262,16 @@ homeDirectory: /home/erwpa
loginShell: /bin/false loginShell: /bin/false
sambaSID: S-1-5-21-2421470416-3566881284-3047381809-203164 sambaSID: S-1-5-21-2421470416-3566881284-3047381809-203164
structuralObjectClass: lspeople structuralObjectClass: lspeople
entryUUID: aa7fcb30-b1a3-102a-875e-dcce935f6f2c
sn: PAGEARD sn: PAGEARD
gidNumber: 102009 gidNumber: 102009
mail: erwan.page@ldapsaisie.biz mail: erwan.page@ldapsaisie.biz
maildrop: erwan.page@ldapsaisie.biz lsallowedservices: MAIL
vacationEnd: 20060101000000Z lsallowedservices: SAMBA
eeallowedservices: MAIL lsallowedservices: FTP
eeallowedservices: SAMBA
eeallowedservices: FTP
cn: Erwan PAGE cn: Erwan PAGE
sambaPrimaryGroupSID: S-1-5-21-2421470416-3566881284-3047381809-205019 sambaPrimaryGroupSID: S-1-5-21-2421470416-3566881284-3047381809-205019
mailbox: erwpa/
personalTitle: M. personalTitle: M.
givenName: Erwan givenName: Erwan
userPassword: toto userPassword: toto
sambaLMPassword: BAC14D04669EE1D1AAD3B435B51404EE sambaLMPassword: BAC14D04669EE1D1AAD3B435B51404EE
sambaNTPassword: FBBF55D0EF0E34D39593F55C5F2CA5F2 sambaNTPassword: FBBF55D0EF0E34D39593F55C5F2CA5F2
entryCSN: 20080211170049.821887Z#000000#000#000000
modifiersName: uid=eeggs,ou=people,o=ls
modifyTimestamp: 20080211170049Z
dn: cn=test,ou=groups,o=ls
cn: test
description: test BR
objectClass: top
objectClass: lsgroup
objectClass: sambaGroupMapping
objectClass: posixGroup
sambaGroupType: 2
gidNumber: 102012
sambaSID: 42
structuralObjectClass: lsgroup
entryUUID: 91b290d2-6117-102b-9c6f-91889acd20dc
creatorsName: uid=eeggs,ou=people,o=ls
createTimestamp: 20070307164933Z
entryCSN: 20070308165811.000000Z#000000#000#000000
modifiersName: uid=eeggs,ou=people,o=ls
modifyTimestamp: 20070308165811Z

View file

@ -1,208 +1,94 @@
## Racine ## Racine
access to dn.regex="^o=ls$" attrs="entry,children,objectclass" access to dn.regex="^o=ls$" attrs="entry,children,objectclass"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by users read by dn="uid=ldapsaisie,ou=sysaccounts,o=ls" write
by * read by users read
by * read
## Sysaccounts
### Ajout d'entrees par les admins
access to dn.regex="^ou=sysaccounts,o=ls$" attrs="children"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by users read
by * none
access to dn.regex="^uid=[^,]+,ou=sysaccounts,o=ls$" attrs="entry,objectclass"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by users read
by * none
### Les admins peuvent modifier le mot de passe, les autres peuvent s'en servir pour l'authentification
access to dn.regex="^uid=[^,]+,ou=sysaccounts,o=ls$" attrs="userPassword"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by anonymous auth
by * none
### Les admins peuvent modifier tous les attributs, les autres ne voient rien
access to dn.regex="^uid=[^,]+,ou=sysaccounts,o=ls$"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by * none
## Aliases
### Ajout d'entrees par les admins
access to dn.regex="^ou=aliases,o=ls$" attrs="children,objectclass"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by * read
access to dn.regex="^mail=[^,]+,ou=aliases,o=ls$" attrs="entry,objectclass"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by * read
### Les admins peuvent modifier tous les attributs, tout le monde peut voir
access to dn.regex="^mail=[^,]+,ou=aliases,o=ls$"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by * read
## Mailboxes
### Ajout d'entrees par les admins
access to dn.regex="^ou=mailboxes,o=ls$" attrs="children,objectclass"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by * read
access to dn.regex="^uid=[^,]+,ou=mailboxes,o=ls$" attrs="entry,objectclass"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by * read
### Les admins peuvent modifier le mot de passe, les autres peuvent s'en servir pour l'authentification
access to dn.regex="^uid=[^,]+,ou=mailboxes,o=ls$" attrs="userPassword"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by anonymous auth
by * none
### Les admins peuvent modifier ces attributs, l'appli mail le voir, les autres aucun droits
access to dn.regex="^uid=[^,]+,ou=mailboxes,o=ls$" attrs="mailbox,mailforwardingaddress"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by dn="uid=mail,ou=sysaccounts,o=ls" read
by * none
### Les admins peuvent modifier ces attributs, les authentifies peuvent les voir
access to dn.regex="^uid=[^,]+,ou=mailboxes,o=ls$" attrs="uid,description,mail,mailalternateaddress,mailquota,eeallowedservices"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by * read
## Groups ## Groups
### Ajout d'entrees par les admins ### Ajout d'entrees par les admins
access to dn.regex="^ou=groups,o=ls$" attrs="children,objectclass" access to dn.regex="^ou=groups,o=ls$" attrs="children,objectclass"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by users read by dn="uid=ldapsaisie,ou=sysaccounts,o=ls" write
by * none by users read
by * none
access to dn.regex="^cn=[^,]+,ou=groups,o=ls$" attrs="entry,objectclass" access to dn.regex="^cn=[^,]+,ou=groups,o=ls$" attrs="entry,objectclass"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by users read by dn="uid=ldapsaisie,ou=sysaccounts,o=ls" write
by * none by users read
by * none
### Les admins peuvent tout modifier, les authentifies peuvent tout voir ### Les admins peuvent tout modifier, les authentifies peuvent tout voir
access to dn.regex="^cn=[^,]+,ou=groups,o=ls$" access to dn.regex="^cn=[^,]+,ou=groups,o=ls$"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by users read by dn="uid=ldapsaisie,ou=sysaccounts,o=ls" write
by * none by users read
by * none
## Peoples ## Peoples
### Ajout d'entrees par les admins ### Ajout d'entrees par les admins
access to dn.regex="^ou=people,o=ls$" attrs="children,objectclass" access to dn.regex="^ou=people,o=ls$" attrs="children,objectclass"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by users read by dn="uid=ldapsaisie,ou=sysaccounts,o=ls" write
by * read by users read
by * read
access to dn.regex="^uid=[^,]+,ou=people,o=ls$" attrs="entry,objectclass" access to dn.regex="^uid=[^,]+,ou=people,o=ls$" attrs="entry,objectclass"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by users read by dn="uid=ldapsaisie,ou=sysaccounts,o=ls" write
by * read by users read
by * read
### Les admins peuvent modifier le mot de passe, samba le mettre à jour, les autres peuvent s'en servir pour l'authentification ### Les admins peuvent modifier le mot de passe, samba le mettre à jour, les autres peuvent s'en servir pour l'authentification
access to dn.regex="^uid=[^,]+,ou=people,o=ls$" attrs="userPassword" access to dn.regex="^uid=[^,]+,ou=people,o=ls$" attrs="userPassword"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by dn="uid=samba,ou=sysaccounts,o=ls" write by dn="uid=samba,ou=sysaccounts,o=ls" write
by self write by dn="uid=ldapsaisie,ou=sysaccounts,o=ls" write
by anonymous auth by self write
by * none by anonymous auth
by * none
### Les admins peuvent modifier ces attributs, l'appli mail les voir, les autres aucun droits access to dn.regex="^uid=[^,]+,ou=sysaccounts,o=ls$" attrs="userPassword"
access to dn.regex="^uid=[^,]+,ou=people,o=ls$" attrs="mailbox" by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write by dn="uid=ldapsaisie,ou=sysaccounts,o=ls" write
by dn="uid=mail,ou=sysaccounts,o=ls" read by anonymous auth
by * none by * none
### Les admins peuvent modifier ces attributs, les authentifies peuvent les voir ### Les admins peuvent modifier ces attributs, les authentifies peuvent les voir
access to dn.regex="^uid=[^,]+,ou=people,o=ls$" attrs="uid,mailquota,eeallowedservices,uidNumber,gidNumber,homeDirectory,loginShell,sambaSID,sambaAcctFlags,sambaPrimaryGroupSID" access to dn.regex="^uid=[^,]+,ou=people,o=ls$" attrs="uid,lsallowedservices,uidNumber,gidNumber,homeDirectory,loginShell,sambaSID,sambaAcctFlags,sambaPrimaryGroupSID"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by users read by dn="uid=ldapsaisie,ou=sysaccounts,o=ls" write
by * none by users read
by * none
### Les admins peuvent modifier ces attributs, le proprio aussi, gnarwl peut les modifier et mail les voir
access to dn.regex="^uid=[^,]+,ou=people,o=ls$" attrs="mailforwardingaddress"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by dn="uid=gnarwl,ou=sysaccounts,o=ls" write
by self write
by dn="uid=mail,ou=sysaccounts,o=ls" read
by * none
### Les admins peuvent modifier ces attributs, le proprio aussi, les authentifies peuvent les voir, gnarwl peut les modifier
access to dn.regex="^uid=[^,]+,ou=people,o=ls$" attrs="vacationActive"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by dn="uid=gnarwl,ou=sysaccounts,o=ls" write
by self write
by users read
by * none
### Les admins peuvent modifier ces attributs, le proprio aussi, mail et gnarwl peuvent les voir
access to dn.regex="^uid=[^,]+,ou=people,o=ls$" attrs="vacationForward"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by self write
by dn="uid=mail,ou=sysaccounts,o=ls" read
by dn="uid=gnarwl,ou=sysaccounts,o=ls" read
by * none
### Les admins peuvent modifier ces attributs, le proprio aussi, samba aussi ### Les admins peuvent modifier ces attributs, le proprio aussi, samba aussi
access to dn.regex="^uid=[^,]+,ou=people,o=ls$" attrs="sambaLMPassword,sambaNTPassword" access to dn.regex="^uid=[^,]+,ou=people,o=ls$" attrs="sambaLMPassword,sambaNTPassword"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by dn="uid=samba,ou=sysaccounts,o=ls" write by dn="uid=ldapsaisie,ou=sysaccounts,o=ls" write
by self write by dn="uid=samba,ou=sysaccounts,o=ls" write
by * none by self write
by * none
### Les admins peuvent modifier ces attributs, le proprio aussi, les authentifies peuvent les voir ### Les admins peuvent modifier ces attributs, le proprio aussi, les authentifies peuvent les voir
access to dn.regex="^uid=[^,]+,ou=people,o=ls$" attrs="c,cn,jpegPhoto,personalTitle,sn,givenName,postalAddress,postalCode,l,st,telephoneNumber,mobile,fax,mail,mailalternateaddress,maildrop,description,vacationInfo,vacationEnd" access to dn.regex="^uid=[^,]+,ou=people,o=ls$" attrs="c,cn,jpegPhoto,personalTitle,sn,givenName,postalAddress,postalCode,l,st,telephoneNumber,mobile,fax,mail,description"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by self write by dn="uid=ldapsaisie,ou=sysaccounts,o=ls" write
by users read by self write
by * read by users read
by * read
## Computers
### Ajout d'entrees par les admins
access to dn.regex="^ou=computers,o=ls$" attrs="children,objectclass"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by dn="uid=samba,ou=sysaccounts,o=ls" write
by users read
by * none
access to dn.regex="^uid=[^,]+,ou=computers,o=ls$" attrs="entry,objectclass"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by dn="uid=samba,ou=sysaccounts,o=ls" write
by users read
by * none
### Les admins peuvent modifier ces attributs, samba peut les voir
access to dn.regex="^uid=[^,]+,ou=computers,o=ls$" attrs="sambaLMPassword,sambaNTPassword"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by dn="uid=samba,ou=sysaccounts,o=ls" write
by * none
### Les admins peuvent modifier ces attributs, les authentifiés peuvent les voir
access to dn.regex="^uid=[^,]+,ou=computers,o=ls$" attrs="cn,uid,uidNumber,gidNumber,homeDirectory,sambaSID,sambaPrimaryGroupSID,sambaAcctFlags,sambaPwdCanChange,sambaPwdMustChange,sambaPwdLastSet"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by dn="uid=samba,ou=sysaccounts,o=ls" write
by users read
by * none
## Les authentifies peuvent voir les noeuds et les admins peuvent en ajouter ## Les authentifies peuvent voir les noeuds et les admins peuvent en ajouter
access to * attrs="entry" access to * attrs="entry"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by users read by dn="uid=ldapsaisie,ou=sysaccounts,o=ls" write
by * none by users read
by * none
## SambaDomains
### Ajout d'entrees par les admins
access to dn.regex="^ou=sambadomains,o=ls$"
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by dn="uid=samba,ou=sysaccounts,o=ls" read
by users read
by * none
## Le reste ## Le reste
access to * access to *
by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write by group/lsgroup/uniqueMember="cn=adminldap,ou=groups,o=ls" write
by * none by dn="uid=ldapsaisie,ou=sysaccounts,o=ls" write
by * none

View file

@ -1,3 +1,4 @@
# LSexample - Config
include /etc/ldap/schema/ls.schema include /etc/ldap/schema/ls.schema
@ -14,10 +15,9 @@ index objectClass eq
index uid pres,eq index uid pres,eq
index uidNumber eq index uidNumber eq
index gidNumber eq index gidNumber eq
index eeallowedservices eq index lsallowedservices eq
index cn pres,eq index cn pres,eq
index mail pres,eq index mail pres,eq
index mailalternateaddress pres,eq
index sambasid eq index sambasid eq
index sambaDomainName eq index sambaDomainName eq
index memberUid eq index memberUid eq

View file

@ -53,3 +53,11 @@ dl.loginform {
float: right; float: right;
margin-left: 1em; margin-left: 1em;
} }
#LSsession_lostPassword {
float: right;
font-size: 0.8em;
text-decoration: none;
color: #69c;
font-weight: bold;
}

View file

@ -0,0 +1,60 @@
#recoverpasswordform-logo {
float: left;
}
div.recoverpasswordform {
margin: auto;
margin-top: 10%;
border: 1px solid #69c;
padding: 1em;
width: 30em;
background: transparent url(../images/login_fd.png) no-repeat scroll 98% 98%;
}
dl.recoverpasswordform {
margin: 0;
padding: 0;
}
.recoverpasswordform dt {
position: relative;
left: 0;
top: 1.1em;
width: 8em;
font-weight: bold;
font-size: 0.9em;
}
.recoverpasswordform dd {
margin: 0 0 0 9em;
padding: 0 0 0em 0em;
}
.recoverpasswordform input, .recoverpasswordform select {
border: 1px inset #ccc;
width: 13em;
}
.recoverpasswordform input[type='submit'] {
border: 1px outset #ccc;
width: 11em;
margin: 1em;
}
#loading_zone {
float: right;
margin-left: 1em;
}
#recoverpassword_msg {
text-align: center;
font-weight: bold;
}
#recoverpassword_back {
float: right;
font-size: 0.8em;
text-decoration: none;
color: #69c;
font-weight: bold;
}

View file

@ -2,6 +2,7 @@
"http://www.w3.org/TR/html4/loose.dtd"> "http://www.w3.org/TR/html4/loose.dtd">
<html> <html>
<head> <head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>LdapSaisie{if $pagetitle != ''} - {$pagetitle}{/if}</title> <title>LdapSaisie{if $pagetitle != ''} - {$pagetitle}{/if}</title>
<link rel="stylesheet" type="text/css" href="templates/css/login.css" media="screen" title="Normal" /> <link rel="stylesheet" type="text/css" href="templates/css/login.css" media="screen" title="Normal" />
{$LSsession_css} {$LSsession_css}
@ -33,6 +34,7 @@
<dd><input type='submit' value='{$loginform_label_submit}' /></dd> <dd><input type='submit' value='{$loginform_label_submit}' /></dd>
</dl> </dl>
</form> </form>
<a href='index.php?LSsession_recoverPassword' id='LSsession_lostPassword'>{$loginform_label_lostpassword}</a>
</div> </div>
</body> </body>
</html> </html>

View file

@ -0,0 +1,41 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>LdapSaisie{if $pagetitle != ''} - {$pagetitle}{/if}</title>
<link rel="stylesheet" type="text/css" href="templates/css/recoverpassword.css" media="screen" title="Normal" />
{$LSsession_css}
{$LSsession_js}
</head>
<body>
<div id='LSerror'>
{$LSerrors}
</div>
<div id='LSdebug'>
<a href='#' id='LSdebug_hidden'>X</a>
<div id='LSdebug_infos'>{if $LSdebug != ''}{$LSdebug}{/if}</div>
</div>
<div class='recoverpasswordform'>
<img src='templates/images/logo.png' alt='Logo' id='recoverpasswordform_logo' />
<div id='loading_zone'></div>
<form action='{$recoverpasswordform_action}' method='post'>
<dl class='recoverpasswordform'>
<dt {$recoverpasswordform_ldapserver_style}>{$recoverpasswordform_label_ldapserver}</dt>
<dd {$recoverpasswordform_ldapserver_style}>
<select name='LSsession_ldapserver' id='LSsession_ldapserver'>{html_options values=$recoverpasswordform_ldapservers_index output=$recoverpasswordform_ldapservers_name selected=$ldapServerId}</select>
</dd>
<dt>{$recoverpasswordform_label_user}</dt>
<dd><input type='text' name='LSsession_user' /></dd>
<dd><input type='submit' value='{$recoverpasswordform_label_submit}' /></dd>
</dl>
</form>
{if recoverpassword_msg!=''}
<p id='recoverpassword_msg'>{$recoverpassword_msg}</p>
{/if}
<a href='index.php' id='recoverpassword_back'>{$recoverpasswordform_label_back}</a>
</div>
</body>
</html>