| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- add support for decoding subjects in links to next and prev message
if the encodings of the two messages are the same
- change re.sub('"',...) with string.replace('"', ...)
- remove unused __processbody_CGIescape method
- vast simplification and speed up of format_article
(still more to do in methods it calls)
- change logic of loadbody_fromHTML to avoid unnecessary tests
- add slightly optimized mailbox class
|
| |
|
|
|
| |
replace open calls with explicit open_ex
add load method with code from __init__
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
appearing in index. pipermail generated several indexes by assuming
that date was unique. If two messages arrived with, e.g., the same
author and date, then the author index treated them as identical.
As a result, both messages were archived, but only the last one was
included in the index. Solution is to always include the msgid, which
is unique, in the index key.
Change database keys to combine elements using tuples instead of
string concatenation with \000 as separator.
Fix was accomplished by refactoring on pipermail.Database and its
subclasses. Push index-key generation into common concrete base class
Database; rename abstract base class to DatabaseInterface. Break up
addArticle method into several pieces.
TBD There is still more refactoring to do on Database class.
Because date key has changed, HyperDatabase method to return first and
last date changed to reflect format of date key.
Refactor pipermail.T.add_article into several pieces.
|
| |
|
|
| |
search engine indexing of index and message pages
|
| | |
|
| | |
|
| |
|
|
|
|
| |
keep _charsets dictionary in pickled rep of archive; this allows the
charset for an index page to be set based on the total count of
charsets in all messages
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Specifically,
VAR_PREFIX gets substituted here by configure. This is where all the
writable, variable directories in Mailman are installed, such as:
LIST_DATA_DIR = $VAR_PREFIX/lists
LOG_DIR = $VAR_PREFIX/logs
LOCK_DIR = $VAR_PREFIX/locks
DATA_DIR = $VAR_PREFIX/data
QUEUE_DIR = $VAR_PREFIX/qfiles
SPAM_DIR = $VAR_PREFIX/spam
PUBLIC_ARCHIVE_FILE_DIR = $VAR_PREFIX/archives/public
PRIVATE_ARCHIVE_FILE_DIR = $VAR_PREFIX/archives/private
Also, MAILMAN_UID and MAILMAN_GID get substituted here by configure
too.
|
| |
|
|
|
|
|
| |
Specifically,
HyperArchive.html_TOC_entry(): Don't calculate path to
archives/private here; it's already done for us in mm_cfg.
|
| |
|
|
|
|
|
|
|
|
|
| |
Message-ID: header in posted messages. We define a machine parsable
format containing the listname and the hostname, and if these match
our list's name and hostname, we do not munge the header.
This continues to allow crossposting to multiple gated mailing lists,
but should break loops involving the nntpd in the most common case.
Thanks to Jim Tittsler for pointing out the problem.
|
| |
|
|
|
|
| |
None otherwise pure-ascii archives fail to build.
Other de-Python-2.0-ifications.
|
| |
|
|
| |
Unit test returns same results in Python 1.5.2, 1.6, and 2.0.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
non-ascii charset.
HyperArch:
call write_index_entry from write_threadindex_entry
more style issues; refactoring of several methods
add ctype, charset, and decode attrs to Article; set based on
Content-Type header and an encoded-words in header
add extra blank lines to html templates so that they interact better
with iso-2022-jp text
handle msg <title> and <h1> tags separately to avoid non-ascii
characters in title
add encoding format to index and message headers
add explicit template for index entry
pipermail:
handle messages with timezone gracefully
catch EOFError when loading archive pickle
fix a few bugs that were hidden by bogus overrides in HyperArch
|
| | |
|
| |
|
|
|
|
|
|
| |
factor out "write article as html" as write_article method
fix a few bugs in previous checkin
HyperArch:
get rid of bogus add_article override; over_ride write_article instead
|
| | |
|
| |
|
|
|
|
|
|
| |
but it also had some methods that were overridden cut-n-paste
style.
pipermail: move Article date handling into separate method (should
probably do this for the rest of __init__)
|
| |
|
|
|
|
|
|
|
| |
fix some of the hardest-to-read style problems:
- no space around = in assignment
- obscure comparisons (e.g. use if seq: instead of if len(seq):)
- put body of if/else try/except on separate lines
refactoring: separate some large and/or obscure chunks of code into methods
|
| |
|
|
| |
"X-Ack: no" header if the `noack' flag is set on msgdata.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- GroupWise.py which detects (I believe) Novell's GroupWise Internet
Agent 5.5.3.1 and something called NTMail v4.30.0012
- SMTP32.py which detects something that claims in its X-Mailer:
header to be "<SMTP32 vXXXXXX> where the X's are various version
numbers. I've actually gotten a few bounces from three totally
different domains with this header. I have no idea what it actually
is.
- SimpleMatch.py which detects a wide variety of simple matches of the
form:
...a bunch of lines
--- some start delimiter ---
...a bunch of lines
some lines that look like they contain an email address
...maybe more bunches of lines
--- some end delimiter ---
There may actually be overlap between SimpleMatcher and other
matches, I don't know. There's definitely overlap between
SimpleMatcher and Catchall, the latter of which can probably go
away eventually.
|
| |
|
|
| |
mlist.archive to be set from mm_cfg.py.
|
| |
|
|
| |
mm_cfg.py. Adds DEFAULT_ARCHIVE.
|
| |
|
|
|
|
| |
(unquoted lines will mess up the archiver). Inspired by Owen Taylor's
SourceForge patch #101174, with a slight refinement to only quote
From_ lines that match _isrealfromline().
|
| |
|
|
|
|
|
|
|
| |
Fuhriman) SF patch #101290. List-Id: is kept for historical reasons
even though it is not part of the RFC. The following headers included
on each email: List-Help, List-Unsubscribe, List-Subscribe, List-Post
with appropriate http and/or mailto urls for the list. List-Archive
is also added if the mailing list supports archives. These headers
are not added for "_nolist" messages (e.g. password reminders).
|
| |
|
|
| |
final RFC 2369).
|
| |
|
|
| |
patch to set the default nntp_host in mm_cfg.py.
|
| |
|
|
| |
nntp_host in mm_cfg.py.
|
| |
|
|
|
|
|
|
|
| |
in Pipermail archives. Wrap this in a configuration variable
ARCHIVER_OBSCURES_EMAILADDRS because it breaks mailto: urls too.
ARCHIVER_OBSCURES_EMAILADDRS defaults to false (no-obscure).
Closes SF patch #101476.
|
| |
|
|
|
| |
in Pipermail archives. Wrap this in a configuration variable
ARCHIVER_OBSCURES_EMAILADDRS because it breaks mailto: urls too.
|
| |
|
|
| |
#101554.
|
| |
|
|
| |
list's archives.
|
| |
|
|
|
| |
this message should not be archived. Set "X-No-Archive: yes". Closes
SF bug #114193.
|
| |
|
|
|
|
|
|
| |
unique for each copy of the message posted to the news server. My
news server at least will silently ignore multiple postings with the
same Message-ID
Assuming this analysis is correct, this closes SF bug #114164.
|
| | |
|
| |
|
|
|
|
|
|
| |
created messages, explicitly set the 'noack' flag to true so that by
default, Replybot will ignore the message. This will get overridden
by the flag set in qrunner (which is the only place that externally
generated messages are injected into the system using
DeliverToUser()). Closes SF bug #114603.
|
| |
|
|
| |
in their msgdata. Closes bug #114603.
|
| | |
|
| |
|
|
|
| |
msg_header and msg_footer. Closes SF bug #114167, Jitterbug PR
#209.
|
| |
|
|
|
| |
digest_header and digest_footer. Closes SF bug #114167, Jitterbug PR
#209.
|
| |
|
|
| |
templates/headfoot.html. Closes SF bug #114167, Jitterbug PR #209.
|
| |
|
|
|
| |
key "_nolist" (set by mailpasswords). Close SF bug #114127, Jitterbug
PR#149.
|
| |
|
|
|
| |
module manually now, since it's subsequently been changed to use
Python 1.6 features (string methods). :/
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
cgi.FieldStorage constructor keep_blank_values=1. Without this, it
isn't possible to set a text field to the empty string. However, this
breaks admin password changing on the General page because the test
was for key presence. We now also check that the key's value is
non-empty (meaning empty admin passwords are no longer allowed).
Also, when changing the admin password, make sure that the new
password isn't empty, and string.strip() the new and confirm
password.
Finally, use AddErrorMessage() more consistently.
AddErrorMessage(): make the tag (i.e. "Warning: ") settable via
arguments.
|
| |
|
|
|
| |
pages, we can remove the extra links from the "no pending requests"
information.
|
| |
|
|
|
|
|
|
|
|
| |
authenticate(): Because admin.py now tells cgi.FieldStorage to
keep_blank_values (necessary to fix other bugs), it isn't enough to
test just for presence of the `adminpw' key. The key's value must
also be non-empty. Not a great solution, but the best we can do right
now.
Yes, this means that empty admin keys aren't allowed.
|
| |
|
|
| |
(saves an extra leading space in that case).
|
| |
|
|
|
| |
keep_blank_values to 1 in order to be able to, e.g. set the msg_footer
to the empty string!
|
| |
|
|
| |
recipients. Likewise for plain text digests.
|