named revision 1.17
11.1Slukem#!/bin/sh 21.1Slukem# 31.17Schristos# $NetBSD: named,v 1.17 2005/07/17 21:28:45 christos Exp $ 41.1Slukem# 51.1Slukem 61.1Slukem# PROVIDE: named 71.2Slukem# REQUIRE: SERVERS 81.10Sthorpej# BEFORE: DAEMON 91.11Slukem# KEYWORD: chrootdir 101.1Slukem 111.14Smycroft$_rc_subr_loaded . /etc/rc.subr 121.1Slukem 131.1Slukemname="named" 141.6Slukemrcvar=$name 151.1Slukemcommand="/usr/sbin/${name}" 161.1Slukempidfile="/var/run/${name}.pid" 171.7Slukemstart_precmd="named_precmd" 181.7Slukemextra_commands="reload" 191.7Slukemrequired_dirs="$named_chrootdir" # if it is set, it must exist 201.7Slukem 211.17Schristosnamed_migrate() 221.17Schristos{ 231.17Schristos local src=$1 241.17Schristos local dst=$2$1 251.17Schristos echo "Migrating $src to $dst" 261.17Schristos( 271.17Schristos diff=false 281.17Schristos cd $src 291.17Schristos for f in $(find . -type f) 301.17Schristos do 311.17Schristos f=${f##./} 321.17Schristos case $f in 331.17Schristos */*) 341.17Schristos d=$dst$(dirname $f) 351.17Schristos ;; 361.17Schristos *) d=$dst 371.17Schristos ;; 381.17Schristos esac 391.17Schristos mkdir -p $d 401.17Schristos if [ -r "$dst$f" ] 411.17Schristos then 421.17Schristos if ! cmp $f $dst$f; then 431.17Schristos diff=true 441.17Schristos fi 451.17Schristos else 461.17Schristos cp -p $f $dst$f 471.17Schristos fi 481.17Schristos done 491.17Schristos if $diff; then 501.17Schristos echo "Cannot complete migration because files are different" 511.17Schristos echo "Run 'diff -r $src $dst' resolve the differences" 521.17Schristos else 531.17Schristos rm -fr $src 541.17Schristos ln -s $dst $src 551.17Schristos fi 561.17Schristos) 571.17Schristos} 581.17Schristos 591.7Slukemnamed_precmd() 601.7Slukem{ 611.7Slukem if [ -z "$named_chrootdir" ]; then 621.7Slukem return 0; 631.7Slukem fi 641.7Slukem 651.7Slukem # If running in a chroot cage, ensure that the appropriate files 661.7Slukem # exist inside the cage, as well as helper symlinks into the cage 671.7Slukem # from outside. 681.7Slukem # 691.7Slukem # As this is called after the is_running and required_dir checks 701.7Slukem # are made in run_rc_command(), we can safely assume ${named_chrootdir} 711.7Slukem # exists and named isn't running at this point (unless forcestart 721.7Slukem # is used). 731.7Slukem # 741.12Schristos case "$($command -v)" in 751.12Schristos BIND*) # 9 no group, named-xfer, or ndc 761.12Schristos ;; 771.12Schristos named*) # 4 and 8 781.12Schristos rc_flags="-g named $rc_flags" 791.12Schristos if [ ! -x "${named_chrootdir}/usr/libexec/named-xfer" -o \ 801.12Schristos "${named_chrootdir}/usr/libexec/named-xfer" -ot \ 811.12Schristos /usr/libexec/named-xfer ]; then 821.12Schristos rm -f "${named_chrootdir}/usr/libexec/named-xfer" 831.12Schristos cp -p /usr/libexec/named-xfer \ 841.12Schristos "${named_chrootdir}/usr/libexec" 851.12Schristos fi 861.12Schristos ln -fs "${named_chrootdir}/var/run/ndc" /var/run/ndc 871.12Schristos ;; 881.12Schristos esac 891.12Schristos 901.13Schristos for i in null random 911.13Schristos do 921.13Schristos if [ ! -c "${named_chrootdir}/dev/$i" ]; then 931.13Schristos rm -f "${named_chrootdir}/dev/$i" 941.13Schristos (cd /dev && 951.13Schristos /bin/pax -rw -pe "$i" "${named_chrootdir}/dev") 961.13Schristos fi 971.13Schristos done 981.4Slukem 991.17Schristos if [ ! -h /etc/namedb ]; then 1001.17Schristos named_migrate /etc/namedb ${named_chrootdir} 1011.16Schristos fi 1021.16Schristos if [ \( ! -r ${named_chrootdir}/etc/named.conf \) -a \ 1031.16Schristos \( -r ${named_chrootdir}/etc/namedb/named.conf \) ]; then 1041.16Schristos ln -s namedb/named.conf ${named_chrootdir}/etc 1051.16Schristos fi 1061.16Schristos 1071.7Slukem if [ -f /etc/localtime ]; then 1081.7Slukem cmp -s /etc/localtime "${named_chrootdir}/etc/localtime" || \ 1091.7Slukem cp -p /etc/localtime "${named_chrootdir}/etc/localtime" 1101.7Slukem fi 1111.15Stron ln -fs "${named_chrootdir}${pidfile}" ${pidfile} 1121.7Slukem 1131.7Slukem # Change run_rc_commands()'s internal copy of $named_flags 1141.7Slukem # 1151.12Schristos rc_flags="-u named -t ${named_chrootdir} $rc_flags" 1161.7Slukem} 1171.1Slukem 1181.5Slukemload_rc_config $name 1191.3Slukemrun_rc_command "$1" 120