#!/usr/bin/python
# -*- coding: utf-8 -*-

import ldap, signal, sys, time, os

# Pequeno programa para verificar se o servidor de LDAP bloqueou
# CIIST - João Poupino ???
# CIIST - José Calhariz 2004/10/19
#

# TODO
#
# Era bom tornar este script independente da distribuição como o
# slapdcheck
#

TIMEOUT = 15 
lista_atributos = ["uid", "mail"]
base = "uid=joao.poupino, ou=tdi, dc=tagus, dc=ist, dc=utl, dc=pt"

def ldap_restart():
    os.system("date -R")
    print "slapdtimeout: killing it"
    os.system("/etc/init.d/sdir stop > /dev/null 2>&1")
    os.system("/etc/init.d/ldap stop > /dev/null 2>&1")
    time.sleep(2)
    os.system("date -R")
    print "slapdtimeout: again :)"
    os.system("/etc/init.d/sdir stop > /dev/null 2>&1")
    os.system("/etc/init.d/ldap stop > /dev/null 2>&1")
    

def timeout(signal, frame):
    print "slapdtimeout: slapd timed out!"
    ldap_restart()
    sys.exit("slapdtimeout: slapd killed")

signal.signal(signal.SIGALRM, timeout)

signal.alarm(TIMEOUT)
try:
    l = ldap.initialize("ldap://"+sys.argv[1])
    l.simple_bind_s("", "")
except ldap.LDAPError:
    ldap_restart()
    sys.exit("slapdtimeout: can't contact ldap server on "+sys.argv[1]);

signal.alarm(TIMEOUT)
try:
    result = l.search_s(base, ldap.SCOPE_BASE, "(&(objectClass=tdiPerson)(uid=joao.poupino))", lista_atributos, 0)
except ldap.LDAPError:
    ldap_restart()
    sys.exit("slapdtimeout: can't contact ldap server on "+sys.arv[1]);
sys.exit(0)
