Скрипт управления session cisco

Skip to end of metadata
Go to start of metadata
#!/bin/bash


TMPDIR=/tmp/${0##*/}
mkdir -p $TMPDIR

trap __exit EXIT
__exit() {
	local ret=$?
	rm -f $TMPDIR/*.$$
	return $ret
}

function __radclient() {
    res=$(radclient -c 1 -r 2 -t 1 -x $nas_ip:$coa_port $1 $coa_psw)
    ret=$?
	set +x
	echo "$res" | grep -q "Error-Cause = 0\|Error-Cause = 200" && ret=0
	echo "$res" | grep -q "Error-Cause = Resources Unavailable" && ret=254
        echo "$res" | grep -q "no response from server" && ret=254
	if echo "$res" | grep -q "Error-Cause = Session-Context-Not-Found\|Missing-Attribute"; then
             echo -e "clear subscriber session username $login\nclear subscriber session username $ip"\
                  | ssh_send -q -e "$telnet_enpassword" -t "$telnet_type" -u "$telnet_login" -p "$telnet_password" "$telnet_ip" --port "${telnet_port:-22}"
	fi
	echo $res
	set -x
    	return $ret
}

# Приходит при создании пользователя в биллинге
# И при смене критичных параметров(ip, vlan, port etc.)(с новыми значениями)
# Обычно/ используется для ip авторизации
user_add() {
	:
}

# Приходит при удалении пользователя из биллинга
# И при смене критичных параметров(ip, vlan, port etc.)(со старыми значениями)
# Обычно используется для ВСЕХ видов авторизации
user_del() {
	user_disconnect
}

# Приходит после авторизации пользователя
# Рекомендуется политику пользователя передавать в радиус replay параметрах, А НЕ В ЭТОМ СОБЫТИИ,
# т.к. у любого оборудования есть ограничения на колличество отправляемых команд в секунду
user_accept() {
	echo "Cisco-Account-Info=\"S${ip}:vrf-id=${vrf}\",\
		    cisco-avpair+=\"subscriber:service-name=FWPOL_BLOCKED_TRUSTED\",\
		    cisco-avpair+=\"subscriber:command=deactivate-service\"" | __radclient coa

	echo "Cisco-Account-Info=\"S${ip}:vrf-id=${vrf}\",\
		    cisco-avpair+=\"subscriber:service-name=FWPOL_BLOCKED_REDIRECT\",\
		    cisco-avpair+=\"subscriber:command=deactivate-service\"" | __radclient coa

	echo "Cisco-Account-Info=\"S${ip}:vrf-id=${vrf}\",\
		    cisco-avpair+=\"subscriber:service-name=FWPOL_ACCEPT\",\
		    cisco-avpair+=\"subscriber:command=activate-service\"" | __radclient coa

	echo "Cisco-Account-Info=\"S${ip}:vrf-id=${vrf}\",\
		    cisco-avpair+=\"subscriber:service-name=FWPOL_NOSHAPE\",\
		    cisco-avpair+=\"subscriber:command=activate-service\"" | __radclient coa


}



# Приходит при отключении пользователя
# Рекомендуется избегать удаления пользователя из списков, для экономии очереди команд на оборудовании
user_drop() {
	echo "Cisco-Account-Info=\"S${ip}:vrf-id=${vrf}\",\
		    cisco-avpair+=\"subscriber:service-name=FWPOL_ACCEPT\",\
		    cisco-avpair+=\"subscriber:command=deactivate-service\"" | __radclient coa

	echo "Cisco-Account-Info=\"S${ip}:vrf-id=${vrf}\",\
		    cisco-avpair+=\"subscriber:service-name=FWPOL_NOSHAPE\",\
		    cisco-avpair+=\"subscriber:command=deactivate-service\"" | __radclient coa

	echo "Cisco-Account-Info=\"S${ip}:vrf-id=${vrf}\",\
		    cisco-avpair+=\"subscriber:service-name=FWPOL_BLOCKED_TRUSTED\",\
		    cisco-avpair+=\"subscriber:command=activate-service\"" | __radclient coa

	echo "Cisco-Account-Info=\"S${ip}:vrf-id=${vrf}\",\
		    cisco-avpair+=\"subscriber:service-name=FWPOL_BLOCKED_REDIRECT\",\
		    cisco-avpair+=\"subscriber:command=activate-service\"" | __radclient coa

}


# Приходит при превышении лимита, либо при отключении услуги
user_redirect() {
	echo "Cisco-Account-Info=\"S${ip}:vrf-id=${vrf}\",\
		    cisco-avpair+=\"subscriber:service-name=FWPOL_ACCEPT\",\
		    cisco-avpair+=\"subscriber:command=deactivate-service\"" | __radclient coa

	echo "Cisco-Account-Info=\"S${ip}:vrf-id=${vrf}\",\
		    cisco-avpair+=\"subscriber:service-name=FWPOL_NOSHAPE\",\
		    cisco-avpair+=\"subscriber:command=deactivate-service\"" | __radclient coa

	echo "Cisco-Account-Info=\"S${ip}:vrf-id=${vrf}\",\
		    cisco-avpair+=\"subscriber:service-name=FWPOL_NEGBAL_REDIRECT\",\
		    cisco-avpair+=\"subscriber:command=activate-service\"" | __radclient coa

	echo "Cisco-Account-Info=\"S${ip}:vrf-id=${vrf}\",\
		    cisco-avpair+=\"subscriber:service-name=FWPOL_NEGBAL_TRUSTED\",\
		    cisco-avpair+=\"subscriber:command=activate-service\"" | __radclient coa

}

# Приходит после оплаты, если хватило денег на включение услуги
user_redirect_cancel() {
	echo "Cisco-Account-Info=\"S${ip}:vrf-id=${vrf}\",\
		    cisco-avpair+=\"subscriber:service-name=FWPOL_NEGBAL_TRUSTED\",\
		    cisco-avpair+=\"subscriber:command=deactivate-service\"" | __radclient coa

	echo "Cisco-Account-Info=\"S${ip}:vrf-id=${vrf}\",\
		    cisco-avpair+=\"subscriber:service-name=FWPOL_NEGBAL_REDIRECT\",\
		    cisco-avpair+=\"subscriber:command=deactivate-service\"" | __radclient coa

	echo "Cisco-Account-Info=\"S${ip}:vrf-id=${vrf}\",\
		    cisco-avpair+=\"subscriber:service-name=FWPOL_ACCEPT\",\
		    cisco-avpair+=\"subscriber:command=activate-service\"" | __radclient coa

	echo "Cisco-Account-Info=\"S${ip}:vrf-id=${vrf}\",\
		    cisco-avpair+=\"subscriber:service-name=FWPOL_NOSHAPE\",\
		    cisco-avpair+=\"subscriber:command=activate-service\"" | __radclient coa

}

# Приходит при изменении скорости подключения
# Или включения\выключении услуги(турбокнопка, ночной форсаж и т.д.)
user_rate_set() {
	echo "Cisco-Account-Info=\"S${ip}:vrf-id=${vrf}\",\
		    Cisco-Account-Info+=\"QU;${ceil_in}000;D;${ceil_out}000\"" | __radclient coa
}

# Приходит при отключении пользователя администратором
user_disconnect() {
# на самом деле User-Name cisco игнорирует, но он должен быть и быть не пустым иначе ошибка
	 echo "User-Name=\"$login\",Cisco-Account-Info=\"S${ip}:vrf-id=${vrf}\",\
		    cisco-avpair+=\"subscriber:command=account-logoff\"" | __radclient coa
#TODO_OSV	echo "User-name=\"1\",Cisco-Account-Info=\"S10.255.0.2\",cisco-avpair+=\"subscriber:command=account-logoff\"" |  radclient 185.8.158.73:3799 coa servicemode
}

# Приходит при нажатии кнопки info в учетной записи
user_info() {
	echo '<pre>' > /tmp/${user_id}_user_info.new
#	echo "User-Name=\"$login\",Cisco-Account-Info=\"S${ip}:vrf-id=${vrf}\",\
#		    cisco-avpair+=\"subscriber:command=profile-status-query\"" | __radclient coa &>>/tmp/${user_id}_user_info.new
	( . $EVENT_HANDLERS_DIR/${NAS_SCRIPT_NAME%.sh}.d/user_info ) >> /tmp/${user_id}_user_info.new || true
	echo '</pre>' >> /tmp/${user_id}_user_info.new

	mv -f /tmp/${user_id}_user_info.new /tmp/${user_id}_user_info
	chown apache:apache /tmp/${user_id}_user_info
	[ "${is_daemon:--}" != 1 ] && cat /tmp/${user_id}_user_info

}

# Приходит при нажатии кнопки тест в учетной записи
user_test() {
	echo > "/tmp/${user_id}_user_info"
	echo "User-Name=\"$login\",Cisco-Account-Info=\"S${ip}:vrf-id=${vrf}\",cisco-avpair+=\"subscriber:command=profile-status-query\""  | __radclient coa &>>"/tmp/${user_id}_user_info"
	cat /tmp/${user_id}_user_info
}

# Хук - вызывается перед каждым событием
user_event_before() {
	:
}

# Хук - вызывается после каждого события
user_event_after() {
	:
}

# Приходит при добавлении услуги абоненту
usluga_add(){
	# Доступ к социально значимым ресурсам для физиков
	if [ "$usluga_system_type_id" == "15" ]; then
          echo "Cisco-Account-Info=\"S${ip}:vrf-id=${vrf}\",\
          Cisco-Account-Info=\"AFWPOL_FREE_INTERNET\"" | __radclient coa
	fi
}

# Приходит при удалении услуги у абонента
usluga_del(){
  # Отмена доступа к социально значимым ресурсам для физиков
  if [ "$usluga_system_type_id" == "15" ]; then
    echo "Cisco-Account-Info=\"S${ip}:vrf-id=${vrf}\",\
    cisco-avpair+=\"subscriber:service-name=FWPOL_FREE_INTERNET\",\
    cisco-avpair+=\"subscriber:command=deactivate-service\"" | __radclient coa
  fi
}

users_from_nas(){
	:
}

# Приходит при активации услуги
usluga_activated(){
	:
}

# Приходит при деактивации услуги
usluga_deactivated(){
	:
}

send_cmd() {
	ip=$1
	cmd=user_${2}
		set -x
	echo "env $env_str"
	$cmd
	set +x
}

main() {
	. /usr/local/bin/user_env $ip
	. $oss_pathname/main.ini

	[ -z "$vrf" ] && vrf="global"
	abonent_log_dir="/var/log/abonents/${abonent_id}/"
	mkdir -p "$abonent_log_dir"

	PS4=" \D{%Y-%m-%d %T} ssh ${SSH_CLIENT%% *} $HOSTNAME rtsh session "$@"[$$]: "

	echo '' >> "${abonent_log_dir}/rtsh_${user_id}.log"
	send_cmd "$@" 2>&1 | tee -a "${abonent_log_dir}/rtsh_${user_id}.log"
}

### Все функции должны быть определены до подключения ubin_session
bin_session=$BASH_SOURCE
ubin_session="${bin_session//bin/ubin}.hook"
[ -f "$ubin_session" ] && source "${ubin_session}"

# пока временно
if [ "${is_daemon:--}" != 1 ]; then
	main "$@"
	exit $?
fi
oss_pathname=${EVENT_HANDLERS_DIR%/*} #todo export from daemon
. $oss_pathname/main.ini
Введите метки, чтобы добавить к этой странице:
Please wait 
Ищите метку? просто начните печатать.