mpd5.2 + привязка к IP
Добавлено: 2009-02-22 17:46:21
Есть ли возможность при подключении к mpd в качестве дополнительного параметра авторизации использовать его локальный ip или MAC ?
Если с нами Бог, то кто же против нас?
https://forum.lissyara.su/
Код: Выделить всё
set iface up-script /path/to/scriptтолько как этому скрипту передать ip с которого клиент подключился?ArPoHoM писал(а):set iface up-script /path/to/script
клиенты авторизуются через файл mpd.secret, нехотелось бы, ради этого ставить радиус.Lucky SB писал(а):mpd отсылает радиусу ip клиента
марш документацию читатьтолько как этому скрипту передать ip с которого клиент подключился?
Код: Выделить всё
set auth extauth-script /usr/local/etc/mpd5/auth.pl
set auth enable ext-auth
set auth disable internalКод: Выделить всё
#!/usr/bin/perl -w
use DBI;
$db_host = '';
$db_user = '';
$db_password = '';
$db_database = '';
$file_log = '/var/log/user_auth.log';
$log = 1;
$date = `date +%d.%m.%Y`; chomp($date);
$time = `date +%H:%M`; chomp($time);
$send_ip = "192.168.99.0";
$db = DBI -> connect(('DBI:mysql:'.$db_database.':'.$db_host),$db_user,$db_password) || errors("Невозможно присоединиться к базе $db_host:$db_database, пользователь $db_user");
$sth = $db -> prepare("SELECT `ip`,`mac`,`ip2`,`mac2`,`ip3`,`mac3`,`password`,`check_mac` FROM `users` where user='$ARGV[0]' LIMIT 1; ");
$sth -> execute () || errors("Не верный sql запрос");
while (my $ref = $sth -> fetchrow_hashref())
{
$ref_ip = $ref->{'ip'};
$ref_mac = $ref->{'mac'};
$ref_ip2 = $ref->{'ip2'};
$ref_mac2 = $ref->{'mac2'};
$ref_ip3 = $ref->{'ip3'};
$ref_mac3 = $ref->{'mac3'};
$ref_password = $ref->{'password'};
$ref_check_mac = $ref->{'check_mac'};
}
$mpd_str = "none";
$i = 0;
until($mpd_str eq ""){
if ($log == 1) {
if ($i == 0) {my $cmd_result = `echo "Date: $date $time" >> $file_log`;}
$i++;
}
$mpd_str = <STDIN>;
chomp($mpd_str) ;
if ($ref_check_mac eq "yes") {
my $if_str = index($mpd_str, "PEER_MAC_ADDR:");
if ($if_str != -1){
my $mac_from_mpd = substr($mpd_str, length("PEER_MAC_ADDR:"), (length($mpd_str)-length("PEER_MAC_ADDR:")));
if ($mac_from_mpd eq $ref_mac) {$send_ip = $ref_ip}
elsif ($mac_from_mpd eq $ref_mac2) {$send_ip = $ref_ip2}
elsif ($mac_from_mpd eq $ref_mac3) {$send_ip = $ref_ip3}
else {
$ref_password = "unidentified mac";
my $cmd_result = `echo "unidentified mac: $mac_from_mpd" >> $file_log`;
}
}
} else {
$send_ip = $ref_ip;
}
if ($log == 1) { my $cmd_result = `echo "$mpd_str" >> $file_log`; }
}
print "RESULT:UNDEF\n";
print "USER_NT_HASH:$ref_password\n";
print "FRAMED_IP_ADDRESS:$send_ip\n";
$sth -> finish();
$db -> disconnect();
print "\n"; для этого есть pppoeчто-бы привязать мак адрес логину и паролю