From f751d455cdb19ea4c3a287ef3d612e58a5242e20 Mon Sep 17 00:00:00 2001 From: Kayou Date: Fri, 1 Mar 2019 02:05:03 +0100 Subject: [PATCH] Fix LDAP connection --- conf/class.auth.ldap.php | 136 +++++++++++++++++++-------------------- scripts/install | 8 +++ scripts/upgrade | 8 +++ 3 files changed, 82 insertions(+), 70 deletions(-) diff --git a/conf/class.auth.ldap.php b/conf/class.auth.ldap.php index 5e07dfe..e7afbf9 100644 --- a/conf/class.auth.ldap.php +++ b/conf/class.auth.ldap.php @@ -1,82 +1,78 @@ -con->begin(); - $cur = $this->con->openCursor($this->user_table); + # On démarre une transaction et on ouvre un curseur sur la + # table utilisateur de Dotclear pour créer ou modifier + # l'utilisateur. + $this->con->begin(); + $cur = $this->con->openCursor($this->user_table); - # parmetre de configuration pour l'interface PHP pour administrer - # notre annuaire LDAP - $server = "localhost"; - $port = "389"; - $racine = "dc=yunohost,dc=org"; + # parmetre de configuration pour l'interface PHP pour administrer + # notre annuaire LDAP + $server = "localhost"; + $port = "389"; + $racine = "dc=yunohost,dc=org"; - #connection au serveur ldap - $ds=@ldap_connect($server) or die("Could not connect to LDAP server."); - ldap_set_option ($ds, LDAP_OPT_PROTOCOL_VERSION, 3); - if (ldap_bind($ds,"uid=".$user_id.",ou=users,dc=yunohost,dc=org",$pwd)) - { + #connection au serveur ldap + $ds=ldap_connect($server); + ldap_set_option ($ds, LDAP_OPT_PROTOCOL_VERSION, 3); + if (ldap_bind($ds,"uid=".$user_id.",ou=users,dc=yunohost,dc=org",$pwd)) + { + # On définit le mot de passe, il est inséré dans tous les cas. + $cur->user_pwd = $pwd; - # On définit le mot de passe, il est inséré dans tous les cas. - $cur->user_pwd = $pwd; - - # Si l'utilisateur existe, nous allons uniquement mettre à jour - # son mot de passe dans la table utilisateur de Dotclear. - if ($this->core->userExists($user_id)) - { - $this->sudo(array($this->core,'updUser'),$user_id,$cur); - $this->con->commit(); - } - # Si l'utilisateur n'existe pas, nous allons le créer. - # Afin qu'il puisse se connecter, il est nécessaire de lui donner - # au moins une permission "usage" sur le blog "default". - else - { - $sr=ldap_search($ds,$racine,"cn=$user_id",array( "dn", "cn", "sn", "mail", "givenName")); - $info = ldap_get_entries($ds, $sr); - - #on recherche l'utilisateur dans le ldap pour recuperer toutes les informations - $sr=ldap_search($ds,$racine,"cn=$user_id",array( "dn", "cn", "sn", "mail", "givenName")); - $info = ldap_get_entries($ds, $sr); + # Si l'utilisateur existe, nous allons uniquement mettre à jour + # son mot de passe dans la table utilisateur de Dotclear. + if ($this->core->userExists($user_id)) + { + $this->sudo(array($this->core,'updUser'),$user_id,$cur); + $this->con->commit(); + } + # Si l'utilisateur n'existe pas, nous allons le créer. + # Afin qu'il puisse se connecter, il est nécessaire de lui donner + # au moins une permission "usage" sur le blog "default". + else + { + #on recherche l'utilisateur dans le ldap pour recuperer toutes les informations + $sr=ldap_search($ds,$racine,"uid=$user_id",array( "dn", "cn", "sn", "mail", "givenName")); + $info = ldap_get_entries($ds, $sr); - #si le ldap ne ramene qu'un seul utilisateur - if ($info["count"] ==1) - { - $cur->user_id = $info[0]['cn'][0]; - $cur->user_email = $info[0]['mail'][0]; - $cur->user_name = $info[0]['givenName'][0]; - $cur->user_firstname = $info[0]['sn'][0]; - $cur->user_lang = 'fr'; - $cur->user_tz = 'Europe/Paris'; - $cur->user_default_blog = 'default'; - $this->sudo(array($this->core,'addUser'),$cur); - $this->sudo(array($this->core,'setUserBlogPermissions'),$user_id,$user_id,array('admin'=>true)); - $this->con->commit(); - } - } + #si le ldap ne ramene qu'un seul utilisateur + if ($info["count"] ==1) + { + $cur->user_id = $user_id; + $cur->user_email = $info[0]['mail'][0]; + $cur->user_name = $info[0]['givenName'][0]; + $cur->user_firstname = $info[0]['sn'][0]; + $cur->user_lang = 'fr'; + $cur->user_tz = 'Europe/Paris'; + $cur->user_default_blog = 'default'; + $this->sudo(array($this->core,'addUser'),$cur); + $this->sudo(array($this->core,'setUserBlogPermissions'),$user_id,'default',array('admin'=>true)); + $this->con->commit(); + } + } - # Les opérations précédentes se sont déroulées sans erreur, nous - # pouvons maintenant appeler la méthode parente afin d'initialiser - # l'utilisateur dans l'object $core->auth - return parent::checkUser($user_id,$pwd); - } - # En cas d'erreur on annule la transaction et on renvoie "false" - $this->con->rollback(); - return false; - } + # Les opérations précédentes se sont déroulées sans erreur, nous + # pouvons maintenant appeler la méthode parente afin d'initialiser + # l'utilisateur dans l'object $core->auth + return parent::checkUser($user_id, $pwd, $user_key, $check_blog); + } + # En cas d'erreur on annule la transaction et on renvoie "false" + $this->con->rollback(); + return false; + } } ?> \ No newline at end of file diff --git a/scripts/install b/scripts/install index 40ab25d..a6d3aec 100755 --- a/scripts/install +++ b/scripts/install @@ -105,6 +105,7 @@ email=$(yunohost user info $admin | grep mail: | cut -d' ' -f2 | tr -d '\n') ynh_app_setting_set $app master_key $master_key cp $php_config.in $php_config +cp ../conf/class.auth.ldap.php $final_path/inc/class.auth.ldap.php admin_url=$(ynh_url_join $path_url admin/index.php) @@ -128,6 +129,13 @@ ynh_replace_string "'DC_MASTER_KEY', ''" "'DC_MASTER_KEY', '$master_key'" $php_c ynh_replace_string "'DC_ADMIN_URL', ''" "'DC_ADMIN_URL', 'https://$domain$admin_url'" $php_config ynh_replace_string "'DC_ADMIN_MAILFROM', ''" "'DC_ADMIN_MAILFROM', '$email'" $php_config +# Adding LDAP login +cat << EOF >> $php_config + +\$__autoload['myDcAuth'] = dirname(__FILE__).'/class.auth.ldap.php'; +define('DC_AUTH_CLASS','myDcAuth'); +EOF + ynh_store_file_checksum $php_config #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index e5b8e49..c719239 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -125,6 +125,7 @@ ynh_add_fpm_config #================================================= cp $php_config.in $php_config +cp ../conf/class.auth.ldap.php $final_path/inc/class.auth.ldap.php firstname=$(yunohost user info $admin | grep firstname: | cut -d' ' -f2 | tr -d '\n') lastname=$(yunohost user info $admin | grep lastname: | cut -d' ' -f2 | tr -d '\n') @@ -151,6 +152,13 @@ ynh_replace_string "'DC_MASTER_KEY', ''" "'DC_MASTER_KEY', '$master_key'" $php_c ynh_replace_string "'DC_ADMIN_URL', ''" "'DC_ADMIN_URL', 'https://$domain$admin_url'" $php_config ynh_replace_string "'DC_ADMIN_MAILFROM', ''" "'DC_ADMIN_MAILFROM', '$email'" $php_config +# Adding LDAP login +cat << EOF >> $php_config + +\$__autoload['myDcAuth'] = dirname(__FILE__).'/class.auth.ldap.php'; +define('DC_AUTH_CLASS','myDcAuth'); +EOF + # Recalculate and store the checksum of the file for the next upgrade. ynh_store_file_checksum "$php_config"