From b2d23a138942179d62f9bffdb3df272e9300e35b Mon Sep 17 00:00:00 2001
From: David Svantesson <davidsvantesson@gmail.com>
Date: Sat, 24 Aug 2019 11:07:11 +0200
Subject: [PATCH] Abort syncrhonization from LDAP source if there is some
 error.

Signed-off-by: David Svantesson <davidsvantesson@gmail.com>
---
 models/user.go            |  7 ++++++-
 modules/auth/ldap/ldap.go | 10 +++++-----
 2 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/models/user.go b/models/user.go
index 3c0c581a1daf1..43d6b36caffd3 100644
--- a/models/user.go
+++ b/models/user.go
@@ -1674,7 +1674,12 @@ func SyncExternalUsers() {
 				return
 			}
 
-			sr := s.LDAP().SearchEntries()
+			sr, err := s.LDAP().SearchEntries()
+			if err != nil {
+				log.Error("SyncExternalUsers LDAP source failure [%s], skipped", s.Name)
+				continue
+			}
+
 			for _, su := range sr {
 				if len(su.Username) == 0 {
 					continue
diff --git a/modules/auth/ldap/ldap.go b/modules/auth/ldap/ldap.go
index ddeaf12430e13..ed83a77e12f68 100644
--- a/modules/auth/ldap/ldap.go
+++ b/modules/auth/ldap/ldap.go
@@ -308,12 +308,12 @@ func (ls *Source) UsePagedSearch() bool {
 }
 
 // SearchEntries : search an LDAP source for all users matching userFilter
-func (ls *Source) SearchEntries() []*SearchResult {
+func (ls *Source) SearchEntries() ([]*SearchResult, error) {
 	l, err := dial(ls)
 	if err != nil {
 		log.Error("LDAP Connect error, %s:%v", ls.Host, err)
 		ls.Enabled = false
-		return nil
+		return nil, err
 	}
 	defer l.Close()
 
@@ -321,7 +321,7 @@ func (ls *Source) SearchEntries() []*SearchResult {
 		err := l.Bind(ls.BindDN, ls.BindPassword)
 		if err != nil {
 			log.Debug("Failed to bind as BindDN[%s]: %v", ls.BindDN, err)
-			return nil
+			return nil, err
 		}
 		log.Trace("Bound as BindDN %s", ls.BindDN)
 	} else {
@@ -350,7 +350,7 @@ func (ls *Source) SearchEntries() []*SearchResult {
 	}
 	if err != nil {
 		log.Error("LDAP Search failed unexpectedly! (%v)", err)
-		return nil
+		return nil, err
 	}
 
 	result := make([]*SearchResult, len(sr.Entries))
@@ -368,5 +368,5 @@ func (ls *Source) SearchEntries() []*SearchResult {
 		}
 	}
 
-	return result
+	return result, nil
 }