This is a quick hack, but it works:
for i in LIST/archive/{[0-9],[1-9][0-9]}; do for j in $i/[0-9]*; do sed "1s/^Return-Path: <\(.*\)>$/From \1 `find $i -maxdepth 1 -path $j -printf %t`/" $j; echo; done; done > LIST.mbox
where LIST
is the name of the mailing list (and thus of its directory).
When there are fewer than 100 messages in the archive, the above command will report errors like:
find: LIST/archive/[1-9][0-9]: No such file or directory sed: can't read LIST/archive/[1-9][0-9]/[0-9]*: No such file or directory
but the resulting mbox will nevertheless be created correctly.
When there are more than 9999 messages in the archive, the command will need to be revised to process three-digit directory names as well.
ezmlm-make -m
sets up a fully message-moderated list, including for list members. ezmlm-make -mu
sets up a list that is moderated for non-members only, and it lets the list admin specify additional addresses that will bypass message moderation, via ezmlm-sub LIST/allow/ ADDRESS
.
However, there's no “official” way to have a message-moderated list where some members can post unmoderated (e.g., those who have proven to make desirable postings), but some will be moderated (e.g., new subscribers who haven't posted to the list yet). The trick is to create or re-configure the list with ezmlm-make -mu
(as well as with any other options that may be needed) and to edit the ezmlm-gate
line in LIST/editor
removing the second instance of the list's top directory, as well as the list's digest
directory. The original line could look like:
|/usr/local/bin/ezmlm/ezmlm-gate '/home/lists/LIST' '/home/lists/LIST' '/home/lists/LIST/digest' '/home/lists/LIST/allow' '/home/lists/LIST/mod'
The edited line would be:
|/usr/local/bin/ezmlm/ezmlm-gate '/home/lists/LIST' '/home/lists/LIST/allow' '/home/lists/LIST/mod'
With this setup, it is also possible to let some non-members post unmoderated, by adding their envelope-from addresses to LIST/allow/
.
This is how the oss-security mailing list is configured.
It is advisable to make a copy of the entire list directory prior to applying changes, and do a recursive diff
thereafter to make sure there are no unexpected changes (and to consider and deal with such changes if there are any). Possible causes for unexpected changes are: the config
file being out of sync with the actual list configuration, custom changes to list configuration that could not be represented in the config
file, and changes to ezmlm-idx's global defaults since the list was created or re-configured the last time.
Illustrated with a specific example:
cp -a owl-users/ nobackup/owl-users.prev ezmlm-make -+ ~/owl-users/ diff -ur nobackup/owl-users.prev/ owl-users/ | less # Oops, the trailing slash is seen as a change ezmlm-make -+ ~/owl-users diff -ur nobackup/owl-users.prev/ owl-users/ | less # OK, no unexpected changes - just the "|./filmail" line is lost and the list # owner address is obfuscated (a recent improvement to the global defaults). ezmlm-make -+ -mu ~/owl-users # OK, no extra changes (the list was already configured that way) vi owl-users/editor # Re-introduced "|./filmail" (invocation of our spam filter) as the first line, # edited the ezmlm-gate line as described above.