[
https://issues.apache.org/jira/browse/AMBARI-26620?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18098443#comment-18098443
]
Manish M Pillai commented on AMBARI-26620:
------------------------------------------
PR : https://github.com/apache/ambari/pull/4151
> LDAPS setup, sync, and login fail on Ambari 3.0.0 due to Python 3 encoding
> bugs and a Java 9+ module restriction
> ----------------------------------------------------------------------------------------------------------------
>
> Key: AMBARI-26620
> URL: https://issues.apache.org/jira/browse/AMBARI-26620
> Project: Ambari
> Issue Type: Bug
> Components: ambari-sever
> Affects Versions: 3.0.0
> Reporter: Manish M Pillai
> Assignee: Manish M Pillai
> Priority: Major
> Time Spent: 10m
> Remaining Estimate: 0h
>
> Setting up LDAPS end-to-end on Ambari 3.0.0 (Python 3, Java 9+) fails at
> three separate points in the flow — {{{}setup-ldap{}}}, {{{}sync-ldap{}}},
> and LDAP login. All three block LDAP from working at all on a fresh 3.0.0
> install running modern Python/Java, so they're reported together as they form
> one continuous blocker for the same feature (LDAP integration).
> h3. Bug 1 — {{setup-ldap}} fails while saving configuration
> *Where:* {{{}ambari_server/serverUtils.py{}}}, function
> {{perform_changes_via_rest_api()}}
> *Cause:* The function builds the PUT/POST request body using
> {{{}json.dumps(){}}}, which returns a Python {{{}str{}}}. Python 3's
> {{urllib.request.urlopen()}} requires the request body to be {{{}bytes{}}},
> so it raises a {{{}TypeError{}}}. Same root cause class as AMBARI-26062, but
> that fix only covered {{configs.py}} — this function was missed.
> *Repro:* Run {{{}ambari-server setup-ldap -v{}}}, complete all prompts,
> confirm save.
> *Exact error:*
> {code:java}
> Saving LDAP properties...
> Traceback (most recent call last):
> File "/usr/sbin/ambari-server.py", line 1998, in <module>
> mainBody()
> File "/usr/sbin/ambari-server.py", line 1960, in mainBody
> main(options, args, parser)
> File "/usr/sbin/ambari-server.py", line 1902, in main
> action_obj.execute()
> File "/usr/sbin/ambari-server.py", line 131, in execute
> self.fn(*self.args, **self.kwargs)
> File "/usr/lib/ambari-server/lib/ambari_server/setupSecurity.py", line
> 1647, in setup_ldap
> admin_login, admin_password, properties, ldap_property_value_map
> File "/usr/lib/ambari-server/lib/ambari_server/setupSecurity.py", line
> 1315, in update_ldap_configuration
> properties, admin_login, admin_password, SETUP_LDAP_CONFIG_URL, "PUT",
> request_data
> File "/usr/lib/ambari-server/lib/ambari_server/serverUtils.py", line 269,
> in perform_changes_via_rest_api
> urllib.request.urlopen(request, context=get_ssl_context(properties))
> File "/usr/lib64/python3.6/urllib/request.py", line 223, in urlopen
> return opener.open(url, data, timeout)
> File "/usr/lib64/python3.6/urllib/request.py", line 524, in open
> req = meth(req)
> File "/usr/lib64/python3.6/urllib/request.py", line 1279, in do_request_
> raise TypeError(msg)
> TypeError: POST data should be bytes, an iterable of bytes, or a file object.
> It cannot be of type str. {code}
> h3. Bug 2 — {{sync-ldap}} fails during sync event creation
> *Where:* {{{}ambari_server/setupSecurity.py{}}}, function {{sync_ldap()}}
> *Cause:* Same encoding gap as Bug 1, in a different function that builds two
> separate REST request bodies for LDAP sync, neither encoded to bytes before
> being passed to {{{}urlopen(){}}}. Confirmed still present in current Ambari
> trunk as of July 2026 — not fixed upstream.
> *Repro:* With {{setup-ldap}} working, run {{{}ambari-server sync-ldap
> --all{}}}.
> *Exact error:*
> {code:java}
> Fetching LDAP configuration from DB.
> Syncing all.ERROR: Exiting with exit code 1.
> REASON: Sync event creation failed. Error details: POST data should be bytes,
> an iterable of bytes, or a file object. It cannot be of type str. {code}
> h3. Bug 3 — LDAP login fails with Java module access error
> *Where:* JVM startup args, {{ambari-env.sh}} ({{{}AMBARI_JVM_ARGS{}}})
> *Cause:* Spring LDAP's {{AbstractContextSource}} reflectively accesses the
> JDK-internal class {{{}com.sun.jndi.ldap.LdapCtxFactory{}}}. Java 9+'s module
> system blocks this by default since {{java.naming}} does not export that
> package to unnamed modules. Ambari's default JVM args already include several
> {{--add-opens}} flags for {{java.base}} packages but are missing one for
> {{{}java.naming{}}}.
> *Repro:* With Bugs 1 and 2 fixed, log in to the Ambari UI as a synced LDAP
> user, on Java 9+.
> *Exact error:*
> {code:java}
> Caused by: java.lang.ExceptionInInitializerError: Exception
> java.lang.IllegalAccessError: class
> org.springframework.ldap.core.support.AbstractContextSource (in unnamed
> module @0x6a472554) cannot access class com.sun.jndi.ldap.LdapCtxFactory (in
> module java.naming) because module java.naming does not export
> com.sun.jndi.ldap to unnamed module @0x6a472554 [in thread
> "ambari-client-thread-29"]
> at
> org.springframework.ldap.core.support.AbstractContextSource.<clinit>(AbstractContextSource.java:77)
> at
> org.apache.ambari.server.security.authorization.AmbariLdapAuthenticationProvider.loadLdapAuthenticationProvider(AmbariLdapAuthenticationProvider.java:166)
> at
> org.apache.ambari.server.security.authorization.AmbariLdapAuthenticationProvider.authenticate(AmbariLdapAuthenticationProvider.java:91)
> ...
> java.lang.NoClassDefFoundError: Could not initialize class
> org.springframework.ldap.core.support.LdapContextSource
> at
> org.apache.ambari.server.security.authorization.AmbariLdapAuthenticationProvider.loadLdapAuthenticationProvider(AmbariLdapAuthenticationProvider.java:166)
> ... {code}
>
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]