1 #! /bin/sh 2 # $OpenLDAP$ 3 ## This work is part of OpenLDAP Software <http://www.openldap.org/>. 4 ## 5 ## Copyright 1998-2024 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 < $SQLCONF > $CONF1 38 $SLAPD -f $CONF1 -h $URI1 -d $LVL > $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 $URI1 \ 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 $URI1 -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 $URI1 >> $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 $URI1 -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 $URI1 >> $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 $URI1 -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 $URI1 >> $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 $URI1 -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 $URI1 >> $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 $URI1 -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 $URI1 >> $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 $URI1 >> $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 $URI1 >> $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 $URI1 >> $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 $URI1 -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 $URI1 -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 $URI1 -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 $URI1 -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 $URI1 -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 $URI1 -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 $URI1 \ 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 $URI1 -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 $URI1 -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 $URI1 -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