Changelog: Nenhuma mudança drástica, apenas o script está mais robusto, melhor configurável e utiliza a função PASSWORD do mysql que melhora um pouco a segurança do processo.
E espero que desta vez ninguém tenha problemas em utilizar o script :D.
#!/bin/sh
#
#
# Daniel Roque - 2006roque@gmail.com
#
#
#
# 2008-11-23
#
#
# Copie o arquivo para /etc/squid/autenticador
#
# IMPORTANTE os dois comando abaixo.
# Nao importa onde o script estiver ele precisa se acessivel pelo usuario proxy, ou nao funcionara.
# chown proxy.proxy /etc/squid/autenticador
# chmod 771 /etc/squid/autenticador
#
# Adicione ao /etc/squid/squid.conf
# auth_param basic program "/etc/squid/autenticador"
# auth_param basic realm "Digite usuario e senha"
# acl geral proxy_auth REQUIRED
#
# ATENCAO EXECUTE OS COMANDOS DENTRO DO mysql
#
# GRANT ALL PRIVILEGES ON *.* TO adm@localhost IDENTIFIED BY 'minhasenha' WITH GRANT OPTION;
# GRANT ALL PRIVILEGES ON *.* TO adm@'%' IDENTIFIED BY 'minhasenha' WITH GRANT OPTION;
# GRANT RELOAD,PROCESS ON *.* TO adm@localhost;
# GRANT USAGE ON *.* TO adm@localhost;
#
# CREATE DATABASE IF NOT EXISTS dbsquid;
# USE dbsquid;
# CREATE TABLE IF NOT EXISTS usuarios(
# codigo int(6) primary key NOT NULL AUTO_INCREMENT,
# login varchar(40) unique NOT NULL,
# senha varchar(255) NOT NULL,
# status int(11) NOT NULL default 1,
# mudarsenha varchar(1),
# nivel int(1),
# visivel varchar(1),
# cadastro date
# )ENGINE=INNODB;
#
# PARA ADICIONAR USUARIOS, basta trocar daniel e senha por outro usuario outra senha
# insert into usuarios (login,senha,status,visivel,cadastro) values ('daniel','senha',1,'s',now());
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin/"
log='/tmp/auth-squid.log'
data=`date -d now`
db='dbsquid'
tabela='usuarios'
usql='adm'
psql='minhasenha'
valor=''
while read valor;
do
data=`date -d now`
if [ "$valor" != '' ];then
login=`echo $valor|sed 's/\(.*\)\( .*\)/\1/g'`
senha=`echo $valor|sed 's/\(.* \)\(.*\)/\2/g'`
if [ "$login" == '' ];then
echo "$data usario vazio" >>$log
echo ERR
exit 0
fi
echo "$data tentando autenticar '$login'" >>$log
sql="SELECT login FROM usuarios WHERE login='$login' AND senha='$senha' AND status='1';"
rslt=`mysql -u$usql -p$psql -t --database "$db" -e "$sql"|sed -n 's/|//g;s/ //g;4p'`
if [ "$login" == "$rslt" ];
then
echo "$data resposta OK para $login" >>$log
echo OK
else
echo "$data resposta ERR para $login" >>$log
echo ERR
fi
echo >>$log
else
echo "$data resposta ERR para $login" >>$log
echo ERR
fi
done
exit 0
[1] Comentário enviado por romulocpd em 09/07/2009 - 18:04h
Tive o seguinte erro:
[: 95: ==: unexpected operator
Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]...
-n, --quiet, --silent
suppress automatic printing of pattern space
-e script, --expression=script
add the script to the commands to be executed
-f script-file, --file=script-file
add the contents of script-file to the commands to be executed
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if extension supplied)
-l N, --line-length=N
specify the desired line-wrap length for the `l' command
--posix
disable all GNU extensions.
-r, --regexp-extended
use extended regular expressions in the script.
-s, --separate
consider files as separate rather than as a single continuous
long stream.
-u, --unbuffered
load minimal amounts of data from the input files and flush
the output buffers more often
--help display this help and exit
--version output version information and exit
[2] Comentário enviado por tiekookeit em 09/07/2009 - 19:29h
É o seguinte, eu testei aqui e tudo ok, fiz algumas alteracoes no codigo para ficar mais robusto,
entao primeiro tente atualizar o sed, ou pelomenos dizer qual versao esta instalada ai, segundo
se quiser eu te mando essa versao ligeiramente modificada, deve funcionar.
[3] Comentário enviado por removido em 15/07/2009 - 14:06h
E ai daniel, tudo bem?
Parabéns pela dica, esta sendo de grande ajuda.
Mais se eu tenho um usuario cadastrado com uma senha que contem caracteres especiais não funciona.
Ex:
Login: teste
Senha: 1234!@#$
Ai o squid não autentica, estou fazendo algo errado eu é uma limitação do codigo.?
Valeu.!
[4] Comentário enviado por tiekookeit em 15/07/2009 - 15:12h
Então, eu fiz algumas modificacao para ajudar o colega romulocpd no codigo, e com este modificado, eu fiz os teste com a senha que tu postou ai, e nao tive problemas
o codigo alterado ficou assim, teste ai e me fala
#!/bin/bash
#
#
# Daniel Roque - 2006roque@gmail.com
#
#
#
# Qui Jul 9 19:24:12 BRT 2009
if [ "${login}" == '' ];then
echo "${data} usario vazio" >>${log}
echo ERR
exit 0
fi
echo "${data} tentando autenticar '${login}'" >>${log}
sql="SELECT login FROM usuarios WHERE login='${login}' AND senha='$senha' AND status='1';"
rslt=`mysql -u${usql} -p${psql} -t --database "${db}" -e "${sql}"|sed -n 's/|//g;s/ //g;4p'`
if [ "${login}" == "${rslt}" ];
then
echo "${data} resposta OK para ${login}" >>${log}
echo OK
else
echo "${data} resposta ERR para ${login}" >>${log}
echo ERR
fi
echo >>${log}
else
echo "${data} resposta ERR para ${login}" >>${log}
echo ERR
fi
done