summaryrefslogtreecommitdiff
path: root/Mailman (follow)
Commit message (Collapse)AuthorAgeFilesLines
* USE_ENVELOPE_SENDER: Set the default to 0 now and for the finalbwarsaw1999-04-051-1/+1
| | | | release.
* isAuthenticated(): Catch MMNotAMemberError and return 0bwarsaw1999-04-041-1/+2
|
* LogMsg(): small efficiency hackbwarsaw1999-04-021-1/+1
|
* DeliverToList(): Also get rid of duplicate errors-to headersbwarsaw1999-04-021-1/+2
|
* PollNewsGroup(): Synthesize unixfrom header ("From ") forbwarsaw1999-04-021-0/+7
| | | | interoperability with Pipermail.
* DeliverToList(): Strip off any duplicate Sender: headers, leaving justbwarsaw1999-03-311-0/+2
| | | | the one pointing to the list-admin.
* HandlePostRequest(): Need to "strquote" (e.g. replace % with %%) inbwarsaw1999-03-311-6/+12
| | | | string read from Web text box.
* Load(): Include the exception details when marshal.load() failsbwarsaw1999-03-311-2/+3
|
* ProcessWhoCmd(): Be sure not to truncate the list of members!bwarsaw1999-03-311-2/+2
|
* Bumping version number to 1.0b11bwarsaw1999-03-301-1/+1
|
* Post(): when not including sender in recipients, remove address in abwarsaw1999-03-301-12/+2
| | | | case-preserving way.
* Make sure list_name is not an empty string or None (a.k.a. "false")bwarsaw1999-03-291-2/+5
|
* Load(): Verify that the unmarshaled config information is of typebwarsaw1999-03-291-3/+6
| | | | DictType.
* UpdateOldVars(): Fixed a lurking buglet. If the mlist.members andbwarsaw1999-03-291-18/+41
| | | | | | | | | mlist.digest_members dictionaries have already been converted to lowercase-only keys, any key with a case-preserved value would have been lost by being overwritten with 0. :-( UpdateOldUsers(): Implement the mlist.passwords constraints fix. The keys of this dictionary are now guaranteed to be lowercased.
* Bump VERSION to 1.0b10+bwarsaw1999-03-291-2/+2
| | | | | Bump DATA_FILE_VERSION to 14 to trigger mlist.passwords dictionary fix in versions.py
* Sweeping changes to hopefully and finally (for 1.0 at least) make sanebwarsaw1999-03-297-46/+96
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | address case matching. These changes require the DATA_FILE_VERSION to be bumped, which should auto-update your config.db files. I sure hope this works correctly! Details of changes: MailList.GetUserSubscribedAddress(): New method. If the address is a member, this returns the case-preserved address the user is subscribed with. If not a member, None is returned. MailList.GetUserCanonicalAddress(): New method. If the address is a member, this returns the lowercased address the user is subscribed with. If not a member, None is returned. MailList.FindUser(): Wrote down, in a big comment, the constraints for the dictionaries self.members, self.digest_members, self.passwords. This wasn't always followed, but now it should be. FindUser() is now also guaranteed to return the lowercased version of the subscribed email address. This wasn't always the case. FindUser() also provides a shortcut for the common case. ApprovedAddMember(): Guarantee that passwords stored in self.passwords are keyed off the lowercased address. Deliverer.MailUserPassword(): Find the user's password using the lowercased version of their address. However, be sure to use their case-preserved address for the recipient of the password email. Digester.SetUserDigest(): Fixed a fairly old bug where a user switching from regular to digest membership (or vice versa) would get their case-preserved address blown away. I don't think there's any way to recover this information, but at least now we properly save it. SecurityManager.ConfirmUserPassword(): Simplified address matching stuff, since we now guarantee that FindUser() will return a lowercased address, and that the passwords dictionary has lowercased keys. FindUser() will return None if the address isn't found, and it also has a built-in shortcut so that the more expensive FindMatchingAddresses() isn't called in the common case. I eliminated the case-insensitive password comparision that Ken rightly questioned in his comment. admin.py: In the list of members, display a member's case-preserved address instead of their lowercased address. Also, obscure the URL in the hyperlink (probably not terribly necessary). handle_opts.py: When the password can't be found (when emailing it), put the address we tried to find in the result message. Makes for better debugging. options.py: Use a better mechanism for finding if the member has a case-preserved address different from their lowercased address.
* Patch by Per Cederqvist, who writes:guido1999-03-291-6/+15
| | | | | | | | | | | | | | | | """ - It needlessly used the makefile() method for each response that is read from the SMTP server. - If the remote SMTP server closes the connection unexpectedly the code raised an IndexError. It now raises an SMTPServerDisconnected exception instead. - The code now checks that all lines in a multiline response actually contains an error code. """ The Dragon approves.
* RosterOption(): get rid of repeated word ("address address")bwarsaw1999-03-261-1/+3
|
* _badchars(): Disallow addresses with commas in thembwarsaw1999-03-261-1/+1
|
* Bumping release to 1.0b10bwarsaw1999-03-261-1/+1
|
* ParseAddrs(): string.strip() all returned addresses.bwarsaw1999-03-251-3/+3
|
* DeliverToOwner(): check the value of mm_cfg.USE_ENVELOPE_SENDER tobwarsaw1999-03-251-1/+3
| | | | decide whether to use msg.GetEnvelopeSender() or not.
* Lots of changes!bwarsaw1999-03-241-145/+208
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (option_descs, option_info): Provide much more detailed descriptions of the options. Also changed `norcv' to `notmetoo' although the former is still acceptable as an alias. (options): New global to preserve the order that we want to display the options in response messages. These options are in the same order as shown on the membership management admin page. The user option page still needs to be changed to support this order. MailCommandHandler.__init__(): All private variables are fixed to start with double underscore (e.g. __dispatch). Added an __errors ivar to count the number of AddError() calls made. A different error message format is now used, which should be much more concise, and more informative information is provided at the head of error messages. AddToResponse(), AddError(): Both methods now take a final argument `trunc' which says what column to truncate the text to. With trunc=0 no truncation (this is useful for when we use Utils.wrap() to wrap the text). AddError() also now takes a prefix argument, increments self.__error, and essentially calls AddToResponse(). ParseMailCommands(): Some stylistic changes. The line being processed is not placed in the response buffer unless we know it is a valid command. If it's an invalid command, we print the error message more concisely. When `end' is found, include in the response all the following lines that are ignored. If the number of errors exceeds 5, then stop processing the message immediately (don't keep processing more lines). If an unexpected error occurs with a valid command (one that is dispatched), we catch this and include the traceback in the response message. We also send the traceback to the list administrator -- I wonder if this should be the mailman-owner??? We also log the exception. In the error preamble, include human contact information. Several of the Process*Cmd()'s have been modified to work with this new framework, and to provide much more meaningful response messages.
* main(): Remove all bare excepts. These now percolate up to the driverbwarsaw1999-03-241-21/+0
| | | | script which does a much better job of reporting the error.
* FormatMembershipOptions(): To reflect the change that Ken recentlybwarsaw1999-03-241-4/+5
| | | | | | made, we now change the `norcv' option to be `notmetoo'. This is still backwards, but changing the sense of this option is to much work right now. `norcv' is accepted as an alias for `notmetoo'.
* MailUserPassword(): Use `mailing list' instead of `maillist'.bwarsaw1999-03-241-1/+1
|
* FormatMembershipOptions(): Minor rewording of the `hide' legend entrybwarsaw1999-03-241-2/+2
|
* FormatMembershipOptions(): Two small changes. First, hyperlink thebwarsaw1999-03-241-13/+22
| | | | | | | | user's address, which jumps you to their member info page. Second, reorder the items in the table so that digest comes just before plain. Didn't make sense to separate these two digest related items.
* Add ^ to the list of _badchars in email addressesbwarsaw1999-03-231-1/+1
|
* GetRandomSeed(): Return only combinations of upper and lower casebwarsaw1999-03-201-3/+9
| | | | letters.
* Don't know how this snuck by, at least a few versions: "bottom at theklm1999-03-161-9/+12
| | | | | | | | | | | | bottom" => "button at the bottom". Sounds somehow obscene the other way, but nonetheless we'd like it to make sense. While i was here i did a few *more* trivial things... Using "not metoo" instead of "norcv" for member's status column headings (and legend), to disambiguate from "nomail"! (I think i recall "metoo" from things like /bin/mail, in any case, it's a lot more descriptive of the intention.) While i'm here i centered all the checkbuttons, which i think looks a lot tidier.
* The password stuff was removed from all but the general page, so iklm1999-03-161-3/+6
| | | | | changed the message so it only says it's at the bottom of the page when it really is.
* Setting VERSION to 1.0b9+ because enough fixes have been put in sincebwarsaw1999-03-161-1/+1
| | | | 1.0b9
* Including the total number of members and the display chunk size in theklm1999-03-151-1/+9
| | | | members table [and testing the emailing of this checkin message, as well].
* Put the listinfo URL in the footer, so it can be clicked *somewhere*klm1999-03-151-3/+4
| | | | | | on the page. (It should be available on the top, even more, but i don't see how to do so without cluttering at the moment, and my connection is so low band that i can't scope it out right now.)
* Provide a tad more space for the administrator to explain why aklm1999-03-101-1/+1
| | | | | | | | posting is being rejected. (This enables them to explain the right place to send administrivia, for example.) ((Barry - i know these are niggly little things - it's all i have time for. I just want to mention that i'm really greatful that you've been taking care of as much of the substantial stuff as you've been doing!))
* Do *not* remove immediately for all 550 class errors. These willklm1999-03-101-1/+1
| | | | | | | | | occur for transient things, like procmail errors or "can't create output". In general i'm dubious about the immediate-removal class, and would lean towards treating all bounces the same, with action on a cumulative incidence, so any transient problems get time to be fixed...
* (Defaults.py.in): Added USE_ENVELOPE_SENDER variable, which is set tobwarsaw1999-03-092-4/+22
| | | | | | | | | | | | | 1 by default. This instructs the MailList.Post() method to use first the envelope sender (i.e. Unix "From " line) and then the From: header. However, this breaks member_only_posting on some systems (for reasons unknown). Set this variable to 0 in mm_cfg.py to use only the From: header, although this can open the list up to spam. (MailList.py): in Post(), check USE_ENVELOPE_SENDER to see if GetEnvelopeSender() should be called. (FAQ): Add a question refering to USE_ENVELOPE_SENDER.
* Before trying to ObscureEmail the case-preserved username, be surebwarsaw1999-03-091-2/+4
| | | | it's a string.
* FormatConfiguration(): Only put the FormatPasswordStuff() on thebwarsaw1999-03-091-1/+2
| | | | `general' category page. The others are just too noisy.
* SetUserDigest(): When turning digests off, stick the entry forbwarsaw1999-03-091-5/+13
| | | | | | | | | | | digest_members onto one_last_digest attribute. This attribute is checked in SendDigest(). SendDigest(): Add the members in one_last_digest attribute to the digest recipients. This means that folks who turn digests off at least don't lose messages. This is a kludge but it was much harder to send the digest to the user when they undigest, so this is a workable compromise.
* If the digests are turned off, the results message indicates that thebwarsaw1999-03-091-2/+4
| | | | user may get one last digest.
* handle printing of any case-preserved address differently (put thebwarsaw1999-03-091-2/+7
| | | | whole message as <MM_Case-Preserved-User> replacement).
* minor code formattingbwarsaw1999-03-091-2/+2
|
* split a long linebwarsaw1999-03-091-1/+2
|
* MailUserPassword(): members value can be other non-string typesbwarsaw1999-03-091-1/+1
|
* Gross and digusting kludge to show the case preserved address for thebwarsaw1999-03-081-65/+68
| | | | | user (if different than their lowercased address). This could be done better if lists didn't have their own copies of options.html :-(
* MailUserPassword(): If the user's "case-preserved" address is the samebwarsaw1999-03-081-3/+3
| | | | | as their lowercased address, then the key in self.members is 0. Watch out for this situation.
* SendMailToNewsGroup(): The test for whether to short-circuit (and thusbwarsaw1999-03-061-7/+10
| | | | | not post the message to Usenet) is now whether the msg object has an attribute `fromusenet' and this attribute is true.
* MailUserPassword(): Find the member's password by checking for thebwarsaw1999-03-051-2/+3
| | | | | | | | | lowercased match. I think the idiom is casepreservedaddr = mlist.members.get(self.FindUser(caseanyaddr)) This seems to fix the problem of getting your password mailed back to you when you've subscribed with an uppercase username part.