diff --git a/app/config.py b/app/config.py index 8637bcdd6..f67bfaeaf 100644 --- a/app/config.py +++ b/app/config.py @@ -243,6 +243,12 @@ def MFA_API_URI(self) -> str: # noqa: N802 return "https://api.multifactor.dev" return "https://api.multifactor.ru" + @computed_field # type: ignore + @cached_property + def is_global_catalog(self) -> bool: + """Check if this is Global Catalog server.""" + return self.PORT in (self.GLOBAL_LDAP_PORT, self.GLOBAL_LDAP_TLS_PORT) + @computed_field # type: ignore @cached_property def KRB5_CONFIG_SERVER(self) -> HttpUrl: # noqa: N802 diff --git a/app/ldap_protocol/ldap_requests/search.py b/app/ldap_protocol/ldap_requests/search.py index d5ff4e679..b82e41ff7 100644 --- a/app/ldap_protocol/ldap_requests/search.py +++ b/app/ldap_protocol/ldap_requests/search.py @@ -304,9 +304,16 @@ async def get_result( result_code=LDAPCodes.INSUFFICIENT_ACCESS_RIGHTS, ) return + base_directories = await get_base_directories(ctx.session) + if ( + ctx.settings.is_global_catalog + and not self.base_object + and base_directories + ): + self.base_object = base_directories[0].path_dn query = self._build_query( - await get_base_directories(ctx.session), + base_directories, user, ctx.access_manager, )