Возникла такая ситуация - пользователи были все импортированы из AD вручную, настроена NTLM авторизация.
Заходим на портал ... и пользователь создается заново! Неважно, стоит ли галка в настройках LDAP/AD модуля или нет.
Расследование показало, что виновата функция GetUserFields класса CLDAP (/bitrix/modules/ldap/classes/general/ldap.php). Она должна возвращать в массиве полей в том числе ID пользователя портала, если пользователь УЖЕ существует на портале.
Однако кто-то, кто писал ее, видимо об этом забыл.
Как пропатчить:
1. В указанном выше файле ищем function GetUserFields($arLdapUser, &$departmentCache=FALSE)
2. После объявления массива $arFields = array(.....) добавим
global $USER;
$rsUser = $USER->GetByLogin($arLdapUser[strtolower($this->arFields['~USER_ID_ATTR'])]);
$arUser = $rsUser->Fetch();
$ID=$arUser["ID"];
if (!empty($ID)) $arFields["ID"]=$ID;
Вуаля!
Заходим на портал ... и пользователь создается заново! Неважно, стоит ли галка в настройках LDAP/AD модуля или нет.
Расследование показало, что виновата функция GetUserFields класса CLDAP (/bitrix/modules/ldap/classes/general/ldap.php). Она должна возвращать в массиве полей в том числе ID пользователя портала, если пользователь УЖЕ существует на портале.
Однако кто-то, кто писал ее, видимо об этом забыл.
Как пропатчить:
1. В указанном выше файле ищем function GetUserFields($arLdapUser, &$departmentCache=FALSE)
2. После объявления массива $arFields = array(.....) добавим
global $USER;
$rsUser = $USER->GetByLogin($arLdapUser[strtolower($this->arFields['~USER_ID_ATTR'])]);
$arUser = $rsUser->Fetch();
$ID=$arUser["ID"];
if (!empty($ID)) $arFields["ID"]=$ID;
Вуаля!