Home | History | Annotate | Line # | Download | only in scripts
sql-test900-write revision 1.1.1.3
      1 #! /bin/sh
      2 # OpenLDAP: pkg/ldap/tests/scripts/sql-test900-write,v 1.12.2.6 2010/04/19 19:14:32 quanah Exp
      3 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
      4 ##
      5 ## Copyright 1998-2010 The OpenLDAP Foundation.
      6 ## All rights reserved.
      7 ##
      8 ## Redistribution and use in source and binary forms, with or without
      9 ## modification, are permitted only as authorized by the OpenLDAP
     10 ## Public License.
     11 ##
     12 ## A copy of this license is available in the file LICENSE in the
     13 ## top-level directory of the distribution or, alternatively, at
     14 ## <http://www.OpenLDAP.org/license.html>.
     15 
     16 echo "running defines.sh"
     17 . $SRCDIR/scripts/defines.sh
     18 
     19 if test $BACKSQL = "sqlno" ; then 
     20 	echo "SQL backend not available, test skipped"
     21 	exit 0
     22 fi 
     23 
     24 if test $RDBMS = "rdbmsno" ; then
     25 	echo "SQL test not requested, test skipped"
     26 	exit 0
     27 fi
     28 
     29 if test "${RDBMSWRITE}" != "yes"; then
     30 	echo "write test disabled for ${RDBMS}; set SLAPD_USE_SQLWRITE=yes to enable"
     31 	exit 0
     32 fi
     33 
     34 mkdir -p $TESTDIR
     35 
     36 echo "Starting slapd on TCP/IP port $PORT1..."
     37 . $CONFFILTER $BACKEND $MONITORDB < $SQLCONF > $CONF1
     38 $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
     39 PID=$!
     40 if test $WAIT != 0 ; then
     41     echo PID $PID
     42     read foo
     43 fi
     44 KILLPIDS="$PID"
     45 
     46 echo "Testing SQL backend write operations..."
     47 for i in 0 1 2 3 4 5; do
     48 	$LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
     49 		'objectclass=*' > /dev/null 2>&1
     50 	RC=$?
     51 	if test $RC = 0 ; then
     52 		break
     53 	fi
     54 	echo "Waiting 5 seconds for slapd to start..."
     55 	sleep 5
     56 done
     57 
     58 if test $RC != 0 ; then
     59 	echo "ldapsearch failed ($RC)!"
     60 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
     61 	exit $RC
     62 fi
     63 
     64 cat /dev/null > $SEARCHOUT
     65 
     66 BASEDN="dc=example,dc=com"
     67 
     68 echo "Using ldapsearch to retrieve all the entries..."
     69 echo "# Using ldapsearch to retrieve all the entries..." >> $SEARCHOUT
     70 $LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "$BASEDN" \
     71 	 "objectClass=*" >> $SEARCHOUT 2>&1
     72 
     73 RC=$?
     74 if test $RC != 0 ; then
     75 	echo "ldapsearch failed ($RC)!"
     76 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
     77 	exit $RC
     78 fi
     79 
     80 case ${RDBMS} in
     81 	# list here the RDBMSes whose mapping allows writes
     82 pgsql|ibmdb2)
     83 	MANAGERDN="cn=Manager,${BASEDN}"
     84 	echo "Testing add..."
     85 	$LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
     86 		-h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS
     87 version: 1
     88 
     89 # Adding an organization...
     90 dn: o=An Org,${BASEDN}
     91 changetype: add
     92 objectClass: organization
     93 o: An Org
     94 
     95 # Adding an organization with an "auxiliary" objectClass..
     96 dn: dc=subnet,${BASEDN}
     97 changetype: add
     98 objectClass: organization
     99 objectClass: dcObject
    100 o: SubNet
    101 dc: subnet
    102 
    103 # Adding another organization with an "auxiliary" objectClass..
    104 dn: dc=subnet2,${BASEDN}
    105 changetype: add
    106 objectClass: organization
    107 objectClass: dcObject
    108 o: SubNet 2
    109 dc: subnet2
    110 
    111 # Adding a person...
    112 dn: cn=Lev Tolstoij,${BASEDN}
    113 changetype: add
    114 objectClass: inetOrgPerson
    115 cn: Lev Tolstoij
    116 sn: Tolstoij
    117 givenName: Lev
    118 telephoneNumber: +39 02 XXXX YYYY
    119 telephoneNumber: +39 02 XXXX ZZZZ
    120 userPassword: tanja
    121 
    122 # Adding a person with an "auxiliary" objectClass...
    123 dn: cn=Some One,${BASEDN}
    124 changetype: add
    125 objectClass: inetOrgPerson
    126 objectClass: simpleSecurityObject
    127 cn: Some One
    128 sn: One
    129 givenName: Some
    130 telephoneNumber: +1 800 900 1234
    131 telephoneNumber: +1 800 900 1235
    132 userPassword: someone
    133 
    134 # Adding a person in another subtree...
    135 dn: cn=SubNet User,dc=subnet,${BASEDN}
    136 changetype: add
    137 objectClass: inetOrgPerson
    138 cn: SubNet User
    139 sn: User
    140 givenName: SubNet
    141 
    142 # Adding a document...
    143 dn: documentTitle=War and Peace,${BASEDN}
    144 changetype: add
    145 objectClass: document
    146 description: Historical novel
    147 documentTitle: War and Peace
    148 documentAuthor: cn=Lev Tolstoij,dc=example,dc=com
    149 documentIdentifier: document 3
    150 EOMODS
    151 
    152 	RC=$?
    153 	if test $RC != 0 ; then
    154 		echo "ldapmodify failed ($RC)!"
    155 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    156 		exit $RC
    157 	fi
    158 
    159 	echo "Using ldapsearch to retrieve all the entries..."
    160 	echo "# Using ldapsearch to retrieve all the entries..." >> $SEARCHOUT
    161 	$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "$BASEDN" \
    162 		 "objectClass=*" >> $SEARCHOUT 2>&1
    163 
    164 	RC=$?
    165 	if test $RC != 0 ; then
    166 		echo "ldapsearch failed ($RC)!"
    167 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    168 		exit $RC
    169 	fi
    170 
    171 	echo "Testing modify..."
    172 	$LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
    173 		-h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS
    174 version: 1
    175 
    176 # Deleting all telephone numbers...
    177 dn: cn=Some One,${BASEDN}
    178 changetype: modify
    179 delete: telephoneNumber
    180 -
    181 
    182 # Adding a telephone number...
    183 dn: cn=Mitya Kovalev,${BASEDN}
    184 changetype: modify
    185 add: telephoneNumber
    186 telephoneNumber: +1 800 123 4567
    187 -
    188 
    189 # Deleting a specific telephone number and adding a new one...
    190 dn: cn=Lev Tolstoij,${BASEDN}
    191 changetype: modify
    192 delete: telephoneNumber
    193 telephoneNumber: +39 02 XXXX YYYY
    194 -
    195 add: telephoneNumber
    196 telephoneNumber: +39 333 ZZZ 1234
    197 -
    198 
    199 # Adding an author to a document...
    200 dn: documentTitle=book1,${BASEDN}
    201 changetype: modify
    202 add: documentAuthor
    203 documentAuthor: cn=Lev Tolstoij,${BASEDN}
    204 -
    205 
    206 # Adding an author to another document...
    207 dn: documentTitle=book2,${BASEDN}
    208 changetype: modify
    209 add: documentAuthor
    210 documentAuthor: cn=Lev Tolstoij,${BASEDN}
    211 -
    212 
    213 # Adding an "auxiliary" objectClass...
    214 dn: cn=Mitya Kovalev,${BASEDN}
    215 changetype: modify
    216 add: objectClass
    217 objectClass: simpleSecurityObject
    218 -
    219 
    220 # Deleting an "auxiliary" objectClass...
    221 dn: cn=Some One,${BASEDN}
    222 changetype: modify
    223 delete: objectClass
    224 objectClass: simpleSecurityObject
    225 -
    226 
    227 # Deleting userPasswords
    228 dn: cn=Lev Tolstoij,${BASEDN}
    229 changetype: modify
    230 delete: userPassword
    231 -
    232 EOMODS
    233 
    234 	RC=$?
    235 	if test $RC != 0 ; then
    236 		echo "ldapmodify failed ($RC)!"
    237 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    238 		exit $RC
    239 	fi
    240 
    241 	echo "Using ldapsearch to retrieve all the entries..."
    242 	echo "# Using ldapsearch to retrieve all the entries..." >> $SEARCHOUT
    243 	$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "$BASEDN" \
    244 		 "objectClass=*" >> $SEARCHOUT 2>&1
    245 
    246 	RC=$?
    247 	if test $RC != 0 ; then
    248 		echo "ldapsearch failed ($RC)!"
    249 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    250 		exit $RC
    251 	fi
    252 
    253 	echo "Testing delete..."
    254 	$LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
    255 		-h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS
    256 version: 1
    257 
    258 # Deleting a person...
    259 dn: cn=Torvlobnor Puzdoy,${BASEDN}
    260 changetype: delete
    261 
    262 # Deleting a document...
    263 dn: documentTitle=book1,${BASEDN}
    264 changetype: delete
    265 
    266 # Deleting an organization with an "auxiliary" objectClass...
    267 dn: dc=subnet2,${BASEDN}
    268 changetype: delete
    269 EOMODS
    270 
    271 	RC=$?
    272 	if test $RC != 0 ; then
    273 		echo "ldapmodify failed ($RC)!"
    274 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    275 		exit $RC
    276 	fi
    277 
    278 	echo "Using ldapsearch to retrieve all the entries..."
    279 	echo "# Using ldapsearch to retrieve all the entries..." >> $SEARCHOUT
    280 	$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "$BASEDN" \
    281 		 "objectClass=*" >> $SEARCHOUT 2>&1
    282 
    283 	RC=$?
    284 	if test $RC != 0 ; then
    285 		echo "ldapsearch failed ($RC)!"
    286 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    287 		exit $RC
    288 	fi
    289 
    290 	echo "Testing rename..."
    291 	$LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
    292 		-h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS
    293 version: 1
    294 
    295 # Renaming an organization...
    296 dn: o=An Org,${BASEDN}
    297 changetype: modrdn
    298 newrdn: o=Renamed Org
    299 deleteoldrdn: 1
    300 
    301 # Moving a person to another subtree...
    302 dn: cn=Lev Tolstoij,${BASEDN}
    303 changetype: modrdn
    304 newrdn: cn=Lev Tolstoij
    305 deleteoldrdn: 0
    306 newsuperior: dc=subnet,${BASEDN}
    307 
    308 # Renaming a book...
    309 dn: documentTitle=book2,${BASEDN}
    310 changetype: modrdn
    311 newrdn: documentTitle=Renamed Book
    312 deleteoldrdn: 1
    313 EOMODS
    314 
    315 	RC=$?
    316 	if test $RC != 0 ; then
    317 		echo "ldapmodify failed ($RC)!"
    318 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    319 		exit $RC
    320 	fi
    321 
    322 	echo "Using ldapsearch to retrieve all the entries..."
    323 	echo "# Using ldapsearch to retrieve all the entries..." >> $SEARCHOUT
    324 	$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "$BASEDN" \
    325 		 "objectClass=*" >> $SEARCHOUT 2>&1
    326 
    327 	RC=$?
    328 	if test $RC != 0 ; then
    329 		echo "ldapsearch failed ($RC)!"
    330 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    331 		exit $RC
    332 	fi
    333 
    334 	echo "Adding a child to a referral (should fail)..."
    335 	$LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
    336 		-h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS
    337 version: 1
    338 
    339 dn: cn=Should Fail,ou=Referral,${BASEDN}
    340 changetype: add
    341 objectClass: inetOrgPerson
    342 cn: Should Fail
    343 sn: Fail
    344 telephoneNumber: +39 02 23456789
    345 EOMODS
    346 
    347 	RC=$?
    348 	if test $RC = 0 ; then
    349 		echo "ldapmodify should have failed ($RC)!"
    350 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    351 		exit 1
    352 	fi
    353 
    354 	echo "Modifying a referral (should fail)..."
    355 	$LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
    356 		-h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS
    357 version: 1
    358 
    359 dn: ou=Referral,${BASEDN}
    360 changetype: modify
    361 replace: ref
    362 ref: ldap://localhost:9009/
    363 -
    364 EOMODS
    365 
    366 	RC=$?
    367 	if test $RC = 0 ; then
    368 		echo "ldapmodify should have failed ($RC)!"
    369 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    370 		exit 1
    371 	fi
    372 
    373 	echo "Renaming a referral (should fail)..."
    374 	$LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
    375 		-h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS
    376 version: 1
    377 
    378 dn: ou=Referral,${BASEDN}
    379 changetype: modrdn
    380 newrdn: ou=Renamed Referral
    381 deleteoldrdn: 1
    382 EOMODS
    383 
    384 	RC=$?
    385 	if test $RC = 0 ; then
    386 		echo "ldapmodify should have failed ($RC)!"
    387 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    388 		exit 1
    389 	fi
    390 
    391 	echo "Deleting a referral (should fail)..."
    392 	$LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
    393 		-h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS
    394 version: 1
    395 
    396 dn: ou=Referral,${BASEDN}
    397 changetype: delete
    398 EOMODS
    399 
    400 	RC=$?
    401 	if test $RC = 0 ; then
    402 		echo "ldapmodify should have failed ($RC)!"
    403 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    404 		exit 1
    405 	fi
    406 
    407 	echo "Adding a referral..."
    408 	$LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
    409 		-h $LOCALHOST -p $PORT1 -M >> $TESTOUT 2>&1 << EOMODS
    410 version: 1
    411 
    412 dn: ou=Another Referral,${BASEDN}
    413 changetype: add
    414 objectClass: referral
    415 objectClass: extensibleObject
    416 ou: Another Referral
    417 ref: ldap://localhost:9009/
    418 EOMODS
    419 
    420 	RC=$?
    421 	if test $RC != 0 ; then
    422 		echo "ldapmodify failed ($RC)!"
    423 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    424 		exit $RC
    425 	fi
    426 
    427 	echo "Modifying a referral with manageDSAit..."
    428 	$LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
    429 		-h $LOCALHOST -p $PORT1 -M >> $TESTOUT 2>&1 << EOMODS
    430 version: 1
    431 
    432 dn: ou=Referral,${BASEDN}
    433 changetype: modify
    434 replace: ref
    435 ref: ldap://localhost:9009/
    436 -
    437 EOMODS
    438 
    439 	RC=$?
    440 	if test $RC != 0 ; then
    441 		echo "ldapmodify failed ($RC)!"
    442 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    443 		exit $RC
    444 	fi
    445 
    446 	echo "Using ldapsearch to retrieve the modified entry..."
    447 	echo "# Using ldapsearch to retrieve the modified entry..." >> $SEARCHOUT
    448 	$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "ou=Referral,$BASEDN" -M \
    449 		 "objectClass=*" '*' ref >> $SEARCHOUT 2>&1
    450 
    451 	RC=$?
    452 	if test $RC != 0 ; then
    453 		echo "ldapsearch failed ($RC)!"
    454 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    455 		exit $RC
    456 	fi
    457 
    458 	echo "Renaming a referral with manageDSAit..."
    459 	$LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
    460 		-h $LOCALHOST -p $PORT1 -M >> $TESTOUT 2>&1 << EOMODS
    461 version: 1
    462 
    463 dn: ou=Referral,${BASEDN}
    464 changetype: modrdn
    465 newrdn: ou=Renamed Referral
    466 deleteoldrdn: 1
    467 EOMODS
    468 
    469 	RC=$?
    470 	if test $RC != 0 ; then
    471 		echo "ldapmodify failed ($RC)!"
    472 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    473 		exit $RC
    474 	fi
    475 
    476 	echo "Using ldapsearch to retrieve the renamed entry..."
    477 	echo "# Using ldapsearch to retrieve the renamed entry..." >> $SEARCHOUT
    478 	$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "ou=Renamed Referral,$BASEDN" -M \
    479 		 "objectClass=*" '*' ref >> $SEARCHOUT 2>&1
    480 
    481 	RC=$?
    482 	if test $RC != 0 ; then
    483 		echo "ldapsearch failed ($RC)!"
    484 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    485 		exit $RC
    486 	fi
    487 
    488 	echo "Deleting a referral with manageDSAit..."
    489 	$LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
    490 		-h $LOCALHOST -p $PORT1 -M >> $TESTOUT 2>&1 << EOMODS
    491 version: 1
    492 
    493 dn: ou=Renamed Referral,${BASEDN}
    494 changetype: delete
    495 EOMODS
    496 
    497 	RC=$?
    498 	if test $RC != 0 ; then
    499 		echo "ldapmodify failed ($RC)!"
    500 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    501 		exit $RC
    502 	fi
    503 
    504 	BINDDN="cn=Mitya Kovalev,${BASEDN}"
    505 	BINDPW="mit"
    506 	NEWPW="newsecret"
    507 	echo "Testing passwd change..."
    508 	$LDAPPASSWD -h $LOCALHOST -p $PORT1 \
    509 		-D "${BINDDN}" -w ${BINDPW} -s ${NEWPW} \
    510 		"$BINDDN" >> $TESTOUT 2>&1
    511 
    512 	RC=$?
    513 	if test $RC != 0 ; then
    514 		echo "ldappasswd failed ($RC)!"
    515 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    516 		exit $RC
    517 	fi
    518 
    519 	echo -n "Testing bind with new secret... "
    520 	$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $NEWPW
    521 	RC=$?
    522 	if test $RC != 0 ; then
    523 		echo "ldapwhoami failed ($RC)!"
    524 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    525 		exit $RC
    526 	fi
    527 
    528 	BINDDN="cn=Some One,${BASEDN}"
    529 	BINDPW="someone"
    530 	echo -n "Testing bind with newly added user... "
    531 	$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW
    532 	RC=$?
    533 	if test $RC != 0 ; then
    534 		echo "ldapwhoami failed ($RC)!"
    535 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    536 		exit $RC
    537 	fi
    538 
    539 	echo "Using ldapsearch to retrieve all the entries..."
    540 	echo "# Using ldapsearch to retrieve all the entries..." >> $SEARCHOUT
    541 	$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "$BASEDN" \
    542 		 "objectClass=*" >> $SEARCHOUT 2>&1
    543 
    544 	RC=$?
    545 	if test $RC != 0 ; then
    546 		echo "ldapsearch failed ($RC)!"
    547 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    548 		exit $RC
    549 	fi
    550 
    551 	echo "Filtering ldapsearch results..."
    552 	$LDIFFILTER < $SEARCHOUT > $SEARCHFLT
    553 	echo "Filtering modified ldif..."
    554 	$LDIFFILTER < $SQLWRITE > $LDIFFLT
    555 	echo "Comparing filter output..."
    556 	$CMP $SEARCHFLT $LDIFFLT > $CMPOUT
    557 
    558 	if test $? != 0 ; then
    559 		echo "comparison failed - SQL mods search didn't succeed"
    560 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    561 		exit 1
    562 	fi
    563 	;;
    564 
    565 *)
    566 	echo "apparently ${RDBMS} does not support writes; skipping..."
    567 	;;
    568 esac
    569 
    570 test $KILLSERVERS != no && kill -HUP $KILLPIDS
    571 
    572 echo ">>>>> Test succeeded"
    573 exit 0
    574