Parece que namingContext
é bastante onipresente para o objeto DSE raiz na maioria dos diretórios. Portanto, um padrão razoável geralmente é pegar o primeiro (a menos que o DSA específico defina um como padrão, como no AD). Se eles tiverem uma configuração exótica em que há várias partições / DITs no mesmo DSA não pertencente ao AD, os mesmos administradores provavelmente também saberão o que é um DN de base apropriado, se o primeiro namingContext
for 't aquele que deveríamos estar procurando por usuários / grupos abaixo.
Pseudocódigo de como executar a detecção automática dos padrões de DN base para vários DSAs:
# Active Directory Test
# rootDSE lists acceptable default base DN for us
If "1.2.840.113556.1.4.800" in rootDSE["supportedCapabilities"]:
defaultBase = rootDSE["defaultNamingContext"]
# IBM Domino LDAP Test
# Take the dn of the first dominoOrganization Object we find
If "IBM Lotus Software" == rootDSE["vendorname"]
ldapsearch -LLL "objectClass=dominoOrganization" dn | head -1
# eDirectory Test
# Take the first Partition Object we find
If "Novell Inc." == rootDSE["vendorName"]
ldapsearch -LLL "objectClass=Partition" dn | head -1
# OpenLDAP Tests
# This is the same as the default action so not technically required but it shows
# how you identify OpenLDAP DSA's. It's possible to nest some additional checks/searches
# here for the various types of top level containers (For example to prefer domain
# container-style entries to org-style, etc).
If "OpenLDAProotDSE" in rootDSE["objectClass"]
ldapsearch -LLL -b '' -s base namingContext | head -1
# Apache DS Tests
# Same as above, not technically required but it shows how you identify Apache DS
If "Apache Software Foundation" in rootDSE["vendorName"]
ldapsearch -LLL -b '' -s base namingContext | head -1
# Default to taking the first namingContext attribute if present but no tests works
If $(ldapsearch -LLL -b '' -s base namingContexts | head -1 | cut -d: -f2 | wc -c ) > 1
ldapsearch -LLL -b '' -s base namingContext | head -1
# I'm out of ideas on how to find a base DN so ultimately default to something explicit
return "(null)"
Determinando um bom DN base de um DSA do OpenLDAP :
[root@policyServer ~]# ldapsearch -x -LLL -H ldap://localhost -b '' -s base + | egrep "^namingContexts:" | head -1 | cut -d: -f2
dc=trunkator,dc=com
[root@policyServer ~]#
Para referência, este é o mesmo DSE raiz do DSA (assegurei que havia vários DIT's listados para uma ilustração completa):
[root@policyServer ~]# ldapsearch -x -LLL -H ldap://localhost -b '' -s base +
dn:
structuralObjectClass: OpenLDAProotDSE
configContext: cn=config
monitorContext: cn=Monitor
namingContexts: dc=trunkator,dc=com
namingContexts: dc=localhost
supportedControl: 2.16.840.1.113730.3.4.18
supportedControl: 2.16.840.1.113730.3.4.2
supportedControl: 1.3.6.1.4.1.4203.1.10.1
supportedControl: 1.2.840.113556.1.4.319
supportedControl: 1.2.826.0.1.3344810.2.3
supportedControl: 1.3.6.1.1.13.2
supportedControl: 1.3.6.1.1.13.1
supportedControl: 1.3.6.1.1.12
supportedExtension: 1.3.6.1.4.1.1466.20037
supportedExtension: 1.3.6.1.4.1.4203.1.11.1
supportedExtension: 1.3.6.1.4.1.4203.1.11.3
supportedExtension: 1.3.6.1.1.8
supportedFeatures: 1.3.6.1.1.14
supportedFeatures: 1.3.6.1.4.1.4203.1.5.1
supportedFeatures: 1.3.6.1.4.1.4203.1.5.2
supportedFeatures: 1.3.6.1.4.1.4203.1.5.3
supportedFeatures: 1.3.6.1.4.1.4203.1.5.4
supportedFeatures: 1.3.6.1.4.1.4203.1.5.5
supportedLDAPVersion: 3
supportedSASLMechanisms: GSSAPI
entryDN:
subschemaSubentry: cn=Subschema