Thursday, May 12, 2011

Apache httpd + ActiveDirectory Authentication

Autenticar um Apache contra um (ou mais dominios ActiveDirectory (ldap plain):

  1. Mod-Auth External (modulo para usar autenticadores custom no apache): http://code.google.com/p/mod-auth-external/

  2. Configurar o módulo:

    # External LDAP Auth
    LoadModule authnz_external_module modules/mod_authnz_external.so
    DefineExternalAuth ldapAuth environment /usr/local/bin/ldapAuthenticator
    <Location ...>
    AuthType Basic
    AuthName "Special Realm"
    AuthBasicProvider external
    AuthExternal ldapAuth
    Require valid-user
    <Location ...>


  3. Criar um script sobre ldapsearch + dig para validar a autenticação
#!/bin/sh
LDAPSEARCHCMD=/usr/bin/ldapsearch
DIGCMD=/usr/bin/dig
DOMAINS="domain1.parentdomain.com domain2"

TEMPFILE="/tmp/.data.$$"
if [ -z $USER ] || [ -z $PASS ]; then
exit 1;
fi

USERNAME=${USER}

for DOMAIN in $DOMAINS; do
SERVERS=`$DIGCMD -t srv "_ldap._tcp.dc._msdcs.$DOMAIN." +short | cut -f 4 -d " "`

[[ $DOMAIN =~ "^([^.]*)" ]]
DOMAIN=${BASH_REMATCH[1]}
for SERVER in $SERVERS; do
echo -n $PASS > $TEMPFILE
chmod 0700 $TEMPFILE
# echo $LDAPSEARCHCMD -x -LLL -h $SERVER -D "$DOMAIN\\$USERNAME" -y $TEMPFILE -s sub "(sAMAccountName=$USERNAME)" sAMAccountName >> /tmp/.authlog
$LDAPSEARCHCMD -x -LLL -h $SERVER -D "$DOMAIN\\$USERNAME" -y $TEMPFILE -s sub "(sAMAccountName=$USERNAME)" sAMAccountName
RES=$?
[[ -f $TEMPFILE ]] && rm $TEMPFILE
[[ $RES -eq 0 ]] && exit 0;
[[ $RES -eq 10 ]] && exit 0;
done
done
exit 1


Thursday, December 23, 2010

Monday, June 21, 2010

Deus, que está em toda a parte, estava ali, mas, sendo aquilo que é, um puro espírito, não podia ver como a pele de um tocava a pele do outro, como as suas carnes se juntavam, criadas uma e outra para isso mesmo, e, provavelmente, já nem lá se encontrava quando a semente sagrada de José se derramou no sagrado interior de Maria, sagrados ambos por serem a fonte e a taça da vida, em verdade há coisas que o próprio Deus não entende, embora as tivesse criado. Tendo pois saído para o pátio, Deus não pode ouvir o som agónico, como um estertor, que saiu da boca do varão no instante da crise, e menos ainda o levíssimo gemido que a mulher não foi capaz de reprimir. Apenas um minuto, ou nem tanto, repousou José sobre o corpo de Maria. Enquanto ela puxava para baixo a túnica e se cobria com o lençol, tapando depois a cara com o antebraço, ele, de pé no meio da casa, de mãos levantadas, olhando o tecto, pronunciou aquela sobre todas terrível bençãao, Louvado sejas tu, Senhor, nosso Deus, rei do universo, por não me teres feito mulher. Ora, a estas alturas, Deus já nem no pátio devia estar, pois não tremeram as paredes da casa, não desabaram, nem a terra se abriu. Apenas, pela primeira vez, se ouviu Maria, e humildemente dizia, como de mulheres se espera que seja sempre a voz, Louvado sejas tu, Senhor, que me fizeste conforme a tua vontade, ora, entrer estas palavras e as outras, conhecidas e aclamadas, não há diferença nenhuma, repare-se, Eis a escrava do Senhor, faça-se em mim segundo a tua palavra, está patente que quem disse isto podia, afinal, ter dito aquilo.

[...]

Teria sido assim na idade de ouro, quando o lobo, para não ter de matar o cordeiro, se alimentava de ervas bravas, mas esta idade é dura e de ferro, o tempo dos milagres, ou já passou, ou ainda está para chegar, além disso, milagre, milagre mesmo, por mais que nos digam, não é boa coisa, se é preciso torcer a lógica e a razão própria das coisas para torná-las melhores.

[...]

Deixando-a correr para o chão [a semente], como fizera o infeliz Onan, castigado pelo Senhor por não querer fazer filhos na Viúva de seu irmão, era certo e garantido que a mulher não engravidaria, mas quantas e quantas ocasiões, como dizia o outro, vai a fonte ao cântaro, e o resultado três vezes nove vinte e sete. Está provado, pois, que foi Deus quem pôs Isaac na escassa linfa que Abraão ainda estava capaz de produzir, e o empurrou para dentro do ventre de Sara, que já nem regras tinha. Vista a questão deste ângulo, digamos, teogenético, pode-se concluir, sem abusar da lógica que a tudo deve presidir neste mundo e nos outros, que o mesmo Deus era quem com tanta assiduidade incitava e estimulava José a frequentar Maria, por essa maneira o tornando em seu instrumento para apagar, por compensação numérica, os remorsos que andava sentindo desde que premitira, ou quisera, sem se dar ao trabalho de pensar nas consequências, a morte dos inocentes meninos de Belém. Mas o mais curioso, e que mostra quanto os desígnios do Senhor, além de obviamente inescrutáveis, são também disconcertantes, é que José, ainda que de um modo difuso, que mal lhe passava ao nível da consciência, supunha agir por conta própria e, acredite quem puder, com a mesma tenção de Deus, isto é, restituir ao mundo, por um afincado esforço de procriação, se não, em sentido literal, as crianças mortas, tal qual tinham sido, ao menos a contagem certa, de maneira a não se encontrar diferença no próximo recenseamento. O remorso de Deus e o remors o de José eram um só remorso, e se naqueles tempos já se dizia, Deus não dorme, hoje estamos em boas condições de saber porquê, Não dorme porque cometeu uma falta que nem a homem é perdoável. A cada filho que José ia fazendo, Deus levantava um pouco mais a cabeça, mas nunca virá a levantá-la por completo, porque as crianças que morreram em Belém foram vinte e cinco e José não viverá anos suficientes para gerar tão grande quantidade de filhos numa só mulher, nem Maria, já tao cansada, já de alma e corpo tão dorida, poderia suportar tanto. O pátio e a casa do carpinteiro estavam cheios de crianças e era como se estivessem vazios.

O Evangelho Segundo Jesus Cristo, José Saramago

Tuesday, February 09, 2010

BASH CGI PARAMETER PARSING

Fiz um parser de parametros CGI para bash:

parse_cgi_params(){
# Validate CGI query format
PARAMSTR=$1
export CGI_PARAM_STR=$PARAMSTR
while ! [ -z $PARAMSTR ]; do
[[ $PARAMSTR =~ "^&?([0-9a-zA-Z_]+)=?([0-9a-zA-Z._]*)" ]]
PAIR=${BASH_REMATCH[0]}
KEY=${BASH_REMATCH[1]}
VALUE=${BASH_REMATCH[2]}
PLENGTH=${#PAIR}
PARAMSTR=${PARAMSTR:$PLENGTH}
[ -z $PAIR ] && PARAMSTR=""
export CGI_PARAM_${KEY}="$VALUE"
done
}

O resultado fica em variáveis da forma CGI_PARAM_<chave>=<valor>.

Alguma vulnerabilidade óbvia?

Friday, February 05, 2010

Ana conta a sua história

Ana: Não acha os nomes Gualter e Berta bonitos? Pensar que os meus pais tinham nomes bonitos alivia-me muito. Quando imagino que o meu pai, oh... podia ter-se chamado Godofredo... Até sinto um arrepio...

Marília: Eu nao acho tao importante o Nome de uma pessoa. Para mim só conta o seu bom comportamento.

Ana: Hmmm, não estou assim tão certa. Tomemos por exemplo uma Rosa. Uma Rosa é muito bonita e cheira muito bem, e o seu nome é extraordinariamente belo. É difícil até de imaginar - acho que não se poderia apreciar tão bem o seu aspecto e o cheiro se ela se chamasse cheirete. Se o nome do meu pai fosse Godofredo, certamente não estaria em posição de o apreciar como ele merecia...

(Ana dos Cabelos Ruivos, episódio 4 - Ana conta a sua história)

Monday, January 18, 2010

Conversa no carro #2:

- Sabes aquele carro à frente de luzes vermelhas? Lá dentro vai um príncipe que é meu namorado. Anda depressa, vamos apanhar para eu beijar-lo!
(umas centenas de metros à frente)
- Ah, que pena Joana, não tinha príncipe, tinha só esta senhora.
- Ó Pai, mas de fingir!

Wednesday, January 13, 2010

Conversa no carro #1

- Pai! Sabes, hoje na rua vimos um senhor que não tinha pés. Estava sentado no chão.
- Não tinha pés?
- Não, só tinha uns pés redondos. Mas era a sério! Era um que falava.
- Falava? E dizia o quê?
- Pedia ajuda.
- Que ajuda é que ele queria?
- Nós podíamos ajuda-lo a levantar. Ele podia andar com os dedos, ou com os pés redondos.