diff -u 0.7.1.2/etc/init.d/N10conncheck 0.7.2.3/etc/init.d/N10conncheck --- 0.7.1.2/etc/init.d/N10conncheck 2006-09-01 00:32:14.000000000 +0900 +++ 0.7.2.3/etc/init.d/N10conncheck 2007-11-22 00:18:34.000000000 +0900 @@ -1,5 +1,5 @@ #!/bin/sh -while [ -z "$(/usr/bin/wget "http://download.fon.com/heartbeat.php" -O-)" ]; do +while [ -z "$(/usr/bin/wget "http://updates.fon.com/firmware/conncheck/conncheck.txt" -O-)" ]; do sleep 1 done ifup lan diff -u 0.7.1.5/etc/init.d/N50chillispot 0.7.2.3/etc/init.d/N50chillispot --- 0.7.1.5/etc/init.d/N50chillispot 2007-07-19 01:04:01.000000000 +0900 +++ 0.7.2.3/etc/init.d/N50chillispot 2007-11-22 00:17:43.000000000 +0900 @@ -10,64 +10,86 @@ MAC=$(ifconfig wifi0 | head -n1 | awk '{print $5}'|sed s/:/-/g) MAC=${MAC:-fon} LOOP=true -DELAY=86400 -SECONDS=0 -DELAY2=10 -SECONDS2=0 -RADIUSSERVER=radius01.fon.com +WHITELIST=/etc/config/whitelist.dnsmasq + +DEVICE=$(cat /etc/fon_device) +VERSION=$(cat /etc/fon_version) +REVISION=$(cat /etc/fon_revision) + +RADIUSSERVER1=radconfig01.fon.com +RADIUSSERVER2=radconfig02.fon.com RADIUSSECRET=garrafon -RADIUSADMUSR=chillispot +RADIUSADMUSR=FON01-${DEVICE}-${VERSION}.${REVISION} RADIUSADMPWD=chillispot quit() { - LOOP="false" - circular_log $LOG_LOOP_F "Signal caught. Exiting..." + LOOP="false" + circular_log $LOG_LOOP_F "Signal caught. Exiting..." } circular_log() { - echo "chillispot $(date) $2" >> $1 - tail -24 $1 > $1.tmp - mv $1.tmp $1 + echo "chillispot $(date) $2" >> $1 + tail -24 $1 > $1.tmp + mv $1.tmp $1 } -do_reload() { - [ -f $PID_F ] && kill -HUP $(cat $PID_F) >/dev/null 2>&1 +is_alive() { + if [ ! -f $PID_F ]; then + echo "dead" + return 0 + fi + + TEST_PID=$(cat $PID_F) + + if [ ! -d /proc/$TEST_PID ]; then + rm $PID_F + echo "dead" + return 0 + fi + + CANDIDATE=$(cat /proc/$TEST_PID/status | grep Name: | awk '{ print $2 }') + + if [ "$CANDIDATE" = "chilli" ]; then + echo "alive" + return 0 + else + rm $PID_F + echo "dead" + return 0 + fi } -is_alive() { - if [ ! -f $PID_F ]; then - echo "dead" - return 0 - fi - TEST_PID=$(cat $PID_F) - if [ ! -d /proc/$TEST_PID ]; then - rm $PID_F - echo "dead" - return 0 - fi - CANDIDATE=$(cat /proc/$TEST_PID/status | grep Name: | awk '{ print $2 }') - if [ "$CANDIDATE" = "chilli" ]; then - echo "alive" - return 0 - else - rm $PID_F - echo "dead" - return 0 - fi +parse_whitelist() { + if [ -s $TMP_C ]; then + awk '/newdomain/ { print $2 }' $TMP_C | + awk -F. '/[a-zA-Z0-9\-\_]/ { print }' | + sed s/,/\\n/g > $WHITELIST + # Remove IPs that may have skipped the validation + cat $WHITELIST | grep -v [0-9]$ > $WHITELIST + + sed /^newdomain/d -i $TMP_C + fi } radconfig() { /usr/sbin/chilli_radconfig \ -c /dev/null \ - --radiusserver1="$RADIUSSERVER" \ + --radiusserver1="$RADIUSSERVER1" \ + --radiusserver2="$RADIUSSERVER2" \ --radiussecret="$RADIUSSECRET" \ --adminuser="$RADIUSADMUSR" \ --adminpasswd="$RADIUSADMPWD" \ --radiusnasid="$MAC" \ --dhcpif $wifi_ifname \ + --wwwbin=/bin/true \ + --ipup=/bin/true \ + --ipdown=/bin/true \ > $TMP_C + + parse_whitelist + [ -n "$(cat $TMP_C)" ] && { MD5SUM_TMP=$(md5sum $TMP_C | awk '{ print $1 }') MD5SUM_ETC=$(md5sum $ETC_C | awk '{ print $1 }') @@ -75,105 +97,86 @@ rm $ETC_C mv $TMP_C $ETC_C circular_log $LOG_LOOP_F "RELOAD" - do_reload + reload else circular_log $LOG_LOOP_F "NO RELOAD" fi return 0 } + circular_log $LOG_LOOP_F "NO RELOAD" } +do_start () { + /sbin/insmod tun >/dev/null 2>&1 + ifconfig $wifi_ifname 0.0.0.0 # deconfigure the wifi interface + + /usr/sbin/chilli \ + --dns1="192.168.182.1" \ + --dns2="192.168.182.1" \ + --radiusnasid="$MAC" \ + --dhcpif $wifi_ifname \ + --papalwaysok \ + --pidfile=$PID_F \ + --localusers=/etc/config/localusers \ + --wwwbin=/bin/true \ + --ipup=/bin/true \ + --ipdown=/bin/true \ + --conup=/bin/true \ + --condown=/bin/true + + [ $? == 0 ] && return 0 + return 1 +} + + case $1 in restart) - ALIVE=$(is_alive) - if [ $ALIVE = "alive" ]; then - exit 0 - fi - /sbin/insmod tun >/dev/null 2>&1 - ifconfig $wifi_ifname 0.0.0.0 # deconfigure the wifi interface - /usr/sbin/chilli \ - --dns1="$LANIP" \ - --dns2="$LANIP" \ - --radiusnasid="$MAC" \ - --dhcpif $wifi_ifname \ - --pidfile=$PID_F - circular_log $LOG_LOOP_F "RESTART" - ;; + killall watch_chilli > /dev/null 2>&1 + killall chilli > /dev/null 2>&1 + rm -f /var/run/chilli.pid + do_start + ;; start) ALIVE=$(is_alive) - if [ $ALIVE = "alive" ]; then - exit 0 - fi + [ alive = "$(is_alive)" ] && return 0 radconfig - /sbin/ifup hotspot /etc/init.d/S60redirect stop - /sbin/insmod tun >/dev/null 2>&1 - ifconfig $wifi_ifname 0.0.0.0 # deconfigure the wifi interface - /usr/sbin/chilli \ - --dns1="$LANIP" \ - --dns2="$LANIP" \ - --radiusnasid="$MAC" \ - --dhcpif $wifi_ifname \ - --pidfile=$PID_F - if [ $? -eq 0 ]; then - $0 loop & - fi - circular_log $LOG_LOOP_F "START" + do_start + [ $? == 0 ] && /usr/sbin/watch_chilli & ;; - radconfig) - radconfig - ;; - stop) /sbin/ifdown hotspot - ALIVE=$(is_alive) - if [ ! $ALIVE = "alive" ]; then - echo ERROR: chillispot is not running - [ -f $PID_LOOP_F ] && kill $(cat $PID_LOOP_F) > /dev/null 2>&1 - rm -f $PID_LOOP_F > /dev/null 2>&1 - exit 0 - fi + + killall watch_chilli + + [ alive = "$(is_alive)" ] || { + echo ERROR: chillispot is not running + [ -f $PID_LOOP_F ] && kill $(cat $PID_LOOP_F) > /dev/null 2>&1 + rm -f $PID_LOOP_F > /dev/null 2>&1 + exit 0 + } [ -f $PID_F ] && kill $(cat $PID_F) >/dev/null 2>&1 rm -f $PID_F [ -f $PID_LOOP_F ] && kill $(cat $PID_LOOP_F) > /dev/null 2>&1 rm -f $PID_LOOP_F - circular_log $LOG_LOOP_F "STOP" - ;; - - loop) - trap quit SIGINT SIGTERM SIGHUP SIGKILL - echo $$ > $PID_LOOP_F - while [ $LOOP = "true" ] ; do - sleep 1 - SECONDS=$(expr $SECONDS + 1) - if [ "$SECONDS" = "$DELAY" ]; then - radconfig - fi - SECONDS2=$(expr $SECONDS2 + 1) - if [ "$SECONDS2" = "$DELAY2" ]; then - $0 restart - SECONDS2=0 - fi - done - exit 0 - ;; - reload) - do_reload - exit 0 ;; alive) ALIVE=$(is_alive) echo "chillispot is $ALIVE" if [ $ALIVE = "alive" ]; then - exit 1 + exit 1 fi exit 0 ;; + reload) + radconfig + killall -HUP chilli + ;; *) - echo "usage: $0 (start|stop|radconfig|reload)" + echo "usage: $0 (start|stop|restart|reload|alive)" exit 1 esac