test028-idassert revision 1.1.1.7 1 1.1 lukem #! /bin/sh
2 1.1.1.4 tron # $OpenLDAP$
3 1.1 lukem ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
4 1.1 lukem ##
5 1.1.1.7 christos ## Copyright 1998-2019 The OpenLDAP Foundation.
6 1.1 lukem ## All rights reserved.
7 1.1 lukem ##
8 1.1 lukem ## Redistribution and use in source and binary forms, with or without
9 1.1 lukem ## modification, are permitted only as authorized by the OpenLDAP
10 1.1 lukem ## Public License.
11 1.1 lukem ##
12 1.1 lukem ## A copy of this license is available in the file LICENSE in the
13 1.1 lukem ## top-level directory of the distribution or, alternatively, at
14 1.1 lukem ## <http://www.OpenLDAP.org/license.html>.
15 1.1 lukem
16 1.1 lukem echo "running defines.sh"
17 1.1 lukem . $SRCDIR/scripts/defines.sh
18 1.1 lukem
19 1.1 lukem echo "### This test requires the LDAP backend and the rwm overlay."
20 1.1 lukem echo "### If available, and explicitly requested, it can use SASL bind;"
21 1.1 lukem echo "### note that SASL must be properly set up, and the requested"
22 1.1 lukem echo "### mechanism must be available. Define SLAPD_USE_SASL={yes|<mech>},"
23 1.1 lukem echo "### with \"yes\" defaulting to DIGEST-MD5 to enable SASL authc[/authz]."
24 1.1 lukem
25 1.1 lukem if test $BACKLDAP = "ldapno" ; then
26 1.1 lukem echo "LDAP backend not available, test skipped"
27 1.1 lukem exit 0
28 1.1 lukem fi
29 1.1 lukem
30 1.1 lukem if test $RWM = "rwmno" ; then
31 1.1 lukem echo "Rewrite/remap overlay not available, test skipped"
32 1.1 lukem exit 0
33 1.1 lukem fi
34 1.1 lukem
35 1.1 lukem if test $THREADS = "threadsno" ; then
36 1.1 lukem echo "Need threads support, test skipped"
37 1.1 lukem exit 0
38 1.1 lukem fi
39 1.1 lukem
40 1.1 lukem if test $WITH_SASL = "yes" ; then
41 1.1 lukem if test $USE_SASL != "no" ; then
42 1.1 lukem if test $USE_SASL = "yes" ; then
43 1.1 lukem MECH="DIGEST-MD5"
44 1.1 lukem else
45 1.1 lukem MECH="$USE_SASL"
46 1.1 lukem fi
47 1.1 lukem echo "Using SASL authc[/authz] with mech=$MECH; unset SLAPD_USE_SASL to disable"
48 1.1 lukem else
49 1.1 lukem echo "Using proxyAuthz with simple authc..."
50 1.1 lukem fi
51 1.1 lukem else
52 1.1 lukem echo "SASL not available; using proxyAuthz with simple authc..."
53 1.1 lukem fi
54 1.1 lukem
55 1.1 lukem mkdir -p $TESTDIR $DBDIR1 $DBDIR2
56 1.1 lukem
57 1.1 lukem echo "Running slapadd to build slapd database..."
58 1.1 lukem . $CONFFILTER $BACKEND $MONITORDB < $IDASSERTCONF > $ADDCONF
59 1.1 lukem $SLAPADD -f $ADDCONF -l $LDIFIDASSERT1 -n 1
60 1.1 lukem RC=$?
61 1.1 lukem if test $RC != 0 ; then
62 1.1 lukem echo "slapadd -n 1 failed ($RC)!"
63 1.1 lukem exit $RC
64 1.1 lukem fi
65 1.1 lukem $SLAPADD -f $ADDCONF -l $LDIFIDASSERT2 -n 2
66 1.1 lukem RC=$?
67 1.1 lukem if test $RC != 0 ; then
68 1.1 lukem echo "slapadd -n 2 failed ($RC)!"
69 1.1 lukem exit $RC
70 1.1 lukem fi
71 1.1 lukem
72 1.1 lukem echo "Starting slapd on TCP/IP port $PORT..."
73 1.1 lukem . $CONFFILTER $BACKEND $MONITORDB < $IDASSERTCONF > $CONF1
74 1.1 lukem $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
75 1.1 lukem PID=$!
76 1.1 lukem if test $WAIT != 0 ; then
77 1.1 lukem echo PID $PID
78 1.1 lukem read foo
79 1.1 lukem fi
80 1.1 lukem KILLPIDS="$PID"
81 1.1 lukem
82 1.1 lukem sleep 1
83 1.1 lukem
84 1.1 lukem echo "Using ldapsearch to check that slapd is running..."
85 1.1 lukem for i in 0 1 2 3 4 5; do
86 1.1 lukem $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
87 1.1 lukem 'objectclass=*' > /dev/null 2>&1
88 1.1 lukem RC=$?
89 1.1 lukem if test $RC = 0 ; then
90 1.1 lukem break
91 1.1 lukem fi
92 1.1 lukem echo "Waiting 5 seconds for slapd to start..."
93 1.1 lukem sleep 5
94 1.1 lukem done
95 1.1 lukem
96 1.1 lukem echo "Testing ldapwhoami as proxy US..."
97 1.1 lukem $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "cn=proxy US,ou=Admin,dc=example,dc=com" -w proxy
98 1.1 lukem RC=$?
99 1.1 lukem if test $RC != 0 ; then
100 1.1 lukem echo "ldapwhoami failed ($RC)!"
101 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
102 1.1 lukem exit $RC
103 1.1 lukem fi
104 1.1 lukem
105 1.1 lukem AUTHZID="u:it/jaj"
106 1.1 lukem echo "Testing ldapwhoami as proxy US, $AUTHZID..."
107 1.1 lukem $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "cn=proxy US,ou=Admin,dc=example,dc=com" -w proxy -e\!"authzid=$AUTHZID"
108 1.1 lukem RC=$?
109 1.1.1.3 adam if test $RC != 0 && test $BACKEND != null ; then
110 1.1 lukem echo "ldapwhoami failed ($RC)!"
111 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
112 1.1 lukem exit $RC
113 1.1 lukem fi
114 1.1 lukem
115 1.1 lukem AUTHZID="u:bjorn"
116 1.1 lukem echo "Testing ldapwhoami as proxy US, $AUTHZID... (should fail)"
117 1.1 lukem $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "cn=proxy US,ou=Admin,dc=example,dc=com" -w proxy -e\!"authzid=$AUTHZID"
118 1.1 lukem RC=$?
119 1.1 lukem if test $RC != 1 ; then
120 1.1 lukem echo "ldapwhoami should have failed ($RC)!"
121 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
122 1.1.1.3 adam exit 1
123 1.1 lukem fi
124 1.1 lukem
125 1.1 lukem AUTHZID="u:bjensen"
126 1.1 lukem echo "Testing ldapwhoami as proxy US, $AUTHZID... (should fail)"
127 1.1 lukem $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "cn=proxy US,ou=Admin,dc=example,dc=com" -w proxy -e\!"authzid=$AUTHZID"
128 1.1 lukem RC=$?
129 1.1 lukem if test $RC != 1 ; then
130 1.1 lukem echo "ldapwhoami should have failed ($RC)!"
131 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
132 1.1.1.3 adam exit 1
133 1.1 lukem fi
134 1.1 lukem
135 1.1 lukem echo "Testing ldapwhoami as proxy IT..."
136 1.1 lukem $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "cn=proxy IT,ou=Admin,dc=example,dc=com" -w proxy
137 1.1 lukem RC=$?
138 1.1 lukem if test $RC != 0 ; then
139 1.1 lukem echo "ldapwhoami failed ($RC)!"
140 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
141 1.1 lukem exit $RC
142 1.1 lukem fi
143 1.1 lukem
144 1.1 lukem AUTHZID="u:it/jaj"
145 1.1 lukem echo "Testing ldapwhoami as proxy IT, $AUTHZID... (should fail)"
146 1.1 lukem $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "cn=proxy IT,ou=Admin,dc=example,dc=com" -w proxy -e\!"authzid=$AUTHZID"
147 1.1 lukem RC=$?
148 1.1 lukem if test $RC != 1 ; then
149 1.1 lukem echo "ldapwhoami should have failed ($RC)!"
150 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
151 1.1.1.3 adam exit 1
152 1.1 lukem fi
153 1.1 lukem
154 1.1 lukem AUTHZID="u:bjorn"
155 1.1 lukem echo "Testing ldapwhoami as proxy IT, $AUTHZID... (should fail)"
156 1.1 lukem $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "cn=proxy IT,ou=Admin,dc=example,dc=com" -w proxy -e\!"authzid=$AUTHZID"
157 1.1 lukem RC=$?
158 1.1 lukem if test $RC != 1 ; then
159 1.1 lukem echo "ldapwhoami should have failed ($RC)!"
160 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
161 1.1.1.3 adam exit 1
162 1.1 lukem fi
163 1.1 lukem
164 1.1 lukem AUTHZID="dn:cn=Sandbox,ou=Admin,dc=example,dc=com"
165 1.1 lukem echo "Testing ldapwhoami as proxy IT, $AUTHZID..."
166 1.1 lukem $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "cn=proxy IT,ou=Admin,dc=example,dc=com" -w proxy -e\!"authzid=$AUTHZID"
167 1.1 lukem RC=$?
168 1.1.1.3 adam if test $RC != 0 && test $BACKEND != null ; then
169 1.1 lukem echo "ldapwhoami failed ($RC)!"
170 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
171 1.1 lukem exit $RC
172 1.1 lukem fi
173 1.1 lukem
174 1.1 lukem AUTHZID="dn:uid=bjorn,ou=People,o=Example,c=US"
175 1.1 lukem echo "Testing ldapwhoami as bjorn, $AUTHZID..."
176 1.1 lukem $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "uid=bjorn,ou=people,dc=example,dc=com" -w bjorn -e\!"authzid=$AUTHZID"
177 1.1 lukem RC=$?
178 1.1 lukem if test $RC != 0 ; then
179 1.1 lukem echo "ldapwhoami failed ($RC)!"
180 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
181 1.1 lukem exit $RC
182 1.1 lukem fi
183 1.1 lukem
184 1.1 lukem AUTHZID="dn:uid=bjorn,ou=People,o=Esempio,c=IT"
185 1.1 lukem echo "Testing ldapwhoami as bjorn, $AUTHZID..."
186 1.1 lukem $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "uid=bjorn,ou=people,dc=example,dc=com" -w bjorn -e\!"authzid=$AUTHZID"
187 1.1 lukem RC=$?
188 1.1 lukem if test $RC != 0 ; then
189 1.1 lukem echo "ldapwhoami failed ($RC)!"
190 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
191 1.1 lukem exit $RC
192 1.1 lukem fi
193 1.1 lukem
194 1.1.1.7 christos AUTHZID="u:it/jaj"
195 1.1.1.7 christos echo "Checking another DB's rootdn can't assert identity from another DB..."
196 1.1.1.7 christos $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$MANAGERDN" -w $PASSWD -e\!"authzid=$AUTHZID"
197 1.1.1.7 christos
198 1.1.1.7 christos RC=$?
199 1.1.1.7 christos if test $RC != 1 ; then
200 1.1.1.7 christos echo "ldapwhoami should have failed ($RC)!"
201 1.1.1.7 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS
202 1.1.1.7 christos exit 1
203 1.1.1.7 christos fi
204 1.1.1.7 christos
205 1.1 lukem ID="uid=jaj,ou=People,dc=example,dc=it"
206 1.1 lukem BASE="o=Example,c=US"
207 1.1 lukem echo "Testing ldapsearch as $ID for \"$BASE\"..."
208 1.1 lukem $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASE" \
209 1.1 lukem -D "$ID" -w jaj > $SEARCHOUT 2>&1
210 1.1 lukem
211 1.1 lukem RC=$?
212 1.1.1.3 adam if test $RC != 0 && test $BACKEND != null ; then
213 1.1 lukem echo "ldapsearch failed ($RC)!"
214 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
215 1.1 lukem exit $RC
216 1.1 lukem fi
217 1.1 lukem
218 1.1 lukem echo "Filtering ldapsearch results..."
219 1.1.1.3 adam $LDIFFILTER -s ldif=e < $SEARCHOUT > $SEARCHFLT
220 1.1 lukem echo "Filtering original ldif used to create database..."
221 1.1.1.3 adam $LDIFFILTER -s ldif=e < $IDASSERTOUT > $LDIFFLT
222 1.1 lukem echo "Comparing filter output..."
223 1.1 lukem $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
224 1.1.1.3 adam
225 1.1 lukem if test $? != 0 ; then
226 1.1 lukem echo "comparison failed - search with identity assertion didn't succeed"
227 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
228 1.1 lukem exit 1
229 1.1 lukem fi
230 1.1 lukem
231 1.1 lukem if test $USE_SASL != "no" ; then
232 1.1 lukem ID="it/jaj"
233 1.1 lukem BASE="o=Example,c=US"
234 1.1 lukem echo "Testing ldapsearch as $ID for \"$BASE\" with SASL bind and identity assertion..."
235 1.1 lukem $LDAPSASLSEARCH -h $LOCALHOST -p $PORT1 -b "$BASE" \
236 1.1 lukem -Q -U "$ID" -w jaj -Y $MECH > $SEARCHOUT 2>&1
237 1.1 lukem
238 1.1 lukem RC=$?
239 1.1 lukem if test $RC != 0 ; then
240 1.1 lukem echo "ldapsearch failed ($RC)!"
241 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
242 1.1 lukem exit $RC
243 1.1 lukem fi
244 1.1 lukem
245 1.1.1.7 christos ID="manager"
246 1.1.1.7 christos AUTHZID="u:it/jaj"
247 1.1.1.7 christos echo "Checking another DB's rootdn can't assert in another (with SASL bind this time)..."
248 1.1.1.7 christos $LDAPSASLWHOAMI -h $LOCALHOST -p $PORT1 \
249 1.1.1.7 christos -Q -U "$ID" -w $PASSWD -Y $MECH -X $AUTHZID
250 1.1.1.7 christos
251 1.1.1.7 christos RC=$?
252 1.1.1.7 christos if test $RC != 50 ; then
253 1.1.1.7 christos echo "ldapwhoami should have failed ($RC)!"
254 1.1.1.7 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS
255 1.1.1.7 christos exit 1
256 1.1.1.7 christos fi
257 1.1.1.7 christos
258 1.1 lukem echo "Filtering ldapsearch results..."
259 1.1.1.3 adam $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
260 1.1 lukem echo "Filtering original ldif used to create database..."
261 1.1.1.3 adam $LDIFFILTER < $IDASSERTOUT > $LDIFFLT
262 1.1 lukem echo "Comparing filter output..."
263 1.1 lukem $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
264 1.1 lukem
265 1.1 lukem if test $? != 0 ; then
266 1.1 lukem echo "comparison failed - search with SASL bind and identity assertion didn't succeed"
267 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
268 1.1 lukem exit 1
269 1.1 lukem fi
270 1.1 lukem fi
271 1.1 lukem
272 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
273 1.1 lukem
274 1.1 lukem echo ">>>>> Test succeeded"
275 1.1 lukem
276 1.1 lukem test $KILLSERVERS != no && wait
277 1.1 lukem
278 1.1 lukem exit 0
279