extensions/Library_ldapbe2.mk                       |    1 
 extensions/source/config/ldap/ldapuserprofilebe.cxx |   41 +++++++++-----------
 2 files changed, 21 insertions(+), 21 deletions(-)

New commits:
commit b2b15be72e7ad2485fa1eb33ab237734432d8307
Author: Mike Kaganski <mike.kagan...@collabora.com>
Date:   Wed May 9 16:19:46 2018 +0300

    Don't throw in LdapUserProfileBe ctor on LDAP misconfiguration
    
    Otherwise LO crashes e.g. at opening Expert Configuration dialog.
    Instead, log the event, create an empty backend, and return empty values.
    
    Change-Id: I433fc89c003e7886dfc5242a4ef8defa46d643d3
    Reviewed-on: https://gerrit.libreoffice.org/53958
    Reviewed-by: Stephan Bergmann <sberg...@redhat.com>
    Tested-by: Jenkins <c...@libreoffice.org>
    (cherry picked from commit 5ed889e80805daf8471054786c1e424a73744ad3)
    Reviewed-on: https://gerrit.libreoffice.org/54039
    Reviewed-by: Andras Timar <andras.ti...@collabora.com>
    Tested-by: Andras Timar <andras.ti...@collabora.com>

diff --git a/extensions/Library_ldapbe2.mk b/extensions/Library_ldapbe2.mk
index 0364d58e8bd1..5ea5a9597101 100644
--- a/extensions/Library_ldapbe2.mk
+++ b/extensions/Library_ldapbe2.mk
@@ -28,6 +28,7 @@ $(eval $(call gb_Library_add_exception_objects,ldapbe2,\
 ))
 
 $(eval $(call gb_Library_use_libraries,ldapbe2,\
+       comphelper \
        cppuhelper \
        cppu \
        salhelper \
diff --git a/extensions/source/config/ldap/ldapuserprofilebe.cxx 
b/extensions/source/config/ldap/ldapuserprofilebe.cxx
index a9ce79ebefce..dc51e8203d9b 100644
--- a/extensions/source/config/ldap/ldapuserprofilebe.cxx
+++ b/extensions/source/config/ldap/ldapuserprofilebe.cxx
@@ -30,6 +30,7 @@
 #include <com/sun/star/beans/NamedValue.hpp>
 #include <com/sun/star/beans/Optional.hpp>
 #include <com/sun/star/configuration/theDefaultProvider.hpp>
+#include <comphelper/scopeguard.hxx>
 #include <cppuhelper/supportsservice.hxx>
 #include <osl/security.hxx>
 
@@ -42,6 +43,8 @@ LdapUserProfileBe::LdapUserProfileBe( const 
uno::Reference<uno::XComponentContex
 {
     LdapDefinition aDefinition;
     OUString loggedOnUser;
+    // true initially to handle reentrant call; will become false if 
readLdapConfiguration fails
+    bool bHaveLdapConfiguration = true;
 
     // This whole rigmarole is to prevent an infinite recursion where reading
     // the configuration for the backend would create another instance of the
@@ -55,30 +58,26 @@ LdapUserProfileBe::LdapUserProfileBe( const 
uno::Reference<uno::XComponentContex
 
         if (!bReentrantCall)
         {
-            try
-            {
-                bReentrantCall = true ;
-                if (!readLdapConfiguration(
-                        xContext, &aDefinition, &loggedOnUser))
-                {
-                    throw css::uno::RuntimeException(
-                        "LdapUserProfileBe- LDAP not configured",
-                        nullptr);
-                }
-
-                bReentrantCall = false ;
-            }
-            catch (...)
-            {
-                bReentrantCall = false;
-                throw;
-            }
+            bReentrantCall = true ;
+            comphelper::ScopeGuard aReentrantCallGuard([]() { bReentrantCall = 
false; });
+            // Don't throw on fail: this will crash if LDAP is misconfigured, 
and user opens
+            // Expert Configuration dialog. Instead, just don't fill data_, 
which will make the
+            // backend return empty values. This happens in 
SvtUserOptions::Impl::GetValue_Impl
+            // anyway even in throwing scenario, but doing it here also 
improves performance
+            // because of avoiding repeated attempts to create the backend.
+            bHaveLdapConfiguration = readLdapConfiguration(
+                xContext, &aDefinition, &loggedOnUser);
+            if (!bHaveLdapConfiguration)
+                SAL_WARN("extensions.config", "LdapUserProfileBackend: LDAP 
not configured");
         }
     }
 
-    LdapConnection connection;
-    connection.connectSimple(aDefinition);
-    connection.getUserProfile(loggedOnUser, &data_);
+    if (bHaveLdapConfiguration)
+    {
+        LdapConnection connection;
+        connection.connectSimple(aDefinition);
+        connection.getUserProfile(loggedOnUser, &data_);
+    }
 }
 
 LdapUserProfileBe::~LdapUserProfileBe()
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to