Скрипт управления session Mikrotik6-pcq

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

ceil_out=${ceil_out:-$ceil_in}

user_event_before() {
	if [[ "$ip" = "0.0.0.0" ]]; then
		log WARNING: abonent_id:$abonent_id user_id:$user_id has $ip ip
		return 1
	fi
}

user_add(){
	if [ "$auth_type" == "1" ]; then
	    while send_mikrotik_cmd -s "$nas_ip" "$telnet_login" "$telnet_password" /ip firewall address-list remove numbers=${ip}_crb_auth; do :; done
	    send_mikrotik_cmd "$nas_ip" "${telnet_login}" "${telnet_password}" /ip firewall address-list add list=crb_auth_list address=$ip comment=${ip}_crb_auth
	fi
}

user_accept(){
	while send_mikrotik_cmd -s "$nas_ip" "$telnet_login" "$telnet_password" /ip firewall address-list remove numbers=${ip}_crb_blocked; do :; done
}

user_drop(){
	send_mikrotik_cmd "$nas_ip" "${telnet_login}" "${telnet_password}" /ip firewall address-list add list=crb_blocked_list address=$ip comment=${ip}_crb_blocked
}

user_redirect(){
	send_mikrotik_cmd "$nas_ip" "${telnet_login}" "${telnet_password}" /ip firewall address-list add list=crb_negbal_list address=$ip comment=${ip}_crb_negbal
}

user_redirect_cancel(){
	while send_mikrotik_cmd -s "$nas_ip" "$telnet_login" "$telnet_password" /ip firewall address-list remove numbers=${ip}_crb_negbal; do :; done
}

user_rate_set(){
	# Сначала удалим из старого сервиса, потом добавим в новый
	while send_mikrotik_cmd -s "$nas_ip" "${telnet_login}" "${telnet_password}" /ip firewall address-list remove numbers=${ip}_service; do :; done
	#Добавляем абонента адрес лист его скорости (предполагается что очередь для этого значения скорости и правило mangle использующее этот лист уже созданы с помощью OSS)
	send_mikrotik_cmd "$nas_ip" "${telnet_login}" "${telnet_password}" /ip firewall address-list add list=service_out_${ceil_out} address=$ip comment=${ip}_service
	send_mikrotik_cmd "$nas_ip" "${telnet_login}" "${telnet_password}" /ip firewall address-list add list=service_in_${ceil_in} address=$ip comment=${ip}_service
}




user_del(){
	while send_mikrotik_cmd -s "$nas_ip" "$telnet_login" "$telnet_password" /ip firewall address-list remove numbers=${ip}_crb_auth; do :; done
	while send_mikrotik_cmd -s "$nas_ip" "$telnet_login" "$telnet_password" /ip firewall address-list remove numbers=${ip}_crb_negbal; do :; done
	while send_mikrotik_cmd -s "$nas_ip" "$telnet_login" "$telnet_password" /ip firewall address-list remove numbers=${ip}_crb_blocked; do :; done
	while send_mikrotik_cmd -s "$nas_ip" "${telnet_login}" "${telnet_password}" /ip firewall address-list remove numbers=${ip}_service; do :; done
}

users_from_nas(){
	set +x
	send_mikrotik_cmd -s "$nas_ip" "${telnet_login}" "${telnet_password}" /ip firewall address-list print .proplist=address ?list=crb_blocked_list > $SYNCDIR/blocked_list.nas || rm -rf $SYNCDIR/blocked_list.nas
	send_mikrotik_cmd -s "$nas_ip" "${telnet_login}" "${telnet_password}" /ip firewall address-list print .proplist=address ?list=crb_negbal_list > $SYNCDIR/negbal_list.nas || rm -rf $SYNCDIR/negbal_list.nas
	send_mikrotik_cmd -s "$nas_ip" "${telnet_login}" "${telnet_password}" /ip firewall address-list print .proplist=address ?list=crb_auth_list > $SYNCDIR/auth_list.nas || rm -rf $SYNCDIR/auth_list.nas
	set -x
}
user_get_mac() {
        local TMPDIR=/tmp/nas_event_daemon/$nas_ip/user_get_mac/
        mkdir -p $TMPDIR/

        read ip int mac t <<< "$(send_mikrotik_cmd "$nas_ip" "${telnet_login}" "${telnet_password}" /ip arp print .proplist=address,mac-address,interface ?address=${ip})"

        echo $mac > ${TMPDIR}/${user_id}

        chmod 777 -R /tmp/nas_event_daemon/
}

user_info(){
	echo '<pre>' > /tmp/${user_id}_user_info.new
	$EVENT_HANDLERS_DIR/${NAS_SCRIPT_NAME%.sh}.d/user_info "$nas_ip" "$telnet_login" "$telnet_password" "$ip" >> /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_event_after() {
	:;
}

send_cmd() {
        ip=$1
        cmd=user_${2}
        EVENT_HANDLERS_DIR=./bin/
        NAS_SCRIPT_NAME=session
        set -x
        echo "env $env_str"
        $cmd
        set +x
}

main() {
        . /usr/local/bin/user_env $ip
        . ./main.ini
        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 "$@"
fi
Введите метки, чтобы добавить к этой странице:
Please wait 
Ищите метку? просто начните печатать.