Added tests with multiple LDAP servers.
The directory is distributed on two servers, and search now may return continuation object for specific users.
This commit is contained in:
		
							parent
							
								
									86687e2887
								
							
						
					
					
						commit
						d9a2149825
					
				
							
								
								
									
										119
									
								
								t/ldap-auth.t
								
								
								
								
							
							
						
						
									
										119
									
								
								t/ldap-auth.t
								
								
								
								
							|  | @ -97,6 +97,14 @@ http { | ||||||
|             proxy_pass http://backend/; |             proxy_pass http://backend/; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         location /ref1 { | ||||||
|  |             auth_request /auth-ref1; | ||||||
|  | 
 | ||||||
|  |             error_page 401 =200 /login; | ||||||
|  | 
 | ||||||
|  |             proxy_pass http://backend/; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         location /login { |         location /login { | ||||||
|             proxy_pass http://backend/login; |             proxy_pass http://backend/login; | ||||||
| 
 | 
 | ||||||
|  | @ -195,6 +203,24 @@ http { | ||||||
|             proxy_set_header X-Ldap-BindDN   "cn=root,dc=test,dc=local"; |             proxy_set_header X-Ldap-BindDN   "cn=root,dc=test,dc=local"; | ||||||
|             proxy_set_header X-Ldap-BindPass "secret"; |             proxy_set_header X-Ldap-BindPass "secret"; | ||||||
|         } |         } | ||||||
|  | 
 | ||||||
|  |         location = /auth-ref1 { | ||||||
|  |             internal; | ||||||
|  | 
 | ||||||
|  |             proxy_pass http://127.0.0.1:8888; | ||||||
|  | 
 | ||||||
|  |             proxy_pass_request_body off; | ||||||
|  |             proxy_set_header Content-Length ""; | ||||||
|  | 
 | ||||||
|  |             proxy_set_header X-Ldap-URL      "ldap://127.0.0.1:8083"; | ||||||
|  |             proxy_set_header X-Ldap-BaseDN   "ou=Users,dc=test,dc=local"; | ||||||
|  |             proxy_set_header X-Ldap-BindDN   "cn=root,dc=test,dc=local"; | ||||||
|  |             proxy_set_header X-Ldap-BindPass "secret"; | ||||||
|  | 
 | ||||||
|  |             proxy_set_header X-CookieName "nginxauth"; | ||||||
|  |             proxy_set_header Cookie nginxauth=$cookie_nginxauth; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -252,6 +278,43 @@ TLSCertificateKeyFile $d/localhost.key | ||||||
| 
 | 
 | ||||||
| EOF | EOF | ||||||
| 
 | 
 | ||||||
|  | $t->write_file_expand("slapd2.conf", <<"EOF"); | ||||||
|  | include /etc/openldap/schema/core.schema | ||||||
|  | include /etc/openldap/schema/cosine.schema | ||||||
|  | include /etc/openldap/schema/inetorgperson.schema | ||||||
|  | include /etc/openldap/schema/nis.schema | ||||||
|  | include /etc/openldap/schema/misc.schema | ||||||
|  | 
 | ||||||
|  | pidfile  $d/slapd2.pid | ||||||
|  | argsfile $d/slapd2.args | ||||||
|  | logfile $d/slapd2.log | ||||||
|  | 
 | ||||||
|  | loglevel 256 64 | ||||||
|  | 
 | ||||||
|  | access to dn.base="" by * read | ||||||
|  | access to dn.base="cn=Subschema" by * read | ||||||
|  | access to * | ||||||
|  |   by self write | ||||||
|  |   by users read | ||||||
|  |   by anonymous read | ||||||
|  | 
 | ||||||
|  | database hdb | ||||||
|  | suffix "ou=Users, dc=test,dc=local" | ||||||
|  | rootdn "cn=root, ou=Users, dc=test,dc=local" | ||||||
|  | rootpw secret | ||||||
|  | directory $d/openldap2-data | ||||||
|  | index objectClass eq | ||||||
|  | 
 | ||||||
|  | TLSCipherSuite HIGH:MEDIUM:+SSLv2 | ||||||
|  | TLSCACertificateFile $d/localhost.crt | ||||||
|  | TLSCertificateFile $d/localhost.crt | ||||||
|  | TLSCertificateKeyFile $d/localhost.key | ||||||
|  | 
 | ||||||
|  | # our upstream | ||||||
|  | referral   ldap://127.0.0.1:%%PORT_8083%%/ | ||||||
|  | 
 | ||||||
|  | EOF | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| $t->write_file_expand("initial.ldif", <<'EOF'); | $t->write_file_expand("initial.ldif", <<'EOF'); | ||||||
| dn: dc=test,dc=local | dn: dc=test,dc=local | ||||||
|  | @ -296,6 +359,37 @@ mail: user3@example.com | ||||||
| description: user3 | description: user3 | ||||||
| ou: Users | ou: Users | ||||||
| 
 | 
 | ||||||
|  | dn: ou=more,ou=Users,dc=test,dc=local | ||||||
|  | objectClass: referral | ||||||
|  | objectClass: extensibleObject | ||||||
|  | dc: subtree | ||||||
|  | ref: ldap://127.0.0.1:%%PORT_8085%%/ou=more,ou=Users,dc=test,dc=local | ||||||
|  | 
 | ||||||
|  | EOF | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | $t->write_file_expand("initial2.ldif", <<'EOF'); | ||||||
|  | dn: ou=Users, dc=test,dc=local | ||||||
|  | ou: Users | ||||||
|  | description: All people in organisation | ||||||
|  | objectclass: organizationalunit | ||||||
|  | 
 | ||||||
|  | dn: ou=more,ou=Users,dc=test,dc=local | ||||||
|  | dc: test | ||||||
|  | description: BlaBlaBla | ||||||
|  | objectClass: dcObject | ||||||
|  | objectClass: organizationalUnit | ||||||
|  | 
 | ||||||
|  | dn: cn=user4, ou=more, ou=Users,dc=test,dc=local | ||||||
|  | objectclass: inetOrgPerson | ||||||
|  | cn: User number one | ||||||
|  | sn: u4 | ||||||
|  | uid: user4 | ||||||
|  | userpassword: user4secret | ||||||
|  | mail: user4@example.com | ||||||
|  | description: user4 | ||||||
|  | ou: Users | ||||||
|  | 
 | ||||||
| EOF | EOF | ||||||
| 
 | 
 | ||||||
| # -u ldap -g ldap | # -u ldap -g ldap | ||||||
|  | @ -309,21 +403,30 @@ $t->has_daemon($SLAPD); | ||||||
| $t->has_daemon($AUTHD); | $t->has_daemon($AUTHD); | ||||||
| 
 | 
 | ||||||
| mkdir("$d/openldap-data"); | mkdir("$d/openldap-data"); | ||||||
|  | mkdir("$d/openldap2-data"); | ||||||
| 
 | 
 | ||||||
| my $p3 = port(8083); | my $p3 = port(8083); | ||||||
| my $p4 = port(8084); | my $p4 = port(8084); | ||||||
|  | my $p5 = port(8085); | ||||||
| 
 | 
 | ||||||
| # change '0' to '1' or more to get debug from slapd | # change '0' to '1' or more to get debug from slapd | ||||||
| $t->run_daemon($SLAPD, '-d', '0', '-f', "$d/slapd.conf", | $t->run_daemon($SLAPD, '-d', '0', '-f', "$d/slapd.conf", | ||||||
| 		'-h', "ldap://127.0.0.1:$p3 ldaps://127.0.0.1:$p4"); | 		'-h', "ldap://127.0.0.1:$p3 ldaps://127.0.0.1:$p4"); | ||||||
| 
 | 
 | ||||||
| $t->waitforsocket("127.0.0.1:$p3") or die "Can't start slapd"; | $t->run_daemon($SLAPD, '-d', '0', '-f', "$d/slapd2.conf", | ||||||
|  | 		'-h', "ldap://127.0.0.1:$p5"); | ||||||
| 
 | 
 | ||||||
|  | $t->waitforsocket("127.0.0.1:$p3") or die "Can't start slapd"; | ||||||
|  | $t->waitforsocket("127.0.0.1:$p5") or die "Can't start slapd2"; | ||||||
| 
 | 
 | ||||||
| system("ldapadd -H ldap://127.0.0.1:$p3 -x -D \"cn=root,dc=test,dc=local\"" | system("ldapadd -H ldap://127.0.0.1:$p3 -x -D \"cn=root,dc=test,dc=local\"" | ||||||
|        . " -f $d/initial.ldif -w secret >> $d/ldif.log 2>&1") == 0 |        . " -f $d/initial.ldif -w secret >> $d/ldif.log 2>&1") == 0 | ||||||
| 		or die "Can't import initial LDIF\n"; | 		or die "Can't import initial LDIF\n"; | ||||||
| 
 | 
 | ||||||
|  | system("ldapadd -H ldap://127.0.0.1:$p5 -x -D \"cn=root,ou=Users,dc=test,dc=local\"" | ||||||
|  |        . " -f $d/initial2.ldif -w secret >> $d/ldif2.log 2>&1") == 0 | ||||||
|  | 		or die "Can't import initial2 LDIF\n"; | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| $t->write_file_expand("auth_daemon.sh", <<"EOF"); | $t->write_file_expand("auth_daemon.sh", <<"EOF"); | ||||||
| AUTHBIN=\$(realpath $AUTHD) | AUTHBIN=\$(realpath $AUTHD) | ||||||
|  | @ -336,7 +439,7 @@ $t->run_daemon('/bin/sh', "$d/auth_daemon.sh"); | ||||||
| $t->waitforsocket('127.0.0.1:' . port(8888)) | $t->waitforsocket('127.0.0.1:' . port(8888)) | ||||||
| 	or die "Can't start auth daemon"; | 	or die "Can't start auth daemon"; | ||||||
| 
 | 
 | ||||||
| $t->plan(19); | $t->plan(21); | ||||||
| 
 | 
 | ||||||
| $t->run(); | $t->run(); | ||||||
| 
 | 
 | ||||||
|  | @ -387,6 +490,18 @@ like(http_get_auth('/nodn', 'user1', 'user1secret'), qr!Internal Server Error!, | ||||||
| like(http_get_auth('/nourl', 'user1', 'user1secret'), qr!LOGIN PAGE!, | like(http_get_auth('/nourl', 'user1', 'user1secret'), qr!LOGIN PAGE!, | ||||||
| 	'url must be set'); | 	'url must be set'); | ||||||
| 
 | 
 | ||||||
|  | # LDAP referrals | ||||||
|  | 
 | ||||||
|  | # user can be found, but bind happens on 1st server, instead of the found | ||||||
|  | # the behaviour may change with different servers | ||||||
|  | like(http_get_auth('/ref1', 'user4', 'user4secret'), qr!LOGIN PAGE!, | ||||||
|  | 	'server2 user via referral on server1'); | ||||||
|  | 
 | ||||||
|  | # unknown user on referred server, result is empty dn | ||||||
|  | like(http_get_auth('/ref1', 'userx', 'blah'), qr!LOGIN PAGE!, | ||||||
|  | 	'unknown user with referral on server1'); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| ############################################################################### | ############################################################################### | ||||||
| 
 | 
 | ||||||
| sub http_get_auth { | sub http_get_auth { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue