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

# Filename: ik-l2d-2.py

__module_name__= "Zimbra To Trash"
__module_version__= "1.1"
__module_description__= "Active Directoryko Irakasleak Zimbrara Sartzeko Aplikazioa"
__module_author__= "Alfredo Barrainkua Zallo"



################################################################################################################

#				Zimbra To Trash

################################################################################################################
#
# 1.1 - 2008-11-27
#	Ez ezabatzeko erabiltzaileak gehitu
# 1.0 - 2008-11-23
#	Hasierako bertsioa
#
###############################################################################################################

import sys, string, readline, commands, grp
from datetime import date
from time import time, localtime, strftime
import ldap


# Skriptaren izena
PRGNAME = "z2t"


# Fitxategiaren izena...
gaur_d = date.today()
LOGFILE = PRGNAME + "-" + gaur_d.strftime("%Y%m%d") + "-" + strftime("%H%M", localtime()) + ".log"
PROVFILE = PRGNAME + "-" + gaur_d.strftime("%Y%m%d") + "-" + strftime("%H%M", localtime()) + ".prov"
ZUSERSFILE = PRGNAME + "-" + gaur_d.strftime("%Y%m%d") + "-" + strftime("%H%M", localtime()) + ".zusers"
ADUSERSFILE = PRGNAME + "-" + gaur_d.strftime("%Y%m%d") + "-" + strftime("%H%M", localtime()) + ".adusers"

# Domeinu eta azpidomeinuen izenak
DOMEINUA = "iurreta-institutua.net"
AZPIDOMEINUA = "kaioa3.iurreta-institutua.net"
ESKOLA_SINADURA = "Iurreta GLHB Institutua\\nOlaburu 19\\n48215 IURRETA\\n"

#### ZERB_MOTA = "AZPIDOMEINUA" / "DOMEINUA" (nire-eskoal.net / kaioa3.nire-eskola.net)
ZERB_MOTA = "AZPIDOMEINUA"

# Konexiorako datuak
Server = "ldap://10.22.x.y:389"
BindName = "************@iurreta-institutua.net"
Password = "**********"
BaseDN = "ou=irakasleak,dc=iurreta-institutua,dc=net"
# Bilaketa datuak
searchScope = ldap.SCOPE_SUBTREE
retrieveAttributes = None
searchFilter = "displayName=" + "*"
# Aginteak
ZMACCTS = "/opt/zimbra/bin/zmaccts"
ZMPROV = "/opt/zimbra/bin/zmprov"
CAT = "/bin/cat"

# Zimbrako erabiltzaileak hartu
if ZERB_MOTA == "DOMEINUA" :
    zusers = commands.getstatusoutput(ZMPROV + " gaa " + DOMEINUA + " > " + ZUSERSFILE)
else :
    zusers = commands.getstatusoutput(ZMPROV + " gaa " + AZPIDOMEINUA + " > " + ZUSERSFILE)

# Erregistro fitxategiak ireki
logfile = open(LOGFILE, "w")
provfile = open(PROVFILE, "w")
adusersfile = open(ADUSERSFILE, "w")

logfile.write("####################################################################################################\n")
logfile.write("#                          		Zimbra To Trash                                           #\n")
logfile.write("####################################################################################################\n")
logfile.write("Data eta ordua: " + gaur_d.strftime("%Y-%m-%d") + "   " + strftime("%H:%M", localtime()) + "\n")

# ADra konektatu
try:
    l = ldap.initialize(Server)
except:
    print "Errorea konektatzean"
    logfile.write("Errorea konektatzean\n")

l.protocol_version = ldap.VERSION3

try:
    l.simple_bind(BindName, Password)
except:
    print "Errorea direktorioarekin batzean"
    logfile.write("Errorea direktorioarekin batzean\n")

res = l.search_s(BaseDN, searchScope, searchFilter, retrieveAttributes)

l.unbind_s()

logfile.write("----------------------------------------\n")

for r in res :
    print r[0]
    if (r[0]) :
	DATUAK = r[1]
#	print DATUAK
	# Erabiltzaile kontua ez badago desgaituta
	if (DATUAK['userAccountControl'][0] != "66050") :
	    logfile.write(r[0] + "\n")

	    # Zerbitzaria, domeinukoa da (user@nire-eskola.net)
	    if ZERB_MOTA == "DOMEINUA" :
		adusersfile.write(DATUAK['mail'][0] + "\n")
	    # Zerbitzaria, "kaioa3" azpidomeinukoa da (user@kaioa3.nire-eskola.net)
	    else :
		adusersfile.write(DATUAK['sAMAccountName'][0] + "@" + AZPIDOMEINUA + "\n")

adusersfile.close()

zusersfile = open(ZUSERSFILE)
for line in zusersfile.readlines() :
    line = line.strip()
    print line
    badago = commands.getstatusoutput(CAT + " " + ADUSERSFILE + " | grep '" + line + "'")
#    print badago[0]
#    print badago[1]
    badago2 = badago[0]
    # Erabiltzaile hauek ez ezabatu
    # ZUZENDU ZURE BEHARRETARA
    if ((line == "alfredo@" + AZPIDOMEINUA) or \
	(line == "alfredo@" + DOMEINUA) or \
	(line == "josean@" + AZPIDOMEINUA) or \
	(line == "josean@" + DOMEINUA) or \
	(line == "admin@" + AZPIDOMEINUA) or \
	(line == "admin@" + DOMEINUA) or \
	(line == "administrator@" + AZPIDOMEINUA) or \
	(line == "administrator@" + DOMEINUA) or \
	(line == "wiki@" + AZPIDOMEINUA) or \
	(line == "wiki@" + DOMEINUA) or \
	(line == "spam.??????????@" + AZPIDOMEINUA) or \
	(line == "spam.??????????@" + DOMEINUA) or \
	(line == "ham.????????@" + AZPIDOMEINUA) or \
	(line == "ham.????????@" + DOMEINUA))  :
	badago2 = 0

    if badago2 == 0 :
	logfile.write("BADAGO ADn: " + line + "\n")
    else :
	logfile.write("EZ DAGO ADn -> Ezabatu: " + line + "\n")
	provfile.write("da " + line + "\n")


logfile.close()
provfile.close()
zusersfile.close()

sys.exit(0)

