This storage manager attempts to implement the 'traditional' INN storage layout, i.e a message crossposted to alt.fan.james-brister and rec.pets.wombats will be written as a file in /alt/fan/james-brister/nnnnn and a symlink pointing to the above file in /rec/pets/wombats/mmmmmm where nnnnn and mmmmmm are the article numbers that article has in each of those two newsgroups. (Actually in the traditional spool form the link could be either a symlink or a regular link). The storage token data for a tradspool stored article is a 16-byte block. The storage token contains two ints; the first one is a number telling what the name of the "primary" newsgroup is for this article, the second one telling what article number the article has in that newsgroup. The mapping between newsgroup name and number is given by a database in the file /ts.ng.db ; this file is a straight ASCII file listing newsgroup names and numbers, and will be automatically generated by innd if one does not exist already. This database is read in automatically by any program that uses this storage manager module, and is updated by innd whenever a new newsgroup is encountered. Other programs (like innfeed) check the mod time of that database every 5 minutes to see if they need to recheck it for any new newsgroups that might have been added. Should the database become corrupted, simply shutting down news, removing the database, and doing a makehistory will recreate the database. It should, in principle, be possible to write a perl script to recreate just the database from just the spool files and history files without doing a full makehistory. Currently the storage manager code works, although not perhaps as fast as it could. The expiration code is somewhat unwieldy; since the storage token does not have enough space to hold all the newsgroups an article is posted to, when expiration is done SMCancel() has to open the article to find out what other newsgroups the article is posted to. Eurggh. Suggestions for a better scheme are welcome. Other problems of note: the storage manager code has no way to get to the 'DoLinks' (-L) flag setting of innd, so currently you can't use the "crosspost" program with tradspool. I guess the proper thing to do would be to make DoLinks a config option in storage.conf instead, but I haven't done that yet.