<feed xmlns='http://www.w3.org/2005/Atom'>
<title>mailman.git/Mailman/MTA, branch plugin</title>
<subtitle>The GNU Mailing List manager.
</subtitle>
<id>https://git.neuromancer.sk/mailman.git/atom?h=plugin</id>
<link rel='self' href='https://git.neuromancer.sk/mailman.git/atom?h=plugin'/>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/'/>
<updated>2008-02-27T06:26:18Z</updated>
<entry>
<title>Bite the bullet: rename the Mailman package to mailman.</title>
<updated>2008-02-27T06:26:18Z</updated>
<author>
<name>Barry Warsaw</name>
</author>
<published>2008-02-27T06:26:18Z</published>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/commit/?id=a1c73f6c305c7f74987d99855ba59d8fa823c253'/>
<id>urn:sha1:a1c73f6c305c7f74987d99855ba59d8fa823c253</id>
<content type='text'>
</content>
</entry>
<entry>
<title>PEP 292 style, $-strings are used by the translation service everywhere now.</title>
<updated>2008-02-19T02:24:46Z</updated>
<author>
<name>Barry Warsaw</name>
</author>
<published>2008-02-19T02:24:46Z</published>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/commit/?id=2bd332002f241ab7ca77f935a73692f6cbf41fe5'/>
<id>urn:sha1:2bd332002f241ab7ca77f935a73692f6cbf41fe5</id>
<content type='text'>
No more %-strings.  Kill off all __i18n_templates__ hacks.
</content>
</entry>
<entry>
<title>Tweak copyright years.</title>
<updated>2008-02-08T04:01:48Z</updated>
<author>
<name>Barry Warsaw</name>
</author>
<published>2008-02-08T04:01:48Z</published>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/commit/?id=0478757a09b4173937d75103fa96444b6b085300'/>
<id>urn:sha1:0478757a09b4173937d75103fa96444b6b085300</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Initial pylint/pyflakes cleanup</title>
<updated>2007-11-17T22:33:14Z</updated>
<author>
<name>Barry Warsaw</name>
</author>
<published>2007-11-17T22:33:14Z</published>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/commit/?id=02f3861eae46de1b6e580e257d25aa9a4c73a687'/>
<id>urn:sha1:02f3861eae46de1b6e580e257d25aa9a4c73a687</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Much progress, though not perfect, on migrating to SQLAlchemy 0.4 and Elixir</title>
<updated>2007-10-31T21:38:51Z</updated>
<author>
<name>Barry Warsaw</name>
</author>
<published>2007-10-31T21:38:51Z</published>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/commit/?id=f321d85d91a370294e771dbaa22493008d78dfdd'/>
<id>urn:sha1:f321d85d91a370294e771dbaa22493008d78dfdd</id>
<content type='text'>
0.4.  Lots of things changes, which broke lots of our code.  There are still a
couple of failures in the test suite that I don't understand.  It seems that
for pending.txt and requests.txt, sometimes strings come back from the
database as 8-bit strings and other times as unicodes.  It's impossible to
make these tests work both separately and together.

users.txt is also failing intermittently.  Lots of different behavior between
running the full test suite all together and running individual tests.  Sigh.

Note also that actually, Elixir 0.4.0 doesn't work for us.  There's a bug in
that version that prevented zope.interfaces and Elixir working together.  Get
the latest 0.4.0 from source to fix this.

Other changes include:

- Remove Mailman/lockfile.py.  While I haven't totally eliminated locking, I
  have released the lockfile as a separate Python package called locknix,
  which Mailman 3.0 now depends on.

- Renamed Mailman/interfaces/messagestore.py and added an IMessage interface.

- bin/testall raises turns on SQLALCHEMY_ECHO when the verbosity is above 3
  (that's three -v's because the default verbosity is 1).

- add_domain() in config files now allows url_host to be optional.  If not
  given, it defaults to email_host.

- Added a non-public interface IDatabase._reset() used by the test suite to
  zap the database between doctests.  Added an implementation in the model
  which just runs through all rows in all entities, deleting them.

- [I]Pending renamed to [I]Pended

- Don't allow Pendings.add() to infloop.

- In the model's User impelementations, we don't need to append or remove the
  address when linking and unlinking.  By setting the address.user attribute,
  SQLAlchemy appears to do the right thing, though I'm not 100% sure of that
  (see the above mentioned failures).
</content>
</entry>
<entry>
<title>General cleanups some of which is even tested &lt;wink&gt;.  Mailman.LockFile module</title>
<updated>2007-10-11T03:22:03Z</updated>
<author>
<name>Barry Warsaw</name>
</author>
<published>2007-10-11T03:22:03Z</published>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/commit/?id=1ad73a52bb9d82ef3af1e34ad9ef66ac2eda2909'/>
<id>urn:sha1:1ad73a52bb9d82ef3af1e34ad9ef66ac2eda2909</id>
<content type='text'>
is moved to Mailman.lockfile.

Remove a few more MailList methods that aren't used any more, e.g. the lock
related stuff, the Save() and CheckValues() methods, as well as
ChangeMemberName().

Add a missing import to lifecycle.py.

We no longer need withlist to unlock the mailing list.  Also, expose
config.db.flush() in the namespace of withlist directly, under 'flush'.
</content>
</entry>
<entry>
<title>Reorganize the qrunner infrastructure.  First, the package has been renamed</title>
<updated>2007-09-29T18:55:25Z</updated>
<author>
<name>Barry Warsaw</name>
</author>
<published>2007-09-29T18:55:25Z</published>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/commit/?id=3e9ed398b6a05c69daca14c8226ca7f57c164c21'/>
<id>urn:sha1:3e9ed398b6a05c69daca14c8226ca7f57c164c21</id>
<content type='text'>
from Mailman.Queue to Mailman.queue (note the case change to be more PEP 8
compliant).

The Switchboard and Runner classes have been moved into the package
__init__.py and the previous class modules have been removed.

The switchboard cache is removed; I don't think it was ultimately buying us
much.  Now, just import the Switchboard class and instantiate it directly.

Added an IRunner interface.

Renamed the ArchRunner to ArchiveRunner.

bin/qrunner and bin/mailmanctl are updated accordingly.  For the former, it no
long accepts -r=All to run all qrunners.  You can still use the short name
(e.g. --runner=incoming) to run the built-in queue runners, but this design
will eventually allow for plugin qrunners by allowing them to be run
specifying the full package path to the class.  It also now accepts a leading
dot to indicate a qrunner class relative to the Mailman.queue package.
</content>
</entry>
<entry>
<title>The start of a setuptools conversion.  All the Makefile.in and autoconf</title>
<updated>2007-07-13T04:19:10Z</updated>
<author>
<name>Barry Warsaw</name>
</author>
<published>2007-07-13T04:19:10Z</published>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/commit/?id=288ae405b09baa443eb1b39422c48c315fbb2e5a'/>
<id>urn:sha1:288ae405b09baa443eb1b39422c48c315fbb2e5a</id>
<content type='text'>
artifacts are removed, as is the C files which we will no longer need.
</content>
</entry>
<entry>
<title>Update copyright years.</title>
<updated>2007-01-19T04:38:06Z</updated>
<author>
<name>bwarsaw</name>
</author>
<published>2007-01-19T04:38:06Z</published>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/commit/?id=25f7d0630bfc73b3fd5c41a584d8eb3a8554f45d'/>
<id>urn:sha1:25f7d0630bfc73b3fd5c41a584d8eb3a8554f45d</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Clean up file permissions and umask settings.  Now we set the umask to 007</title>
<updated>2007-01-05T06:47:39Z</updated>
<author>
<name>bwarsaw</name>
</author>
<published>2007-01-05T06:47:39Z</published>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/commit/?id=9af2533eb89e48683c049c5007737f7e94bbcdc1'/>
<id>urn:sha1:9af2533eb89e48683c049c5007737f7e94bbcdc1</id>
<content type='text'>
during early initialization so that we're guaranteed to get the right value
regardless of the shell umask used to invoke the command line script.  While
we're at it, we can remove almost all individual umask settings previously in
the code, and make file permissions consistently -rw-rw---- (IOW, files are no
longer other readable).

The only subsystem that wasn't changed was the archiver, because it uses its
own umask settings to ensure that private archives have the proper
permissions.  Eventually we'll mess with this, but if it ain't broken...

Note that check_perms complains about directory permissions, but I think
check_perms can be fixed (or perhaps, even removed?!).  If we decide to use
LMTPRunner and HTTPRunner exclusively then no outside process will be touching
our files potentially with the incorrect permissions, umask, owner, or group.
If we control all of our own touch points then I think we can lock out
'other'.

Another open question is whether Utils.set_global_password() can have its
umask setting removed.  It locks permissions down so even the group can't
write to the site password file, but the default umask of 007 might be good
enough even for this file.

Utils.makedirs() now takes an optional mode argument, which defaults to 02775
for backward compatibility.  First, the default mode can probably be changed
to 02770 (see above).  Second, all code that was tweaking the umask in order
to do a platform compatible os.mkdir() has now been refactored to use
Utils.makedirs().

Another tricky thing was getting SQLite via SQLAlchemy to create its
data/mailman.db file with the proper permissions.  From the comment in
dbcontext.py:

        # XXX By design of SQLite, database file creation does not honor
        # umask.  See their ticket #1193:
        # http://www.sqlite.org/cvstrac/tktview?tn=1193,31

More details in that file, but the work around is to essentially 'touch' the
database file if 'sqlite' is the scheme of the SQLAlchemy URL.  This little
pre-touch sets the right umask honoring permission and won't hurt if the file
already exists.  SQLite will happily keep the existing permissions, and in
fact that ticket referenced above recommends doing things this way.

In the Mailman.database.initialize(), create a global lock that prevents more
than one process from entering this init function at the same time.  It's
probably not strictly necessary given that I believe all the operations in
dbcontext.connect() are multi-processing safe, but it also doesn't seem to
hurt and prevents race conditions regardless of the database's own
safeguards (or lack thereof).

Make sure nightly_gzip.py calls initialize().
</content>
</entry>
</feed>
