There are two points in each of the connecting and disconnecting phases in which custom scripts can be executed through the shell. These are (under normal circumstances):
Scripts are executed in an environment containing several environment variables. Those variables are detailed in a separate HOWTO.
A sample generic script to use for any of the four scripts:
#!/bin/bash
#
# rc.net_services - start/stop network daemons that are only needed
while connected to a network
#
#
ACTION=$1
shift
case "$ACTION" in
start)
;;
stop)
;;
*)
echo "usage: rc.net_services start|stop "
exit
;;
esac
# Start/Stop the Network Time Protocol daemon:
function ntpd {
test -x /etc/rc.d/rc.ntpd && /etc/rc.d/rc.ntpd $1
}
# Privoxy, the privacy web proxy
function privoxy {
test -x /etc/rc.d/rc.privoxy && /etc/rc.d/rc.privoxy $1
}
# Tor, the Internet anonymizer
function tor {
test -x /etc/rc.d/rc.tor && /etc/rc.d/rc.tor $1
}
function hostname {
case "$1" in
stop)
# Set the hostname.
if [ ! -r /etc/HOSTNAME ]; then
# fall back on this old default:
echo "laptop.example.net" > /etc/HOSTNAME
fi
/bin/hostname $(cat /etc/HOSTNAME | cut -f1 -d .)
/bin/domainname $(cat /etc/HOSTNAME | cut -f2- -d .)
;;
*)
;;
esac
}
# Start/Stop printers in the spooling system.
function print {
case "$1" in
stop)
# enable all printers
/usr/sbin/cupsenable `/usr/bin/lpstat -a | cut -d' ' -f1`
;;
start)
# disable all printers
/usr/sbin/cupsdisable `/usr/bin/lpstat -a | cut -d' ' -f1`
;;
esac
}
for service in $@; do
case $service in
ntpd)
ntpd $ACTION
;;
privoxy)
privoxy $ACTION
;;
tor)
tor $ACTION
;;
hostname)
hostname $ACTION
;;
print)
print $ACTION
;;
*)
echo "$ACTION, but invalid service: $service"
;;
esac
done
I use this one script differently depending on the network, but the way I commonly use it for public hotspots is:
Connection After:
/etc/rc.d/rc.net_services start tor privoxy
Disconnection Before:
/etc/rc.d/rc.net_services stop tor privoxy
Disconnection After:
/etc/rc.d/rc.net_services stop hostname
So, this starts and stops TOR and Privoxy while the network is present and resets the host name after disconnecting (because DHCP can change the host name on configuration).