summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Two tiny refinements to the subscriptions list, and then dinner:klm1998-12-171-3/+6
| | | | | - Add some (barely) explanatory text, and - sort the list of names.
* Use OrderedList instead of UnorderedList for the list ofklm1998-12-171-1/+1
| | | | | subscriptions, so people can, eg, see the number go down as they unsubscribe, etc.
* Add section (in what was formerly whitespace, adjacent to theklm1998-12-171-5/+21
| | | | | | | | | | unsubscribe section) from which a subscriber can visit a list of all their subscriptions. (We're going to have to remember to tell all beta testers to put the new list templates in place over the copies in the list dirs - it's unfortunate they don't default to a central one when the lists don't have their own custom versions - and must be fixed...)
* Password box and button to handle new list-my-subscriptions option.klm1998-12-171-8/+14
|
* We needed *something* by which people can determine the lists theyklm1998-12-171-4/+40
| | | | | | | | | | | | | | subscribe to. I'm adding a button on the user options page that they can click, as long as they provide their password, to get to a page of links to the options pages for all their subscriptions on the current system. It's not very pretty (options.py and handle_options.py are even more packed with miscellaneous stuff, and the page they go to is extremely unrefined), but i think it's not bad for an hour hack, and is needed. (The password protection is necessary since the user options page is visible to anyone, and not having a password would give away the list of private subscriptions.)
* New standard replacement, mm-host.klm1998-12-171-0/+1
|
* Date: Wed, 16 Dec 1998 16:15:28 -0800klm1998-12-171-2/+2
| | | | | | | | | | | | | | | | From: Greg Stein <gstein@lyra.org> To: mailman-developers@python.org Subject: [Mailman-Developers] patch to subscribeack.txt I received a report that the welcome message is slightly misleading. I changed a couple lines in the middle to read: with the word "help" in the subject or body (don't add the quotes), and you will get back a message with instructions. Cheers, -g
* Added back add_members to Makefile.inbwarsaw1998-12-172-7/+7
| | | | add_members was still calling itself convert_list in the docstring.
* Make common.o depend on the generated Makefile in this directory.bwarsaw1998-12-161-1/+1
| | | | | | That way, if the admin re-runs configure (or config.status), possibly changing the CGI or Mail GID's, the wrappers will get automatically recompiled.
* Several changes. WARNING: This is untested since I don't currentlybwarsaw1998-12-101-118/+149
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | have a newsfeed I can post to. Someone please check this (at least it doesn't have syntax errors :-) - Reformatted to standard 4-space indents, and untabified. - Moved common imports (which have already probably been done in the process) to the top of the file. Imports of Message and nntplib are left in place. - QuickEscape is moderately bogus, but at least do it legally (don't compare exception based on string value, base it on object equivalence). - In PollNewsGroup(), we know we want count, first, and last (as returned from con.group()) to be integers. Convert them right after retrieval with int() instead of when used using slower/riskier eval(). - When opening the pipe, craft the command to execute /path/to/python /other/path/to/scripts/post listname nonews using the configure calculated paths in the first two arguments. This is because scripts/post isn't installed with execute bit set. - In SendMailToNewsGroup() we only add a Sender: header if one doesn't already exist. Also, watch for existing Newsgroups: header; if one exists, check to see if our linked_group is already present. Only if not do we append our group. If Newsgroups: doesn't exist at all, add it.
* Added some XXX comments for later:bwarsaw1998-12-101-0/+2
| | | | | | | | 1) OutgoingMessage.__delitem__() when name is missing probably ought to raise an exception instead of returning None. 2) There probably ought to be at least also an OutgoingMessage.__setitem__() too.
* As part of the install process, run compileall over the installedbwarsaw1998-12-101-0/+2
| | | | | | Mailman source tree. This will pre-byte-compile all the .py files. However the scripts which do not end in .py are not compiled; that should be fine for now.
* Fixed small problem with local variables sectionbwarsaw1998-12-101-0/+63
|
* Cleaned up some option description typos, and i think i clarified theklm1998-12-101-14/+16
| | | | | awkward 'posters' option description so its interaction with member_posting_only is easier to understand.
* Moved the troubleshooting stuff to PROBLEMSbwarsaw1998-12-101-43/+0
|
* move the import of Mailman.Utils.reraise into the debugging-open()bwarsaw1998-12-101-13/+13
| | | | | | definition -- the only place it's used. Also, comment out the whole def and __builtin__ hack. This debugging stuff probably shouldn't go into the release (although its use should be documented).
* convert_list and populate_new_list have been removedbwarsaw1998-12-101-3/+2
|
* .SetOptionCommand(): For some reason the options descriptions keys nowklm1998-12-101-17/+21
| | | | | | | includes digest, so the check for the special handling of the digest option was no longer working. I've reinstated that by explicitly checking for that special case first, so now the mailcommand version of digest setting is working.
* .ConfirmUserPassword(): Someone is setting (inklm1998-12-101-4/+8
| | | | | | | | | | | Digester.SetUserDigest(), and possibly other places) the members dict values to 1 now, as well as 0, breaking the user password recognition. This is fucked up. Anyway, i'm dealing with that by not checking the for a 0 from the get, but rather assuming a string returned means that the returned value should be used instead of the index. The complications with the different values should be fixed, as well, but i no longer know what the right thing is, because i don't know the purpose of the use of 1 instead of 0, if any. Sigh.
* .ProcessPasswordCmd(): Niggle - use the derived 'sender' value theklm1998-12-091-5/+4
| | | | routine had mail.GetSender()...
* .ProcessPasswordCmd(): Was not working because .ChangeUserPassword()klm1998-12-091-4/+10
| | | | | | | | | was getting called with the wrong arguments - confirmation of the old password needed to be done in a separate call to ConfirmUserPassword(). (Incidentally, i am hoping that i repaired a problem with the mechanism that pushes the cvs source - this will test it.)
* Implemented some suggestions about spacing out and clarifying the textklm1998-12-081-6/+12
| | | | a bit.
* .Save(): Deal with failure to marshal the new config file, trying toklm1998-12-081-22/+37
| | | | | | | | | | | resurrect the old one and then reraising the error. (Just before he left for the Usenix conference, John encountered a partition filling with a large config.db, and the old config.db not being resurrected.) I created a little utility function to move a file aside and optionally create a new one - this (aside_new()) may belong in Utils, if it's useful elsewhere. We're all in minimal-time mode, so that'll have to wait...
* open_ex(): Cosmetic change - lined up docstring (not sure why it wasklm1998-12-081-3/+4
| | | | bizarrely raggedy).
* .ProcessConfirmCmd(): For invalid confirmation numbers, indicate thatklm1998-12-071-2/+11
| | | | confirmations expire after the set number of days.
* main(): Was not accepting password from command line because len(args)klm1998-12-031-2/+6
| | | | | | | | | was being rejected if >= 2, when it should be rejected only when > 2. Added confirmation step for assurance the user's entering what they think (and slightly changed phrasing of prompt for clarity). All was suggested by guido.
* Provide more clues about the sendmail process groupid.klm1998-12-031-2/+4
|
* Unpack of the wrong-size argument list yields a ValueError, not anklm1998-12-011-1/+1
| | | | | IndexError. (I left the IndexError on the exception list in case there's some other purpose to it...)
* removed erroneous and leftover 'import Pending'cotton1998-11-251-1/+0
| | | | scott
* consolidated convertlist and populate_new_list into add_members.cotton1998-11-252-101/+3
| | | | | | | | add_members is just like convert_list was, except that 1) the "Send big changes" option defaults to no. 2) the -c and -w options are specified in the short version of the usage. scott
* Fixed another place where new accounts are saved without the password.klm1998-11-241-0/+2
| | | | | | | | | | | I added a list.Save() after each section (non-digest-members and members) that had any additions. I should note that the some partial saving *was* being done, just before the password entry was added - and probably during the addition of _every_ member. This would seem to defeat the speedup benefits, while also introducing a bug of partial saving. This should be rectified one way or the other!
* Fixed bogus error message: had to few parameters to satisfy formatklm1998-11-241-3/+3
| | | | | string (now using dict substitution, instead), plus the URL was missing quotes, plus the URL was missing 'mailto:'.
* .ProcessConfirmation(): Due to the elimination of the .Save()klm1998-11-241-4/+1
| | | | | | | in ApprovedAddMember, new confirmed subscriptions were being only partially saved - the password entry was being left out. Which is a problem. (In the five hours this has been happening on my site, i wonder how many broken accounts there are? Not good.)
* .ConfirmUserPassword(): Was broken by the case-sensitive subscriptionklm1998-11-241-7/+16
| | | | | | | | | | | name optimizations - provisions to fix it are gross. It would be nice to have an abstraction for getting the user account name under which their password is registered (which i would call the normalized account name). I suspect that FindUser() could serve for that, but i'm not certain what the optimizations considerations are. I am afraid that it is significantly more confusing, overall, to figure out which subscription name to use (user-specified case-preserved, or lower case) in what situation.
* Made a new system limit called SMTP_MAX_RCPTS that limits the numbercotton1998-11-232-10/+38
| | | | | | | | | | | | | 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
* .DeliverToOwner(): Provisional fix for when derived sender is bogus.klm1998-11-231-0/+5
| | | | | | | | | | | | | | | | | | | | Two cases, each addressed, and with reservations about the handling of both: - Sender is null, after trying both GetEnvelopeSender and GetSender. Address by using self.GetAdminEmail(). I'm not sure the right thing to do, here - this is as close as i could come. - Sender is not null, but lacks any domain spec - which can happen when the sender is on the local host. An unqualified sender seems to prevent delivery of the mail, or of bounce messages, anywhere, so it's a very bad thing. Again, i'm arbitrarily imposing @mailman-host. Both of these things needed to be patched over so the mail would be delivered (hmm, "Neither rain nor snow nor bugs that smite...-). More rational approaches (or at least, good rationales for these) would be quite welcome...
* This is a simple change that limits the extremely expensivecotton1998-11-232-5/+19
| | | | | | | | | | | calculation of html user lists to the roster cgi program. HTMLFormatter: added a .GetAllReplacements() method that does the same thing as GetStandardRepplacements() but also calculates all the html for users lists. Removed the calculation of all the html for the user lists from GetStandardReplacements(). Cgi/roster.py replaced call of GetStandardReplacements() with GetAllReplacements(). scott
* convert_list now runs Utils.ValidEmail() on all addresses, and printscotton1998-11-231-1/+3
| | | | | | | out a warning if the test fails. this way comments and most accidental stuff that gets into a file to import should not be added. scott
* Made the call to FindMatchingAddresses pass the dict bounce_infocotton1998-11-231-1/+1
| | | | | | instead of the list bounce_info.keys() as the second arg to fit the new FindMatchingAddresses signature. scott
* .format_article(): Archiving would occasionally fail when an emptyklm1998-11-221-11/+2
| | | | | | | | | | line occurred at the beginning of an article - because the space-preserving format style would try to prepend "<pre>" to the None object that's used as a place holder. Instead of doing string concatenation, i'm doing the simpler [].insert(0...) and [].append() to the list of lines. (It'd probably also be a good idea to fix the code to not use the None place holders, but it's hard to tell what depends on what there.)
* Here's two drastic policy-level changes to the archive mechanism.klm1998-11-221-9/+10
| | | | | | | | | | | | | | | | | | | | | | | First of all, i'm setting the default message archive style to preserve horizontal whitespace, use <pre>, instead of putting a <br> at the beginning of every line. More deeply, i'm inhibiting all completely-uppercase variables from being included in the pickled settings for the list. As with the VERBOSE problem i addressed in my last checkin, changes to one of the class default settings at any time *after* the archive object state was resurrected would be reinstated thence forward - overriding the defaults, and any other settings. This is not a good interface for setting options - and i'm not really offering an alternative, other than making the defaults come back the next time the list is reinstated, rather than preserving the changes. We need to resolve this - i suppose with an interface that distinguishes permanent from temporary settings. In general i've changed the defaults so they preserve more of the structure of the postings (and included very brief comments presenting what i could glean of the settings from the code - this code here does not seem to have been written to be understood).
* .__getstate__(): VERBOSE was not being excluded, so the verbose stateklm1998-11-211-1/+2
| | | | | | | was being resurrected from the initial setting for the maillist - for sites that upgraded using the arch script, set to 1. Which meant for those sites that the error log would get a new entry for every item being archived...
* main(): Only the child proces should do an os._exit() - and we put itklm1998-11-211-2/+4
| | | | | | | | 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).
* Wrapped a bunch of long lines.klm1998-11-211-8/+12
|
* .sortarchives(): Reversed TOC so that it puts the most recent archivesklm1998-11-211-45/+81
| | | | | | | at the top - i'm assuming that the attention decreases the older an archive is, more or less. Wrapped lots of long lines.
* These changes represent the changes that make mailman's addressingcotton1998-11-216-20/+69
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | work like unix mail: username portions of addresses are case-preserved for delivery only. All other address comparisons are lowercase. up'd data version in Defaults to 13 ** MailList.py: added an __AddMember method that takes an address and whether or not it is a digest address as args and populates the member dictionary like this: if string.lower(addr) == LCDomain(addr): member_dict[addr] = 0 else: member_dictp[string.lower(addr)] == LCDomain(addr) added .GetDeliveryMembers() and .GetDigestDeliveryMembers() methods for use by posting and digest delivery mechanisms. changed a nested def portion in Post to use an explicit loop. **Digester.py: uses .GetDigestDeliveryMembers instead of .GetDigestMembers(). **Utils.py: address comparisons are lc. **versions.py: populate the member dicts according to the above formula. **Cgi/admin.py: fixed a bug introduced from the first change to using member dictionaries: all members were showing up as digest members on the admin membership page. changed a dict.get to dict.has_key to fix this. NOTE: this code is tested only insofar as I posted and poked around on the cgi's a bit, and let lists do the versions code. These changes should be tested more, but I *have* to go now and wanted to check them in before someone made it difficult to do so by changing stuff tomarrow, cause i'm gone all day tomarrow. scott
* GetPossibleMatchingAddrs(): Don't bomb with an exception if theklm1998-11-211-3/+4
| | | | | | address lacks a domain. (I'm currently returning the list with just the bare account name, scott please consider whether or not this is sensible, i'm going on partial knowledge of your changes.)
* optimized FormatUsers() a bit.cotton1998-11-211-24/+23
|
* added a list.Save() after a successful subscription because the corecotton1998-11-211-2/+1
| | | | | MailList object no longer takes care of this. scott
* I should have broken this up into 2 checkins because it implements onecotton1998-11-219-4/+69
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | fix and one addition. Sorry, i realized that too late. This change adds another list conifg variable "admin_notify_mchanges", which is a boolean 0 or 1 and specifies whether or not the list admin gets notifications of subscriptions and unsubscriptions. The functions MailList.DeleteMember and MailList.ApprovedAddMember trigger the delivery if it is turned on for the list or passed in as an optional argument. This way, it is the duty of programs/code that do mass subscriptions/unsubscriptions where this notification may not be appropriate to specify that in the call to .DeleteMember or .ApprovedAddMember. There are 2 new templates, adminsubscribeack.txt and adminunsubscribeack.txt which are used in sending these notifications. Defaults.py.in has a variable "DEFAULT_ADMIN_NOTIFY_MCHANGES" which is set to 0 so that old lists will act the same by default, and the data version is up'ed to 12. versions.py sets the variable if it's not already there for a list. The config info for the admin cgi program for this new variable is set right after the variable for immediate notifications. The second change is a fix where ApprovedAddMember was calling a "self.Save()", which made mass subscribe situiations really far too slow. I removed the .Save() from there and added it to the more outer level code in the following places: bin/convert_list Mailman/ListAdmin.py Mailman/MailCommandHandler.py Mailman/Cgi/admin.py Note that since AddMember can trigger a call to ApprovedAddMember, all the places where AddMember is called needed a .Save() added as well. I need to add a call to .Save() for Mailman/Cgi/subscribe.py as well and will do that in a moment. scott