Автологин пользователя в UTM5
Для сетей, где идёт привязка к IP-адресу довольно неудобно заставлять пользователей запоминать свои логины\пароли на вход в статистику. В одной сеточке используется UTM5. Исторически так сложилось, что пользователи не знают своих логинов\паролей в биллинг и знать не хотят. Тем, кто хотят – конечно выдадут. Да и зайдя из дома они увидят и свой логин, и могут сами сменить свой пароль, чтобы потом иметь возможность заходить на вёб не из дома.
В общем там, где это используется ВНЕЗАПНО наконец-то пришли к решению обновить древнее говно мамонта в виде FreeBSD 5.4 и до кучи переехать на linux – его админить удобнее.
На старой фре автологин уже был, но сделан он был даавно (в 2003-4 кажется) нетаповцами и зачем-то скомпилен бинарником. Видимо чтобы удобнее было запускать и этот бинарь в линуксе работать отказался. Пришлось немного пробежаться по базе и посмотреть на старый сервер. tcl я знаю лучше чем какой-либо другой язык, так что моё решение на tcl:
autologin.cgi:
#!/bin/sh
# \
exec tclsh "$0" $REMOTE_ADDR
set REMOTE_ADDR "$argv"
package require mysqltcl
# я считаю что указывать пароли в скрипте, который случайно может попасть пользователю не очень хорошо
source "/netup/utm5/autologin.cfg"
set mysqlsock [mysqlconnect -host $mysqlhost -user $mysqluser -password $mysqlpass -db $mysqldb]
set GRID [mysqlsel $mysqlsock "select ip_group_id from ip_groups where is_deleted = 0 and ((ip & mask &0xffffffff) = (inet_aton('$REMOTE_ADDR') & mask & 0xffffffff));" -flatlist]
if { $GRID != "" } {
set USRID [mysqlsel $mysqlsock "select id from iptraffic_service_links where ip_group_id = '$GRID';" -flatlist]
set ACCID [mysqlsel $mysqlsock "select account_id from service_links where id = '$USRID' and is_deleted = '0';" -flatlist]
set LoginPassword [mysqlsel $mysqlsock "select login,password from users where basic_account = '$ACCID';" -flatlist]
if { $LoginPassword “” } {
set LoginPassword [mysqlsel $mysqlsock “select login,password from users where basic_account = $GRID;” -flatlist]
}
mysqlclose
set LOGIN [lindex $LoginPassword 0]
set PASSWORD [lindex $LoginPassword 1]
set URL “https://stat/cgi-bin/utm5/aaa5?cmd=login&login=$LOGIN&password=$PASSWORD”
} else {
mysqlclose
set URL “https://stat/cgi-bin/utm5/aaa5”
}
puts "<html><head>"
puts "<title></title>"
puts "<META HTTP-EQUIV=\"Refresh\" CONTENT=\"0; URL=$URL\">"
puts "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf8\">"
puts "</head>"
puts "<body>"
puts "</body>"
puts "</html>"
Содержимое /netup/utm5/autologin.cfg:
set mysqlhost "localhost"
set mysqluser "USER"
set mysqlpass "PASSWORD"
set mysqldb "UTM5"
Если кто-то напишет подобное на чём-то другом – ну и хорошо :-)
Само-собой при входе на http://stat/ и https://stat/ там стоит переадресация на https://stat/cgi-bin/utm5/autologin.cgi
| опубликовано: Сен 5, 20:56