| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
| |
longer include the leading dash.
|
| |
|
|
|
|
|
|
| |
email.Utils.getaddresses() instead. Found by Fil.
Also, converted to UserDesc interface for ApprovedAddMember(), and
added support for sucking the Real Name out of the sync file. Also
fixed some bugs in the output format strings.
|
| |
|
|
| |
signature.
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
to hopefully lay the groundwork for a MM2.0.x compatible cron-invoked
qrunner process.
This qrunner responds to SIGINT, SIGTERM, and SIGHUP as described in
the mailmanctl docstring. It also added a more robust -r/--runner
flag to support mailmanctl invoking multiple qrunners per queue via
slicing.
The default now is to run continuously, unless -o/--once is given, and
if multiple -r/--runner flags are given, they will be run in
roundrobin format. This should be all we need to implement a
backwards compatible cron/qrunner script.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
does the right thing! The sub-qrunners are exec'd now from
bin/qrunner using some new command line options, so killing and
(auto-)restarting them will cleanly reload any changed modules.
Also, the lock is acquired in the foreground so you don't get ugly
error messages if another master qrunner is already running.
Finally, the separate lock-refresher process is gone. Too hard to
implement correct lock ownership transfer semantics with it (it was
more complicated than the simple pass-thru to the child). Now, lock
refresh is implemented by a once-a-day alarm signal in the master
qrunner process watcher.
Also implemented the `reopen' command which causes all the log files
to be re-opened (very useful if you're rotating log files!).
|
| | |
|
| | |
|
| |
|
|
| |
#465471.
|
| | |
|
| |
|
|
|
|
|
|
| |
into the script's #! line -- based on --with-python settings, without
losing CVS revision history.
Need to split fix_url.py from the rest of the scripts, since this one
is only supposed to be run as a withlist module.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
into the script's #! line -- based on --with-python settings, without
losing CVS revision history.
#! /usr/bin/env python
becomes
#! @PYTHON@
which gets substituted for in configure.
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
than the default. Now, the syntax mylist@mydom.ain:www.mydom.ain is
no longer supported; to set a different email host_name from the
web_page_url host, you must first set up VIRTUAL_HOSTS, in which
mydom.ain will be looked up.
main(): No longer split the domain argument on `:'
Calculate host_name and web_page_url as described above.
Also, we're now always responsible for saving the list, so do
that, then unlock the list and perform the rest of the task
outside the try/finally.
|
| |
|
|
| |
through the web.
|
| |
|
|
|
|
|
| |
we don't bomb out if the file doesn't exist yet. This lets us
recommend bin/genaliases as the way to initialize things instead
of `touch data/aliases.db' which seems to not work for some
people.
|
| |
|
|
|
|
|
|
| |
directory. To "update" any unprocessed message from a MM2.0
system to MM2.1, it should be sufficient to simply move them to
qfiles/in and rename them so that they have the received time
prepended to the basename (as expected by Switchboard's
...split('+') format).
|
| |
|
|
|
|
|
|
|
|
|
|
| |
stale lock (by matching hostname and pid) it will delete the lock
files before trying to reclaim them.
Also added -q/--quiet to suppress status messages (but not error
messages, which always go to stderr).
sigterm_handler(): We need to catch SIGTERM since that's what init
will send us when changing run levels. SIGTERM just kills all the
sub-qrunners with SIGINT (i.e. no restart).
|
| |
|
|
| |
The former config variable is going away.
|
| |
|
|
| |
messages.
|
| | |
|
| |
|
|
| |
changeMemberAddress() instead of hacking on the dicts directly.
|
| |
|
|
|
|
| |
this adds the -X flag to limit the files for which docstrings are
extracted. It also fixes a bug related to module docstring extraction
for 2nd and subsequent files.
|
| | |
|
| |
|
|
| |
attributes, which are now calculated on the fly.
|
| | |
|
| |
|
|
|
|
| |
private_archive_file_dir since these have been obsoleted.
BAW: I'm not 100% sure the mlist.Save() is still needed.
|
| | |
|
| |
|
|
|
|
|
|
| |
calculate the path to the .mbox file.
Also, change the order of unlocking so that its the reverse of the
locking order (i.e. unlock the archive lock first, then unlock the
list).
|
| |
|
|
| |
web_page_url. Remove move_list as it is no longer necessary.
|
| |
|
|
| |
mailmanctl is doing.
|
| |
|
|
| |
master-qrunner lock could not be acquired.
|
| |
|
|
|
|
|
| |
(concatenated strings are harder for some languages to translate
correctly), and use the usage() method when the check fails.
main(): Add -u / --run-as-user to skip the check_privs() test.
|
| |
|
|
|
| |
complains if we aren't running as the right user, gets called from main().
Should we check for the availability of os.(g|s)et(u|g)id ?
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
-a/--admin-notify flag, which allows the user to inhibit sending the
administrator a notification of subscriptions.
class Tee: helper class so that output can be sent both to stdout, and
to a StringIO which might be sent to the list admin.
class UserDesc: for use with ApprovedAddMember().
addall(): New function which does the loop-over-ApprovedAddMember()
for a list of email addresses. Output is sent to the tee.
main(): Slightly better option handling (it secretly accepts y, Y,
yes, YES, YOWSA, n, N, NO, NINE for boolean options). Don't hide
IOErrors if the digestfile or regularfile can't be opened for some
reason. Be sure to Save() the list after all is said and done;
ApprovedAddMember() does not do this anymore!
|
| | |
|
| |
|
|
| |
added.
|
| |
|
|
|
| |
completion. See the FIXME comment). Checking it in so I don't
have to keep rsync'ing to the office machine. ;/
|
| |
|
|
|
|
|
|
|
| |
API instead, e.g.
GetMembers()/GetDigestMembers() -> getMembers()
GetUserSubscribedAddress() -> getMemberCPAddress()
GetDeliveryMembers() -> getRegularMemberKeys()
GetDigestDeliveryMembers() -> getDigestMemberKeys()
|
| |
|
|
| |
- main(): use correct variable ('lang', not 'dir') in error message
|
| |
|
|
|
|
| |
both marshalled .db files and pickled .pck files (the latter of which
is assumed to be a pickled message object, which is dumped with a
Generator instead of pprint).
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
| |
opened, then assume it's a new template added with this upgrade, and
don't attempt to search for more specific, but identical templates.
|
| |
|
|
| |
CGI_DIR is no longer defined.
|
| |
|
|
| |
just before the msgid lines).
|
| | |
|