| Commit message (Collapse) | Author | Age | Files | Lines |
| | |
|
| |
|
|
|
|
| |
are being removed as all mail deliver gets migrated to the new
pipeline architecture. Eventually some of the bulk mailer
functionality may be added back, but not this way.
|
| |
|
|
| |
anywhere, which is why we probably never saw this problem before.
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
propagate version string changes to the public (you have to
autoreconf, then reconfigure and reinstall).
Now, VERSION is set directory in Defaults.py.in and the Release.py
script updates that file directly. Now we just need to run
./config.status and do a re-install. I hope this will make things
easier.
I'm also bumping the version to 1.0b8, so I can do a release tomorrow.
|
| |
|
|
| |
of manual re-raising.
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
of RCPT TO smtp commands can be given for a single message.
This is necessary to make large lists work with mailers that have a
maximum number of recipients per message (most do).
Defaults.py.in - added SMTP_MAX_RCPTS with default value of 500, which
i believe is conservatively small.
contact_transport - made it chunkify the recipients into chunks of <=
SMTP_MAX_RCPTS and go through the delivery process for each of those
chunks.
This change shouldn't have much effect on smaller lists at all.
scott
|
| |
|
|
|
|
|
|
| |
within a try/finally to ensure, as best we can, that it happens. This
may take care of the problems that greg stein was reporting, where a
pipe was failing to properly notice the loss of the parent process -
now the parent should exit normally. Not sure, this is the best guess
so far (out of a discussion w/scott and barry).
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
ditto for Utils.SendTextToUser.
rearranged OutgoingQueue so that
1) it sets a global lock to only allow on queue run at a time
2) enqueueMessage puts a queue entry in an active state
2) the queue run only processes messages in a deferred state
or messages that are in an active state but stale
3) it has a deferMessage interface. which is now used by Utils.TrySMTPDelivery
It now keeps track of the state of a q entry by means of file metadata - if the
qfile is setuid, it's in active state, if it's not it's in deferred state.
scott
|
| |
|
|
| |
the message, so we can detect the linux egid inheritance problem.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
arguments, to avoid exposing addresses to shell.
Protocol:
line 1: batchnum
line 2: sender
line 3...n+2: n recipients
line n+3: <empty> - delimiting end of recipients
line n+4: message content
ContactTransport(): Similarly, pass parameters to contact_transport in
the same manner, via contact_transport process stdin.
This avoids both security problems (and address like `touch
/etc/passwd`, as someone on the developers list warned) and distortion
problems (shell metacharacters in addresses).
Additionally, instrumented both the main process and the child process
with a stderr logger, distinguishing the labels for the two so we can
tell them apart in the error logs.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
avoid exposing addresses to shell. This avoids both security problems
(and address like `touch /etc/passwd`, as someone on the developers
list warned) and distortion problems (shell metacharacters in
addresses). The protocol is (starting the line count at 1):
line [1]: sender
line [2:n+1]: n recipients
line [n+2]: <empty> - delimiting end of recipients
line [n+3:]: message content
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
to_addrs in the wrong order.
(Looks like it would make sense to change the order of the recipient
and sender arguments in equeueMessage to be consistent with other
routines:
def enqueueMessage(the_sender, recip, text):
def TrySMTPDelivery(recipient, sender, text, queue_entry):
def send(self, to, frm, text, headers=None):
)
And i did get an aberrant behavior for the first message i posted
after i applied the fix, specifically, the message showed up around 10
times. Subsequent messages only showed up once, which is proper. It
may be that some quirk in the failure of probably around 10 previous
trials led to "logjam" in the queue that got cleared by the first
success, but i'm unable to confirm that. Something to watch out for -
i think it would be good to actually exercise the queue mechanism to
some substantial degree before release.
|
| |
|
|
| |
enable error logging from this module all the time.
|
| |
|
|
|
|
| |
Mailman package with what we need.
Qualify TrySMTPDelivery with module from which it originates.
|
| | |
|
| |
|
|
| |
vars.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
deliver script. Deliver is all important, and i don't want to screw
it up. I've tested it a bit, but would like your scrutiny before i
put something like it in production!]
I implemented a finite loop around all os.fork()s in the script, to
retry every 15 seconds, up to five times, when error.EAGAIN (resource
temporarily unavailable) is hit.
In the process i've encapsulated the script code in functions,
including a function "forker()" (not mama_forker() - i showed some
restraint:), which takes care of the EAGAIN looping.
Here's a cron report on the error the last time mailpasswds was run:
Your "cron" job on parrot
/usr/local/bin/python /home/mailman/mailman/cron/mailpasswds
produced the following output:
Here's a sample of the traceback that
Traceback (innermost last):
File "/home/mailman/mailman/cron/mailpasswds", line 117, in ?
main()
File "/home/mailman/mailman/cron/mailpasswds", line 114, in main
MailAllPasswords(list, users)
File "/home/mailman/mailman/cron/mailpasswds", line 81, in MailAllPasswords
list.SendTextToUser(subject = subj,
File "/home/mailman/mailman/modules/mm_deliver.py", line 105, in SendTextToUser
mm_utils.SendTextToUser(subject, text, recipient, sender,
File "/home/mailman/mailman/modules/mm_utils.py", line 75, in SendTextToUser
DeliverToUser(msg, recipient, add_headers=add_headers)
File "/home/mailman/mailman/modules/mm_utils.py", line 89, in DeliverToUser
if os.fork():
os.error: (11, 'Resource temporarily unavailable')
|
| | |
|
| |
|
|
|
| |
Also, fixed the popen to contact transport to invoke python
instead of relying on the file to be executable.
|
| |
|
|
|
| |
instead of an exec, and to pass the message through stdin instead of
using temp files, to save on file I/O.
|
| | |
|
| |
|
|
| |
some variable names.
|
| |
|
|
|
| |
sendmail. This won't live long, I just have to rewrite the code to
use stdin / stdout so it doesn't do all that file IO.
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
| |
and not the one that now comes w/ Python due to some UI concerns. When
I have the time, I'll change it to use the standard one.
|
| | |
|
| | |
|
| |
|
|
| |
from $PATH
|
| |
|
|
|
|
|
|
|
|
|
| |
from $PATH
2. Do no direct sys.path munging in this file. Import the `paths'
module, which is created during the configure process, and which
performs all necessary path munging (and exports some useful
variables too).
3. Remove RCS crud
|
| | |
|
| |
|
|
|
|
|
| |
do so.
Added a copy of the GNU GPL.
Added information about mailman-users in README, and reworded some text in there (made the credits less verbose... perhaps they should move to a credits file?)
|
| |
|
|
|
|
|
| |
gordon_o'hara@vanguard.com - was losing the quote when passed on the
command line to sendmail. Fixed by doing a repr() of th recipient, so
eg gordon_o\'hara@vanguard.com was being passed - and accepted
properly by sendmail.
|
| |
|
|
| |
__version__ info.
|
| | |
|
| |
|
|
|
|
|
|
|
| |
senddigest with loss of the digest temp files. To aid debugging, we
add an argument indicating the file when an ioerror is encountered in
the process (but the IOError is still raised).
See my next checkin, of mm_digest, for what seems to be the fix of the
underlying problem.
|
| |
|
|
| |
checking it in... (Phew - before shipping a dist that lacked it...)
|
| |
|
|
| |
../src dir.
|
| |
|