Add the post-receive hook to the repository, for reference.

master
Robert Gerus 2013-08-25 23:33:34 +02:00
parent 3ddcb48412
commit 98ed8fec9c
1 changed files with 58 additions and 0 deletions

58
hooks/post-receive Executable file
View File

@ -0,0 +1,58 @@
#!/usr/local/bin/bash
set -o errexit
set -o pipefail
set -o nounset
PFCTL="/sbin/pfctl"
FIREWALL_DIR="/etc/firewall"
TEMPFILE="$(/usr/bin/mktemp -t fw)"
PFCONF_PATH="${FIREWALL_DIR}/pf.conf"
PFCONF_PATH_TEMPLATE="${PFCONF_PATH}.in"
CAT="/bin/cat"
MV="/bin/mv"
isok() {
if [[ $1 = 0 ]]; then
if [[ $# -gt 1 ]]; then
if [[ $2 = "-q" ]]; then
:
else
echo "Unexpected argument: ${2}"
exit 1
fi
else
echo "[ OK ]"
fi
else
rm ${TEMPFILE}
echo "[ FAIL ]"
exit $1
fi
}
echo -n "Checking out new firewall configuration to ${FIREWALL_DIR}... "
GIT_WORK_TREE="${FIREWALL_DIR}" git checkout -f
isok $?
echo -n "Generating ${PFCONF_PATH}... "
[[ -e ${PFCONF_PATH_TEMPLATE} ]]
isok $? -q
${CAT} "${PFCONF_PATH_TEMPLATE}" > ${TEMPFILE}
isok $? -q
for rulefile in /etc/firewall/rules.d/*; do
echo 'include "'${rulefile}'"' >> ${TEMPFILE}
isok $? -q
done
${MV} ${TEMPFILE} ${PFCONF_PATH}
isok $?
echo -n "Testing if new config is sane... "
${PFCTL} -nf ${PFCONF_PATH}
isok $?
echo -n "Loading new config... "
${PFCTL} -f ${PFCONF_PATH}
isok $?