On Sat, 2014-07-26 at 13:54 +0100, [email protected] wrote:
> running SA 3.4.0 binary as supplied by Jam software on windows 7 from
> hMailserver using SRVANY.EXE Service wrapper aaround spamd.exe
> 
> 
> All is running fine but I would like to be able to multiply the
> accumulated/total _SCORE_  by 10 before it is returned to hMailserver
> so that I don't lose any decimal places and am always working with
> integer values in hMailserver.
> 
> I have customised report in my local.cf and currently output
> 
> add_header spam Score _SCORE_
> 
> I would like to be able to multiply _SCORE_ by 10

This could be implemented by a custom plugin that provides a Template
Tag with the score multiplied.

It is not possible to simply multiply the score. This would require code
changes to the core.

> [...] and also the return value which is sent back via spamd multiplied
> by 10

You're confusing spamd with something else here. spamd is a daemon,
there is no return value as such.

To be precise, there are two different methods:

* The CHECK (or SYMBOLS, or REPORT) protocol command, which does not
  return the changed message, but a brief response including the score.

* The PROCESS protocol command, which returns the altered message. There
  is no score returned here, other than what has been add_header'd.

Since the CHECK command does return the score as value, this might match
what you asked for. However, unlike the PROCESS command, it does not
return the altered message. Thus there are no X-Spam headers added,
which you obviously use.

So you are using the PROCESS command (default) and the returned "value"
of spamd is the full, altered message with SA headers added.


> is this possible and if so where/how would I apply the multiplication.

See above, this requires a custom plugin or code changes.

There are other possibilities, though. The most obvious one is, to teach
your glue (hMailserver?) to handle float values.

Another option is to use a helper script to process the Score header.
The desired value of score*10 is the header's value with the single dot
dropped. (The score always includes exactly one decimal place.)


-- 
char *t="\10pse\0r\0dtu\0.@ghno\x4e\xc8\x79\xf4\xab\x51\x8a\x10\xf4\xf4\xc4";
main(){ char h,m=h=*t++,*x=t+2*h,c,i,l=*x,s=0; for (i=0;i<l;i++){ i%8? c<<=1:
(c=*++x); c&128 && (s+=h); if (!(h>>=1)||!t[s+h]){ putchar(t[s]);h=m;s=0; }}}

Reply via email to