/crypto/heimdal/tests/kdc/check-iprop.in

https://bitbucket.org/freebsd/freebsd-head/ · Autoconf · 248 lines · 153 code · 52 blank · 43 comment · 44 complexity · cd3c2ac0ed9e11c19e07a3dc19fd654a MD5 · raw file

  1. #!/bin/sh
  2. #
  3. # Copyright (c) 2006 - 2007 Kungliga Tekniska Högskolan
  4. # (Royal Institute of Technology, Stockholm, Sweden).
  5. # All rights reserved.
  6. #
  7. # Redistribution and use in source and binary forms, with or without
  8. # modification, are permitted provided that the following conditions
  9. # are met:
  10. #
  11. # 1. Redistributions of source code must retain the above copyright
  12. # notice, this list of conditions and the following disclaimer.
  13. #
  14. # 2. Redistributions in binary form must reproduce the above copyright
  15. # notice, this list of conditions and the following disclaimer in the
  16. # documentation and/or other materials provided with the distribution.
  17. #
  18. # 3. Neither the name of the Institute nor the names of its contributors
  19. # may be used to endorse or promote products derived from this software
  20. # without specific prior written permission.
  21. #
  22. # THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
  23. # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  24. # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  25. # ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
  26. # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  27. # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  28. # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  29. # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  30. # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  31. # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  32. # SUCH DAMAGE.
  33. #
  34. # $Id$
  35. #
  36. srcdir="@srcdir@"
  37. objdir="@objdir@"
  38. EGREP="@EGREP@"
  39. # If there is no useful db support compile in, disable test
  40. ../db/have-db || exit 77
  41. # Dont run this test in AFS, since it lacks support for AF_UNIX
  42. expr "X`/bin/pwd || pwd`" : "X/afs/.*" > /dev/null 2>/dev/null && exit 77
  43. R=TEST.H5L.SE
  44. port=@port@
  45. cache="FILE:${objdir}/cache.krb5"
  46. keytabfile=${objdir}/iprop.keytab
  47. keytab="FILE:${keytabfile}"
  48. kdc="${TESTS_ENVIRONMENT} ../../kdc/kdc --addresses=localhost -P $port"
  49. kadmin="${TESTS_ENVIRONMENT} ../../kadmin/kadmin -r $R"
  50. ipropdslave="${TESTS_ENVIRONMENT} ../../lib/kadm5/ipropd-slave"
  51. ipropdmaster="${TESTS_ENVIRONMENT} ../../lib/kadm5/ipropd-master"
  52. iproplog="${TESTS_ENVIRONMENT} ../../lib/kadm5/iprop-log"
  53. kinit="${TESTS_ENVIRONMENT} ../../kuser/kinit -c $cache --no-afslog"
  54. KRB5_CONFIG="${objdir}/krb5.conf"
  55. export KRB5_CONFIG
  56. rm -f ${keytabfile}
  57. rm -f current-db*
  58. rm -f current*.log
  59. rm -f out-*
  60. rm -f mkey.file*
  61. rm -f messages.log
  62. > messages.log
  63. echo Creating database
  64. ${kadmin} -l \
  65. init \
  66. --realm-max-ticket-life=1day \
  67. --realm-max-renewable-life=1month \
  68. ${R} || exit 1
  69. ${kadmin} -l add -p foo --use-defaults user@${R} || exit 1
  70. ${kadmin} -l add --random-key --use-defaults iprop/localhost@${R} || exit 1
  71. ${kadmin} -l ext -k ${keytab} iprop/localhost@${R} || exit 1
  72. ${kadmin} -l add --random-key --use-defaults iprop/slave@${R} || exit 1
  73. ${kadmin} -l ext -k ${keytab} iprop/slave@${R} || exit 1
  74. echo foo > ${objdir}/foopassword
  75. # -- foo
  76. ipds=
  77. ipdm=
  78. kdcpid=
  79. > iprop-stats
  80. trap "echo 'killing ipropd s + m + kdc'; kill \${ipdm} \${ipds} \${kdcpid} >/dev/null 2>/dev/null; tail messages.log ; tail iprop-stats; exit 1;" EXIT
  81. echo Starting kdc
  82. ${kdc} &
  83. kdcpid=$!
  84. sh ${srcdir}/wait-kdc.sh || exit 1
  85. echo "starting master"
  86. ${ipropdmaster} --hostname=localhost -k ${keytab} \
  87. --database=${objdir}/current-db &
  88. ipdm=$!
  89. sh ${srcdir}/wait-kdc.sh ipropd-master || exit 1
  90. echo "starting slave"
  91. KRB5_CONFIG="${objdir}/krb5-slave.conf" \
  92. ${ipropdslave} --hostname=slave -k ${keytab} localhost &
  93. ipds=$!
  94. sh ${srcdir}/wait-kdc.sh ipropd-slave || exit 1
  95. echo "checking slave is up"
  96. ${EGREP} 'iprop/slave@TEST.H5L.SE.*Up' iprop-stats >/dev/null || exit 1
  97. # ----------------- checking: pushing lives changes
  98. echo "Add host"
  99. ${kadmin} -l add --random-key --use-defaults host/foo@${R} || exit 1
  100. sleep 2
  101. KRB5_CONFIG="${objdir}/krb5-slave.conf" \
  102. ${kadmin} -l get host/foo@${R} > /dev/null || exit 1
  103. echo "Rename host"
  104. ${kadmin} -l rename host/foo@${R} host/bar@${R} || exit 1
  105. sleep 2
  106. KRB5_CONFIG="${objdir}/krb5-slave.conf" \
  107. ${kadmin} -l get host/foo@${R} > /dev/null 2>/dev/null && exit 1
  108. KRB5_CONFIG="${objdir}/krb5-slave.conf" \
  109. ${kadmin} -l get host/bar@${R} > /dev/null || exit 1
  110. echo "Delete host"
  111. ${kadmin} -l delete host/bar@${R} || exit 1
  112. sleep 2
  113. KRB5_CONFIG="${objdir}/krb5-slave.conf" \
  114. ${kadmin} -l get host/bar@${R} > /dev/null 2>/dev/null && exit 1
  115. echo "kill slave"
  116. > iprop-stats
  117. kill ${ipds}
  118. sleep 2
  119. ${EGREP} 'iprop/slave@TEST.H5L.SE.*Down' iprop-stats >/dev/null || exit 1
  120. # ----------------- checking: slave is missing changes while down
  121. echo "doing changes while slave is down"
  122. ${kadmin} -l cpw --random-password user@${R} > /dev/null || exit 1
  123. ${kadmin} -l cpw --random-password user@${R} > /dev/null || exit 1
  124. echo "Makeing a copy of the master log file"
  125. cp ${objdir}/current.log ${objdir}/current.log.tmp
  126. # ----------------- checking: checking that master and slaves resyncs
  127. echo "starting slave again"
  128. > iprop-stats
  129. > messages.log
  130. KRB5_CONFIG="${objdir}/krb5-slave.conf" \
  131. ${ipropdslave} --hostname=slave -k ${keytab} localhost &
  132. ipds=$!
  133. sh ${srcdir}/wait-kdc.sh ipropd-slave || exit 1
  134. echo "checking slave is up again"
  135. ${EGREP} 'iprop/slave@TEST.H5L.SE.*Up' iprop-stats >/dev/null || exit 1
  136. echo "checking for replay problems"
  137. ${EGREP} 'Entry already exists in database' messages.log && exit 1
  138. echo "kill slave and remove log and database"
  139. kill ${ipds}
  140. sleep 2
  141. rm current.slave.log current-db.slave* || exit 1
  142. > iprop-stats
  143. > messages.log
  144. KRB5_CONFIG="${objdir}/krb5-slave.conf" \
  145. ${ipropdslave} --hostname=slave -k ${keytab} localhost &
  146. ipds=$!
  147. sh ${srcdir}/wait-kdc.sh ipropd-slave || exit 1
  148. echo "checking slave is up again"
  149. ${EGREP} 'iprop/slave@TEST.H5L.SE.*Up' iprop-stats >/dev/null || exit 1
  150. echo "checking for replay problems"
  151. ${EGREP} 'Entry already exists in database' messages.log && exit 1
  152. # ----------------- checking: checking live truncation of master log
  153. ${kadmin} -l cpw --random-password user@${R} > /dev/null || exit 1
  154. sleep 2
  155. echo "live truncate on master log"
  156. ${iproplog} truncate || exit 1
  157. sleep 2
  158. echo "Killing master and slave"
  159. kill ${ipdm} ${ipds} >/dev/null 2>/dev/null
  160. sleep 2
  161. ${EGREP} "^master down at " iprop-stats > /dev/null || exit 1
  162. echo "compare versions on master and slave logs"
  163. KRB5_CONFIG=${objdir}/krb5-slave.conf \
  164. ${iproplog} last-version > slave-last.tmp
  165. ${iproplog} last-version > master-last.tmp
  166. cmp master-last.tmp slave-last.tmp || exit 1
  167. # ----------------- checking: master going backward
  168. > iprop-stats
  169. > messages.log
  170. echo "Going back to old version of the master log file"
  171. cp ${objdir}/current.log.tmp ${objdir}/current.log
  172. echo "starting master"
  173. ${ipropdmaster} --hostname=localhost -k ${keytab} \
  174. --database=${objdir}/current-db &
  175. ipdm=$!
  176. sh ${srcdir}/wait-kdc.sh ipropd-master || exit 1
  177. echo "starting slave"
  178. KRB5_CONFIG="${objdir}/krb5-slave.conf" \
  179. ${ipropdslave} --hostname=slave -k ${keytab} localhost &
  180. ipds=$!
  181. sh ${srcdir}/wait-kdc.sh ipropd-slave || exit 1
  182. echo "checking slave is up again"
  183. ${EGREP} 'iprop/slave@TEST.H5L.SE.*Up' iprop-stats >/dev/null || exit 1
  184. echo "checking for replay problems"
  185. ${EGREP} 'Entry already exists in database' messages.log && exit 1
  186. echo "pushing one change"
  187. ${kadmin} -l cpw --random-password user@${R} > /dev/null || exit 1
  188. sleep 2
  189. trap "" EXIT
  190. kill ${ipdm} ${ipds} ${kdcpid}
  191. echo "compare versions on master and slave logs"
  192. KRB5_CONFIG=${objdir}/krb5-slave.conf \
  193. ${iproplog} last-version > slave-last.tmp
  194. ${iproplog} last-version > master-last.tmp
  195. cmp master-last.tmp slave-last.tmp || exit 1
  196. exit $ec