nsd_migrate()
{
local src="$1"
local dst="$2$1"
echo "Migrating $src to $dst"
(
diff=false
cd "$src"
mkdir -p "$dst"
for f in $(find . -type f)
do
f="${f##./}"
case "$f" in
*/*)
ds="$(dirname "$f")"
dd="$dst/$ds"
mkdir -p "$dd"
chmod "$(stat -f "%p" "$ds" |
sed -e 's/.*\([0-7][0-7][0-7][0-7]\)$/\1/g')" "$dd"
chown "$(stat -f %u:%g "$ds")" "$dd"
;;
*)
;;
esac
if [ -r "$dst/$f" ]
then
if ! cmp "$f" "$dst/$f"; then
diff=true
fi
else
cp -p "$f" "$dst/$f"
fi
done
if $diff; then
echo "Cannot complete migration because files are different"
echo "Run 'diff -r $src $dst' resolve the differences"
else
rm -fr "$src"
ln -s "$dst" "$src"
fi
)
}
nsd_precmd()
{
if [ -z "${nsd_chrootdir}" ]; then
return
fi
if [ ! -h /etc/nsd ]; then
nsd_migrate /etc/nsd ${nsd_chrootdir}
fi
ln -sf "${nsd_chrootdir}${pidfile}" "${pidfile}"
}