SA Bugzilla – Bug 8150
have_getaddrinfo_in_core fails
Last modified: 2023-11-25 12:01:17 UTC
The variable have_getaddrinfo_in_core fails to get set. I'm running FreeBSD stable 13. Move the line with "require Socket" up from about line 81 to line 56 and it works. I'm using IPv6 only so I get an error message related to "protocol 28" from the code as distributed that is produced on line 167. This worked in spamassassin 4.0.0_2 with FreeBSD 13.2-STABLE pulled on 20230517 but not in 4.0.0_3 with FreeBSD pulled on 20230722. diff -uw /usr/local/bin/spamd~ /usr/local/bin/spamd --- /usr/local/bin/spamd~ 2023-07-26 09:22:03.000000000 -0400 +++ /usr/local/bin/spamd 2023-07-28 08:39:33.286767000 -0400 @@ -52,6 +52,7 @@ # don't force requirement on IO::Socket::IP or IO::Socket::INET6 BEGIN { + require Socket; $have_getaddrinfo_in_core = eval { # The Socket module (1.94) bundled with Perl 5.14.* provides # new affordances for IPv6, including implementations of the @@ -78,7 +79,6 @@ &NI_NUMERICHOST; &NI_NUMERICSERV; &NI_NAMEREQD; 1; }; - require Socket; Socket->import(qw(:DEFAULT IPPROTO_TCP)); &SOCK_STREAM; &IPPROTO_TCP; &SOMAXCONN; # enable inlining
Created attachment 5892 [details] a proper patch to spamd.raw
Thanks for the patch! I'm a bit mystified by the version interaction here, but the patch is perfectly reasonable and it certainly makes sense to require a module before testing whether it provides a feature. Committed in r1911328
This bugfix is responsible for all kind of warnings when running spamd -V Constant subroutine main::EAI_FAIL redefined at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Prototype mismatch: sub main::EAI_FAIL () vs none at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Constant subroutine main::EAI_NODATA redefined at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Prototype mismatch: sub main::EAI_NODATA () vs none at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Constant subroutine main::NI_NUMERICHOST redefined at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Prototype mismatch: sub main::NI_NUMERICHOST () vs none at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Constant subroutine main::AI_CANONNAME redefined at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Prototype mismatch: sub main::AI_CANONNAME () vs none at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Constant subroutine main::NI_NAMEREQD redefined at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Prototype mismatch: sub main::NI_NAMEREQD () vs none at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Constant subroutine main::NI_NUMERICSERV redefined at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Prototype mismatch: sub main::NI_NUMERICSERV () vs none at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Prototype mismatch: sub main::EAI_SYSTEM () vs none at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Constant subroutine main::AI_PASSIVE redefined at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Prototype mismatch: sub main::AI_PASSIVE () vs none at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Prototype mismatch: sub main::EAI_BADHINTS () vs none at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Constant subroutine main::EAI_BADFLAGS redefined at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Prototype mismatch: sub main::EAI_BADFLAGS () vs none at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Constant subroutine main::EAI_SOCKTYPE redefined at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Prototype mismatch: sub main::EAI_SOCKTYPE () vs none at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Constant subroutine main::EAI_SERVICE redefined at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Prototype mismatch: sub main::EAI_SERVICE () vs none at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Prototype mismatch: sub main::EAI_ADDRFAMILY () vs none at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Prototype mismatch: sub main::AI_ALL () vs none at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Prototype mismatch: sub main::AI_V4MAPPED () vs none at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Constant subroutine main::EAI_NONAME redefined at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Prototype mismatch: sub main::EAI_NONAME () vs none at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Constant subroutine main::NI_NOFQDN redefined at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Prototype mismatch: sub main::NI_NOFQDN () vs none at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Prototype mismatch: sub main::EAI_PROTOCOL () vs none at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Prototype mismatch: sub main::AI_NUMERICSERV () vs none at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Prototype mismatch: sub main::AI_ADDRCONFIG () vs none at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Constant subroutine main::NI_DGRAM redefined at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Prototype mismatch: sub main::NI_DGRAM () vs none at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Constant subroutine main::AI_NUMERICHOST redefined at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Prototype mismatch: sub main::AI_NUMERICHOST () vs none at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Constant subroutine main::EAI_FAMILY redefined at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Prototype mismatch: sub main::EAI_FAMILY () vs none at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Constant subroutine main::EAI_AGAIN redefined at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 Prototype mismatch: sub main::EAI_AGAIN () vs none at .\runtime\spamd line 90, <FILE> line 3. eval {...} called at .\runtime\spamd line 86 main::BEGIN() called at .\runtime\spamd line 261 eval {...} called at .\runtime\spamd line 261 SpamAssassin Server version 4.0.0-r1913803 running on Perl 5.30.3 with SSL support (IO::Socket::SSL 2.068) with zlib support (Compress::Zlib 2.093)
I cannot reproduce those warnings with a spamd freshly built from trunk on Perl 5.34.1. I suspect from a cursory look at the nature of those messages that this is an idiosyncratic set of warnings likely due to inconsistent or duplicative versions of the Socket and/or Socket6 and/or IO::Socket::{IP,INET6} installed. This is most likely to happen in an older system that has been upgraded in place over a long time. I don't believe that any of these are actually harmful errors. Also, the line numbers cited in those error messages don't seem to me to match the current version of spamd. Is it possible that you have a modified version? Can you rebuild from a clean trunk checkout to confirm this?
C:\Strawberry\perl\site\bin>spamd -V Prototype mismatch: sub main::AI_ADDRCONFIG () vs none at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Constant subroutine main::NI_NAMEREQD redefined at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Prototype mismatch: sub main::NI_NAMEREQD () vs none at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Prototype mismatch: sub main::AI_V4MAPPED () vs none at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Constant subroutine main::EAI_BADFLAGS redefined at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Prototype mismatch: sub main::EAI_BADFLAGS () vs none at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Prototype mismatch: sub main::AI_NUMERICSERV () vs none at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Prototype mismatch: sub main::EAI_SYSTEM () vs none at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Constant subroutine main::NI_NUMERICSERV redefined at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Prototype mismatch: sub main::NI_NUMERICSERV () vs none at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Constant subroutine main::EAI_NODATA redefined at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Prototype mismatch: sub main::EAI_NODATA () vs none at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Constant subroutine main::NI_NOFQDN redefined at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Prototype mismatch: sub main::NI_NOFQDN () vs none at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Constant subroutine main::AI_PASSIVE redefined at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Prototype mismatch: sub main::AI_PASSIVE () vs none at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Constant subroutine main::EAI_FAMILY redefined at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Prototype mismatch: sub main::EAI_FAMILY () vs none at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Constant subroutine main::EAI_AGAIN redefined at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Prototype mismatch: sub main::EAI_AGAIN () vs none at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Prototype mismatch: sub main::EAI_PROTOCOL () vs none at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Constant subroutine main::NI_DGRAM redefined at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Prototype mismatch: sub main::NI_DGRAM () vs none at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Constant subroutine main::AI_NUMERICHOST redefined at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Prototype mismatch: sub main::AI_NUMERICHOST () vs none at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Constant subroutine main::AI_CANONNAME redefined at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Prototype mismatch: sub main::AI_CANONNAME () vs none at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Prototype mismatch: sub main::EAI_ADDRFAMILY () vs none at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Constant subroutine main::EAI_FAIL redefined at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Prototype mismatch: sub main::EAI_FAIL () vs none at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Constant subroutine main::EAI_NONAME redefined at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Prototype mismatch: sub main::EAI_NONAME () vs none at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Constant subroutine main::NI_NUMERICHOST redefined at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Prototype mismatch: sub main::NI_NUMERICHOST () vs none at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Prototype mismatch: sub main::EAI_BADHINTS () vs none at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Constant subroutine main::EAI_SERVICE redefined at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Prototype mismatch: sub main::EAI_SERVICE () vs none at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Prototype mismatch: sub main::AI_ALL () vs none at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Constant subroutine main::EAI_SOCKTYPE redefined at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 Prototype mismatch: sub main::EAI_SOCKTYPE () vs none at spamd line 77. eval {...} called at spamd line 73 main::BEGIN() called at spamd line 248 eval {...} called at spamd line 248 SpamAssassin Server version 4.0.0-r1913803 running on Perl 5.30.0 with SSL support (IO::Socket::SSL 2.066) with zlib support (Compress::Zlib 2.086)
PS, running on Windows, Perl 5.34.x is not available from Strawberry Perl
Works for me on Windows. PS C:\Strawberry\perl\site\bin> .\spamd -V SpamAssassin Server version 4.0.0-rsvnunknown running on Perl 5.38.0 with SSL support (IO::Socket::SSL 2.083) with zlib support (Compress::Zlib 2.204) What's the output of this command ? perl -e 'use Socket; print Socket->VERSION'
I had to use double quotes for that command to work, it says: perl -e "use Socket; print Socket->VERSION" 2.029
Tried updating to Socket v2.037, doesn't make a difference regarding the warnings
Socket6 is the latest, eg: perl -e "use Socket6; print Socket6->VERSION" 0.29
I can replicate this with Perl 5.30 on Windows and with Perl 5.28 on Linux.
Same with Perl 5.32.x I tried Perl 5.38.x, but i got a whole handful of other issues when trying to build that on a Windows system, like not able to build optional module(s), Net::LibIDN2 or Net::LibIDN, Mail::SPF and Mail::DMARC
FYI, the warnings are gone on 5.38.x but that seems a no go for now until i am able to build (some of) the optional modules
(In reply to RvdH from comment #13) > FYI, the warnings are gone on 5.38.x but that seems a no go for now until i > am able to build (some of) the optional modules Those optional modules are optional for a reason. They don't support Windows, and SpamAssassin will run, though without the functionality they support, if they are not installed. It might be possible to get them to work in Windows and to submit patches to the module maintainers and get them to accept them, but that hasn't happened yet. Here is a runup at that with LibIDN from back in 2010 which didn't go anywhere: https://www.perlmonks.org/?node_id=741544 Mail::SPF is a little more forgiving. On some platforms I have to use options to specify where to put the executable it generates and force it to install even with failing tests, but then the client works. However I still haven't gotten that one to work in Windows.
In the meantime I have been able to install Mail::SPF (manually after patching some lines) and Mail::DMARC (using force) Net::LibIDN2 install fine on (Strawberry) Perl 5.30.x and 5.32.x but not on anything higher, that is rather weird, no?
Mail::SPF patch/diff https://rt.cpan.org/Public/Bug/Display.html?id=93241
As noted i am aware it are just warnings, fact is i really don't like them much, so i altered spamd, new location if ($] >= 5.034000) { require Socket; } old location if ($] < 5.034000) { require Socket; } Any downside doing this like so?