Advertisement
Guest User

Untitled

a guest
May 28th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 20.27 KB | None | 0 0
  1. #!/bin/sh
  2.  
  3. # lock_acq - acquire lock by creating lockfile
  4. # arguments:
  5. # lockfile - name of lockfile
  6. # retrysleep - how long (in seconds) to sleep before trying to
  7. # acquire the lock again
  8. # retries - how many times to try to acquire the lock
  9. #
  10. # if the lock is not acquired, this function terminates the shell
  11. #
  12. lock_acq() {
  13. local ALOCKFILE ARETRYSLEEP ARETRIES LUID LCOUNT LSTARTTIME LDONETIME SUGGESTSLEEP
  14. ALOCKFILE="$1"
  15. ARETRYSLEEP="$2"
  16. ARETRIES="$3"
  17. shift 3
  18.  
  19. LUID="`whoami` $$ `date`"
  20. LSTARTTIME=`date +%s`
  21. LCOUNT=0
  22. while [ "${LCOUNT}" -lt "${ARETRIES}" ];
  23. do
  24. if ln -s "${LUID}" "${ALOCKFILE}"; then
  25. break
  26. fi
  27. sleep ${ARETRYSLEEP}
  28. LCOUNT=`expr ${LCOUNT} + 1`
  29. done
  30. if [ "${LCOUNT}" -ge "${ARETRIES}" ]; then
  31. echo "${TLA} can't acquire lock ${ALOCKFILE} after ${ARETRIES} tries... giving up" 1>&2
  32. return 1
  33. fi
  34. if [ "${LCOUNT}" -gt 0 ]; then
  35. LDONETIME=`date +%s`
  36. SUGGESTSLEEP=`expr ${LDONETIME} - ${LSTARTTIME}`
  37. echo "${TLA} increase lock sleep time (suggest ${SUGGESTSLEEP})" 1>&2
  38. fi
  39. }
  40.  
  41. # lock_rel - release lock
  42. #
  43. lock_rel() {
  44. local ALOCKFILE
  45. ALOCKFILE="$1"
  46.  
  47. rm -f ${ALOCKFILE}
  48. }
  49.  
  50. # ndc_lock_acq - acquire [r]ndc lock by creating lockfile
  51. # arguments:
  52. # retrysleep - how long (in seconds) to sleep before trying to
  53. # acquire the lock again
  54. # retries - how many times to try to acquire the lock
  55. #
  56. # if the lock is not acquired, this function terminates the shell
  57. #
  58. ndc_lock_acq() {
  59. lock_acq /tmp/ndc.lock "$1" "$2"
  60. }
  61.  
  62. # ndc_lock_rel - release [r]ndc lock
  63. #
  64. ndc_lock_rel() {
  65. lock_rel /tmp/ndc.lock
  66. }
  67.  
  68. # reload_zone - tells named to reload the zone (after the new
  69. # zonefile is put in place)
  70. #
  71. reload_zone() {
  72. local AZONE ASERIAL ARELOADSLEEP ARETRYSLEEP ARETRIES LCOUNT LSOA RELSTARTTIME RELDONETIME SUGGESTSLEEP RETRYWARNCOUNT
  73. AZONE="$1"
  74. ASERIAL="$2"
  75. ARELOADSLEEP="$3"
  76. ARETRYSLEEP="$4"
  77. ARETRIES="$5"
  78. shift 5
  79.  
  80. ${MAPSBIN}/runndc "${AZONE}"
  81.  
  82. RELSTARTTIME=`date +%s`
  83. sleep ${ARELOADSLEEP} # wait for a while for the zone to reload
  84. LCOUNT=0
  85. while [ "${LCOUNT}" -lt "${ARETRIES}" ]
  86. do
  87. LSOA=`${HOST} -t soa ${AZONE}. 127.0.0.1 |
  88. fgrep "${AZONE}" | awk ' { print $7; }'`
  89. if [ "${LSOA}" = "${ASERIAL}" ]
  90. then
  91. break
  92. fi
  93. sleep ${ARETRYSLEEP} # snooze
  94. LCOUNT=`expr ${LCOUNT} + 1`
  95. done
  96. if [ "${LCOUNT}" -ge "${ARETRIES}" ]; then
  97. echo "${TLA} ${AZONE} can't verify reload after ${ARETRIES} tries... giving up" 1>&2
  98. return 1
  99. fi
  100. RETRYWARNCOUNT=0
  101. if [ "${ARETRIES}" -gt 3 ]; then
  102. RETRYWARNCOUNT=`expr "${ARETRIES}" - 3`
  103. fi
  104. if [ "${LCOUNT}" -ge "${RETRYWARNCOUNT}" ]; then
  105. RELDONETIME=`date +%s`
  106. SUGGESTSLEEP=`expr ${RELDONETIME} - ${RELSTARTTIME}`
  107. echo "${TLA} ${AZONE} increase reload sleep time (suggest ${SUGGESTSLEEP})" 1>&2
  108. fi
  109. }
  110.  
  111. # and now, the common zone-building code
  112.  
  113. # if database is down, stop without further processing
  114. if [ -e /proj/maps/etc/database-is-down ]; then
  115. exit 0
  116. fi
  117.  
  118. # parse arguments:
  119. # -d: enable debugging (set DEBUG macro to "-d"; set sh -x)
  120. # -n: disable signaling named (or other transport) about new
  121. # zone files (set RUNNDC macro to "NO")
  122. args=`getopt dn $*`
  123. if [ $? != 0 ]
  124. then
  125. echo "Usage: $0 [-dn]"
  126. exit 2
  127. fi
  128. set -- $args
  129. for i
  130. do
  131. case "$i"
  132. in
  133. -d)
  134. shift
  135. DEBUG="-d"
  136. set -x
  137. ;;
  138. -n)
  139. shift
  140. RUNNDC=NO
  141. ;;
  142. --)
  143. shift
  144. break
  145. ;;
  146. esac
  147. done
  148.  
  149. # set default *PROCESS* argument lists
  150. if [ "${PROCESSARGS}" = "" ]
  151. then
  152. PROCESSARGS="-z"
  153. fi
  154.  
  155. if [ "${PROCESSARGSRBLDNSD}" = "" ]
  156. then
  157. PROCESSARGSRBLDNSD="-z -r"
  158. fi
  159.  
  160. # set default RBLDNSD data set type
  161. if [ "${DATASETTYPE}" = "" ]
  162. then
  163. DATASETTYPE="ip4set"
  164. fi
  165.  
  166. # set default checksum commands
  167. if [ "${SUMBSD}" = "" ]
  168. then
  169. SUMBSD="/usr/bin/cksum -o 1"
  170. fi
  171. if [ "${SUMSYSV}" = "" ]
  172. then
  173. SUMSYSV="/usr/bin/cksum -o 2"
  174. fi
  175. if [ "${CKSUM}" = "" ]
  176. then
  177. CKSUM="/usr/bin/cksum -o 3"
  178. fi
  179. if [ "${CKSUMPOSIX}" = "" ]
  180. then
  181. CKSUMPOSIX="/usr/bin/cksum"
  182. fi
  183. if [ "${MD5}" = "" ]
  184. then
  185. MD5="/sbin/md5"
  186. fi
  187.  
  188. # lock the listfile
  189. if ! lock_acq ${LISTLOCKFILE} 30 20
  190. then
  191. RC=$?
  192. echo "${TLA} list build failed to acquire lock ${LISTLOCKFILE}" 1>&2
  193. exit ${RC}
  194. fi
  195.  
  196. # clean up new temporary listfile on signals
  197. trap "rm -f ${LISTFILE}.$$" 0 1 2 3
  198.  
  199. # we don't yet have a new listfile
  200. rm -f ${LISTFILE}.$$
  201. NEWLISTFILE=NO
  202.  
  203. # get the list contents into the new listfile
  204. if ! listfunc > ${LISTFILE}.$$
  205. then
  206. RC=$?
  207. echo "${TLA} rc ${RC} getting list contents -- failed" 1>&2
  208. rm -f ${LISTFILE}.$$
  209. lock_rel ${LISTLOCKFILE}
  210. exit ${RC}
  211. fi
  212.  
  213. # compare new listfile with old listfile; keep new if different
  214. cmp -s ${LISTFILE} ${LISTFILE}.$$
  215. case $? in
  216. 0)
  217. # identical content -- flush new listfile
  218. rm -f ${LISTFILE}.$$
  219. ;;
  220. *)
  221. # new listfile differs, flush old and replace with new
  222. if mv -f ${LISTFILE}.$$ ${LISTFILE}
  223. then
  224. :
  225. else
  226. rm -f ${LISTFILE} && mv ${LISTFILE}.$$ ${LISTFILE}
  227. RC=$?
  228. if [ ${RC} != 0 ]
  229. then
  230. # can't move new into place, complain and exit
  231. echo "${TLA} rc ${RC} saving listfile ${LISTFILE}" 1>&2
  232. rm -f ${LISTFILE}.$$
  233. lock_rel ${LISTLOCKFILE}
  234. exit ${RC}
  235. fi
  236. fi
  237. NEWLISTFILE=YES
  238. esac
  239.  
  240. # done building listfile, release lock
  241. lock_rel ${LISTLOCKFILE}
  242.  
  243. if [ "${NEWLISTFILE}" = "YES" ]
  244. then
  245.  
  246. # get a clean start
  247. rm -f ${LISTFILE}-bind
  248. rm -f ${LISTFILE}-rbldnsd
  249.  
  250. if [ "${POSTPROCESS}" != "" ]
  251. then
  252. # reformat the list file entries into BIND zone file entries
  253. if ! ${PROCESS} ${PROCESSARGS} < ${LISTFILE} |
  254. ${POSTPROCESS} ${POSTPROCESSARGS} > ${LISTFILE}-bind
  255. then
  256. RC=$?
  257. echo "${TLA} rc ${RC} on list conversion -- skipping BIND-format zone files" 1>&2
  258. rm -f ${LISTFILE}-bind
  259. fi
  260. fi
  261.  
  262. if [ "${POSTPROCESSRBLDNSD}" != "" ]
  263. then
  264. # reformat the list file entries into RBLDNSD zone file entries
  265. if ! ${PROCESS} ${PROCESSARGSRBLDNSD} < ${LISTFILE} |
  266. ${POSTPROCESSRBLDNSD} ${POSTPROCESSARGS} > ${LISTFILE}-rbldnsd
  267. then
  268. RC=$?
  269. echo "${TLA} rc ${RC} on list conversion -- skipping RBLDNSD-format zone files" 1>&2
  270. rm -f ${LISTFILE}-rbldnsd
  271. fi
  272. fi
  273.  
  274. fi
  275.  
  276. # now figure out what zones we can build for this tla
  277. TLAQ=\'${TLA}\'
  278. ZONES=`${PSQL} -U ${DBUSER} -h ${DBHOST} -t -c \
  279. "select zone from zones where list = ${TLAQ} order by zone;" ${DBNAME}`
  280. RC=$?
  281. if [ ${RC} != 0 ]
  282. then
  283. echo "${TLA} rc ${RC} getting zone list -- aborting" 1>&2
  284. exit ${RC}
  285. fi
  286. if [ ! -n "${ZONES}" ]
  287. then
  288. echo "${TLA} has no zones -- aborting" 1>&2
  289. exit 1
  290. fi
  291.  
  292. # for each zone
  293. for ZONE in ${ZONES}
  294. do
  295. ZONEQ=\'${ZONE}\'
  296. ZONELOCKFILE=/tmp/${TLA}-${ZONE}-build.lock
  297. NSLISTFILE=${WORKDIR}/${ZONE}-nslist
  298. NEWNSLISTFILE=NO
  299. NEWZBINDFILE=NO
  300. NEWZBINDGZ=NO
  301. NEWZBINDTGZ=NO
  302. NEWZRBLDNSDFILE=NO
  303. NEWZRBLDNSDGZ=NO
  304. NEWZRBLDNSDTGZ=NO
  305.  
  306. ZNSS=`${PSQL} -U $DBUSER -h $DBHOST -A -t -c \
  307. "select host from zoneservers where zone = ${ZONEQ} order by host;" $DBNAME`
  308. RC=$?
  309. if [ ${RC} != 0 ]
  310. then
  311. echo "${TLA} ${ZONE} rc ${RC} getting nameservers -- skipping" 1>&2
  312. continue
  313. fi
  314. if [ ! -n "${ZNSS}" ]
  315. then
  316. echo "${TLA} ${ZONE} no nameservers -- skipping" 1>&2
  317. continue
  318. fi
  319.  
  320. ZBFN=`${PSQL} -U $DBUSER -h $DBHOST -A -t -c \
  321. "select filebasename from zones where list = ${TLAQ} and zone = ${ZONEQ};" $DBNAME`
  322. RC=$?
  323. if [ ${RC} != 0 ]
  324. then
  325. echo "${TLA} ${ZONE} rc ${RC} getting filebasename -- skipping" 1>&2
  326. continue
  327. fi
  328. if [ ! -n "${ZBFN}" ]
  329. then
  330. echo "${TLA} ${ZONE} no filebasename -- skipping" 1>&2
  331. continue
  332. fi
  333.  
  334. ZBINDFILE=${WORKDIR}/${ZBFN}-zone-bind
  335. ZRBLDNSDFILE=${WORKDIR}/${ZBFN}-zone-rbldnsd
  336.  
  337. # lock the zone file(s)
  338. if ! lock_acq ${ZONELOCKFILE} 30 20
  339. then
  340. echo "${TLA} ${ZONE} zone build failed to acquire lock ${ZONELOCKFILE}" 1>&2
  341. continue
  342. fi
  343.  
  344. # clean up new temporary nameserver listfile on signals
  345. trap "rm -f ${NSLISTFILE}.$$" 0 1 2 3
  346.  
  347. rm -f ${NSLISTFILE}.$$
  348. for NS in ${ZNSS}
  349. do
  350. echo ${NS} >> ${NSLISTFILE}.$$
  351. done
  352.  
  353. # compare new nameserver list with old; keep new if different
  354. cmp -s ${NSLISTFILE}.$$ ${NSLISTFILE}
  355. case $? in
  356. 0)
  357. # identical content -- flush new listfile
  358. rm -f ${NSLISTFILE}.$$
  359. ;;
  360. *)
  361. # new nameserver list differs, flush old file and replace with new
  362. if mv -f ${NSLISTFILE}.$$ ${NSLISTFILE}
  363. then
  364. :
  365. else
  366. rm -f ${NSLISTFILE} && mv ${NSLISTFILE}.$$ ${NSLISTFILE}
  367. RC=$?
  368. if [ ${RC} != 0 ]
  369. then
  370. # can't move new into place, complain and exit
  371. echo "${TLA} ${ZONE} rc ${RC} saving nslist ${NSLISTFILE} -- skipping" 1>&2
  372. rm -f ${NSLISTFILE}.$$
  373. lock_rel ${ZONELOCKFILE}
  374. continue
  375. fi
  376. fi
  377. NEWNSLISTFILE=YES
  378. esac
  379.  
  380. # if we don't have a new listfile, or a new nameserver list file,
  381. # there's nothing to further to do for the zone, so skip
  382. if [ "${NEWLISTFILE}" != "YES" -a "${NEWNSLISTFILE}" != "YES" ]
  383. then
  384. lock_rel ${ZONELOCKFILE}
  385. continue
  386. fi
  387.  
  388. # if there's a BIND-format list data file...
  389. if [ -f ${LISTFILE}-bind ]
  390. then
  391.  
  392. # clean up new temporary BIND-format zonefile on signals
  393. trap "rm -f ${ZBINDFILE}.$$" 0 1 2 3
  394.  
  395. # create a new temporary BIND-format zonefile and write its header
  396. rm -f ${ZBINDFILE}.$$
  397. echo "; Autogenerated; do not edit" > ${ZBINDFILE}.$$
  398. echo '$TTL' "${DEFTTL}" >> ${ZBINDFILE}.$$
  399. cat >> ${ZBINDFILE}.$$ <<EOF
  400. @ IN SOA ${SOANSNAME}. ${SOARNAME}. (
  401. ${SOASERIAL} ${SOAREFRESH} ${SOARETRY} ${SOAEXPIRE} ${SOAMINTTL} )
  402. TXT "Copyright ${COPYRIGHTYEAR} Trend Micro Incorporated"
  403. IN MX 10 mx01.mail-abuse.com.
  404. IN MX 10 mx02.mail-abuse.com.
  405. IN MX 10 mx03.mail-abuse.com.
  406. IN MX 10 mx04.mail-abuse.com.
  407. ;
  408. EOF
  409. for NS in ${ZNSS}
  410. do
  411. printf "\t%s\tNS\t%s.\n" ${NSTTL} ${NS} >> ${ZBINDFILE}.$$
  412. done
  413.  
  414. # copy in the BIND-format list data
  415. cat ${LISTFILE}-bind >> ${ZBINDFILE}.$$
  416. RC=$?
  417. if [ ${RC} != 0 ]
  418. then
  419. echo "${TLA} ${ZONE} rc ${RC} copying BIND format list data -- skipping" 1>&2
  420. rm -f ${ZBINDFILE}.$$
  421. fi
  422.  
  423. # if we still have a zone data file, save it
  424. if [ -f ${ZBINDFILE}.$$ ]
  425. then
  426. if mv -f ${ZBINDFILE}.$$ ${ZBINDFILE}
  427. then
  428. NEWZBINDFILE=YES
  429. else
  430. rm -f ${ZBINDFILE} && mv ${ZBINDFILE}.$$ ${ZBINDFILE}
  431. RC=$?
  432. if [ ${RC} != 0 ]
  433. then
  434. echo "${TLA} ${ZONE} rc ${RC} saving BIND zone file ${ZBINDFILE} -- skipping" 1>&2
  435. rm -f ${ZBINDFILE}.$$
  436. else
  437. NEWZBINDFILE=YES
  438. fi
  439. fi
  440. fi
  441.  
  442. fi
  443.  
  444. # if there's an RBLDNSD-format list data file...
  445. if [ -f ${LISTFILE}-rbldnsd ]
  446. then
  447.  
  448. # clean up new temporary RBLDNSD-format zonefile on signals
  449. trap "rm -f ${ZRBLDNSDFILE}.$$" 0 1 2 3
  450.  
  451. # create a new temporary RBLDNSD-format zonefile and write its header
  452. rm -f ${ZRBLDNSDFILE}.$$
  453. echo "; Autogenerated; do not edit" > ${ZRBLDNSDFILE}.$$
  454. echo '$TTL' "${DEFTTL}" >> ${ZRBLDNSDFILE}.$$
  455. echo '$SOA' "${DEFTTL} ${SOANSNAME} ${SOARNAME} ${SOASERIAL} ${SOAREFRESH} ${SOARETRY} ${SOAEXPIRE} ${SOAMINTTL}" >> ${ZRBLDNSDFILE}.$$
  456. echo -n '$NS' "${NSTTL}" >> ${ZRBLDNSDFILE}.$$
  457. for NS in ${ZNSS}
  458. do
  459. echo -n ' ' ${NS} >> ${ZRBLDNSDFILE}.$$
  460. done
  461. echo >> ${ZRBLDNSDFILE}.$$
  462. echo '$DATASET' "generic @" >> ${ZRBLDNSDFILE}.$$
  463. cat >> ${ZRBLDNSDFILE}.$$ <<EOF
  464. @ TXT "Copyright ${COPYRIGHTYEAR} Trend Micro Incorporated"
  465. @ MX 10 mx01.mail-abuse.com
  466. @ MX 10 mx02.mail-abuse.com
  467. @ MX 10 mx03.mail-abuse.com
  468. @ MX 10 mx04.mail-abuse.com
  469. EOF
  470. echo '$DATASET' "${DATASETTYPE} @" >> ${ZRBLDNSDFILE}.$$
  471.  
  472. # if there are default A and TXT values, build up a defaults string
  473. if [ "${DEFAVALUE}" != "" ]
  474. then
  475. ZRBLDNSDEFS=":${DEFAVALUE}"
  476. if [ "${DEFTXTVALUE}" != "" ]
  477. then
  478. ZRBLDNSDEFS="${ZRBLDNSDEFS}:${DEFTXTVALUE}"
  479. fi
  480. fi
  481.  
  482. # if there's a defaults string, write it to the file
  483. if [ "${ZRBLDNSDEFS}" != "" ]
  484. then
  485. echo "${ZRBLDNSDEFS}" >> ${ZRBLDNSDFILE}.$$
  486. fi
  487.  
  488. # copy in the RBLDNSD-format list data
  489. cat ${LISTFILE}-rbldnsd >> ${ZRBLDNSDFILE}.$$
  490. RC=$?
  491. if [ ${RC} != 0 ]
  492. then
  493. echo "${TLA} ${ZONE} rc ${RC} copying RBLDNSD format list data -- skipping" 1>&2
  494. rm -f ${ZRBLDNSDFILE}.$$
  495. fi
  496.  
  497. # if we (still) have a new RBLDNSD-format zonefile, save it
  498. if [ -f ${ZRBLDNSDFILE}.$$ ]
  499. then
  500. if mv -f ${ZRBLDNSDFILE}.$$ ${ZRBLDNSDFILE}
  501. then
  502. NEWZRBLDNSDFILE=YES
  503. else
  504. rm -f ${ZRBLDNSDFILE} && mv ${ZRBLDNSDFILE}.$$ ${ZRBLDNSDFILE}
  505. RC=$?
  506. if [ ${RC} != 0 ]
  507. then
  508. echo "${TLA} ${ZONE} rc $RC saving RBLDNSD zone file ${ZRBLDNSDFILE} -- skipping" 1>&2
  509. rm -f ${ZRBLDNSDFILE}.$$
  510. else
  511. NEWZRBLDNSDFILE=YES
  512. fi
  513. fi
  514. fi
  515.  
  516. fi
  517.  
  518. # if we built a new BIND-format zonefile, invalidate the old cksum files
  519. if [ "${NEWZBINDFILE}" = "YES" ]
  520. then
  521. rm -f ${ZBINDFILE}.sum-bsd
  522. rm -f ${ZBINDFILE}.sum-sysv
  523. rm -f ${ZBINDFILE}.cksum
  524. rm -f ${ZBINDFILE}.md5
  525. fi
  526.  
  527. # if we built a new BIND-format zonefile, make new cksum files
  528. if [ "${NEWZBINDFILE}" = "YES" ]
  529. then
  530. ${SUMBSD} <${ZBINDFILE} >${ZBINDFILE}.sum-bsd
  531. RC=$?
  532. if [ ${RC} != 0 ]
  533. then
  534. echo "${TLA} ${ZONE} rc ${RC} on ${SUMBSD} ${ZBINDFILE}" 1>&2
  535. rm -f ${ZBINDFILE}.sum-bsd
  536. fi
  537. ${SUMSYSV} <${ZBINDFILE} >${ZBINDFILE}.sum-sysv
  538. RC=$?
  539. if [ ${RC} != 0 ]
  540. then
  541. echo "${TLA} ${ZONE} rc ${RC} on ${SUMSYSV} ${ZBINDFILE}" 1>&2
  542. rm -f ${ZBINDFILE}.sum-sysv
  543. fi
  544. ${CKSUM} <${ZBINDFILE} >${ZBINDFILE}.cksum
  545. RC=$?
  546. if [ ${RC} != 0 ]
  547. then
  548. echo "${TLA} ${ZONE} rc ${RC} on ${CKSUM} ${ZBINDFILE}" 1>&2
  549. rm -f ${ZBINDFILE}.cksum
  550. fi
  551. ${CKSUMPOSIX} <${ZBINDFILE} >${ZBINDFILE}.cksumposix
  552. RC=$?
  553. if [ ${RC} != 0 ]
  554. then
  555. echo "${TLA} ${ZONE} rc ${RC} on ${CKSUMPOSIX} ${ZBINDFILE}" 1>&2
  556. rm -f ${ZBINDFILE}.cksumposix
  557. fi
  558. ${MD5} <${ZBINDFILE} >${ZBINDFILE}.md5
  559. RC=$?
  560. if [ ${RC} != 0 ]
  561. then
  562. echo "${TLA} ${ZONE} rc ${RC} on ${MD5} ${ZBINDFILE}" 1>&2
  563. rm -f ${ZBINDFILE}.md5
  564. fi
  565. fi
  566.  
  567. # if we built a new RBLDNSD-format zonefile, build a tarball and a gzip
  568. if [ "${NEWZBINDFILE}" = "YES" ]
  569. then
  570. SAVEDIR=`pwd`
  571. BINDDIR=`dirname ${ZBINDFILE}`
  572. cd ${BINDDIR}
  573. tar cf - `basename ${ZBINDFILE}` `basename ${ZBINDFILE}.cksum` `basename ${ZBINDFILE}.md5` `basename ${ZBINDFILE}.sum-bsd` `basename ${ZBINDFILE}.sum-sysv` | gzip >${ZBINDFILE}.tar.gz
  574. RC=$?
  575. if [ ${RC} != 0 ]
  576. then
  577. echo "${TLA} ${ZONE} rc ${RC} creating ${ZBINDFILE}.tar.gz" 1>&2
  578. else
  579. NEWZBINDTGZ=YES
  580. fi
  581. cd "${SAVEDIR}"
  582. fi
  583.  
  584. # if we built a new BIND-format zonefile, gzip it too
  585. if [ "${NEWZBINDFILE}" = "YES" ]
  586. then
  587. gzip <${ZBINDFILE} >${ZBINDFILE}.gz
  588. RC=$?
  589. if [ ${RC} != 0 ]
  590. then
  591. echo "${TLA} ${ZONE} rc ${RC} creating ${ZBINDFILE}.gz" 1>&2
  592. else
  593. NEWZBINDGZ=YES
  594. fi
  595. cd "${SAVEDIR}"
  596. fi
  597.  
  598. # if we built a new RBLDNSD-format zonefile, invalidate the old cksum files
  599. if [ "${NEWZRBLDNSDFILE}" = "YES" ]
  600. then
  601. rm -f ${ZRBLDNSDFILE}.sum-bsd
  602. rm -f ${ZRBLDNSDFILE}.sum-sysv
  603. rm -f ${ZRBLDNSDFILE}.cksum
  604. rm -f ${ZRBLDNSDFILE}.cksumpozix
  605. rm -f ${ZRBLDNSDFILE}.md5
  606. fi
  607.  
  608. # if we built a new RBLDNSD-format zonefile, make new cksum files
  609. if [ "${NEWZRBLDNSDFILE}" = "YES" ]
  610. then
  611. ${SUMBSD} <${ZRBLDNSDFILE} >${ZRBLDNSDFILE}.sum-bsd
  612. RC=$?
  613. if [ ${RC} != 0 ]
  614. then
  615. echo "${TLA} ${ZONE} rc ${RC} on ${SUMBSD} ${ZRBLDNSDFILE}" 1>&2
  616. rm -f ${ZRBLDNSDFILE}.sum-bsd
  617. fi
  618. ${SUMSYSV} <${ZRBLDNSDFILE} >${ZRBLDNSDFILE}.sum-sysv
  619. RC=$?
  620. if [ ${RC} != 0 ]
  621. then
  622. echo "${TLA} ${ZONE} rc ${RC} on ${SUMSYSV} ${ZRBLDNSDFILE}" 1>&2
  623. rm -f ${ZRBLDNSDFILE}.sum-sysv
  624. fi
  625. ${CKSUM} <${ZRBLDNSDFILE} >${ZRBLDNSDFILE}.cksum
  626. RC=$?
  627. if [ ${RC} != 0 ]
  628. then
  629. echo "${TLA} ${ZONE} rc ${RC} on ${CKSUM} ${ZRBLDNSDFILE}" 1>&2
  630. rm -f ${ZRBLDNSDFILE}.cksum
  631. fi
  632. ${CKSUMPOSIX} <${ZRBLDNSDFILE} >${ZRBLDNSDFILE}.cksumposix
  633. RC=$?
  634. if [ ${RC} != 0 ]
  635. then
  636. echo "${TLA} ${ZONE} rc ${RC} on ${CKSUMPOSIX} ${ZRBLDNSDFILE}" 1>&2
  637. rm -f ${ZRBLDNSDFILE}.cksumposix
  638. fi
  639. ${MD5} <${ZRBLDNSDFILE} >${ZRBLDNSDFILE}.md5
  640. RC=$?
  641. if [ ${RC} != 0 ]
  642. then
  643. echo "${TLA} ${ZONE} rc ${RC} on ${MD5} ${ZRBLDNSDFILE}" 1>&2
  644. rm -f ${ZRBLDNSDFILE}.md5
  645. fi
  646. fi
  647.  
  648. # if we built a new RBLDNSD-format zonefile, build a tarball and a gzip
  649. if [ "${NEWZRBLDNSDFILE}" = "YES" ]
  650. then
  651. SAVEDIR=`pwd`
  652. RBLDNSDIR=`dirname ${ZRBLDNSDFILE}`
  653. cd ${RBLDNSDIR}
  654. tar cf - `basename ${ZRBLDNSDFILE}` `basename ${ZRBLDNSDFILE}.cksum` `basename ${ZRBLDNSDFILE}.md5` `basename ${ZRBLDNSDFILE}.sum-bsd` `basename ${ZRBLDNSDFILE}.sum-sysv` | gzip >${ZRBLDNSDFILE}.tar.gz
  655. RC=$?
  656. if [ ${RC} != 0 ]
  657. then
  658. echo "${TLA} ${ZONE} rc ${RC} creating ${ZRBLDNSDFILE}.tar.gz" 1>&2
  659. else
  660. NEWZRBLDNSDTGZ=YES
  661. fi
  662. cd "${SAVEDIR}"
  663. fi
  664.  
  665. # if we built a new RBLDNSD-format zonefile, gzip it too
  666. if [ "${NEWZRBLDNSDFILE}" = "YES" ]
  667. then
  668. gzip <${ZRBLDNSDFILE} >${ZRBLDNSDFILE}.gz
  669. RC=$?
  670. if [ ${RC} != 0 ]
  671. then
  672. echo "${TLA} ${ZONE} rc ${RC} creating ${ZRBLDNSDFILE}.gz" 1>&2
  673. else
  674. NEWZRBLDNSDGZ=YES
  675. fi
  676. cd "${SAVEDIR}"
  677. fi
  678.  
  679. # if we built a new RBLDNSD-format zonefile, and a checksum for it,
  680. # build a checksum'd version
  681. if [ "${NEWZRBLDNSDFILE}" = "YES" ]
  682. then
  683. if [ -f ${ZRBLDNSDFILE}.cksumposix ]
  684. then
  685. cat ${ZRBLDNSDFILE} >${ZRBLDNSDFILE}-cksumd && \
  686. echo -n "# CKSUM: " >>${ZRBLDNSDFILE}-cksumd && \
  687. cat ${ZRBLDNSDFILE}.cksumposix >>${ZRBLDNSDFILE}-cksumd
  688. RC=$?
  689. if [ ${RC} != 0 ]
  690. then
  691. echo "${TLA} ${ZONE} rc ${RC} creating ${ZRBLDNSDFILE}-cksumd" 1>&2
  692. rm -f ${ZRBLDNSDFILE}-cksumd
  693. else
  694. NEWZRBLDNSDCKSUMD=YES
  695. fi
  696. fi
  697. fi
  698.  
  699. # everything's built, release the zone-building lock
  700. lock_rel ${ZONELOCKFILE}
  701.  
  702. # if we haven't been told to not push zones out, and we have zpush...
  703. if [ "${RUNNDC}" != "NO" -a -d ${ZPUSHNOTIFYDIR} ]
  704. then
  705.  
  706. # find out how/whether we're supposed to push this zone
  707. PUSHZONEAS=`${PSQL} -U ${DBUSER} -h ${DBHOST} -A -t -c \
  708. "select pushzoneas from zones where list = ${TLAQ} and zone = ${ZONEQ} and pushzoneas is not null;" ${DBNAME}`
  709. RC=$?
  710. if [ ${RC} -gt 1 ]
  711. then
  712. echo "${TLA} ${ZONE} rc ${RC} getting pushzoneas name -- skipping push" 1>&2
  713. elif [ -n "${PUSHZONEAS}" ]
  714. then
  715.  
  716. # save the umask and working directory
  717. SAVEDUMASK=`umask`
  718. umask 002
  719. SAVEDIR=`pwd`
  720. cd "${ZPUSHNOTIFYDIR}"
  721.  
  722. # if we have a new BIND file...
  723. if [ "${NEWZBINDFILE}" = "YES" ]
  724. then
  725. touch ${PUSHZONEAS}-bind-raw
  726. fi
  727.  
  728. # if we have a new BIND tarball...
  729. if [ "${NEWZBINDTGZ}" = "YES" ]
  730. then
  731. touch ${PUSHZONEAS}-bind-tgz
  732. fi
  733.  
  734. # if we have a new BIND tarball...
  735. if [ "${NEWZBINDGZ}" = "YES" ]
  736. then
  737. touch ${PUSHZONEAS}-bind-gz
  738. fi
  739.  
  740. # if we have a new RBLDNSD file...
  741. if [ "${NEWZRBLDNSDFILE}" = "YES" ]
  742. then
  743. touch ${PUSHZONEAS}-rbldnsd-raw
  744. fi
  745.  
  746. # if we have a new RBLDNSD tarball...
  747. if [ "${NEWZRBLDNSDTGZ}" = "YES" ]
  748. then
  749. touch ${PUSHZONEAS}-rbldnsd-tgz
  750. fi
  751.  
  752. # if we have a new RBLDNSD tarball...
  753. if [ "${NEWZRBLDNSDGZ}" = "YES" ]
  754. then
  755. touch ${PUSHZONEAS}-rbldnsd-gz
  756. fi
  757.  
  758. # if we have a new RBLDNSD cksum'd file...
  759. if [ "${NEWZRBLDNSDCKSUMD}" = "YES" ]
  760. then
  761. touch ${PUSHZONEAS}-rbldnsd-cksumd
  762. fi
  763.  
  764. # restore the umask and wd
  765. cd "${SAVEDIR}"
  766. umask ${SAVEDUMASK}
  767.  
  768. fi
  769.  
  770. fi
  771.  
  772. # if we haven't been told to not push zones out, and we have a new
  773. # BIND-format zone file...
  774. if [ "${RUNNDC}" != "NO" -a "${NEWZBINDFILE}" = "YES" ]
  775. then
  776.  
  777. # find out how/whether we're supposed to load this zone
  778. LOADZONEAS=`${PSQL} -U ${DBUSER} -h ${DBHOST} -A -t -c \
  779. "select loadzoneas from zones where list = ${TLAQ} and zone = ${ZONEQ} and loadzoneas is not null;" ${DBNAME}`
  780. RC=$?
  781. if [ ${RC} -gt 1 ]
  782. then
  783. echo "${TLA} ${ZONE} rc ${RC} getting loadzoneas name -- skipping reload" 1>&2
  784. elif [ -n "${LOADZONEAS}" ]
  785. then
  786.  
  787. # grab the ndc lock
  788. ndc_lock_acq 30 20
  789.  
  790. # tell named to reload the zone
  791. reload_zone ${LOADZONEAS} ${SOASERIAL} ${RELOADSLEEP} ${RELOADRETRYCOUNT} ${RELOADRETRYSLEEP}
  792.  
  793. # release the ndc lock
  794. ndc_lock_rel
  795.  
  796. fi
  797.  
  798. fi
  799.  
  800. done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement