-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Daryl C. W. O'Shea writes:
> Justin Mason wrote:
>   > Hi Daryl --
> > 
> > I've been thinking about this -- the ability for plugins to add
> > headers.
> > 
> > If a plugin can add new template-tags (as described in
> > Mail::SpamAssassin::Conf), and the plugin's config file then
> > sets them using add_header, that should work, right?
> > That would be the best way to do it I think.
> > 
> > - --j.
> 
> (briefer this time, $%#* Thunderbird crashed again -- I think I'll go 
> back to Pine)
> 
> Using add_header makes adding static headers easier (well fewer 
> keystrokes anyway) than editing the header hashes directly, but it 
> doesn't offer any protection from two plugins trying to add the same 
> header (say if I were to use a ClamAV and an F-Prot plugin, both might 
> want to use X-Spam-Virus).  There are one, maybe two problems with a 
> plugin using add_header:
> 
> 1) If two plugins add the same header, the last one wins (overwriting 
> the first one's header data).
> 
> 2) I haven't really looked into this since I haven't had a use for it 
> myself, but I don't immediately see a way to add _custom_ dynamic data 
> to a custom header (without editing the hashes directly).

Well, both are good arguments to keep that behaviour out of code, and in
the config file, such as:

in one file:
    loadplugin MyAvPlugin
    add_header all X-Virus-Status __MYAVPLUGINSTATUS__

in the other:
    loadplugin MyOtherAvPlugin
    add_header all X-Virus-Status __MYOTHERAVPLUGINSTATUS__

that way it's pretty clear to someone looking at the config file, that
those two are going to collide; and it's pretty clear how to fix it
(twiddle one of the add_header lines).

Basically, the idea is: the plugin can set whatever name for a
template-tag it likes -- and the config file then dictates what
the name of the header will be.

- --j.

> Provided I'm not missing something, two solutions may be:
> 
> 1) On a per message basis, a plugin requests a header name, and is 
> returned a header name (either the header it wanted, or that header with 
> an integer appended).  This will ensure that there aren't conflicts 
> between plugins, but it makes the header name unpredictable.
> 
> 2) A note could be made in the wiki and pod that sets a standard way of 
> naming a plugin's headers.  I suggest that the standard way would be: 
> X-Spam-PluginName:  or  X-Spam-PluginName-Blah:  (either would be 
> acceptable to use).
> 
> I think #2 would be the best solution (or #2 in addition to #1).  #2 
> would work with the current code, and we'd only have to threaten to make 
> fun of people, or force them to drink American beer, if they don't 
> adbide by it.
> 
> Actually, now that I think of it, a 'plugin_add_header' method for use 
> by plugins, that enforced #2, would probably be the best idea.  This 
> method would work like this:
> 
> plugin_add_header(name, spam|ham|all, data)
> 
> If a plugin were named 'CoolPlugin' you'd get the following headers, 
> using the following name values.
> 
> name = ''
> X-Spam-CoolPlugin:
> 
> name = 'Virus'
> X-Spam-CoolPlugin-Virus:
> 
> Anyway... maybe this isn't really an issue.  Plugins, at least public 
> ones, don't seem to be too popular as of yet, so conflicts aren't really 
> an issue right now.
> 
> Daryl
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.5 (GNU/Linux)
Comment: Exmh CVS

iD8DBQFB5HYIMJF5cimLx9ARAltzAKCtEm0mDRHe6X/X6f6AAocCOIkJqQCfcka2
cknlX4+83QuqQZJjvFo+r9E=
=Ry1+
-----END PGP SIGNATURE-----

Reply via email to