В дополнительных полях клиента заводим текстовое
_AUTHmacs, куда будем записывать разрешенные маки.
файл nol2auth.pl
1. после $U{$ip}{last_got_info}=$t; # запомним когда получили инфо о клиенте
вставляем
$sth=$dbh->prepare("SELECT field_alias, field_value FROM dopfields INNER JOIN dopvalues ON (dopfields.id = dopvalues.dopfield_id)".
" WHERE dopfields.field_alias='_AUTHmacs' AND dopvalues.parent_id = $id".
" ORDER BY revision DESC LIMIT 1");
if( $sth->execute ) {
while ($addp = $sth->fetchrow_hashref ()) {
$U{$ip}{$addp->{field_alias}}=$addp->{field_value};
}
}
2. Перед # --- авторизация прошла успешно ---
вставляем
if($U{$ip}{'_AUTHmacs'} ne '') {
$mac=`arp -n $ip`;
&Debug(" get MACinfo (\n$mac\n) from ip ($ip)\n");
# тут - получение МАСа в дебиан, для фри индекс в квадратных скобках другой (см. вывод "arp -n 127.0.0.1")
my $tmpMAC=uc((stat(split(/\s+/,$mac)))[8]);
if (index(uc($U{$ip}{'_AUTHmacs'}),$tmpMAC)<0)
{ # неудачная авторизация
send(SOCKET,"no$U{$ip}{'id_query'}",0,$hispaddr); # т.к. длина 'no'+$zapros2 <>16, то старые клиенты не будут воспринимать это как строку для шифрования
&Debug("2й шаг авторизации. Неудачная авторизация по MAC ($U{$ip}{'_AUTHmacs'} ne $tmpMAC)");
&Slap_Ip($ip,2); # накажем на 5 пунктов
next;
}}
upd: это все - для nol2auth.pl 49.32