Olah Lista,
Gracas a ajuda de vcs consegui resolver o problema do login simultaneo,
resolvi rodando um script em Perl que o colega Roberth enviou, gostaria
de agradece-lo desde jah.
O script Autoriza.sh eu encontri no histohrico da lista.
Um script chamado "Autoriza.sh" roda de dentro do arquivo "useres" do
radius,
ele, por sua vez, roda um comando um script Perl chamado "radwhocgi.pl",
esse comando do script Perl retorna se o usuahrio jah estah logado.
Segue abaixo os arquivos envolvidos na solicao:
>>>> Users <<<<<
# First setup all accounts to be checked against the UNIX /etc/passwd.
# (Unless a password was already given earlier in this file).
#
DEFAULT Service-Type = Framed-User
Framed-Protocol = PPP,
# Framed-IP-Adress = 255.255.255.254,
# Framed-Netmask = 255.255.255.255,
# Framed-Routing = Broadcast,
Framed-Compression = Van-Jacobson-TCP-IP,
Framed-MTU = 1500,
Fall-Through = Yes,
Exec-Program-Wait = "/etc/raddb/autoriza.sh %u %i %s %n %p",
Fall-Through = 1
DEFAULT Auth-Type = System
Fall-Through = 1
#
>>>>> Autoriza.sh <<<<<
#!/bin/sh
#################################################################
# Script de valida��o de usu�rio. #
# by Marcelo Watson (c) 2000 V.1.0 - 21/06/200 #
# Acionado pelo Radius em /etc/raddb/users #
#################################################################
#################################################################
# Cria arquivo de log /tmp/autoriza.log se n�o existir. #
#################################################################
if [ ! -f /var/log/autoriza.log ]
then
touch /var/log/autoriza.log
chmod 777 /var/log/autoriza.log
fi
#################################################################
# Testa logins duplicados #
# Verifica se usuario tem permiss�o de logar mais de uma vez #
# simultaneamente. Se n�o, grava log no /tmp/autoriza.log. #
#################################################################
# Deixa acessar quem estiver no arquivo "duplicaveis"
DUP=`grep ^$1: /etc/raddb/duplicaveis | wc -l`
if [ $DUP -eq 0 ]
then
# Trava login duplicado
TRAV=`perl /etc/raddb/radwhocgi.pl | grep $1 | wc -l`
if [ $TRAV -ne 0 ]
then
echo `date +%d/%m/%y-%H:%M`"-$1-Tentou duplo login de" >>
/var/log/autoriza.log
exit 1
fi
fi
########################################
# SE TUDO CORRER BEM AUTORIZA O USUARIO#
########################################
exit 0
>>>>> radwhocgi.pl <<<<<
#******* INICIO *******
#!/usr/bin/perl
use POSIX;
use Socket;
sub who {
my($utmpsize, $utmpfile, %proto, $i);
my($login, $nas_port, $session_id, $nas_address, $framed_address);
my($protocol, $time, $delay, $type, @info, $j, $name, $from);
my($location, $host, $tm);
my($porttype, $res1, $res2, $res3, $caller_id, $reserved);
# Tamanho da estrutura do radutmp
$utmpsize = 100;
# Localizacao do arquivo utmp
$utmpfile = '/var/log/radutmp';
%proto = (
'L' => 'LOCAL',
'R' => 'RLOGI',
'S' => 'SLIP',
'C' => 'CSLIP',
'P' => 'PPP',
'E' => 'TELNE',
'T' => 'TCPCL',
'U' => 'TCPLO',
'!' => 'CONSO',
'X' => 'SHELL',
'' => 'UNKNO',
);
open(FD, "<$utmpfile");
$i = 1;
while (read(FD, $ut, $utmpsize)) {
($login, $nas_port, $session_id, $nas_address, $framed_address,
$protocol, $time, $delay, $type, $porttype, $res1, $res2, $res3,
$caller_id, $reserved) = &unpackradutmp($ut);
next if ! $type;
@info = getpwnam($login);
$j = index($info[6],',');
# $name = ($j < 0) ? $info[6] : substr($info[6],0,$j);
# $name = $login if ! $name;
$name = $login;
$from = join('.',unpack("CCCC",$nas_address));
$location = join('.',unpack("CCCC",$framed_address));
#$host = gethostbyip($location);
$host = $location;
# $tm = strftime( "%a %H:%M", localtime($time));
$tm = strftime( "%c", localtime($time));
if ($i == 1) {
print"Ord Login LoginTime RAS
IP Telefone\n\n";
}
if (length($caller_id) == 10) {
$caller_id = '('.substr($caller_id,0,2).') '.substr
($caller_id,2,4).'-'.substr($caller_id,6,4);
} else {
$caller_id = substr($caller_id,0,(length($caller_id)-4)).'-
'.substr($caller_id,(length($caller_id)-4)
,4);
}
printf("%3d %-8s %-24s %-15s %-15s %-s\n",$i++, $name, substr
($tm,0,24), $from, $host, $caller_id);
}
close FD;
}
sub unpackradutmp {
my @tmp;
my ($la);
@tmp = unpack("A32 i A8 a4 a4 I I i I A1 a1 a1 a1 A16 A12", $_[0]);
$tmp[5] =~ s/\0+$//g;
return @tmp;
}
&who;
#******* FIM **********
Luciano Rodrigues Machado
Suporte - Porto das Canoas
Provedor de acesso - Igarapava-SP
Assinantes em 07/03/2002: 2245
Mensagens recebidas desde 07/01/1999: 157461
Historico e [des]cadastramento: http://linux-br.conectiva.com.br
Assuntos administrativos e problemas com a lista:
mailto:[EMAIL PROTECTED]