#!/bin/sh /etc/rc.common
START=21
UCI_CONFIG="appuser_group"
CGI_ERROR_MSG="/tmp/cgi_error_msg"
####### Error code table
#101: ERROR: User group is refered by other functions, deletion is not permitted

create_group_set() {
	status=`uci get $UCI_CONFIG.$1.status`
	if	[ "$status" = "enable" ]; then
		ipset -N usr_grp_$1 setlist --size 255
		member=`uci get $UCI_CONFIG.$1.member`
		
		#Modified by Vincent F. 2012/10/05
		#New command to improve performance: ipset -C usr_grp usr_01,usr_02,usr_03,...
		[ "$member" ] && [ ! "$member" = "None" ] && {
			user=`echo "usr_$member" |sed 's/ /,usr_/g'`
			#echo "user: $user" > /dev/console
			ipset -C usr_grp_$1 $user
		}
	fi
}

destroy_group_set() {
	status=`uci oget $UCI_CONFIG.$1.status`
	if	[ "$status" = "enable" ]; then
		ipset -X usr_grp_$1
		[ "$?" = 0 ] || {
			echo -n "ERROR: User group:[$1] is refered by other functions, deletion is not permitted" >$CGI_ERROR_MSG
			uci revert $UCI_CONFIG.$1
			exit 101
		}
	fi
}

start() {
	appuser_group_booting $UCI_CONFIG
}

stop() {
	config_load $UCI_CONFIG
	config_foreach destroy_group_set
}

apply() {
	#echo -n "appuser_group apply S "  >>/tmp/apply_dur.log 2>&1
	#cat /proc/uptime >> /tmp/apply_dur.log 2>&1
	
	add_object=`uci fchanges new $UCI_CONFIG`
	mdf_object=`uci fchanges modify $UCI_CONFIG`
	del_object=`uci fchanges delete $UCI_CONFIG`

	#add new tunnel
	for name_add in $add_object
	do
		create_group_set $name_add
	done

	#modify tunnel
	for name_mdf in $mdf_object
	do
		destroy_group_set $name_mdf
		create_group_set $name_mdf
	done

	#delete old tunnel
	for name_del in $del_object
	do
		destroy_group_set $name_del
	done

	uci commit $UCI_CONFIG
	
	#echo -n "appuser_group apply E "  >>/tmp/apply_dur.log 2>&1
	#cat /proc/uptime >> /tmp/apply_dur.log 2>&1
}