- πΊπΈUnited States bluegeek9
This is a duplicate of #2831113: Multiple LDAP servers for user provisioning & synchronization β
Here's the patch for multiple server authentication
From b9b1ac58625595e6ed656b301c44f901bb973a71 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jose=CC=81=20Hypnotic?= <agency@hypnotic.pt>
Date: Mon, 22 Oct 2018 13:22:25 +0100
Subject: [PATCH] UserProcessor com patch.
---
.../src/Processor/DrupalUserProcessor.php | 74 +++++++++++++++++--
1 file changed, 66 insertions(+), 8 deletions(-)
diff --git a/web/modules/contrib/ldap/ldap_user/src/Processor/DrupalUserProcessor.php b/web/modules/contrib/ldap/ldap_user/src/Processor/DrupalUserProcessor.php
index c5a7ab83..dfcad53b 100644
--- a/web/modules/contrib/ldap/ldap_user/src/Processor/DrupalUserProcessor.php
+++ b/web/modules/contrib/ldap/ldap_user/src/Processor/DrupalUserProcessor.php
@@ -121,7 +121,21 @@ public function provisionDrupalAccount(array $userData) {
// Get an LDAP user from the LDAP server.
if ($this->config->get('drupalAcctProvisionServer')) {
- $ldapUser = $this->factory->getUserDataFromServerByIdentifier($userData['name'], $this->config->get('drupalAcctProvisionServer'));
+ // $ldapUser = $this->factory->getUserDataFromServerByIdentifier($userData['name'], $this->config->get('drupalAcctProvisionServer'));
+
+ $servers = $this->factory->getAllServers();
+
+ foreach ($servers as $server) {
+
+ $ldapUser = $this->factory->getUserDataFromServerByIdentifier($userData['name'], $server->id(), 'ldap_user_prov_to_drupal');
+
+ if (!empty($ldapUser)) {
+
+ $this->server = $server;
+
+ break;
+ }
+ }
}
// Still no LDAP user.
if (!$ldapUser) {
@@ -134,7 +148,7 @@ public function provisionDrupalAccount(array $userData) {
return FALSE;
}
- $this->server = $this->factory->getServerByIdEnabled($this->config->get('drupalAcctProvisionServer'));
+ // $this->server = $this->factory->getServerByIdEnabled($this->config->get('drupalAcctProvisionServer'));
// If we don't have an account name already we should set one.
if (!$this->account->getAccountName()) {
@@ -904,9 +918,24 @@ private function loginLdapEntryProvisioning() {
private function loginDrupalAccountProvisioning() {
if (LdapConfiguration::provisionsDrupalAccountsFromLdap()
&& in_array(self::EVENT_SYNC_TO_DRUPAL_USER, array_keys(LdapConfiguration::provisionsDrupalEvents()))) {
- $ldap_user = $this->factory->getUserDataFromServerByAccount($this->account, $this->config->get('drupalAcctProvisionServer'), 'ldap_user_prov_to_drupal');
+ // $ldap_user = $this->factory->getUserDataFromServerByAccount($this->account, $this->config->get('drupalAcctProvisionServer'), 'ldap_user_prov_to_drupal');
+
+ $servers = $this->factory->getAllServers();
+
+ foreach ($servers as $server) {
+
+ $ldap_user = $this->factory->getUserDataFromServerByAccount($this->account, $server->id(), 'ldap_user_prov_to_drupal');
+
+ if (!empty($ldap_user)) {
+
+ $this->server = $server;
+
+ break;
+ }
+ }
+
if ($ldap_user) {
- $this->server = $this->factory->getServerById($this->config->get('drupalAcctProvisionServer'));
+ // $this->server = $this->factory->getServerById($this->config->get('drupalAcctProvisionServer'));
$this->applyAttributesToAccount($ldap_user, self::PROVISION_TO_DRUPAL, [self::EVENT_SYNC_TO_DRUPAL_USER]);
}
$this->saveAccount();
@@ -918,9 +947,24 @@ private function loginDrupalAccountProvisioning() {
*/
private function syncToDrupalUserEvent() {
if ($this->isUserLdapAssociated($this->account)) {
- $ldapUser = $this->factory->getUserDataFromServerByAccount($this->account, $this->config->get('drupalAcctProvisionServer'), 'ldap_user_prov_to_drupal');
+ // $ldapUser = $this->factory->getUserDataFromServerByAccount($this->account, $this->config->get('drupalAcctProvisionServer'), 'ldap_user_prov_to_drupal');
+
+ $servers = $this->factory->getAllServers();
+
+ foreach ($servers as $server) {
+
+ $ldapUser = $this->factory->getUserDataFromServerByAccount($this->account, $server->id(), 'ldap_user_prov_to_drupal');
+
+ if (!empty($ldapUser)) {
+
+ $this->server = $server;
+
+ break;
+ }
+ }
+
if ($ldapUser) {
- $this->server = $this->factory->getServerById($this->config->get('drupalAcctProvisionServer'));
+ // $this->server = $this->factory->getServerById($this->config->get('drupalAcctProvisionServer'));
$this->applyAttributesToAccount($ldapUser, self::PROVISION_TO_DRUPAL, [self::EVENT_SYNC_TO_DRUPAL_USER]);
}
else {
@@ -1119,7 +1163,21 @@ private function syncToDrupalAccount($provisioningEvent = NULL, array $ldapUser
}
if (!$ldapUser && $this->config->get('drupalAcctProvisionServer')) {
- $ldapUser = $this->factory->getUserDataFromServerByAccount($this->account, $this->config->get('drupalAcctProvisionServer'), 'ldap_user_prov_to_drupal');
+ // $ldapUser = $this->factory->getUserDataFromServerByAccount($this->account, $this->config->get('drupalAcctProvisionServer'), 'ldap_user_prov_to_drupal');
+
+ $servers = $this->factory->getAllServers();
+
+ foreach ($servers as $server) {
+
+ $ldapUser = $this->factory->getUserDataFromServerByAccount($this->account, $server->id(), 'ldap_user_prov_to_drupal');
+
+ if (!empty($ldapUser)) {
+
+ $this->server = $server;
+
+ break;
+ }
+ }
}
if (!$ldapUser) {
@@ -1127,7 +1185,7 @@ private function syncToDrupalAccount($provisioningEvent = NULL, array $ldapUser
}
if ($this->config->get('drupalAcctProvisionServer')) {
- $this->server = Server::load($this->config->get('drupalAcctProvisionServer'));
+ // $this->server = Server::load($this->config->get('drupalAcctProvisionServer'));
$this->applyAttributesToAccount($ldapUser, self::PROVISION_TO_DRUPAL, [$provisioningEvent]);
}
--
2.17.1
Closed: duplicate
4.0
Code
Not all content is available!
It's likely this issue predates Contrib.social: some issue and comment data are missing.
This is a duplicate of #2831113: Multiple LDAP servers for user provisioning & synchronization β