[Raw Msg Headers][Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: mailbox path formatting feature
On Thu, Sep 09, 1999 at 01:34:46PM +0400, Eugene Crosser wrote:
> Matti and guys,
>
> what do you think about the following feature. If you specify a
> special new variable in zmailer.conf, it overrides MAILBOX variable
> and allows to specify the format of the path to the user's mailbox,
> that may include userid, homedir, PJW hash, domain etc. Like this:
How about, if "MAILBOX" variable has %-char in it, it
will be interpreted in this manner.
Because the PJW hash is not very good (non-uniform),
I would add CRC32 hash there too.
( I will separate the crc32() into separate routine, watch cvs.. )
Also, some people are asking for qmail's "maildir",
this could do that too, could it not ?
For quite a while I have pondered about having some
~/.mailbox
file at which people could specify local processing rules,
e.g. if they want the incoming email stored somehow
specially, or ran thru e.g. procmail at reception, or ...
A snafu is that we already have procmail, and repeating
it all within 'mailbox' won't be very productive.
( But certain usefullness could be achieved from telling
that "although generally email is coming thru procmail,
I want unfiltered feed into maildir!" without having to
use some piped program thru .forward file ... )
... which reminds me, "pine" reads configuration files:
pine.conf
~/.pinerc
pine.conf.fixed
That is, first gives global defaults, second is what user
can tune, and third enforces (sets/clears) some global values.
> # int fmtmbox(char *buf, int size, const char *format,
> # const char *address, const struct passwd *pwd);
> #
> # format specifiers:
> #
> # %% - '%' alone
> # %u - userid
> # %U - long user name (userid if not supported)
> # %d - first element of domain name
> # %D - full domain name
> # %x - one-character derivate of PJW hash of userid
> # %X - two-character derivate of PJW hash of userid
Hmm... No. %x/%x/ should be equivalent to %X
Then we have "%X" free for other uses. (e.g. CRC32)
Algorithm something like:
/* That has is hardly ever zero, thus... */
int hash = 0;
for (;*fmt;++fmt) {
switch (*fmt) {
'%X':
if (!hash) hash = crc32(username);
'%x':
if (!hash) hash = pjwhash32(username);
c = 'A' + hash % 26;
hash /= 26;
break;
}
*out++ = c;
}
You get the idea :)
(Only one hash can be calculated per path.)
> # %h - userid's home directory
> # %d - least number guaranteening unique filename (for MH style boxes)
> # %D - the same padded by leading zeroes to fixed length
> # %(any other character) - substitute with "__" (two underscores)
> #
> # Examples:
> # "/var/mail/%u" - standard mail directory
> # "/var/mail/%X/%u - hashed directory
> # "%h/Mail/INBOX" - mailbox in user's home
> # "/var/virtual/%D/mail/%X/%u" - hashed spool with virtual domain
>
> I think that I could work out such a thing...
>
> Eugene
--
/Matti Aarnio <mea@nic.funet.fi>