浏览代码

[Web] use cn as fallback ldap login

FreddleSpl0it 1 年之前
父节点
当前提交
58a5a4578c
共有 1 个文件被更改,包括 10 次插入7 次删除
  1. 10 7
      data/web/inc/functions.auth.inc.php

+ 10 - 7
data/web/inc/functions.auth.inc.php

@@ -498,7 +498,7 @@ function ldap_mbox_login($user, $pass, $iam_settings, $extra = null){
       $ldap_query = $ldap_query->rawFilter($iam_settings['filter']);
       $ldap_query = $ldap_query->rawFilter($iam_settings['filter']);
     }
     }
     $ldap_query = $ldap_query->where($iam_settings['username_field'], '=', $user)
     $ldap_query = $ldap_query->where($iam_settings['username_field'], '=', $user)
-      ->select([$iam_settings['username_field'], $iam_settings['attribute_field'], 'displayname', 'distinguishedname']);
+      ->select([$iam_settings['username_field'], $iam_settings['attribute_field'], 'displayname', 'distinguishedname', 'cn']);
 
 
     $user_res = $ldap_query->firstOrFail();
     $user_res = $ldap_query->firstOrFail();
   } catch (Exception $e) {
   } catch (Exception $e) {
@@ -513,12 +513,15 @@ function ldap_mbox_login($user, $pass, $iam_settings, $extra = null){
   }
   }
   try {
   try {
     if (!$iam_provider->auth()->attempt($user_res['distinguishedname'][0], $pass)) {
     if (!$iam_provider->auth()->attempt($user_res['distinguishedname'][0], $pass)) {
-      $_SESSION['return'][] =  array(
-        'type' => 'danger',
-        'log' => array(__FUNCTION__, $user, '*', $user_res),
-        'msg' => 'ldap_auth_failed'
-      );
-      return false;
+      // fallback to cn
+      if (!$iam_provider->auth()->attempt($user_res['cn'][0], $pass)) {
+        $_SESSION['return'][] =  array(
+          'type' => 'danger',
+          'log' => array(__FUNCTION__, $user, '*', $user_res),
+          'msg' => 'ldap_auth_failed'
+        );
+        return false;
+      }
     }
     }
   } catch (Exception $e) {
   } catch (Exception $e) {
     // clear $_SESSION['return'] to not leak data
     // clear $_SESSION['return'] to not leak data