... {code} #!/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(){
|