summaryrefslogtreecommitdiff
path: root/Mailman/Cgi
Commit message (Collapse)AuthorAgeFilesLines
...
* process_form(): When listing a user's other subscriptions, don't usebwarsaw2000-06-011-8/+9
| | | | | | | map_maillists() -- which has been removed anyway -- because the locking semantics interacted poorly. optionslinks() has been modified to take a listname instead of a MailList object, and it opens the list unlocked. Good ol' built-in map() is used now instead.
* PrintPostRequest(): For backwards compatibility, the info tuple can bebwarsaw2000-05-091-1/+5
| | | | length 5 or length 6.
* A few minor cosmetic changes to the admin UI.bwarsaw2000-05-091-5/+4
| | | | | | | | | - The page title now contains the category label - Slight changes to the H2 header at the top of the page - I didn't like the => <= indicators, so these are gone, and the currently selected page is rendnered in <em></em> tags.
* main(): Slightly different message for the log file when someone triesbwarsaw2000-04-141-1/+3
| | | | to access the admin interface for a non-existent list.
* FormatConfiguration(): Rather than put the cookies-must-be-enabledbwarsaw2000-04-091-2/+2
| | | | warning on every page, put it on the admin login page.
* Every admin page now contains a note stating that changes will nothmeland2000-04-091-16/+5
| | | | | | | | | | | take effect unless your browser supports cookies. ChangeOptions(): Is called from within a try...finally in main(), with the finally clause doing a (unconditional) mlist.Save(). Thus, there's no need for ChangeOptions() to _also_ do a Save() -- meaning the `dirty' housekeeping variable is superfluous, and therefore has been removed. All calls to mlist.SetUserOption() are now made with keyword argument "save_list=0".
* ChangeOptions(): When the gateway_to_mail option changes (in anybwarsaw2000-04-071-1/+8
| | | | | | direction), mlist.usenet_watermark is set to None. This tells gate_news to mass catchup the newsgroup, which avoids list flooding when gating from Usenet is turned back on.
* process_form(): MMListNotReady => MMListNotReadyErrorbwarsaw2000-04-041-4/+4
|
* process_form(): MMListNotReady => MMListErrorbwarsaw2000-04-041-1/+1
|
* Some meager consistency in handling errors when trying to open thebwarsaw2000-04-049-44/+55
| | | | | | | | | | | | | | mailing list. In all cases, catch the base exception class MMListError, and output HTML indicating the specified list doesn't exist. A more detail message gets printed to logs/error (the str() of the actual exception details). Also: admin.py - Don't catch MMBadConfigError around mlist.parse_matching_header_opt() since this method doesn't ever raise that exception. Actually, that exception isn't raised anywhere in Mailman, so it's been removed.
* process_form(): Catch MMBadUserError, which can get raised duringbwarsaw2000-03-231-0/+4
| | | | | password confirmation when the user doesn't have a password (and how can that happen?!)
* Update the copyright lines to include the years 1999 & 2000.bwarsaw2000-03-2111-28/+25
|
* FormatListinfoOverview(): "mailman" => "Mailman"bwarsaw2000-03-151-1/+1
|
* Some minor improvements to the admin UI, specifically:bwarsaw2000-03-031-31/+35
| | | | | | | | | | | | | | AddOptionsTableItem(): nodetails => detailsp (with bit flip on default value). FormatOptionHelp(): All options now have details. If a config attribute doesn't have an explicit details string, then the normal description is used as the details. This simplifies the logic a bit here and makes for a more consistent UI. Also, always include a link back to the category options page (on the quest for no dead ends!) GetItemGuiDescr(): Always include the "(Details)" link because now they /all/ have details.
* GetItemGuiValue(): slight reworking of the RadioButtonArray kludge atbwarsaw2000-02-261-4/+4
| | | | the top of this function.
* FormatConfiguration(): Kludge in the encoding typebwarsaw2000-02-251-11/+31
| | | | | | | | | | | | | | | | | `multipart/form-data' if the category is autoreply (so far the only admin category with file uploads). GetItemGuiValue(): added support for the FileUpload widget. This sets up both the TextArea and FileUpload widget, with some explanatory text in between. GetItemGuiDescr(): I've been persuaded. Don't pop up help text in a separate window by default. ChangeOptions(): Kludge in support for file upload widgets. If there's a config variable called 'something_upload' then it's value is used in preference to the 'something' config variable yanked off the CGI information.
* CATEGORIES: added `autoreply' category.bwarsaw2000-02-191-1/+3
|
* main(): Handle the case where the environment has no PATH_INFObwarsaw2000-01-211-2/+5
| | | | variable.
* FormatMembershipOptions(): Fixed keyword argument usage `obscured' =>bwarsaw1999-12-271-1/+1
| | | | `obscure'
* Added a warning to details windows, so users know that changing thebwarsaw1999-12-111-0/+2
| | | | value here doesn't do anything.
* process_form(): In regard to the previous patch, the default if thebwarsaw1999-12-021-1/+1
| | | | form has no digest key, is to use the list's default value.
* process_form(): it is possible that the form doesn't have a 'digest'bwarsaw1999-11-301-0/+2
| | | | | key, if the admin has mucked with the listinfo page. Default digest mode to 0 in that case.
* ChangeOptions(): Don't allow real_name to differ from _internal_namebwarsaw1999-11-291-0/+11
| | | | | by anything other than letter case. This is a QND (quick 'n' dirty) security patch when using an external archiver.
* call_script(): Be sure to explicitly flush stdout and stderr since thebwarsaw1999-11-261-0/+2
| | | | | os._exit() appears to skip this, which will cause premature script termination errors.
* AcknowlegePosts => AcknowledgePostsbwarsaw1999-11-242-4/+4
|
* PrintPostRequest(): Snarf the message text out of the file systembwarsaw1999-11-151-3/+20
| | | | | | | instead of getting handed it from the requests database. If we can't open the file for reading, the message was lost, so print an information message and tidy up the housekeeping (this last is a bit of a kludge though).
* This CGI script is no longer used.bwarsaw1999-11-111-91/+0
|
* small change to "no description" msg.bwarsaw1999-11-111-1/+1
|
* Some general cleanup of imports, globals (zapped 'em), and a few otherbwarsaw1999-11-111-83/+90
| | | | | | programming constructs. Could still use a lot more work. Make sure that lists are saved and unlocked when exiting.
* Some general cleanupbwarsaw1999-11-111-30/+35
|
* Some general cleanup of imports, globals (zapped 'em), and a few otherbwarsaw1999-11-111-50/+54
| | | | programming constructs. Could still use a lot more work.
* Some general cleanup of imports, globals (zapped 'em), and a few otherbwarsaw1999-11-111-97/+111
| | | | | | programming constructs. Could still use a lot more work. Make sure the list is always saved and unlocked when exiting.
* Some general cleanup of imports, globals (zapped 'em), and a few otherbwarsaw1999-11-111-108/+68
| | | | | | programming constructs. Could still use a lot more work. Background is finally #ffffff like all other pages! :)
* No need to import paths; that's all set up by the CGI driver.bwarsaw1999-11-111-1/+0
|
* A few misc cleanupsbwarsaw1999-11-111-4/+8
|
* Some general cleanup of imports, globals (zapped 'em), and a few otherbwarsaw1999-11-111-138/+168
| | | | | | | programming constructs. Could still use a lot more work. main(): Most importantly, in the finally clause make sure the mailing list is both Saved and Unlock()d.
* main(): Ensure that the list is saved in the finally clausebwarsaw1999-11-111-0/+7
| | | | | HandleRequests(): Catch MMAlreadyAMember errors and print something sensible.
* Massively restructured for integration with the new request APIbwarsaw1999-11-101-228/+156
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | (i.e. ListAdmin.py). Also several changes to the layout of request pages that I think make using them much nicer. - There's a preamble which actually explains what you're supposed to do on this page. - There's only two "Submit All Data" buttons. I found the multiple submit buttons just too darn confusing (hard to explain == hard to use). Guido concurred. - The tables have no cellpadding so they aren't as spread out. - Each posting hold tells you "N of #" so you know how many more are shown below. - Layout of posting holds has changed so you see immediately 1) who it's from; 2) why the message was held; 3) what the subject of the message is. Next you see the action buttons, followed by the explanation text box. Finally you see the full text of the message in a separate text box. This should make handling extremely long messages much easier because they don't clutter up the main page too much. Also, Guido had an excellent suggestion: Let the admin edit the full text of the message in this box! Probably wouldn't be to hard to do, actually.
* A few changes to the text displayed when approval is needed (includingbwarsaw1999-11-101-10/+11
| | | | one typo).
* Fixed a minor grammar error.hmeland1999-07-011-1/+1
|
* SecurityManager:hmeland1999-06-133-155/+128
| | | | | | | | | | | | | | | | | | * New method WebAuthenticate(). Takes up to three keyword arguments: user-address, password and cookie-suffix. If password is supplied (and authenticates OK), issue a cookie -- otherwise try to do authentication based on cookies. * MakeCookie(): Changed to actually return a finished Cookie object. Takes one (non-optional) argument; the created cookie's name. Fixed bug in setting of cookie's path. * CheckCookie(): Now takes cookie's name as single argument, and can raise various MMAuthenticationErrors if that cookie doesn't authenticate OK. admin.py: Do explicit re-authentication when changing list admin password. admin.py, admindb.py and private.py: Removed isAuthenticated() function -- use MailList.WebAuthenticate() instead. This removed the need to import Cookie, so now we don't.
* Changes to fix the CGI cookie security flaw reported by John Morton.hmeland1999-06-113-14/+11
| | | | | | | | | SecurityManager: New functions MakeCookie() and CheckCookie(). These functions work with cookies containing cookie creation and expire time, the client's IP number, and a checksum hash of these values as well as a secret (the lists (encrypted) admin password). admin.py, admindb.py and private.py: isAuthenticated now uses these new cookie functions.
* main(): MMBadPassword => MMBadPasswordErrorbwarsaw1999-06-101-1/+1
|
* Changes to speed up mass subscription via the web:hmeland1999-06-041-27/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | MailList.py: Changed MailList.SetUserOption() to take a `save_list' keyword argument (defaulting to true). When false, SetUserOption won't do self.Save() after changing the option. New function MailList.ApprovedAddMembers() (note plural) that takes a list of prospective new list members (and possibly a list of corresponding passwords), and does _all_ the necessary list changes before saving the list configuration. Empty passwords are substituted with randomly generated ones. Returns a dict with {address: exception_tuple} entries -- exception_tuple is either None or a two-element tuple containing the first exception type and value raised when trying to add address. The exception traceback object isn't included in the returned dict, because a) I don't think it is very useful for the relevant exceptions, and b) using it wrongly could cause some fuzz with Python's garbage collector -- i.e. we would leak memory. Changed MailList.ApprovedAddMember() to be a mere wrapper, calling the new ApprovedAddMembers() function and reraising any exception in the returned dict. Also made the logic of the code doing subject prefixing a bit clearer, and changed MailList.aside_new() so that list's config.db files are saved with umask 007 (as they contain all list members' passwords in clear text). Utils.py: New function MakeRandomPassword(length=4), used by MailList.ApprovedAddMembers() whenever empty passwords are found. The default random password length should possibly be made site configurable. Also, fixed an error in the _badchars regular expression -- the final "," was probably meant to be inside the character set. Cgi/admin.py: Changed ChangeOptions() to use the new MailList.ApprovedAddMembers() function.
* FormatListinfoOverview(): The CGI/1.1 spec defines the SERVER_NAMEhmeland1999-05-221-1/+2
| | | | | envvar, but not HTTP_HOST. Thus, if HTTP_HOST is unset, try getting SERVER_NAME.
* eradicate "maillist" as a nounbwarsaw1999-05-051-1/+1
|
* FormatListinfoOverview(): Factor out logo creation by usingbwarsaw1999-05-021-4/+1
| | | | MailmanLogo() function.
* FormatListinfoOverview(): Include the mailman logo in the overviewbwarsaw1999-05-021-1/+5
| | | | page.
* Don't use getListName() from this module to get teh name of the listbwarsaw1999-05-021-6/+6
| | | | | from PATH_INFO, instead use Utils.GetPathPieces() like every other CGI script.
* Filled in the TextArea for likely administrivia with the message iklm1999-05-011-5/+10
| | | | | | | | | always (repeatedly!) type in. This means that admins are going to have to erase the message if they're rejecting for a different reason - but the vast proportion of messages i reject are for this reason, while for spammers i often discard, and who cares if they get a confusing message, anyway? Refined a few error messages ("intenting to visit"?).