@@ -233,24 +233,39 @@ public function login($username, $password, $domainKey = false, $fetchUserDN = f
233
233
234
234
Yii::debug ('Connecting to ' . $ hostPrefix . ', Port: ' . $ port , __METHOD__ );
235
235
236
+ ldap_set_option (null , LDAP_OPT_NETWORK_TIMEOUT , 5 );
236
237
$ l = @ldap_connect ($ hostPrefix , $ port );
237
238
if (!$ l ) {
238
239
Yii::warning ('Connect failed! ' . ldap_error ($ l ), __METHOD__ );
239
240
continue ;
240
241
}
241
242
243
+ ldap_set_option ($ l , LDAP_OPT_NETWORK_TIMEOUT , 5 );
242
244
ldap_set_option ($ l , LDAP_OPT_PROTOCOL_VERSION , 3 );
243
245
ldap_set_option ($ l , LDAP_OPT_REFERRALS , 0 );
244
- ldap_set_option ($ l , LDAP_OPT_NETWORK_TIMEOUT , 3 );
245
246
246
247
$ bind_dn = strpos ($ username , '@ ' ) === false && strpos ($ username , ', ' ) === false ? $ username . '@ ' . $ domainData ['name ' ] : $ username ;
247
248
248
249
Yii::debug ('Trying to authenticate with DN ' . $ bind_dn , __METHOD__ );
249
250
250
- $ b = @ldap_bind ($ l , $ bind_dn , $ password );
251
+ $ connTry = 0 ;
252
+ $ connected = false ;
253
+ do {
254
+ $ connTry ++;
255
+ $ b = @ldap_bind ($ l , $ bind_dn , $ password );
256
+ if (!$ b && ldap_errno ($ l ) === -1 ) { // -1 = No TCP connection
257
+ Yii::warning ("Connect try # $ connTry failed! " , __METHOD__ );
258
+ } else {
259
+ $ connected = true ;
260
+ }
261
+ } while ($ connTry < 3 && !$ connected );
262
+
263
+ if ($ connTry == 3 && !$ connected ) {
264
+ Yii::error ("No answer from LDAP after $ connTry tries! " , __METHOD__ );
265
+ }
251
266
252
267
if (!$ b ) {
253
- Yii::warning ('Bind failed! ' . ldap_error ($ l ), __METHOD__ );
268
+ Yii::warning ('Bind failed! ' . ldap_error ($ l ) . ' - Errno: ' . ldap_errno ( $ l ) , __METHOD__ );
254
269
continue ;
255
270
}
256
271
@@ -554,4 +569,9 @@ public static function handleEntry($entry)
554
569
return $ newEntry ;
555
570
}
556
571
572
+ public function getLastError ()
573
+ {
574
+ return ldap_error ($ this ->_l );
575
+ }
576
+
557
577
}
0 commit comments