#! /usr/bin/env python # -*- coding: iso8859-15 -*- # Copyright (C) Frédéric Pauget # Licence : GPLv2 import smtplib, sys, commands, shutil, os, traceback sys.path.append('/usr/scripts/gestion') from affich_tools import cprint, anim, OK, WARNING, ERREUR import config from time import strftime from ldap_crans import hostname try: sys.path.append('/usr/lib/mailman') from Mailman.MailList import MailList from Mailman.UserDesc import UserDesc from Mailman.Errors import MMAlreadyAMember except: # Machine sans mailman, les ML ne seront pas reconfigurées pass class del_user: """ Suppression des fichiers d'un compte utilisateur """ debug = True def __init__(self, args): self.args = args def delete_directory(self, caption, pattern): cprint(caption, "gras") for args in self.args: anim('\t' + args) try: login = args.split(',')[0] d = pattern % login if os.path.isdir(d): shutil.rmtree(d) print OK except: print ERREUR if self.debug: import traceback traceback.print_exc() def delete_vert(self): cprint(u'Archivage fichiers utilisateur', 'gras') for args in self.args: anim('\t' + args) try: login, home = args.split(',') if not login or not home: raise ValueError('Argument invalide') warn = '' f = '%s/files/%s_%s.tar.bz2' % (config.cimetiere, strftime('%Y-%m-%d-%Hh%Mm'), login) status, output = commands.getstatusoutput("tar cjf '%s' '%s' /var/spool/mail/%s" % (f, home, login)) if (status != 512 and status != 0) or not os.path.isfile(f): # La 512 est si un des paths n'exite pas. raise OSError(output) if os.path.isdir(home) and os.stat(home)[4] >= 500: shutil.rmtree(home) else: warn += '%s incorrect\n' % home if os.path.isdir('/var/spool/mail/' + login): shutil.rmtree('/var/spool/mail/' + login) else: warn += '/var/spool/mail/%s incorrect\n' % login if warn: print WARNING if self.debug: sys.stderr.write(warn) else: print OK except: print ERREUR if self.debug: import traceback traceback.print_exc() def reconfigure(self): if hostname == "vert": self.delete_vert() elif hostname == "rouge": self.delete_directory(u"Suppression des fichiers index de dovecot", "/var/dovecot-indexes/%s") elif hostname == "zamok": self.delete_directory(u"Suppression des fichiers d'impression", "/var/spool/impression/%s") class home: debug = True def __init__(self, args): self.args = args def reconfigure(self): cprint(u'Création home', 'gras') for args in self.args: anim('\t' + args) try: home, uid, login = args.split(',') ### Home if not os.path.exists(home): # Le home n'existe pas os.mkdir(home, 0755) os.chown(home, int(uid), config.gid) elif os.path.isdir(home): # Il y un répertoire existant # Bon UID ? stat = os.stat(home) if stat[4] != int(uid) or stat[5] != config.gid: # Le home n'est pas pas à la bonne personne raise OSError('home existant') ### Quota status, output = commands.getstatusoutput('/usr/sbin/edquota -p pauget %s' % login ) if status: print WARNING if self.debug: sys.stderr.write(output+'\n') else: print OK ### Mail os.mkdir(home + '/Mail', 0700) os.chown(home + '/Mail', int(uid), config.gid) os.mkdir('/var/mail/' + login, 0770) os.chown('/var/mail/' + login, int(uid), 8) except: print ERREUR if self.debug: import traceback traceback.print_exc() class mail_bienvenue: debug = True def __init__(self, mails): self.mails = mails def reconfigure(self): cprint(u'Envoi mail de bienvenue', 'gras') for mail in self.mails: anim('\t' + mail) try: From = "respbats@crans.org" To = mail if To.find('@') == -1: To += '@crans.org' conn=smtplib.SMTP('localhost') conn.sendmail(From, To, config.txt_mail_bienvenue % { 'From': From, 'To': To }) conn.quit() print OK except Exception, c: print ERREUR if self.debug: import traceback traceback.print_exc() class ML_ens: debug = True def __init__(self, mails): self.mails = mails def reconfigure(self): cprint(u'Inscription ML-ENS', 'gras') mlist = MailList('com-ens') for mail in self.mails: anim('\t' + mail) try: mlist.ApprovedAddMember(UserDesc(mail)) except MMAlreadyAMember: cprint(u"DÉJÀ INSCRIT", "jaune") except: print ERREUR if self.debug: traceback.print_exc() else: print OK mlist.Save() mlist.Unlock()