<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <title>LDAP Import Isuue.</title>
  <link rel="self" href="https://liferay.dev/c/message_boards/find_thread?p_l_id=119785294&amp;threadId=123225618" />
  <subtitle>LDAP Import Isuue.</subtitle>
  <id>https://liferay.dev/c/message_boards/find_thread?p_l_id=119785294&amp;threadId=123225618</id>
  <updated>2026-04-04T02:59:34Z</updated>
  <dc:date>2026-04-04T02:59:34Z</dc:date>
  <entry>
    <title>RE: RE: LDAP Import Isuue.</title>
    <link rel="alternate" href="https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=123238530" />
    <author>
      <name>Zsigmond Rab</name>
    </author>
    <id>https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=123238530</id>
    <updated>2025-02-11T11:36:47Z</updated>
    <published>2025-02-11T11:36:46Z</published>
    <summary type="html">&lt;p&gt;Hi Vishal,&lt;/p&gt;
&lt;p&gt;Well, in the source you shared the line 83 contains a &lt;em&gt;}&lt;/em&gt;
  only, however, I think, the problem is at the&lt;/p&gt;
&lt;pre&gt;
&lt;code class="language-java"&gt;long lastImportTime = _defaultLDAPUserImporter.getLastImportTime();&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;call in the &lt;em&gt;CustomLDAPUserImporterImpl.getLastImportTime()&lt;/em&gt;
  method. It seems to me from the code that the value of the
  &lt;em&gt;_defaultLDAPUserImporter&lt;/em&gt; is an instance of
  the &lt;em&gt;CustomLDAPUserImporterImpl&lt;/em&gt; so the call above always calls
  the same method which results a &lt;em&gt;StackOverflowError&lt;/em&gt;. It should
  be debugged to make it sure, though.&lt;/p&gt;
&lt;p&gt;Regards,&lt;br&gt; Zsigmond&lt;/p&gt;</summary>
    <dc:creator>Zsigmond Rab</dc:creator>
    <dc:date>2025-02-11T11:36:46Z</dc:date>
  </entry>
  <entry>
    <title>RE: RE: LDAP Import Isuue.</title>
    <link rel="alternate" href="https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=123237853" />
    <author>
      <name>Vishal Karjinni</name>
    </author>
    <id>https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=123237853</id>
    <updated>2025-02-11T11:05:28Z</updated>
    <published>2025-02-11T05:45:20Z</published>
    <summary type="html">&lt;p&gt;Hi Zsigmond,&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Please check for errors in the text format. I am grateful for your
  time with us.&lt;/p&gt;
&lt;p&gt;Exception in thread &amp;quot;liferay/scheduled_user_ldap_import-2&amp;quot;
  java.lang.StackOverflowError&lt;br&gt;         at
  java.text.DateFormatSymbols.getProviderInstance(DateFormatSymbols.java:362)&lt;br&gt;
          at
  java.text.DateFormatSymbols.getInstance(DateFormatSymbols.java:340)&lt;br&gt;
          at java.util.Calendar.getDisplayName(Calendar.java:2110)&lt;br&gt;  
        at
  java.text.SimpleDateFormat.subFormat(SimpleDateFormat.java:1125)&lt;br&gt;  
        at
  java.text.SimpleDateFormat.format(SimpleDateFormat.java:966)&lt;br&gt;      
    at java.text.SimpleDateFormat.format(SimpleDateFormat.java:936)&lt;br&gt;
          at
  org.apache.log4j.pattern.DatePatternConverter$DefaultZoneDateFormat.format(DatePatternConverter.java:96)&lt;br&gt;
          at java.text.DateFormat.format(DateFormat.java:345)&lt;br&gt;      
    at
  org.apache.log4j.pattern.CachedDateFormat.format(CachedDateFormat.java:283)&lt;br&gt;
          at
  org.apache.log4j.pattern.DatePatternConverter.format(DatePatternConverter.java:180)&lt;br&gt;
          at
  org.apache.log4j.pattern.BridgePatternConverter.format(BridgePatternConverter.java:119)&lt;br&gt;
          at
  org.apache.log4j.EnhancedPatternLayout.format(EnhancedPatternLayout.java:546)&lt;br&gt;
          at
  org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:310)&lt;br&gt;
          at
  org.apache.log4j.rolling.RollingFileAppender.subAppend(RollingFileAppender.java:396)&lt;br&gt;
          at
  org.apache.log4j.WriterAppender.append(WriterAppender.java:162)&lt;br&gt;  
        at
  org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)&lt;br&gt;
          at
  org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)&lt;br&gt;
          at
  org.apache.log4j.Category.callAppenders(Category.java:206)&lt;br&gt;        
  at org.apache.log4j.Category.forcedLog(Category.java:391)&lt;br&gt;        
  at org.apache.log4j.Category.log(Category.java:856)&lt;br&gt;         at
  com.liferay.portal.log.Log4jLogImpl.info(Log4jLogImpl.java:79)&lt;br&gt;    
      at
  com.liferay.portal.kernel.log.LogWrapper.info(LogWrapper.java:123)&lt;br&gt;
          at
  com.liferay.portal.kernel.log.SanitizerLogWrapper.info(SanitizerLogWrapper.java:139)&lt;br&gt;
          at
  com.youngsoft.utils.ldapsync.service.CustomLDAPUserImporterImpl.getLastImportTime(CustomLDAPUserImporterImpl.java:82)&lt;br&gt;
          at
  com.youngsoft.utils.ldapsync.service.CustomLDAPUserImporterImpl.getLastImportTime(CustomLDAPUserImporterImpl.java:83)&lt;br&gt;
          at
  com.youngsoft.utils.ldapsync.service.CustomLDAPUserImporterImpl.getLastImportTime(CustomLDAPUserImporterImpl.java:83)&lt;br&gt;  &lt;/p&gt;
&lt;p&gt;Thank you,&lt;br&gt; Vishal S Karjinni&lt;/p&gt;</summary>
    <dc:creator>Vishal Karjinni</dc:creator>
    <dc:date>2025-02-11T05:45:20Z</dc:date>
  </entry>
  <entry>
    <title>RE: LDAP Import Isuue.</title>
    <link rel="alternate" href="https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=123236098" />
    <author>
      <name>Zsigmond Rab</name>
    </author>
    <id>https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=123236098</id>
    <updated>2025-02-10T15:13:50Z</updated>
    <published>2025-02-10T15:13:48Z</published>
    <summary type="html">&lt;p&gt;Hi Vishal,&lt;/p&gt;
&lt;p&gt;The image that would show the error I guess is broken for me. Could
  you please check it? Can you please share the error in text format for example?&lt;/p&gt;
&lt;p&gt;Thanks,&lt;br&gt; Zsigmond&lt;/p&gt;</summary>
    <dc:creator>Zsigmond Rab</dc:creator>
    <dc:date>2025-02-10T15:13:48Z</dc:date>
  </entry>
  <entry>
    <title>LDAP Import Isuue.</title>
    <link rel="alternate" href="https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=123225617" />
    <author>
      <name>Vishal Karjinni</name>
    </author>
    <id>https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=123225617</id>
    <updated>2025-02-05T16:04:43Z</updated>
    <published>2025-02-05T10:52:23Z</published>
    <summary type="html">&lt;p&gt;Hi Team,&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;I have written custom code for LDAP user import. This code works fine
  on all servers, but I am facing an issue on the production server.
  Please check the log error image below. If anyone can help us, it
  would be appreciated.&lt;/p&gt;
&lt;p&gt;
  &lt;img alt="Displaying image.png" src="https://chat.google.com/u/0/api/get_attachment_url?url_type=FIFE_URL&amp;amp;content_type=image%2Fpng&amp;amp;attachment_token=AOo0EEX8Q6C4LC5A08gbWs1VvAzHoNWIX35D3KCbs1eqb1AcNfVuuGvLPbIu8MEZgNkuuTPn3Y8fLof%2F8pz%2BJ%2FmjWZyacs0DACbvxxapQ2I8SsICUKn%2Fmu20gGx3h7yNb%2FLuONPbxawcOgwjaFFVnxVkutHpjrSV82NNNeTG3mwmY%2FyRze3EuocWZCpzQU7wLIHr9BYEaO2lGF%2BwM8Z9VLWzbnHZtmaAD0P49zFFxELmIJ1m6oaaitaXksLiNCvLKLF64YgXU1dgdTWFERrCptct6ORjfaCE3rSroK82zOma9cd5YMWadRlgJry2frmwr5DyXxzhu3IRTxRRRfkJHpC6flTtyJ%2BnSEQIhxT4fjS%2FqdksPfVimKSF7XCvrDD01AHW%2FFdiellsjm7Qpre6gtizodaVr1z08qGBY0mCxBnUmm%2Bqk96ebWMmiycT8%2FK%2FMUVGqZPa0gmxhoLd58m5ZPTsSflD18ur8UzEVNLVHHlG8pawvNiLATfZmfQ5sNFX%2BGZzsk61u3oOEKc41uHXBbSgB4GMo%2F1Re85ux4TI70Bh8GbEYIAqYDnkexb0O9stVeJcWA%3D%3D&amp;amp;allow_caching=true&amp;amp;sz=w1920-h877"&gt;
&lt;/p&gt;
&lt;p&gt;custom code :&lt;/p&gt;
&lt;p&gt;package utils.ldapsync.service;&lt;/p&gt;
&lt;p&gt;import com.liferay.portal.kernel.log.Log;&lt;br&gt; import
  com.liferay.portal.kernel.log.LogFactoryUtil;&lt;br&gt; import
  com.liferay.portal.kernel.model.User;&lt;br&gt; import
  com.liferay.portal.kernel.security.auth.CompanyThreadLocal;&lt;br&gt; import
  com.liferay.portal.kernel.security.ldap.LDAPSettingsUtil;&lt;br&gt; import
  com.liferay.portal.kernel.service.UserLocalServiceUtil;&lt;br&gt; import
  com.liferay.portal.kernel.util.PrefsPropsUtil;&lt;br&gt; import
  com.liferay.portal.kernel.util.Validator;&lt;br&gt; import
  com.liferay.portal.security.ldap.SafeLdapContext;&lt;br&gt; import
  com.liferay.portal.security.ldap.SafePortalLDAP;&lt;br&gt; import
  com.liferay.portal.security.ldap.configuration.ConfigurationProvider;&lt;br&gt;
  import
  com.liferay.portal.security.ldap.configuration.LDAPServerConfiguration;&lt;br&gt;
  import
  com.liferay.portal.security.ldap.exportimport.LDAPToPortalConverter;&lt;br&gt;
  import com.liferay.portal.security.ldap.exportimport.LDAPUser;&lt;br&gt;
  import com.liferay.portal.security.ldap.exportimport.LDAPUserImporter;&lt;/p&gt;
&lt;p&gt;import
  com.liferay.portal.security.ldap.exportimport.configuration.LDAPImportConfiguration;&lt;br&gt;
  import com.liferay.portal.security.ldap.util.LDAPUtil;&lt;br&gt; import
  com.youngsoft.utils.ldapsync.constants.LDAPConstants;&lt;br&gt; import
  org.osgi.framework.FrameworkUtil;&lt;br&gt; import
  org.osgi.framework.ServiceReference;&lt;br&gt; import org.osgi.service.component.annotations.*;&lt;/p&gt;
&lt;p&gt;import javax.naming.NamingEnumeration;&lt;br&gt; import
  javax.naming.directory.Attribute;&lt;br&gt; import
  javax.naming.directory.Attributes;&lt;br&gt; import
  javax.naming.directory.SearchControls;&lt;br&gt; import
  javax.naming.directory.SearchResult;&lt;br&gt; import
  java.util.ArrayList;&lt;br&gt; import java.util.Collection;&lt;br&gt; import java.util.List;&lt;/p&gt;
&lt;p&gt;@Component(&lt;br&gt;         immediate = true,&lt;br&gt;         property =
  {&amp;quot;service.ranking:Integer=100&amp;quot;},&lt;br&gt;         service =
  LDAPUserImporter.class&lt;br&gt; )&lt;br&gt; public class
  CustomLDAPUserImporterImpl implements LDAPUserImporter {&lt;/p&gt;
&lt;p&gt;    private static final Log _log = LogFactoryUtil.getLog(CustomLDAPUserImporterImpl.class);&lt;/p&gt;
&lt;p&gt;    @Reference(&lt;br&gt;         target =
  &amp;quot;(factoryPid=com.liferay.portal.security.ldap.configuration.LDAPServerConfiguration)&amp;quot;&lt;br&gt;
      )&lt;br&gt;     private
  ConfigurationProvider&amp;lt;LDAPServerConfiguration&amp;gt; _ldapServerConfigurationProvider;&lt;/p&gt;
&lt;p&gt;    @Reference&lt;br&gt;     private volatile LDAPUserImporter _defaultLDAPUserImporter;&lt;/p&gt;
&lt;p&gt;    @Reference(&lt;br&gt;             policy = ReferencePolicy.DYNAMIC,&lt;br&gt;
              policyOption = ReferencePolicyOption.GREEDY&lt;br&gt;     )&lt;br&gt;
      private volatile SafePortalLDAP _safePortalLDAP;&lt;/p&gt;
&lt;p&gt;    private LDAPUserImporter getDefaultLDAPUserImporter() {&lt;br&gt;      
    if (_defaultLDAPUserImporter == null) {&lt;br&gt;            
  ServiceReference&amp;lt;LDAPUserImporter&amp;gt; serviceReference =&lt;br&gt;      
               
  FrameworkUtil.getBundle(getClass()).getBundleContext()&lt;br&gt;            
                  .getServiceReference(LDAPUserImporter.class);&lt;/p&gt;
&lt;p&gt;            _defaultLDAPUserImporter =
  FrameworkUtil.getBundle(getClass())&lt;br&gt;                    
  .getBundleContext()&lt;br&gt;                    
  .getService(serviceReference);&lt;br&gt;         }&lt;br&gt;         return
  _defaultLDAPUserImporter;&lt;br&gt;     }&lt;/p&gt;
&lt;p&gt;    @Override&lt;br&gt;     public User importUser(long ldapServerId, long
  companyId, SafeLdapContext safeLdapContext, Attributes attributes,
  String password) throws Exception {&lt;br&gt;        
  _log.info(&amp;quot;Entering importUser with SafeLdapContext&amp;quot;);&lt;br&gt;  
        _log.debug(&amp;quot;LDAP Server ID: &amp;quot; + ldapServerId + &amp;quot;,
  Company ID: &amp;quot; + companyId);&lt;br&gt;         User user =
  getDefaultLDAPUserImporter().importUser(ldapServerId, companyId,
  safeLdapContext, attributes, password);&lt;br&gt;         if (user != null)
  {&lt;br&gt;             _log.info(&amp;quot;User imported successfully: &amp;quot; +
  user.getFullName());&lt;br&gt;         } else {&lt;br&gt;            
  _log.warn(&amp;quot;User import returned null.&amp;quot;);&lt;br&gt;         }&lt;br&gt;  
        _log.info(&amp;quot;Exiting importUser with
  SafeLdapContext&amp;quot;);&lt;br&gt;         return user;&lt;br&gt;     }&lt;br&gt;    
  @Override&lt;br&gt;     public long getLastImportTime() throws Exception
  {&lt;br&gt;         _log.info(&amp;quot;Getting last import time.&amp;quot;);&lt;br&gt;  
        long lastImportTime =
  _defaultLDAPUserImporter.getLastImportTime();&lt;br&gt;        
  _log.debug(&amp;quot;Last import time: &amp;quot; + lastImportTime);&lt;br&gt;      
    return lastImportTime;&lt;br&gt;     }&lt;/p&gt;
&lt;p&gt;    @Override&lt;br&gt;     public User importUser(long ldapServerId, long
  companyId, String emailAddress, String screenName) throws Exception
  {&lt;br&gt;         _log.info(&amp;quot;Entering importUser with email and
  screenName&amp;quot;);&lt;br&gt;         _log.debug(&amp;quot;Email Address: &amp;quot;
  + emailAddress + &amp;quot;, Screen Name: &amp;quot; + screenName);&lt;br&gt;      
    User user = getDefaultLDAPUserImporter().importUser(ldapServerId,
  companyId, emailAddress, screenName);&lt;br&gt;         if (user != null)
  {&lt;br&gt;             _log.info(&amp;quot;User imported successfully: &amp;quot; +
  user.getFullName());&lt;br&gt;         } else {&lt;br&gt;            
  _log.warn(&amp;quot;User import returned null.&amp;quot;);&lt;br&gt;         }&lt;br&gt;  
        _log.info(&amp;quot;Exiting importUser with email and
  screenName&amp;quot;);&lt;br&gt;         return user;&lt;br&gt;     }&lt;/p&gt;
&lt;p&gt;    @Override&lt;br&gt;     public User importUser(long companyId, String
  emailAddress, String screenName) throws Exception {&lt;br&gt;        
  _log.info(&amp;quot;Entering importUser without LDAP server&amp;quot;);&lt;br&gt;  
        _log.debug(&amp;quot;Company ID: &amp;quot; + companyId + &amp;quot;, Email
  Address: &amp;quot; + emailAddress + &amp;quot;, Screen Name: &amp;quot; + screenName);&lt;/p&gt;
&lt;p&gt;        User user =
  getDefaultLDAPUserImporter().importUser(companyId, emailAddress, screenName);&lt;/p&gt;
&lt;p&gt;        if (user != null) {&lt;br&gt;             _log.info(&amp;quot;User
  imported successfully: &amp;quot; + user.getFullName());&lt;br&gt;         }
  else {&lt;br&gt;             _log.warn(&amp;quot;User import returned
  null.&amp;quot;);&lt;br&gt;         }&lt;/p&gt;
&lt;p&gt;        _log.info(&amp;quot;Exiting importUser without LDAP
  server&amp;quot;);&lt;br&gt;         return user;&lt;br&gt;     }&lt;/p&gt;
&lt;p&gt;    @Override&lt;br&gt;     public User importUserByScreenName(long
  companyId, String screenName) throws Exception {&lt;br&gt;        
  _log.info(&amp;quot;Entering importUserByScreenName&amp;quot;);&lt;br&gt;        
  _log.debug(&amp;quot;Company ID: &amp;quot; + companyId + &amp;quot;, Screen Name:
  &amp;quot; + screenName);&lt;/p&gt;
&lt;p&gt;        User user =
  getDefaultLDAPUserImporter().importUserByScreenName(companyId,
  screenName);&lt;br&gt;         if (user != null) {&lt;br&gt;            
  _log.info(&amp;quot;User imported successfully: &amp;quot; +
  user.getFullName());&lt;br&gt;         } else {&lt;br&gt;            
  _log.warn(&amp;quot;User import returned null.&amp;quot;);&lt;br&gt;         }&lt;br&gt;  
        _log.info(&amp;quot;Exiting importUserByScreenName&amp;quot;);&lt;br&gt;      
    return user;&lt;br&gt;     }&lt;/p&gt;
&lt;p&gt;    @Override&lt;br&gt;     public User importUserByUuid(long ldapServerId,
  long companyId, String uuid) throws Exception {&lt;br&gt;        
  _log.info(&amp;quot;Entering importUserByUuid with LDAP server&amp;quot;);&lt;br&gt;
          _log.debug(&amp;quot;LDAP Server ID: &amp;quot; + ldapServerId +
  &amp;quot;, Company ID: &amp;quot; + companyId + &amp;quot;, UUID: &amp;quot; + uuid);&lt;/p&gt;
&lt;p&gt;        User user =
  getDefaultLDAPUserImporter().importUserByUuid(ldapServerId, companyId, uuid);&lt;/p&gt;
&lt;p&gt;        if (user != null) {&lt;br&gt;             _log.info(&amp;quot;User
  imported successfully: &amp;quot; + user.getFullName());&lt;br&gt;         }
  else {&lt;br&gt;             _log.warn(&amp;quot;User import returned
  null.&amp;quot;);&lt;br&gt;         }&lt;/p&gt;
&lt;p&gt;        _log.info(&amp;quot;Exiting importUserByUuid with LDAP
  server&amp;quot;);&lt;br&gt;         return user;&lt;br&gt;     }&lt;br&gt;     &lt;/p&gt;
&lt;p&gt;    @Override&lt;br&gt;     public User importUserByUuid(long companyId,
  String uuid) throws Exception {&lt;br&gt;         _log.info(&amp;quot;Entering
  importUserByUuid without LDAP server&amp;quot;);&lt;br&gt;        
  _log.debug(&amp;quot;Company ID: &amp;quot; + companyId + &amp;quot;, UUID: &amp;quot;
  + uuid);&lt;/p&gt;
&lt;p&gt;        User user =
  getDefaultLDAPUserImporter().importUserByUuid(companyId, uuid);&lt;/p&gt;
&lt;p&gt;        if (user != null) {&lt;br&gt;             _log.info(&amp;quot;User
  imported successfully: &amp;quot; + user.getFullName());&lt;br&gt;         }
  else {&lt;br&gt;             _log.warn(&amp;quot;User import returned
  null.&amp;quot;);&lt;br&gt;         }&lt;/p&gt;
&lt;p&gt;        _log.info(&amp;quot;Exiting importUserByUuid without LDAP
  server&amp;quot;);&lt;br&gt;         return user;&lt;br&gt;     }&lt;/p&gt;
&lt;p&gt;    @Override&lt;br&gt;     public void importUsers() throws Exception
  {&lt;br&gt;         _log.info(&amp;quot;Entering global importUsers&amp;quot;);&lt;br&gt;
          getDefaultLDAPUserImporter().importUsers();&lt;br&gt;        
  _log.info(&amp;quot;Exiting global importUsers&amp;quot;);&lt;br&gt;     }&lt;/p&gt;
&lt;p&gt;    @Override&lt;br&gt;     public void importUsers(long companyId) throws
  Exception {&lt;br&gt;         _log.info(&amp;quot;Entering importUsers for a
  specific company&amp;quot;);&lt;br&gt;         _log.debug(&amp;quot;Company ID:
  &amp;quot; + companyId);&lt;/p&gt;
&lt;p&gt;        // Fetch users from LDAP&lt;br&gt;         List&amp;lt;User&amp;gt;
  usersFromLDAP = getUsersFromLDAP(companyId);&lt;/p&gt;
&lt;p&gt;        // Only import existing users&lt;br&gt;         for (User user :
  usersFromLDAP) {&lt;br&gt;             try {&lt;br&gt;                 // Skip new
  users or deactivate users based on your custom logic&lt;br&gt;              
    _log.info(&amp;quot;Importing user: &amp;quot; + user.getFullName());&lt;br&gt;  
                getDefaultLDAPUserImporter().importUser(companyId,
  user.getEmailAddress(), user.getScreenName());&lt;br&gt;             } catch
  (Exception e) {&lt;br&gt;                 _log.error(&amp;quot;Error importing
  user: &amp;quot; + user.getScreenName(), e);&lt;br&gt;             }&lt;br&gt;         }&lt;/p&gt;
&lt;p&gt;        _log.info(&amp;quot;Exiting importUsers for a specific
  company&amp;quot;);&lt;br&gt;     }&lt;/p&gt;
&lt;p&gt;    @Override&lt;br&gt;     public void importUsers(long ldapServerId, long
  companyId) throws Exception {&lt;br&gt;         _log.info(&amp;quot;Entering
  importUsers for LDAP server and company&amp;quot;);&lt;br&gt;        
  _log.debug(&amp;quot;LDAP Server ID: &amp;quot; + ldapServerId + &amp;quot;,
  Company ID: &amp;quot; + companyId);&lt;br&gt;        
  getDefaultLDAPUserImporter().importUsers(ldapServerId, companyId);&lt;br&gt;
          _log.info(&amp;quot;Exiting importUsers for LDAP server and
  company&amp;quot;);&lt;br&gt;     }&lt;/p&gt;
&lt;p&gt;    public List&amp;lt;User&amp;gt; getUsersFromLDAP(long companyId) {&lt;br&gt;  
        List&amp;lt;User&amp;gt; users = new ArrayList&amp;lt;&amp;gt;();&lt;br&gt;        
  try {&lt;br&gt;             Collection&amp;lt;LDAPServerConfiguration&amp;gt;
  ldapServerConfigurations =&lt;br&gt;                    
  _ldapServerConfigurationProvider.getConfigurations(companyId);&lt;br&gt;    
          if (ldapServerConfigurations.isEmpty()) {&lt;br&gt;                
  _log.error(&amp;quot;No LDAP server configurations found for companyId:
  &amp;quot; + companyId);&lt;br&gt;                 return users; // Return empty
  list if no configurations are available&lt;br&gt;             }&lt;br&gt;        
      for (LDAPServerConfiguration ldapServerConfiguration :
  ldapServerConfigurations) {&lt;br&gt;                 long ldapServerId =
  ldapServerConfiguration.ldapServerId();&lt;br&gt;                
  SafeLdapContext safeLdapContext =
  _safePortalLDAP.getSafeLdapContext(&lt;br&gt;                        
  ldapServerId, companyId);&lt;br&gt;                 if (safeLdapContext ==
  null) {&lt;br&gt;                     _log.warn(&amp;quot;Failed to get
  SafeLdapContext for LDAP server ID: &amp;quot; + ldapServerId);&lt;br&gt;      
                continue;&lt;br&gt;                 }&lt;br&gt;                
  String searchBase = ldapServerConfiguration.baseDN();&lt;br&gt;            
      String searchFilter = &amp;quot;(objectClass=person)&amp;quot;; // Adjust
  as needed&lt;br&gt;                 SearchControls searchControls = new
  SearchControls();&lt;br&gt;                
  searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);&lt;br&gt;      
            searchControls.setReturningAttributes(new
  String[]{&amp;quot;uid&amp;quot;, &amp;quot;mail&amp;quot;, &amp;quot;givenName&amp;quot;,
  &amp;quot;sn&amp;quot;});&lt;br&gt;                
  NamingEnumeration&amp;lt;SearchResult&amp;gt; results =
  safeLdapContext.search(&lt;br&gt;                         searchBase,
  searchFilter, searchControls);&lt;br&gt;                 // Process each
  LDAP entry&lt;br&gt;                 while (results.hasMore()) {&lt;br&gt;        
              SearchResult result = results.next();&lt;br&gt;                
      Attributes attributes = result.getAttributes();&lt;br&gt;              
        String screenName = getAttribute(attributes,
  &amp;quot;displayName&amp;quot;);&lt;br&gt;                     String email =
  getAttribute(attributes, &amp;quot;mail&amp;quot;);&lt;br&gt;                    
  String firstName = getAttribute(attributes,
  &amp;quot;givenName&amp;quot;);&lt;br&gt;                     String lastName =
  getAttribute(attributes, &amp;quot;sn&amp;quot;);&lt;br&gt;                     if
  (Validator.isNull(email)) {&lt;br&gt;                        
  _log.warn(&amp;quot;Skipping LDAP entry due to missing email: &amp;quot; +
  result);&lt;br&gt;                         continue;&lt;br&gt;                    
  }&lt;br&gt;                     User existingUser =
  UserLocalServiceUtil.fetchUserByEmailAddress(companyId, email);&lt;br&gt;  
                    if (existingUser != null) {&lt;br&gt;                    
      users.add(existingUser);&lt;br&gt;                     } else {&lt;br&gt;    
                      _log.info(&amp;quot;User not found in Liferay: &amp;quot;
  + email);&lt;br&gt;                     }&lt;br&gt;                 }&lt;br&gt;        
          safeLdapContext.close(); // Always close the context to
  release resources&lt;br&gt;             }&lt;/p&gt;
&lt;p&gt;        } catch (Exception e) {&lt;br&gt;            
  _log.error(&amp;quot;Error fetching users from LDAP&amp;quot;, e);&lt;br&gt;         }&lt;/p&gt;
&lt;p&gt;        return users;&lt;br&gt;     }&lt;br&gt;     private String
  getAttribute(Attributes attributes, String attributeName) {&lt;br&gt;      
    try {&lt;br&gt;             if (attributes.get(attributeName) != null)
  {&lt;br&gt;                 return (String)
  attributes.get(attributeName).get();&lt;br&gt;             }&lt;br&gt;         }
  catch (Exception e) {&lt;br&gt;             _log.warn(&amp;quot;Error retrieving
  attribute: &amp;quot; + attributeName, e);&lt;br&gt;         }&lt;br&gt;        
  return null;&lt;br&gt;     }&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Thank You,&lt;/p&gt;
&lt;p&gt;Vishal S Karjinni&lt;br&gt;  &lt;/p&gt;</summary>
    <dc:creator>Vishal Karjinni</dc:creator>
    <dc:date>2025-02-05T10:52:23Z</dc:date>
  </entry>
</feed>
