From be9659c405b1dd2e3562de3657231dbc203a8056 Mon Sep 17 00:00:00 2001 From: Patrick Cernko <pcernko@mpi-klsb.mpg.de> Date: Tue, 23 Jan 2024 10:46:49 +0100 Subject: [PATCH] support for regexp_mapping.json to provide regexps (from mailman) to map to Sympa glob patterns in whitelist/blacklist/modlist --- .gitignore | 1 + gen_config.py | 15 ++++++++++----- mm2sympa.sh | 7 ++++++- 3 files changed, 17 insertions(+), 6 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..89a5f45 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +regexp_mapping.json diff --git a/gen_config.py b/gen_config.py index 5866998..b94d196 100755 --- a/gen_config.py +++ b/gen_config.py @@ -22,12 +22,12 @@ def normalize_email(email): return ldap_mail[0] return email +regexp_mapping = {} def unregexp(e, listtype): - mapping = { - } - if e in mapping: - info(f"mapping {listtype} entry '{e}' to '{mapping[e]}'") - return mapping[e] + global regexp_mapping + if e in regexp_mapping: + info(f"mapping {listtype} entry '{e}' to '{regexp_mapping[e]}'") + return regexp_mapping[e] for char in '*^$': if char in e: warn(f"{listtype} entry '{e}' contains regexp char '{char}', this won't work!") @@ -36,6 +36,7 @@ def unregexp(e, listtype): parser = argparse.ArgumentParser(description='import mailman list to sympa') +parser.add_argument('--regexp-mapping', type=str, help='json data mapping MM regexp to Sympa glob patterns', default=None) parser.add_argument('input') parser.add_argument('membersin') parser.add_argument('output') @@ -46,6 +47,10 @@ parser.add_argument('modlist') parser.add_argument('membersout') args = parser.parse_args() +if args.regexp_mapping: + with open(args.regexp_mapping) as fd: + regexp_mapping = json.load(fd) + members = {} with open(args.membersin) as fd: for m, d in json.load(fd).items(): diff --git a/mm2sympa.sh b/mm2sympa.sh index 4fe9785..4e3d156 100755 --- a/mm2sympa.sh +++ b/mm2sympa.sh @@ -71,7 +71,12 @@ blocklist=$tmpdir/blocklist.txt whitelist=$tmpdir/whitelist.txt modlist=$tmpdir/modlist.txt memberdump=$tmpdir/member.dump -$base/gen_config.py $inputpy $membersjson $configxml $infofile $blocklist $whitelist $modlist $memberdump +regexp_mapping=$base/regexp_mapping.json +opts=() +if [ -e $regexp_mapping ]; then + opts=( "${opts[@]}" --regexp-mapping $regexp_mapping ) +fi +(set -x && $base/gen_config.py "${opts[@]}" $inputpy $membersjson $configxml $infofile $blocklist $whitelist $modlist $memberdump) # sympa user needs access chmod 0644 $configxml -- GitLab