]>
gitweb.pimeys.fr Git - scripts-20-100.git/blob - mailman_bad_guys.py
eba0821a2a0ce3e83f16608d79d39c74907025a7
4 """Pour trouver dans quelle(s) ML(s) est quelqu'un et l'en virer.
6 À exécuter sur redisdead.
9 from __future__
import print_function
12 if socket
.gethostname() != "redisdead":
13 print("Not on redisdead, might not work")
17 sys
.path
.append("/var/lib/mailman/bin")
20 #from Mailman import mm_cfg
21 from Mailman
import MailList
22 from Mailman
import Utils
25 """Donne la liste des MLs"""
26 return [unicode(n
) for n
in Utils
.list_names()]
29 """Donne la liste des membres de ``ml``.
30 Deals with fucking unicode problems."""
31 ml
= MailList
.MailList(ml
, lock
=False)
32 rmembers
= ml
.getRegularMemberKeys()
33 dmembers
= ml
.getDigestMemberKeys()
34 l
= rmembers
+ dmembers
35 l
= [s
if isinstance(s
, unicode) else s
.decode("utf-8") for s
in l
]
39 """Retourne un dico nom_de_ml -> membres"""
40 return {n
: list_members(n
) for n
in list_lists()}
42 def get_mls_from_mail(mail
, all
=None):
43 """Retourne la liste des mls auxquelles est abonné ``mail``.
44 Calcule le dico ``all`` si on ne lui donne pas."""
47 return [n
for (n
, members
) in all
.iteritems() if mail
in members
]
49 def exterminate(mail
, ml
):
50 """Désabonne ``mail`` de ``ml``.
51 Pas de notification à mail, mais à l'admin."""
52 l
= MailList
.MailList(ml
.encode(), lock
=True)
53 l
.DeleteMember(mail
.encode(), admin_notif
="prout", userack
=False)
57 if __name__
== "__main__":
58 bad_guy
= sys
.argv
[1].decode("utf-8").lower()
59 mls
= get_mls_from_mail(bad_guy
)
62 print("Exterminating %s from %s" % (bad_guy
, ", ".join(mls
)))
63 answer
= raw_input("[y/n] ?")
64 if answer
.lower() == "y":
66 exterminate(bad_guy
, n
)
68 print("No mailing list found")