#------------------------------------------------
config = ConfigParser.ConfigParser()
+config.read(os.path.dirname(__file__)+'/../configs/platal.ini')
config.read(os.path.dirname(__file__)+'/../configs/platal.conf')
def get_config(sec, val, default=None):
h = Utils.oneline(s, 'iso-8859-1')
else:
h = s
- h = str('').join(re.split('[\x00-\x09\x0B-\x1f]+', s))
- return Utils.uquote(h.replace('&', '&').replace('>', '>').replace('<', '<'))
+ h = str('').join(re.split('[\x00-\x08\x0B-\x1f]+', h))
+ return Utils.uquote(h.replace('&', '&').replace('>', '>').replace('<', '<'))
def to_forlife(email):
try:
return res
else:
return (None, None)
- return (email, mbox)
+ return (email.lower(), mbox)
##
# see /usr/lib/mailman/bin/rmlist
if email is None:
udesc = userdesc
else:
- udesc = UserDesc(email, email, None, 0)
+ udesc = UserDesc(email.lower(), email.lower(), None, 0)
prefix = vhost.lower()+VHOST_SEP
names = Utils.list_names()
names.sort()
# users procedures for [ index.php ]
#
+def get_name(member):
+ try:
+ return quote(mlist.getMemberName(member))
+ except:
+ return ''
+
def get_members(userdesc, perms, vhost, listname):
try:
mlist = MailList.MailList(vhost+VHOST_SEP+listname.lower(), lock=0)
try:
details, members = get_list_info(userdesc, perms, mlist)
members.sort()
- members = map(lambda member: (quote(mlist.getMemberName(member)) or '', member), members)
+ members = map(lambda member: (get_name(member), member), members)
return (details, members, mlist.owner)
except:
return 0
# owners procedures [ admin.php ]
#
+def replace_email(userdesc, perms, vhost, listname, from_email, to_email):
+ try:
+ mlist = MailList.MailList(vhost+VHOST_SEP+listname.lower(), lock=0)
+ except:
+ return 0
+ try:
+ if not is_admin_on(userdesc, perms, mlist):
+ return 0
+
+ mlist.Lock()
+ mlist.ApprovedChangeMemberAddress(from_email.lower(), to_email.lower(), 0)
+ mlist.Save()
+ mlist.Unlock()
+ return 1
+ except:
+ return 0
+
def mass_subscribe(userdesc, perms, vhost, listname, users):
try:
mlist = MailList.MailList(vhost+VHOST_SEP+listname.lower(), lock=0)
return 0
return (subs, helds)
-
def handle_request(userdesc, perms, vhost, listname, id, value, comment):
try:
mlist = MailList.MailList(vhost+VHOST_SEP+listname.lower(), lock=0)
mlist.Unlock()
return 0
+def get_pending_sub(userdesc, perms, vhost, listname, id):
+ try:
+ mlist = MailList.MailList(vhost+VHOST_SEP+listname.lower(), lock=0)
+ except:
+ return 0
+ try:
+ if not is_admin_on(userdesc, perms, mlist):
+ return 0
+
+ mlist.Lock()
+ sub = 0
+ id = int(id)
+ if id in mlist.GetSubscriptionIds():
+ time, addr, fullname, passwd, digest, lang = mlist.GetRecord(id)
+ try:
+ login = re.match("^[^.]*\.[^.]*\.\d\d\d\d$", addr.split('@')[0]).group()
+ sub = {'id': id, 'name': quote(fullname), 'addr': addr, 'login': login }
+ except:
+ sub = {'id': id, 'name': quote(fullname), 'addr': addr }
+ mlist.Unlock()
+ except:
+ mlist.Unlock()
+ return 0
+ return sub
def get_pending_mail(userdesc, perms, vhost, listname, id, raw=0):
try:
mlist.Unlock()
if raw:
- return str(msg)
- results = []
+ return quote(str(msg))
+ results_plain = []
+ results_html = []
for part in typed_subpart_iterator(msg, 'text', 'plain'):
c = part.get_payload()
- if c is not None: results.append (c)
- results = map(lambda x: quote(x), results)
+ if c is not None: results_plain.append (c)
+ results_plain = map(lambda x: quote(x), results_plain)
+ for part in typed_subpart_iterator(msg, 'text', 'html'):
+ c = part.get_payload()
+ if c is not None: results_html.append (c)
+ results_html = map(lambda x: quote(x), results_html)
return {'id' : id,
'sender': quote(sender, True),
'size' : size,
'subj' : quote(subject, True),
'stamp' : ptime,
- 'parts' : results }
+ 'parts_plain' : results_plain,
+ 'parts_html': results_html }
except:
mlist.Unlock()
return 0
return 0
if mlist.header_filter_rules == []:
return 0
- action = mlist.header_filter_rules[0][1]
- if action == mm_cfg.HOLD:
- return 1
- if action == mm_cfg.DISCARD:
+ try:
+ action = mlist.header_filter_rules[1][1]
return 2
+ except:
+ action = mlist.header_filter_rules[0][1]
+ if action == mm_cfg.HOLD:
+ return 1
+ if action == mm_cfg.DISCARD:
+ return 3
except:
return 0
if int(level) is 1:
hfr.append(('X-Spam-Flag: Yes, tests=bogofilter', mm_cfg.HOLD, False))
elif int(level) is 2:
+ hfr.append(('X-Spam-Flag: Yes, tests=bogofilter, spamicity=(0\.999999|1\.000000)', mm_cfg.DISCARD, False))
+ hfr.append(('X-Spam-Flag: Yes, tests=bogofilter', mm_cfg.HOLD, False))
+ elif int(level) is 3:
hfr.append(('X-Spam-Flag: Yes, tests=bogofilter', mm_cfg.DISCARD, False))
if mlist.header_filter_rules != hfr:
mlist.Lock()
}
def check_options(userdesc, perms, vhost, listname, correct=False):
+ listname = listname.lower()
try:
- mlist = MailList.MailList(vhost+VHOST_SEP+listname.lower(), lock=0)
+ mlist = MailList.MailList(vhost+VHOST_SEP+listname, lock=0)
except:
return 0
try:
mlist.subject_prefix = '['+listname+'] '
mlist.max_message_size = 0
+ inverted_listname = listname.lower() + '_' + vhost.lower()
mlist.msg_footer = "_______________________________________________\n" \
- + "Liste de diffusion %(real_name)s\n"
+ + "Liste de diffusion %(real_name)s\n" \
+ + "http://listes.polytechnique.org/members/" + inverted_listname
mlist.header_filter_rules = []
mlist.header_filter_rules.append(('X-Spam-Flag: Yes, tests=bogofilter', mm_cfg.HOLD, False))
mlist.Unlock()
+ if ON_CREATE_CMD != '':
+ try: os.system(ON_CREATE_CMD + ' ' + name)
+ except: pass
+
check_options(userdesc, perms, vhost, listname.lower(), True)
mass_subscribe(userdesc, perms, vhost, listname.lower(), members)
mlist._UpdateRecords()
mlist.Save()
mlist.Unlock()
- if ON_CREATE_CMD != '':
- try: os.system(ON_CREATE_CMD + ' ' + name)
- except: pass
except:
try:
mlist.Unlock()
server.register_function(get_members_limit)
server.register_function(get_owners)
# admin.php
+server.register_function(replace_email)
server.register_function(mass_subscribe)
server.register_function(mass_unsubscribe)
server.register_function(add_owner)
# moderate.php
server.register_function(get_pending_ops)
server.register_function(handle_request)
+server.register_function(get_pending_sub)
server.register_function(get_pending_mail)
# options.php
server.register_function(get_owner_options)