summaryrefslogtreecommitdiff
path: root/extensions
diff options
context:
space:
mode:
Diffstat (limited to 'extensions')
-rw-r--r--extensions/Library_ldapbe2.mk1
-rw-r--r--extensions/source/config/ldap/ldapuserprofilebe.cxx41
2 files changed, 21 insertions, 21 deletions
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 daabc23c09ed..5d49d677887f 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(
- OUString("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()