scripts/gestion/gen_confs/adherents.py
becue b7e9acf9f1 [Mails] Bye bye rouge
Ignore-this: 41f78b2bd4df9b4411c032a4169574be

darcs-hash:20120802160424-ab199-b3db7d18ed58b1e64d8dba4ee919e6870f4457a8.gz
2012-08-02 18:04:24 +02:00

237 lines
8 KiB
Python

#! /usr/bin/env python
# -*- coding: iso-8859-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, crans_ldap
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_fx(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')
if home.startswith('/home/') and hostname == "fx":
home = "/home-adh/" + home[6:]
warn = ''
f = '%s/files/%s_%s.tar.bz2' % ('/home-adh/cimetiere',
strftime('%Y-%m-%d-%Hh%Mm'),
login)
status, output = commands.getstatusoutput("tar cjf '%s' '%s' /home-adh/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('/home-adh/mail/' + login):
shutil.rmtree('/home-adh/mail/' + login)
else:
warn += '/home-adh/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 == "fx":
self.delete_fx()
elif hostname == "owl":
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:
try:
home, uid, login, mail_redirect = args.split(',')
except ValueError:
home, uid, login = args.split(',')
mail_redirect = None
if home.startswith('/home/') and hostname == "fx":
home = "/home-adh/" + home[6:]
### 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 1488 %s' % uid )
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('/home-adh/mail/' + login, 0770)
os.chown('/home-adh/mail/' + login, int(uid), 8)
### Redirection
if mail_redirect:
file(home + '/.forward', 'w').write(mail_redirect + '\n')
os.chown(home + '/.forward', int(uid), config.gid)
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 '@' not in To:
if not os.path.exists("/home/" + To):
continue
else:
To += '@crans.org'
conn=smtplib.SMTP('localhost')
conn.sendmail(From, To, config.txt_mail_bienvenue.encode('utf-8') % { 'From': From, 'To': To })
conn.quit()
print OK
except Exception, c:
print ERREUR
if self.debug:
import traceback
traceback.print_exc()
class mail_ajout_droits:
debug = True
def __init__(self, args):
self.args = args
def reconfigure(self):
cprint(u'Envoi mail ajout de droits', 'gras')
for arg in self.args:
login = arg.split(":")[0]
Droit = arg.split(":")[1]
anim('\t' + login)
try:
From = "root@crans.org"
To = login
if To.find('@') == -1: To += '@crans.org'
print Droit +"\n"
if Droit in config.pages_infos_droits:
print "envoi du mail"
Page = config.pages_infos_droits[Droit.encode('utf-8')]
conn=smtplib.SMTP('localhost')
conn.sendmail(From, To, config.txt_ajout_droits.encode('utf-8') % { 'From': From, 'To': To , 'Droit': Droit, 'Page': Page})
conn.quit()
print OK
else:
print "ca marche pas"
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()