|
Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.
|
Изменения (131)
просмотр истории страницы{code} |
gcount=$RANDOM |
event_inc.sh |
|
Главное отличие это создание универсальной функций do_policy, которая вызывается в важных событиях, и уже по состоянию переменных logged, enabled, over_limit, deleted передает на оборудование нужную команду. Таким образом код получается проще и без дублирований. Также в примере есть блокировка, для последовательного выполнения telnet. Также в примере реализована интеграции tray_srv с оборудованием. И авторизации по Ip тоже. gcount=$RANDOM |
do_session=0 |
function unlock_telnet(){ |
function unlock_telnet(){ |
|
flock -u -w 30 11 && LOG INFO "UnLock $lock Success" |
"UnLock $lock Success" |
} |
function lock_telnet(){ |
function lock_telnet(){ |
#открываем файл блокировки |
lock="$gcount id=$id ip=$ip $RANDOM" |
$RANDOM" |
exec 11>&- |
exec 11>/tmp/telnet.lock |
11>/tmp/telnet.lock |
|
# попытка блокировать ждем 30 секунд пока другие все закончат |
блокировать ждем 30 секунд пока другие все закончат |
LOG INFO "Try Lock $lock 30sec... " |
... |
else |
LOG INFO "Lock $lock failed. Create New Lock;" |
Create New Lock;" |
|
rm -f /tmp/telnet.lock; #rm -f защита от повисших скриптов |
повисших скриптов |
exec 11>&- |
... |
|
#if ! selflock 10; then |
selflock 10; then |
# LOG WARN "reached time limit $$" |
... |
|
SENDER=$1; shift |
SENDER=$1; shift |
|
EVENT=$1; shift |
EVENT=$1; shift |
DATA=$@ |
... |
|
for VAR in $DATA; do |
$DATA; do |
|
[[ "$VAR" = *"="* ]] && eval ${VAR%%=*}=\'${VAR#*=}\' |
&& eval ${VAR%%=*}=\'${VAR#*=}\' |
done |
LOG INFO "" |
"" |
|
LOG INFO " $gcount ***$EVENT*** $DATA" |
" $gcount ***$EVENT*** $DATA" |
|
function do_reconnect(){ |
function do_reconnect(){ |
lock_telnet |
/usr/local/bin/expect /var/lib/event/reconnect_user.tcl $nas_ip $ip $id | grep -i 'Connection refused' |
/var/lib/event/reconnect_user.tcl $nas_ip $ip $id | grep -i 'Connection refused' |
sleep 4 |
[ "$?" = 0 ] && { echo "Connection refused sleep 20" ; sleep 20; } |
echo "Connection refused sleep 20" ; sleep 20; } |
unlock_telnet |
... |
} |
function do_policy(){ |
function do_policy(){ |
|
... |
do_inet=1 |
# выключаем инет кому запрещен |
выключаем инет кому запрещен |
|
[ "$auth_type" = "6" -a "$tray_logged" = "0" ] && do_inet=0 |
"6" -a "$tray_logged" = "0" ] && do_inet=0 |
|
[ "$logged" = -1 ] && do_inet=0 |
&& do_inet=0 |
|
[ "$enabled" = "0" -o \ |
"0" -o \ |
|
"$over_limit" = "1" -o "$deleted" = "1" ] && do_inet=0 |
"1" -o "$deleted" = "1" ] && do_inet=0 |
|
if [ $do_inet = "1" ]; then |
then |
|
LOG INFO "$gcount Enable Internet for id=$id ip=$ip" |
Enable Internet for id=$id ip=$ip" |
|
echo "Acct-Session-Id=\"$acct_session_id\",Forward-Policy=\"in:\""\ |
"Acct-Session-Id=\"$acct_session_id\",Forward-Policy=\"in:\""\ |
|
| radclient -x $nas_ip:$coa_port coa $nas_pass 2>&1 \ |
$nas_ip:$coa_port coa $nas_pass 2>&1 \ |
|
| grep -i "Session-Context-Not-Found" |
"Session-Context-Not-Found" |
[ $? -eq 0 ] && do_session=1 |
... |
else |
LOG INFO "$gcount Disable Internet for id=$id ip=$ip enabled=$enabled over_limit=$over_limit deleted=$deleted" |
Disable Internet for id=$id ip=$ip enabled=$enabled over_limit=$over_limit deleted=$deleted" |
|
echo "Acct-Session-Id=\"$acct_session_id\",Forward-Policy=\"in:\",Forward-Policy=\"in:HTTP-REDIRECT\",HTTP-Redirect-URL=\"http://10.0.0.1/noauth\""| radclient -x $nas_ip:$coa_port coa $nas_pass \ |
"Acct-Session-Id=\"$acct_session_id\",Forward-Policy=\"in:\",Forward-Policy=\"in:HTTP-REDIRECT\",HTTP-Redirect-URL=\"http://10.0.0.1/noauth\""| radclient -x $nas_ip:$coa_port coa $nas_pass \ |
|
| grep -i "Session-Context-Not-Found" |
"Session-Context-Not-Found" |
[ $? -eq 0 ] && do_session=1 |
... |
|
if [ $over_limit = 1 ]; then |
then |
|
echo "Acct-Session-Id=\"$acct_session_id\",Forward-Policy=\"in:HTTP-REDIRECT\",HTTP-Redirect-URL=\"http://10.0.0.1/nomoney\""\ |
"Acct-Session-Id=\"$acct_session_id\",Forward-Policy=\"in:HTTP-REDIRECT\",HTTP-Redirect-URL=\"http://10.0.0.1/nomoney\""\ |
|
| radclient -x $nas_ip:$coa_port coa $nas_pass \ |
$nas_ip:$coa_port coa $nas_pass \ |
|
| grep -i "Session-Context-Not-Found" |
"Session-Context-Not-Found" |
[ $? -eq 0 ] && do_session=1 |
... |
|
case |
case "$EVENT" in |
|
login | tray_view_login | balance_negative | balance_positive) |
| balance_positive) |
|
if [ "$nas_ip" = '10.0.0.3' ]; then |
]; then |
|
if [ "$acct_session_id" != "" ]; then |
!= "" ]; then |
do_policy ## and set do_session |
... |
fi |
if [ "$acct_session_id" = "" -o "$do_session" = "1" ]; then |
"" -o "$do_session" = "1" ]; then |
|
do_reconnect # не гарантированно будет новый логин поэтому политику вешаем |
гарантированно будет новый логин поэтому политику вешаем |
do_policy |
... |
rad_acc_start) |
[ "$auth_type" = "1" ] && do_policy |
"1" ] && do_policy |
;; |
... |
try_double_login) |
if [ "$nas_ip" = '10.0.0.3' ]; then |
]; then |
sleep 30 |
... |
;; |
|
tray_view_mustlogon|user_data_changed|user_disconnect) |
|
if [ "$nas_ip" = '10.0.0.3' ]; then |
'10.0.0.3' ]; then |
sleep 10 |
do_reconnect |
do_reconnect |
do_policy |
... |
lock_telnet |
/usr/local/bin/expect /var/lib/event/del_user_ip.tcl 10.0.0.3 $ip $id \ |
/var/lib/event/del_user_ip.tcl 10.0.0.3 $ip $id \ |
|
&& LOG INFO "$gcount deleted user "$ip $id \ |
user "$ip $id \ |
|
|| LOG INFO "$gcount NOT deleted user "$ip $id |
deleted user "$ip $id |
unlock_telnet |
[ "$EVENT" = "user_del" ] && sqlexec "update users set nas_ip=null where id=$id and deleted=1" |
"user_del" ] && sqlexec "update users set nas_ip=null where id=$id and deleted=1" |
;; |
... |
"rate_set") |
[ "$nas_ip" = '10.0.0.3' ] && \ |
&& \ |
|
if [ $ceil_in -ne -1 ] |
[ $ceil_in -ne -1 ] |
then |
let "burst_in = ceil_in * 1000 / 8" |
/ 8" |
|
let "excess_burst_in = ceil_in * 1500 / 8" |
* 1500 / 8" |
|
let "burst_out = ceil_out * 1000 / 8" |
1000 / 8" |
|
let "excess_burst_out = ceil_out * 1500 / 8" |
ceil_out * 1500 / 8" |
|
echo "Acct-Session-Id=\"$acct_session_id\",Dynamic-QoS-Param += \"police-class-rate cls-all rate-absolute $ceil_in\",Dynamic-QoS-Param += \"polic |
"Acct-Session-Id=\"$acct_session_id\",Dynamic-QoS-Param += \"police-class-rate cls-all rate-absolute $ceil_in\",Dynamic-QoS-Param += \"polic |
else |
LOG INFO " NOT changed ceil_in=$ceil_in and ceil_out=$ceil_out " $ip $id |
ceil_in=$ceil_in and ceil_out=$ceil_out " $ip $id |
fi |
... |
esac |
<!-- |
/* Style Definitions */ |
table.MsoNormalTable |
{mso-style-name:"Обычная таблица"; |
mso-tstyle-rowband-size:0; |
mso-tstyle-colband-size:0; |
mso-style-noshow:yes; |
mso-style-priority:99; |
mso-style-qformat:yes; |
mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi;} --> |
{code} |