Valider 9be624a9 rédigé par esj's avatar esj
Parcourir les fichiers

Reconception de la déclaration LDAP pour permettre le multi-base entre 2 sites...

Reconception de la déclaration LDAP pour permettre le multi-base entre 2 sites utilisant LDAP différemment (en particulier pas du tout pour l'un).

Le multi-base exclut d'avoir des fonctions dans les fichiers de configuration, aussi la fonction '''spip_connect_ldap''' devient une fonction dans les sources de SPIP, assez proche de spip_connect: elle prend en argument optionnel le nom d'un serveur, inclut son fichier de configuration censé établir la connexion et retourne Vrai si elle a réussi, Faux sinon. Elle remplace donc la globale booléenne {{{ldap_present}}} qui était incompatible avec le multi-serveur.

Le fichier habituel config/connect.php indique à présent qu'une connexion LDAP est nécessaire par l'intermédiaire d'un 7e argument (optionnel) à '''spip_connect_db'''. En conséquence, le numéro de version de ce fichier (indiqué par '''spip_connect_version''') passe à 0.7. 

La description d'un serveur dans le tableau '''$connexions''' possède à présent un index supplémentaire, {{{ldap}}}, indiquant le nom du fichier établissant la connexion, donc indiquant l'adresse, le port, la base etc. Ce fichier est supposé toujours dans le répertoire _DIR_CONNECT.

Le code gérant un compte LDAP général en plus d'un compte particulier ne semblait plus opérationnel dans ce contexte et a donc été retiré. Si quelqu'un a une configuration comme ça, on reviendra sur ce choix. En attendant, cette simplification devrait aider à trouver une solution pour AD.
parent dbf831fa
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -61,7 +61,7 @@ function action_cookie_dist() {
		if ($auth_spip) $row_auteur = $auth_spip($session_login, _request('session_password'));
	
		// Marche pas: essayer l'authentification par LDAP si present
		if (!$row_auteur AND $GLOBALS['ldap_present']) {
		if (!$row_auteur AND spip_connect_ldap()) {
			$auth_ldap = charger_fonction('auth_ldap', 'inc', true);
			if ($auth_ldap) $row_auteur = $auth_ldap($session_login, _request('session_password'));
		}
+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -75,7 +75,7 @@ function action_legender_auteur_post($r) {
	$old_login = $auteur['login'];

	if (($new_login<>$old_login)
	AND ($auteur['source'] == 'spip' OR !$GLOBALS['ldap_present'])
	AND ($auteur['source'] == 'spip' OR !spip_connect_ldap())
	AND autoriser('modifier','auteur', $id_auteur, NULL, array('restreintes'=>1))) {
		if ($new_login) {
			if (strlen($new_login) < 4)
+2 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -125,7 +125,7 @@ function login_pour_tous($login, $cible, $action) {
	if ($login) {
		$row =  sql_fetsel('*', 'spip_auteurs', "login=" . _q($login));
		// Retrouver ceux qui signent de leur nom ou email
		if (!$row AND !$GLOBALS['ldap_present']) {
		if (!$row AND !spip_connect_ldap()) {
			$row = sql_fetsel('*', 'spip_auteurs', "(nom = " . _q($login) . " OR email = " . _q($login) . ") AND login<>'' AND statut<>'5poubelle'");
			if ($row) {
				$login_alt = $login; # afficher ce qu'on a tape
@@ -133,7 +133,7 @@ function login_pour_tous($login, $cible, $action) {
			}
		}

		if ((!$row AND !$GLOBALS['ldap_present']) OR
		if ((!$row AND !spip_connect_ldap()) OR
			($row['statut'] == '5poubelle') OR 
			(($row['source'] == 'spip') AND $row['pass'] == '')) {
			$erreur =  _T('login_identifiant_inconnu',
+2 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -15,7 +15,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
// fonction pour la premiere connexion a un serveur MySQL

// http://doc.spip.org/@base_db_mysql_dist
function base_db_mysql_dist($host, $port, $login, $pass, $db='', $prefixe='') {
function base_db_mysql_dist($host, $port, $login, $pass, $db='', $prefixe='', $ldap='') {
	if ($port > 0) $host = "$host:$port";
	$link = mysql_connect($host, $login, $pass);

@@ -34,6 +34,7 @@ function base_db_mysql_dist($host, $port, $login, $pass, $db='', $prefixe='') {
		'db' => $db,
		'prefixe' => $prefixe ? $prefixe : $db,
		'link' => $GLOBALS['mysql_rappel_connexion'] ? $link : false,
		'ldap' => $ldap,
		'alter' => 'spip_mysql_alter',
		'count' => 'spip_mysql_count',
		'countsel' => 'spip_mysql_countsel',
+3 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -22,7 +22,7 @@ define('_DEFAULT_DB', 'spip');
// si ca ne marche toujours pas, echec.

// http://doc.spip.org/@base_db_pg_dist
function base_db_pg_dist($addr, $port, $login, $pass, $db='', $prefixe='') {
function base_db_pg_dist($addr, $port, $login, $pass, $db='', $prefixe='', $ldap='') {

	@list($host, $p) = split(';', $addr);
	if ($p >0) $port = " port=$p" ; else $port = '';
@@ -41,9 +41,10 @@ function base_db_pg_dist($addr, $port, $login, $pass, $db='', $prefixe='') {
#		 . ($link ? 'operationnelle' : 'impossible'));

	return !$link ? false : array(
		'link' => $link,
		'db' => $db,
		'prefixe' => $prefixe ? $prefixe : $db,
		'link' => $link,
		'ldap' => $ldap,
		'alter' => 'spip_pg_alter',
		'count' => 'spip_pg_count',
		'countsel' => 'spip_pg_countsel',
Chargement en cours