#!/bin/bash

function usage () {
    name=`basename $0`
    echo "$name: [-v] [--host hostname] [--user username_to_authenticate] [--ou organization_unit] [--uid uid_to_query]"
    echo "--host - name of the host to query when validating TLS Certificate"
    echo "--user - username to use when authenticating"
    echo "--userfull - full dn name when authenticating"
    echo "--ou   - organization unit of the search user"
    echo "--uid  - uid name to query"

}

function pause (){
    echo "Press enter to continue"
    read
}

function verbose () {
    if [ $VERBOSE = Yes ] ; then
	echo $*
    fi
}

HOST=$HOSTNAME
USER=$USER
#OU="ou=tdi,dc=tagus,dc=ist,dc=utl,dc=pt"
#_UID="james.clone"
OU="ou=People,dc=ist,dc=utl,dc=pt"
_UID="ist24403"
VERBOSE=No

while [ $# -ge 1 ] ; do
    case $1 in
	-v)
	    VERBOSE=Yes
	    shift
	    ;;
	--host)
	    HOST=$2
	    shift
	    shift
	    ;;
	--user)
	    USER=$2
	    shift
	    shift
	    ;;
	--ou)
	    OU=$2
	    shift
	    shift
	    ;;
	--uid)
	    _UID=$2
	    shift
	    shift
	    ;;
	*)
	    echo "Don't know remaing options $*"
	    usage
	    exit 1
    esac
done

verbose "ldap://${HOST} Query anonymous sem TLS"
if ! ldapsearch -H ldap://${HOST} -b ${OU} -x "(uid=${_UID})" dn > /dev/null ; then
    echo "   FAILED      ldap://${HOST} Query anonymous sem TLS"
else
    echo "   WORKED      ldap://${HOST} Query anonymous sem TLS"
fi

verbose "ldap://${HOST} Query anonymous com TLS"
if ! ldapsearch -Z -H ldap://${HOST} -b ${OU} -x "(uid=${_UID})" dn > /dev/null ; then
     echo "   FAILED      ldap://${HOST} Query anonymous com TLS"
else
     echo "   WORKED      ldap://${HOST} Query anonymous com TLS"

fi

verbose "ldap://${HOST} Query anonymous com TLS e validação do certificado"
if ! ldapsearch -ZZ -H ldap://${HOST} -b ${OU} -x "(uid=${_UID})" dn > /dev/null ; then
     echo "   FAILED      ldap://${HOST} Query anonymous com TLS e validação do certificado"
else
     echo "   WORKED      ldap://${HOST} Query anonymous com TLS e validação do certificado"
fi

verbose "ldaps://${HOST} Query anonymous"
if ! ldapsearch -H ldaps://${HOST} -b ${OU} -x "(uid=${_UID})" dn > /dev/null; then
    echo "   FAILED      ldaps://${HOST} Query anonymous"
else
    echo "   WORKED      ldaps://${HOST} Query anonymous"
fi



verbose "ldap://${HOST} Autenticação por simple bind sem TLS"
if ! ldapsearch -H ldap://${HOST} -b ${OU} -x -W -D "uid=${USER},${OU}" '(uid=${_UID})' dn > /dev/null ; then
    echo "   FAILED      ldap://${HOST} Autenticação por simple bind sem TLS"
else
    echo "   WORKED      ldap://${HOST} Autenticação por simple bind sem TLS"
fi

verbose "ldap://${HOST} Autenticação por simple bind com TLS"
if ! ldapsearch -Z -H ldap://${HOST} -b ${OU} -x -W -D "uid=${USER},${OU}" '(uid=${_UID})' dn  > /dev/null ; then
     echo "   FAILED      ldap://${HOST} Autenticação por simple bind com TLS"
else
     echo "   WORKED      ldap://${HOST} Autenticação por simple bind com TLS"
fi

verbose "ldap://${HOST} Autenticação por simple bind com TLS e validação do certificado"
if ! ldapsearch -ZZ -H ldap://${HOST} -b ${OU} -x -W -D "uid=${USER},${OU}" '(uid=${_UID})' dn > /dev/null ; then
     echo "   FAILED      ldap://${HOST} Autenticação por simple bind com TLS e validação do certificado"
else
     echo "   FAILED      ldap://${HOST} Autenticação por simple bind com TLS e validação do certificado"
fi

verbose "ldaps://${HOST} Autenticação por simple bind"
if ! ldapsearch -H ldaps://${HOST} -b ${OU} -x -W -D "uid=${USER},${OU}" '(uid=${_UID})' dn > /dev/null ; then
    echo "   FAILED      ldaps://${HOST} Autenticação por simple bind"
else
    echo "   WORKED      ldaps://${HOST} Autenticação por simple bind"
fi



verbose "ldap://${HOST} Authenticação por omissão com ticket disponivel"
kinit $USER
if ! ldapsearch -Q -H ldap://${HOST} -b ${OU} "(uid=${_UID})" dn > /dev/null ; then
     echo "   FAILED      ldap://${HOST} Authenticação por omissão sem TLS com ticket disponivel"
else
     echo "   WORKED      ldap://${HOST} Authenticação por omissão sem TLS com ticket disponivel"
 fi

verbose "ldap://${HOST} Authenticação por omissão com ticket disponivel e TLS"
if ! ldapsearch -Q -Z -H ldap://${HOST} -b ${OU} "(uid=${_UID})" dn > /dev/null ; then
     echo "   FAILED      ldap://${HOST} Authenticação por omissão com TLS com ticket disponivel"
else
     echo "   WORKED      ldap://${HOST} Authenticação por omissão com TLS com ticket disponivel"
fi

verbose "ldap://${HOST} Authenticação por omissão com ticket disponivel, TLS e validação de certificado"
if ! ldapsearch -Q -ZZ -H ldap://${HOST} -b ${OU} "(uid=${_UID})" dn > /dev/null ; then
     echo "   FAILED      ldap://${HOST} Authenticação por omissão com TLS e validacao de cert, com ticket disponivel"
else
     echo "   WORKED      ldap://${HOST} Authenticação por omissão com TLS e validacao de cert, com ticket disponivel"
 fi

verbose "ldaps://${HOST} Authenticação por omissão com ticket disponivel"
if ! ldapsearch -Q -H ldaps://${HOST} -b ${OU} "(uid=${_UID})" dn > /dev/null ; then
     echo "   FAILED      ldaps://${HOST} Authenticação por omissão sem TLS com ticket disponivel"
else
     echo "   FAILED      ldaps://${HOST} Authenticação por omissão sem TLS com ticket disponivel"
 fi



verbose "ldap://${HOST} Autenticação por GSSAPI sem TLS"
if ! ldapsearch -Q -Y gssapi -H ldap://${HOST} -b ${OU} '(uid=${_UID})' dn  > /dev/null ; then
    echo "   FAILED      ldap://${HOST} Autenticação por GSSAPI sem TLS"
else
    echo "   WORKED      ldap://${HOST} Autenticação por GSSAPI sem TLS"
fi

verbose "ldap://${HOST} Autenticação por GSSAPI com TLS"
#kinit ${USER}
if ! ldapsearch -Q -Y gssapi -Z -H ldap://${HOST} -b ${OU} '(uid=${_UID})' dn  > /dev/null ; then
     echo "   FAILED      ldap://${HOST} Autenticação por GSSAPI com TLS"
else
     echo "   WORKED      ldap://${HOST} Autenticação por GSSAPI com TLS"
fi

verbose "ldap://${HOST} ldap://${HOST} Autenticação por GSSAPI com TLS e validação do certificado"
#kinit ${USER}
if ! ldapsearch -Q -Y gssapi -ZZ -H ldap://${HOST} -b ${OU} '(uid=${_UID})' dn > /dev/null ; then
     echo "   FAILED      ldap://${HOST} Autenticação por GSSAPI com TLS e validação do certificado"
else
     echo "   WORKED      ldap://${HOST} Autenticação por GSSAPI com TLS e validação do certificado"
fi

verbose "ldaps://${HOST} Autenticação por GSSAPI"
if ! ldapsearch -Q -Y gssapi -H ldaps://${HOST} -b ${OU} '(uid=${_UID})' dn  > /dev/null ; then
    echo "   FAILED      ldaps://${HOST} Autenticação por GSSAPI sem TLS"
else
    echo "   WORKED      ldaps://${HOST} Autenticação por GSSAPI sem TLS"
fi



verbose "ldap://${HOST} Authenticação GSSAPI por omissão sem ticket disponivel e sem TLS"
kdestroy 
if ldapsearch -Q -H ldap://${HOST} -b ${OU} "(uid=${_UID})" dn > /dev/null ; then
    echo  "   WORKED      ldap://${HOST} Authenticação GSSAPI por omissão sem TLS sem ticket disponivel"
else
     echo "   FAILED      ldap://${HOST} Authenticação GSSAPI por omissão sem TLS sem ticket disponivel"
 fi

verbose "ldap://${HOST} Authenticação GSSAPI por omissão com TLS mas sem ticket disponivel"
if ldapsearch -Q -Z -H ldap://${HOST} -b ${OU} "(uid=${_UID})" dn > /dev/null ; then
    echo "   WORKED      ldap://${HOST} Authenticação GSSAPI por omissão com TLS sem ticket disponivel"
else
    echo "   FAILED      ldap://${HOST} Authenticação GSSAPI por omissão com TLS sem ticket disponivel"
fi

verbose "ldap://${HOST} Authenticação GSSAPI por omissão com TLS e validacao de cert mas  sem ticket disponivel"
if ldapsearch -Q -ZZ -H ldap://${HOST} -b ${OU} "(uid=${_UID})" dn > /dev/null ; then
    echo "   WORKED      ldap://${HOST} Authenticação GSSAPI por omissão com TLS e validacao de cert, sem ticket disponivel"
else
    echo "   FAILED      ldap://${HOST} Authenticação GSSAPI por omissão com TLS e validacao de cert, sem ticket disponivel"
fi

verbose "ldaps://${HOST} Authenticação GSSAPI por omissão sem ticket disponivel e sem TLS"
if ldapsearch -Q -H ldaps://${HOST} -b ${OU} "(uid=${_UID})" dn > /dev/null ; then
    echo  "   WORKED      ldaps://${HOST} Authenticação GSSAPI por omissão sem ticket disponivel"
else
     echo "   FAILED      ldaps://${HOST} Authenticação GSSAPI por omissão sem ticket disponivel"
 fi




verbose "ldap://${HOST} Comprovar que a autenticação GSSAPI sem TLS e sem ticket falha"
kdestroy 
if ldapsearch -Y gssapi -H ldap://${HOST} -b ${OU} '(uid=${_UID})' dn > /dev/null 2>&1 ; then
    echo "   FAILED      ldap://${HOST} Autenticacao GSSAPI funcionou sem ticket e sem TLS"
fi

verbose "ldap://${HOST} Comprovar que a autenticação GSSAPI com TLS e sem ticket falha"
if ldapsearch -Z -Y gssapi -H ldap://${HOST} -b ${OU} '(uid=${_UID})' dn > /dev/null /dev/null 2>&1 ; then
     echo "   FAILED      ldap://${HOST} Comprovar que a autenticação GSSAPI com TLS e sem ticket falha"
fi

verbose "ldap://${HOST} Comprovar que a autenticação GSSAPI com TLS e validação de cert, falha sem ticket"
if ldapsearch -Q -Y gssapi -ZZ -H ldap://${HOST} -b ${OU} '(uid=${_UID})' dn > /dev/null /dev/null 2>&1 ; then
    echo "   FAILED      ldap://${HOST} Comprovar que a autenticação GSSAPI com TLS e validação de cert, falha sem ticket"
fi

verbose "ldap://${HOST} Comprovar que a autenticação GSSAPI sem TLS e sem ticket falha"
if ldapsearch -Y gssapi -H ldap://${HOST} -b ${OU} '(uid=${_UID})' dn > /dev/null 2>&1 ; then
    echo "   FAILED      ldap://${HOST} Autenticacao GSSAPI funcionou sem ticket e sem TLS"
fi

