summaryrefslogtreecommitdiff
path: root/Mailman/Utils.py (follow)
Commit message (Collapse)AuthorAgeFilesLines
* maketext(): Default dict argument to None, which means empty list.bwarsaw2000-09-171-1/+3
|
* MakeRandomPassword(): In response to several complaints, and SF bugbwarsaw2000-09-121-8/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | #114136, Jitterbug PR#159, this changes the password generation scheme to use more mnemonically friendly syllables. Passwords are composed of only lower case letters, are lengthened to 6 characters, and should still be meaningfully hard to crack. Examples: doangu siabdo poesza unorbi ziurag okasho ahhuoz idcaih efkoex zubasu nukiis igoffa veehef ogkuoc adebab ovtoci veixep amodbo
* If we're running under Python 2.0, we can grab much fasterbwarsaw2000-08-221-18/+25
| | | | implementations of hexlify and unhexlify from the binascii module.
* Massive cleanup to fix relative/absolute script url calculation inbwarsaw2000-08-011-12/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | response to SF Bug #110753. Specifically, GetNestingLevel(): removed ScriptURL(): New utility function to calculate relative and absolute urls. The basic approach is this: 1. figure out where we are by using REQUEST_URI or SCRIPTNAME+PATH_INFO if that isn't defined in our environment. 2. figure out what the Mailman base url is by taking the `path' component of a urlparse() of the list's web_page_url configvar or DEFAULT_URL if that isn't provided in the arguments. 3. calculate what the relative path is from where we are to baseurl; express this as a string of ../'s 4. tack on the relative url to where we want to go, i.e. the target Elaborations: Optional `absolute' if set always calculates the absolute url as web_page_url/DEFAULT_URL + target. absolute should only be set when generating urls for emails. mm_cfg.CGIEXT is always tacked onto the end, meaning target is supposed to be just the script name and nothing else (anything else should be concatenated onto the return value of this function).
* write(): Oops, de-Python-2.0-ification.bwarsaw2000-07-241-1/+1
|
* write(): Function that acts like print, but let's you specify thebwarsaw2000-07-241-0/+20
| | | | | | output file, whether a trailing newline should be printed, and the separator string. (Sidenote: this is partly to play with some suggestions currently being floated on the python-dev mailing list).
* unhexlify(): Thomas and Dan team up to make this function more thanbwarsaw2000-07-201-2/+2
| | | | twice faster.
* hexlify(), unhexlify(): Make Python 1.5.2 compliant; slightbwarsaw2000-07-201-4/+7
| | | | performance improvements.
* hexlify(), unhexlify(): New helper functions for cookie value encodingbwarsaw2000-07-191-0/+20
| | | | and decoding.
* open_ex(): Transfor OSError into IOError correctly (this is abwarsaw2000-07-051-2/+3
| | | | disgusting hack).
* reap(): Added optional argument `func' which, if supplied, is abwarsaw2000-06-231-1/+3
| | | | | | function to call with no arguments, every time through the while loop. This lets callers, e.g. keep a lock fresh while waiting for all the children to finish.
* reap(): Wait on a dictionary of child pids. Moved here from gate_newsbwarsaw2000-06-201-0/+13
| | | | so other scripts can use it.
* map_maillists(): Removed. The semantics and interplay with listbwarsaw2000-06-011-32/+0
| | | | | | locking were just too messed up to use. And good 'ol built-in map() is fine anyway. It's only used in one place currently -- handle_opts.py -- and that is soon to be changed.
* list_exists(): A list is deemed to exist if either its config.db orbwarsaw2000-05-301-2/+7
| | | | | config.db.last file exists (see new fallback mechanism in MailList.Load()).
* list_names(): Slightly more efficient implementation.bwarsaw2000-04-091-5/+4
| | | | map_maillists(): Slight more "standard" use of import.
* list_exists(): New function, returns true iff list `listname' exists.hmeland2000-04-091-10/+14
| | | | | | list_names(): Use list_exists(). GetNestingLevel(): Use string.count() for counting. Changed to explicit "from Mailman import" where appropriate.
* open_ex(): Since Python 1.5.2 is now required, we can get rid of thebwarsaw2000-04-031-19/+1
| | | | | | Utils.reraise() hack. reraise(): removed.
* Update the copyright lines to include the years 1999 & 2000.bwarsaw2000-03-211-1/+1
|
* Use _nesting_level as the name of the module-global.bwarsaw2000-01-171-11/+11
|
* ObscureEmail(), UnobscureEmail(): change munging from __at__ to --at--bwarsaw1999-11-261-2/+2
| | | | | because for some reason IE5 seems to corrupt the former under at least some situations.
* SendTextToUser(), DeliverToUser(), Reap(), TrySMTPDelivery(),bwarsaw1999-11-241-213/+0
| | | | | SnarfMessage(): Removed all these functions, since they are no longer used.
* SafeDict.__init__(): default dictionary argument is optional.bwarsaw1999-11-111-2/+3
|
* SendTextToUser(): Use the new Message interface. Note that this stuffbwarsaw1999-11-101-9/+6
| | | | needs to be integrated with the message pipeline architecture.
* A bunch of old changes -- can't remember the origin, sorry.bwarsaw1999-10-301-7/+54
| | | | | | | | | | DeliverToUser(): keep a global list of child processes we create so that they can be reaped later. Reap(): wait on the subchildren an remove from the _children global all that are finished. This should eliminate zombie processes. some debugging turds are still left in here, commented out
* SafeDict.__init__(): UserDict optional initial dict arg is a Pythonbwarsaw1999-09-031-1/+4
| | | | 1.5.2-ism. Here's a more portable implementation.
* SafeDict(): New classbwarsaw1999-09-021-2/+23
| | | | | | | maketext(): Use SafeDict class to make sure that key interpolation in the template can't raise an exception, even if someone's edited the template and included missing keys. Patch inspired by Sean Reifschneider <jafo@tummy.com>
* miscellaneous formattingbwarsaw1999-09-021-4/+33
|
* Removed unused import of fcntlbwarsaw1999-08-251-1/+0
|
* map_maillists(): formattingbwarsaw1999-08-231-5/+8
|
* OutgoingMessage.SetDate(): removebwarsaw1999-07-211-2/+0
| | | | | | Utils.DeliverToUser(): Don't add a Date: header even if one is missing in the message. The MTA will always insert an RFC822 compliant header (and we weren't compliant anyway).
* DeliverToUser(): I believe the forking done in here is no longerhmeland1999-07-011-20/+34
| | | | | | needed. For now, however (trying to move towards 1.0), I've merely reduced the amount of work done in the child, and wrapped it in a try: clause for catching fork() failures.
* TrySMTPDelivery(): Be smarter about handling the various exceptionshmeland1999-06-131-3/+45
| | | | smtplib.sendmail() can raise.
* Changes to speed up mass subscription via the web:hmeland1999-06-041-1/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* TrySMTPDelivery(): Force importation of smtplib out ofbwarsaw1999-04-271-11/+8
| | | | | Mailman.pythonlib so we're sure we're getting the latest and greatest version of this module.
* _badchars(): Disallow addresses with commas in thembwarsaw1999-03-261-1/+1
|
* ParseAddrs(): string.strip() all returned addresses.bwarsaw1999-03-251-3/+3
|
* 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.
* Utils.GetRequestURI(): New function, returns the full virtual path thehmeland1999-03-021-0/+19
| | | | | | | | | | calling CGI script was invoked with. Uses (non-standard, but convenient) environment variable REQUEST_URI when available, otherwise SCRIPT_NAME and PATH_INFO (which are part of the CGI/1.1 spec) if available, or simply returns optional argument `fallback' (which defaults to None). Cgi/admin.py, Cgi/admindb.py: Use it when generating admin authentication page.
* TrySMTPDelivery(): Slightly different format to the log format onbwarsaw1999-01-141-1/+5
| | | | | failure: the value is only printed if it's not false (e.g. None), and the deferred status is printed as well.
* ValidateEmail(): Raise a MMBadEmailError on empty str.bwarsaw1999-01-091-0/+2
|
* ValidateEmail(): Renamed from ValidEmail().bwarsaw1999-01-091-13/+13
| | | | | | | | | | | | | | | | Cleaned up its interface so that it always raises an exception if an address problem is uncovered (it used to both raise exceptions and return 0 or 1). It now has no useful return value. Added a re to barf on other unacceptable characters in an email address, currently: [ ] ( ) < > | ; Should there be others? The test that were there are retained, but the domain_parts test was cleaned up (there was a redundant test in there). Note that now unqualified addresses (e.g. those that don't contain an `@' are now DISALLOWED). This goes partially toward Greg Stein's suggestion.
* chunkify(): Don't put mm_cfg.DEFAULT_ADMIN_MEMBER_CHUNKSIZE as abwarsaw1999-01-061-1/+3
| | | | | | default arg value because then this module can't be imported in older versions of Mailman. Use None in the arglist, and set to the proper value when None is detected.
* reraise(): can now take an optional val argument, which is only usedbwarsaw1999-01-051-3/+7
| | | | | | when exc is not None. open_ex(): Use reraise().
* IsAdministrivia(): Made more stringent about 'set' command, since weklm1999-01-051-2/+5
| | | | | | | | | | | | | | | | | | | got a false positive for a message that had the last line of a paragraph (hence, short enough to look like administrivia) begin with 'set'. - Require all 3 arguments (for some reason it was requiring 2 or 3, while MailCommandHandler seems to clearly require 3 - perhaps we want to catch malformed administrivia, i'm just assuming not) - Require second arg of set command matches to be 'on' or 'off'. I guess administrivia is a delicate balance between weeding out non-administrivia and catching mis-directed admin messages, even ones that were badly formed. I'm inclined to opt for greater stingency, at the risk of not catching malformed and misdirected admin messages. Tough luck, the misguided poster will have to change their password. (I bet i get stung by this one day, myself...)
* ParseAddrs(): New function which attempts to parse out the emailbwarsaw1998-12-301-0/+42
| | | | | | | | | | addresses from lines such as User J. Person <person@allusers.com> person@allusers.com (User J. Person) It also handles bare email addresses. While this is rather simplistic regexp matching, I think it will catch most situations.
* reraise(): exc argument is optional, to more closely resemble Pythonbwarsaw1998-12-291-2/+5
| | | | 1.5.1's bare raise statement
* DeliverToUser(): Small stylistic tweak to change the sense of the testbwarsaw1998-12-291-19/+19
| | | | and put the child code in the block of the `if'.
* Fixed two instances where the old module named mm_err was beingbwarsaw1998-12-291-3/+3
| | | | | | | | | | referenced; these should be Errors. This was in response to an attempt to subscribe a list to itself by sending an subscribe email command and faking the From: field. Now we don't get a crash, but I'm not sure the current behavior is correct. The address (properly) doesn't get subscribed, but a message stating this *is* sent to the list!
* TrySMTPDelivery(): On advice from Dragon, we do a manual ehlo/helo,bwarsaw1998-12-231-1/+9
| | | | | then check to see if the remote SMTP supports DSN. If so, we'll add the NOTIFY=failure to the receipt options.