[SP-pm] Autenticador Squid em Perl

Luis Motta Campos luismottacampos em yahoo.co.uk
Quinta Junho 5 12:24:57 PDT 2008


Alexei Znamensky wrote:
> Gabriel,
> 
> #2 perfeitamente correta, sim, ficou faltando o ERR em caso de senha 
> existente porém errada.

Ops. Falha minha. Volto a postar num minuto.

> para a pergunta #1, sem entrarmos na questão de quão efetivo é ter um 
> mecanismo de authenticação se não há senha, o que você precisa fazer é 
> usar a regexp:
> 
> m{^(\S+)\s(.+)?$}
> 
> com a interrogação, denotando que a senha é um parâmetro opcional. Nesse 
> caso você poderá deixar o código com somente:
> 
> my ( $user, $password ) = m{^(\S+)\s(.+)$};
> print is_valid( $user, $password )?"OK\n":"ERR\n";
> 
> Não há necesisdade de fazer o primeiro teste:
> 
> a) da forma como o Fields colocou antes era para testar senha vazia, que 
> no seu caso é algo que você quer (why??? oh god, why??)

Eu pensei melhor e acho que não é responsabilidade deste programa testar 
ou compreender nada sobre a senha: ele simplesmente repassa o que quer 
que ele encontrar para a função de autenticação, que determina a 
validade das credenciais e retorna o valor final.

> b) da forma como você colocou ele vai testar se houve match ou não, o 
> que irá retornar sempre true, ou seja, o print "ERR\n" nunca será executado.
> 
> De qualquer maneira, pode ser removido.

A implementação mais nova é assim:

#!/usr/bin/perl
use strict;
use warnings;
use IO::Handle;

STDOUT->autoflush(1);
STDERR->autoflush(1);

# implement your password validation here
sub is_valid;

while (<>) {
     my ( $user, $password ) = m{^(\S+)(?:\s+(.+))?$};
     print is_valid( $user, $password ) ? qq{OK\n} : qq{ERR\n};
}
__END__

Espero que isso ajude.

Putamplexos.
-- 
Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer,
Perl fanatic evangelist, and amateur {cook, photographer}


Mais detalhes sobre a lista de discussão SaoPaulo-pm