| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| | |
|
| | |
|
| |
|
|
|
| |
Pass in the `filebase' value to the Message constructor to make sure
the message uses the same hash value as before.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
For messages that have toadmin set (i.e. came to the -admin address),
we only do bounce detection before sending off to the list owners.
Specifically, we don't do bounce-loop detection.
All messages sent to the owners will get Errors-To: set to the -owner
address. It is the -owner address that does bounce-loop detection
before sending off to the list owners.
The reason this is done is so that bounces arriving at the -admin
address but not matching any detectors will be forwarded on the list
owners. But bogus list owner address must be dealt with as well, so
these are handled by the -owner address.
This is all documented at the top of the file.
|
| |
|
|
| |
locked until absolutely necessary.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
happens in the parent process.
poll_newsgroup(): Take a `lock' argument to keep the gate_news lock
fresh while gating the newsgroup. Some changes to the log messages.
gate_news(): Removed -- folded into process_lists().
process_lists(): Take a `lock' argument to pass to poll_newsgroup().
Perform all work in the parent process. Better logging.
|
| |
|
|
| |
breaking out of the main loop when either are exceeded.
|
| |
|
|
|
|
|
|
| |
LIKELY_BOUNCE_SENDERS, then this message is probably bounced from a
bogus admin address. Catch and stop the loop by not attempting
delivery again.
Fixes PR#285, BUG#106592
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
errors go to the logs/gate_news file, while any exceptions that
percolate to the top would go to logs/error.
poll_newsgroup(): Always update the watermark, even if the message has
been seen before (i.e. we found an X-BeenThere: header) or if an
nntp.error_temp occurred (which can happen if the message has
expired). Any other exceptions will not be caught and thus will not
update the watermark.
process_lists(): Be extra paranoid about the forks and child
processes. First of all, the fork could fail and if so, we stop
cruising through the mailing lists and return to the parent the
dictionary of child pids gathered so far. Second, make absolutely
sure that the child process exits without returning control to the
caller. If we complete successfully or if a TimeOutError occurred, we
exit with status 0, otherwise we print a traceback and exit with
status 1.
main(): First off, we added a keepalive function to geep the gate_news
lock fresh while we're waiting for our child processes to exit.
Second, we added a failsafe around process_list() -- which does a fork
-- so that in the unlikely situation where the child process could
have gotten returned here, we exit immediately.
|
| |
|
|
|
|
|
| |
errors go to the logs/qrunner file, while any exceptions that
percolate to the top would go to logs/error.
main(): Refresh the qrunner lock each time through the main loop.
|
| |
|
|
|
|
| |
marked as volatile and not saved to the .db file.
Use Utils.reap().
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
all logging activities except stderr output from child tracebacks.
Get rid of unused imports.
poll_newsgroup(): Reorganized so as not to use the crufty
QuickEscape. Also, be sure to update mlist.usenet_watermark even if
we see a message that's already been through the list. When
delivering the message to the list, enqueue it immediately (by adding
the _enqueue_immediate flag to msgdata) instead of trying to deliver
it. This lets qrunner deliver the message as appropriate.
reap(): Move to Utils.py
process_lists(): Don't try to be fancy about catching exceptions in
the child. Just let them percolate up and Python will do the right
thing by logging it and exiting with a non-zero status.
main(): Use standard LockFile module for acquiring the gate_news lock.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
mailowner used to do. Those scripts now just quickly queue the
messages into qfiles/. This was the only way to make sure that we
never hit MTAs delivery command time limits.
QRUNNER_LOCK_LIFETIME: moved to Defaults.py
dispose_message(): Knows how to dispose of messages queued by post,
mailcmd, or mailowner. mailcmd sets the `torequest' msgdata key, and
mailowner sets the `toadmin' msgdata key.
For torequest messages, we send the message through ParseMailCommands
and always return 0.
For toadmin messages, we send the message through the bounce scanner,
and if that fails to find a bounce, we send the message on to the list
owner (with all the proper queuing on errors).
For all other messages, we do nothing different.
main(): Be a little more careful about closing the file descriptors.
|
| |
|
|
| |
site-wide NNTP authentication values.
|
| |
|
|
| |
anymore. Use HandlerAPI.DeliverToList().
|
| |
|
|
| |
setting up stderr logging.
|
| | |
|
| |
|
|
| |
the unixfrom line.
|
| |
|
|
|
|
|
|
| |
especially in light of the recent change that queues approved messages
rather than delivering them directly.
Also, use "python -S" to improve startup time; this avoid the costly
and unnecessary "import site".
|
| |
|
|
|
|
|
|
| |
exist, log this error and dequeue the message. Otherwise, messages
for removed lists will sit in the queue forever because they can no
longer be delivered.
dequeue(): Factor out dequeuing logic.
|
| |
|
|
|
| |
dictionary; this contains pids which aren't descendent to the qrunner
process.
|
| |
|
|
|
| |
message can be dequeued or not. On failure, DeliverToList() will
automatically enqueue the message.
|
| |
|
|
|
| |
representing the record for held messages. In pre-2.0b3 it was a
5-tuple, but it is now a 6-tuple.
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
dispose_message(): Compatibility function for delivery of pre-2.0beta3
version qfiles and 2.0b3 version qfiles (whose marshaled state now
contains a schema version number).
open_list(): Since qrunner can attempt delivery against the same list
multiple times, cache the list name and the MailList object in a
global, and reuse it if possible. The only thing that has to be
managed explicitly is acquiring and relinquishing the lock. That fine
though 'cause that's what we actually want to do!
main(): Integrate with the new delivery stuff; use the msgdata
dictionary for message metadata. Also, dig out the 'kids' info, which
is a list of subproc pids to wait on. Re-queue the message if
delivery did not successfully complete.
|
| |
|
|
|
| |
name match for gzip candidates, so weeklies, quarterlies, etc. will
get compressed.
|
| |
|
|
| |
Odd this has never been caught before!
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Tittsler. In summary, each list maintains its own watermark as a
config.db attribute, and the separate gate_watermarks is no longer
used. This greatly simplifies the logic in this script.
Some specifics,
main(): The command line options have changed, and no longer supports
invocation as "gate_news listname first last". Added --stderrs/-s,
--quiet/-q, and --help/-h flags.
Removed unnecessary imports.
WATERMARK_FILE, LIST_LOCK_FILE both are gone. There's a global block
file and each list locks itself when actually doing the gating of
articles.
|
| | |
|
| |
|
|
| |
because of total or partial failure in the smtpd handoff.
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
| |
last_post_time is <= 0 (meaning there have been no messages posted to
the mailing list yet). Idea by Jim Tittsler.
|
| |
|
|
|
|
| |
version of this module.
main(): simplified connection creation, set readermode in constructor.
|
| |
|
|
|
| |
is moved to X-Originally-To:. In all cases, To: is set to the list's
email address. This resolves PR#172.
|
| |
|
|
|
|
|
|
| |
NNTP connection. If the Mailman gateway is on the same machine as the
news server, you probably need to set the news server to reader mode
first.
Patch given by Thomas Wouters inspired by a patch from Jim Tittsler.
|
| | |
|
| |
|
|
| |
cron mailing me the output sent to stdout on every run.
|
| |
|
|
|
| |
saved after sending, otherwise the digest numbers and post numbers are
not tracked correctly.
|
| | |
|
| | |
|
| | |
|
| |
|
|
| |
added by StampedLogger.
|
| |
|
|
|
| |
in scripts/driver. Maybe this will fix the problem with the weird
Archiver import errors??
|
| |
|
|
|
| |
Also, catch socket.error's that can occur during the nntplib.NNTP()
call.
|