Skip to content

NameNotFoundException should be handled gracefully #3151

Open
@vladak

Description

@vladak

Currently the NameNotFoundException is wrapped into LdapException in LdapFacade and the whole request fails with:

19-May-2020 10:13:44.859 WARNING [http-nio-8080-exec-496] opengrok.auth.plugin.ldap.LdapFacade.lookup The LDAP name for search 'DN: cn=BAR,l=amer,dc=foo,dc=com , filter: objectclass=* , attributes:
 city' was not found on server ldaps://ldap.foo.com timeout: 3000 username: cn=GROKLDAP_HERE,l=amer,dc=foo,dc=com
        javax.naming.NameNotFoundException: [LDAP: error code 32 - No Such Object]; remaining name 'cn=BAR,l=amer,dc=foo,dc=com'
                at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3179)
                at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:3100)
                at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2891)
                at com.sun.jndi.ldap.LdapCtx.searchAux(LdapCtx.java:1846)
                at com.sun.jndi.ldap.LdapCtx.c_search(LdapCtx.java:1769)
                at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_search(ComponentDirContext.java:392)
                at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(PartialCompositeDirContext.java:358)
                at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(PartialCompositeDirContext.java:341)
                at javax.naming.directory.InitialDirContext.search(InitialDirContext.java:267)
                at opengrok.auth.plugin.ldap.LdapServer.search(LdapServer.java:227)
                at opengrok.auth.plugin.ldap.LdapServer.search(LdapServer.java:193)
                at opengrok.auth.plugin.ldap.LdapFacade.lookup(LdapFacade.java:347)
                at opengrok.auth.plugin.ldap.LdapFacade.lookup(LdapFacade.java:295)
                at opengrok.auth.plugin.ldap.LdapFacade.lookupLdapContent(LdapFacade.java:263)
                at opengrok.auth.plugin.ldap.AbstractLdapProvider.lookupLdapContent(AbstractLdapProvider.java:90)
                at opengrok.auth.plugin.LdapAttrPlugin.fillSession(LdapAttrPlugin.java:153)
                at opengrok.auth.plugin.AbstractLdapPlugin.ensureSessionExists(AbstractLdapPlugin.java:257)
                at opengrok.auth.plugin.AbstractLdapPlugin.isAllowed(AbstractLdapPlugin.java:309)
                at org.opengrok.indexer.authorization.AuthorizationFramework$3.decision(AuthorizationFramework.java:168)
                at org.opengrok.indexer.authorization.AuthorizationPlugin.isAllowed(AuthorizationPlugin.java:189)
                at org.opengrok.indexer.authorization.AuthorizationStack.processStack(AuthorizationStack.java:241)
                at org.opengrok.indexer.authorization.AuthorizationStack.isAllowed(AuthorizationStack.java:202)
                at org.opengrok.indexer.authorization.AuthorizationStack.processStack(AuthorizationStack.java:241)
                at org.opengrok.indexer.authorization.AuthorizationStack.isAllowed(AuthorizationStack.java:202)
                at org.opengrok.indexer.authorization.AuthorizationFramework.performCheck(AuthorizationFramework.java:563)
                at org.opengrok.indexer.authorization.AuthorizationFramework.checkAll(AuthorizationFramework.java:521)
                at org.opengrok.indexer.authorization.AuthorizationFramework.isAllowed(AuthorizationFramework.java:161)
                at org.opengrok.indexer.web.PageConfig.isAllowed(PageConfig.java:1600)
                at org.opengrok.indexer.web.ProjectHelper$2.test(ProjectHelper.java:203)
                at org.opengrok.indexer.web.ProjectHelper$2.test(ProjectHelper.java:200)
                at java.util.Collection.removeIf(Collection.java:414)
                at org.opengrok.indexer.web.ProjectHelper.filterGroups(ProjectHelper.java:200)
                at org.opengrok.indexer.web.ProjectHelper.cacheGroups(ProjectHelper.java:237)
                at org.opengrok.indexer.web.ProjectHelper.getGroups(ProjectHelper.java:247)
                at org.opengrok.indexer.web.ProjectHelper.populateGroups(ProjectHelper.java:168)
                at org.opengrok.indexer.web.ProjectHelper.<init>(ProjectHelper.java:93)
                at org.opengrok.indexer.web.ProjectHelper.getInstance(ProjectHelper.java:107)
                at org.apache.jsp.index_jsp._jspService(index_jsp.java:358)
                at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
                at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
                at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:476)
                at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
                at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
                at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)

This was a fall out from one of the substacks:

            <void method="add">
                <object class="org.opengrok.indexer.authorization.AuthorizationStack">
                    <void property="forGroups">
                        <string>FooTools</string>
                    </void>
                    <void property="name">
                        <string>substack for FooTools</string>
                    </void>
                    <void property="flag">
                        <string>REQUIRED</string>
                    </void>
                    <void property="stack">
                            <void method="add">
                                <object class="org.opengrok.indexer.authorization.AuthorizationPlugin">
                                    <void property="name">
                                        <string>opengrok.auth.plugin.LdapAttrPlugin</string>
                                    </void>
                                    <void property="flag">
                                        <string>REQUIRED</string>
                                    </void>
                                    <void property="setup">
                                        <void method="put">
                                            <string>configuration</string>
                                            <string>/opengrok/auth/config/ldap-plugin-config-corp.xml</string>
                                        </void>
                                        <void method="put">
                                            <string>attribute</string>
                                            <string>city</string>
                                        </void>
                                        <void method="put">
                                            <string>file</string>
                                            <string>/opengrok/auth/config/whitelists/foo-tools-whitelist-city.txt</string>
                                        </void>
                                    </void>
                                </object>
                            </void>
                    </void>
                </object>
            </void>

This should be perhaps handled more softly and treat this as a authorization denied so that such failure in one substack does not cause the whole request to fail.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions