On 2007-12-09 at 12:40 +0000, Phil White wrote:
> I'm trying to store the DECIMAL IP address of a connecting host in
> $acl_c*. Do do this, I'm using the following:
> 
> set acl_c5    = ${eval10: \
>                         (${extract {1}{.}{$sender_host_address}}<<24) \
>                       + (${extract {2}{.}{$sender_host_address}}<<16) \
>                       + (${extract {3}{.}{$sender_host_address}}<<8) \
>                       +  ${extract {4}{.}{$sender_host_address}} \
>                    }
> 
> Which, sadly, doesn't work quite as expected:
>  dotquad addr = 131.111.8.192
>  decimal addr = -2089875264
> which means approximately 50% of my mail is not being flagged correctly.

32-bit arithmetic, signed.  I suspect you knew that ...

> Is there another way I can achieve the desired effect?

Use an embedded Perl interpreter, returning a string?  I don't see that
you'll be using the result directly within Exim, so a string should be
fine, right?  Math::BigInt, perhaps via Net::IP.

A bit heavyweight though.  What do you need this value in decimal for?

If you really can't modify the external thingy which has an interface
requirement of a pure number (not even via a sh shim script?) and the
Perl interpreter is too heavyweight for you, then AFAIK you're stuck
writing the converter in C and using ${dlfunc}.

-Phil

-- 
## List details at http://lists.exim.org/mailman/listinfo/exim-users 
## Exim details at http://www.exim.org/
## Please use the Wiki with this list - http://wiki.exim.org/

Reply via email to