Mike Stevens wrote:
> Good day.
> 
>  
> 
> I’m an LDAP novice and am attempting to modify an LDAP client to accommodate 
> an LDAP server environment that makes use of referrals.
> 
>  
> 
> I have installed openLDAP 2.4.44 on 2 RHEL 7.9 servers.
> 
> 
> The initial entries in the tree on serverA contains :
> 
> 
> # xxx.com <http://xxx.com>
> dn: dc=xxx,dc=com
> description: xxx.com <http://xxx.com>
> dc: xxx
> o: xxx.com <http://xxx.com>
> objectClass: top
> objectClass: dcObject
> objectClass: organization
> 
> # Users, xxx.com <http://xxx.com>
> dn: ou=Users,dc=xxx,dc=com
> ou: Users
> description: xxx Users
> objectClass: organizationalUnit
> 
> # search reference
> *ref: ldap://serverB.xxx.com:389/dc=uk,dc=xxx,dc=com??sub 
> <http://serverB.xxx.com:389/dc=uk,dc=xxx,dc=com??sub>*
> 
> # mike, Users, xxx.com <http://xxx.com>
> dn: uid=mike,ou=Users,dc=xxx,dc=com
> cn: mike
> ou: Users
> uid: mike
> givenName: Mike
> mail: m...@uk.xxx.com <mailto:m...@uk.xxx.com>
> objectClass: Person
> objectClass: organizationalPerson
> objectClass: inetOrgPerson
> 
> 
> 
> I believe the "ref" entry is known as a subordinate referral;
> 
> it was created by populating the tree from an LDIF file that contained the 
> following:
> 
> 
> dn: dc=uk,dc=xxx,dc=com
> objectClass: referral
> objectClass: extensibleObject
> dc: uk
> ref: ldap://serverB.xxx.com:389/dc=uk,dc=xxx,dc=com 
> <http://serverB.xxx.com:389/dc=uk,dc=xxx,dc=com>
> 
> 
> The intent is to redirect any requests received by serverA that refer to the 
> subtree uk.xxx.com <http://uk.xxx.com> to serverB.
> 
> 
> The tree on serverB contains:
> 
> 
> # xxx.com <http://xxx.com>
> dn: dc=xxx,dc=com
> description: xxx.com <http://xxx.com>
> dc: xxx
> o: xxx.com <http://xxx.com>
> objectClass: top
> objectClass: dcObject
> objectClass: organization
> 
> # uk.xxx.com <http://uk.xxx.com>
> dn: dc=uk,dc=xxx,dc=com
> dc: uk
> o: uk.xxx.com <http://uk.xxx.com>
> description: xxx Users in the UK
> objectClass: dcObject
> objectClass: organization
> 
> # mike, uk.xxx.com <http://uk.xxx.com>
> dn: uid=mike,dc=uk,dc=xxx,dc=com
> cn: mike
> uid: mike
> givenName: Mike
> mail: m...@uk.xxx.com <mailto:m...@uk.xxx.com>
> objectClass: person
> objectClass: organizationalPerson
> objectClass: inetOrgPerson
> 
> 
> Now, if I perform a search on serverA specifying a base of uk.xxx.com 
> <http://uk.xxx.com>, I get an RC=10 Referral result as expected:
> 
> [root@serverA ~]# ldapsearch -x  '(uid=mike)' -b dc=uk,dc=xxx,dc=com  -LL
> version: 1
> 
> Referral (10)
> Matched DN: dc=uk,dc=xxx,dc=com
> Referral: ldap://serverB.xxx.com:389/dc=uk,dc=xxx,dc=com??sub 
> <http://serverB.xxx.com:389/dc=uk,dc=xxx,dc=com??sub>
> 
> ... and I can chase that referral using the -C option to retrieve the entry 
> from serverB:
> 
> [root@Mike21 ~]# ldapsearch -x  '(uid=mike)' -b dc=uk,dc=ibm,dc=com  -LL -C
> version: 1
> 
> dn: uid=mike,dc=uk,dc=xxx,dc=com
> cn: mike
> uid: mike
> givenName: Mike
> mail: m...@uk.xxx.com <mailto:m...@uk.xxx.com>
> objectClass: person
> objectClass: organizationalPerson
> objectClass: inetOrgPerson
> 
> But, if I attempt a bind to serverA using the user that exists in serverB, I 
> get an authentication failure:
> 
> [root@serverA ~]# ldapsearch -x -b 'dc=uk,dc=xxx,dc=com' -D 
> uid=mike,dc=uk,dc=xxx,dc=com -w passw0rD
> ldap_bind: Invalid credentials (49)
> 
> Now, I realise that the failure would be expected as the bind DN doesn't 
> exist at serverA.
> But I read that every request apart from unbind and abandon can result in a 
> referral.
> So why doesn't the bind follow the "ref" to serverB?
> Is that possible and have I not configured my server correctly?

No. See RFC3296 section 5.6.1.
> 
> Ultimately, what I'd like to do in my client is something like:
> 
>     ld_user = ldap_init( "ldap://serverA:389/dc=uk,dc=xxx,dc=com"; , 0 );
> 
> ... followed by :
> 
>    err = ldap_simple_bind_s( ld_user, "uid=mike,dc=uk,dc=xxx,dc=com" , 
> password);
> 
> ... and have LDAP authenticate the given user against serverB based on the 
> referral in serverA.
> 
> Is this sort of set up possible?

You will need to configure chaining or some other proxy mechanism instead.
> 
> Many thanks for your advice,
> Mike
> 


-- 
  -- Howard Chu
  CTO, Symas Corp.           http://www.symas.com
  Director, Highland Sun     http://highlandsun.com/hyc/
  Chief Architect, OpenLDAP  http://www.openldap.org/project/

Reply via email to