Bug 2304283

Summary: perl-Net-Server-2.014-6.fc41 FTBFS: t/Port_Configuration.t fails with perl-Net-SSLeay ≥ 1.94-7.fc41
Product: [Fedora] Fedora Reporter: Petr Pisar <ppisar>
Component: perl-Net-ServerAssignee: Michal Josef Spacek <mspacek>
Status: CLOSED ERRATA QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: rawhideCC: drjohnson1, lkundrak, mspacek, perl-devel
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
URL: https://koschei.fedoraproject.org/package/perl-Net-Server
Whiteboard:
Fixed In Version: perl-Net-Server-2.014-7.fc41 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2024-10-27 20:31:51 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 2260875    

Description Petr Pisar 2024-08-13 09:02:00 UTC
perl-Net-Server-2.014-6.fc41 fails to build in Fedora 41 because a t/Port_Configuration.t test fails:

$ prove -l -v  t/Port_Configuration.t
t/Port_Configuration.t ..
1..51
ok 1 - use Net::Server
ok 2 - run ( )  ==>  [ '*|20203|TCP|ipv4' ]
ok 3 - run ( port => 20201 )  ==>  [ '*|20201|TCP|ipv4' ]
ok 4 - run ( port => 'localhost:20202' )  ==>  [ 'localhost|20202|TCP|ipv4' ]
ok 5 - run ( port => ['localhost:20202/tcp'] )  ==>  [ 'localhost|20202|TCP|ipv4' ]
ok 6 - run ( port => 'localhost:20202/ipv4' )  ==>  [ 'localhost|20202|TCP|ipv4' ]
ok 7 - run ( port => ['localhost:20201/ipv4/tcp', 'localhost:20202/tcp/IPv4'] )  ==>  [ 'localhost|20201|TCP|ipv4', 'localhost|20202|TCP|ipv4' ]
ok 8 - run ( port => ['localhost|20201|ipv4|tcp', 'localhost,20202,tcp,IPv4'] )  ==>  [ 'localhost|20201|TCP|ipv4', 'localhost|20202|TCP|ipv4' ]
ok 9 - run ( port => ['localhost 20201 ipv4 tcp', 'localhost, 20202, tcp, IPv4'] )  ==>  [ 'localhost|20201|TCP|ipv4', 'localhost|20202|TCP|ipv4' ]
ok 10 - run ( port => 'localhost:20202/udp' )  ==>  [ 'localhost|20202|UDP|ipv4' ]
ok 11 - run ( listen => 5, port => 20202 )  ==>  [ '*|20202|TCP|ipv4' ]
ok 12 - run ( port => ['bar.com:20201/udp', 'foo.com:20202/tcp'] )  ==>  [ 'bar.com|20201|UDP|ipv4', 'foo.com|20202|TCP|ipv4' ]
ok 13 - run ( host => 'bar.com', port => 20201, proto => 'UDP' )  ==>  [ 'bar.com|20201|UDP|ipv4' ]
ok 14 - run { host => 'bar.com', port => 20201, proto => 'UDP', udp_recv_len => 400 }  ==>  [ 'bar.com|20201|UDP|ipv4' ]
ok 15 - new ( host => 'bar.com', port => 20201, proto => 'UDP' )  ==>  [ 'bar.com|20201|UDP|ipv4' ]
ok 16 - new { host => 'bar.com', port => 20201, proto => 'UDP' }  ==>  [ 'bar.com|20201|UDP|ipv4' ]
ok 17 - run ( host => 'bar.com', port => [20201, 'foo.com:20202/tcp'], proto => 'UDP' )  ==>  [ 'bar.com|20201|UDP|ipv4', 'foo.com|20202|TCP|ipv4' ]
ok 18 - run ( port => ['localhost|20202|tcp'] )  ==>  [ 'localhost|20202|TCP|ipv4' ]
ok 19 - run ( port => ['localhost,20202,tcp'] )  ==>  [ 'localhost|20202|TCP|ipv4' ]
ok 20 - run ( port => ['[localhost]:20202/tcp'] )  ==>  [ 'localhost|20202|TCP|ipv4' ]
ok 21 - run ( port => ['localhost,20202,Net::Server::Proto::TCP'] )  ==>  [ 'localhost|20202|TCP|ipv4' ]
ok 22 - run ( port => { host => '*', port => 20201, proto => 'tcp' } )  ==>  [ '*|20201|TCP|ipv4' ]
ok 23 - run ( port => [{ host => '*', port => 20201, proto => 'tcp' }] )  ==>  [ '*|20201|TCP|ipv4' ]
ok 24 - run ( port => [{ host => 'foo.com', port => 20201, proto => 'udp' }] )  ==>  [ 'foo.com|20201|UDP|ipv4' ]
ok 25 - run ( host => 'foo.com', port => [{ host => 'foo.com', port => 20201, proto => 'udp' }], proto => 'udp' )  ==>  [ 'foo.com|20201|UDP|ipv4' ]
ok 26 - run ( port => [{ host => '*', listen => 6, port => 20202, proto => 'tcp' }] )  ==>  [ '*|20202|TCP|ipv4' ]
ok 27 - run ( port => 'foo/bar/unix' )  ==>  [ '*|foo/bar|UNIX|*' ]
ok 28 - run ( port => '/foo/bar|unix', udp_recv_len => 500 )  ==>  [ '*|/foo/bar|UNIX|*' ]
ok 29 - run ( port => '/foo/bar|unixdgram', udp_recv_len => 500 )  ==>  [ '*|/foo/bar|UNIXDGRAM|*' ]
ok 30 - run ( port => 'foo/bar|sock_dgram|unix' )  ==>  [ '*|foo/bar|UNIXDGRAM|*' ]
ok 31 - run ( port => { host => '*', listen => 7, port => '/foo/bar', proto => 'unix', unix_type => 'sock_stream' } )  ==>  [ '*|/foo/bar|UNIX|*' ]
ok 32 - run ( port => { host => '*', port => '/foo/bar', proto => 'unix', unix_type => 'sock_dgram' } )  ==>  [ '*|/foo/bar|UNIXDGRAM|*' ]
ok 33 - run ( port => { host => '*', port => '/foo/bar', proto => 'unixdgram' } )  ==>  [ '*|/foo/bar|UNIXDGRAM|*' ]
ok 34 - run ( ipv => '*', port => 'foo/bar/unix' )  ==>  [ '*|foo/bar|UNIX|*' ]
# Unable to load module for proto "Net::Server::Proto::SSLEAY": Can't use an undefined value as a subroutine reference at /home/test/fedora/perl-Net-Server/perl-Net-Server-2.014-build/Net-Server-2.014/lib/Net/Server/Proto/SSLEAY.pm line 31.
BEGIN failed--compilation aborted at /home/test/fedora/perl-Net-Server/perl-Net-Server-2.014-build/Net-Server-2.014/lib/Net/Server/Proto/SSLEAY.pm line 34.
Compilation failed in require at /home/test/fedora/perl-Net-Server/perl-Net-Server-2.014-build/Net-Server-2.014/lib/Net/Server/Proto.pm line 195.
 at line 318
# Failed at line 318
not ok 35 - run ( proto => 'ssleay' )  ==>  [ '' ]
#   failed at t/Port_Configuration.t line 73
#        got: {
  bind => undef
}
#   expected: {
  bind => [{
  host => '*',
  ipv => 4,
  port => 20203,
  proto => 'ssleay'
}],
  sock => [{
  NS_host => '*',
  NS_ipv => 4,
  NS_listen => 4096,
  NS_port => 20203,
  NS_proto => 'SSLEAY',
  SSL_cert_file => 'somecert'
}]
}
# number of tests ran 35 did not match number of specified tests 51
Failed 17/51 subtests

A difference between passing and failing build root is at <https://koschei.fedoraproject.org/build/18334743>.

The test fails at:

BEGIN {
    eval { require Net::SSLeay; 1 }
        or warn "Module Net::SSLeay is required for SSLeay.";
    for my $sub (qw(load_error_strings SSLeay_add_ssl_algorithms ENGINE_load_builtin_engines ENGINE_register_all_complete randomize)) {
→       Net::SSLeay->can($sub)->();
    }
    eval { [Fcntl::F_GETFL(), Fcntl::F_SETFL(), Fcntl::O_NONBLOCK()] } || die "Could not access Fcntl constant while loading ".__PACKAGE__.": $@";
}

When using ENGINE_load_builtin_engines():

$ perl -e 'require Net::SSLeay; Net::SSLeay->can(q{ENGINE_load_builtin_engines})->()'
Can't use an undefined value as a subroutine reference at -e line 1.

This is an intentional change in perl-Net-SSLeay-1.94-7.fc41:

* Tue Jul 23 2024 Paul Howarth <paul> - 1.94-7
- Build without OpenSSL ENGINE support on Fedora 41 onwards

I guess the code for initializing Net::SSLeay should be rewritten to skip unavailable ENGINE_load_builtin_engines() and ENGINE_register_all_complete() calls.

Comment 1 Petr Pisar 2024-08-14 08:31:09 UTC
I posted a fix to the upstream bug report.

Comment 2 Fedora Update System 2024-10-18 15:36:59 UTC
FEDORA-2024-bdcb38ee2d (perl-Net-Server-2.014-7.fc41) has been submitted as an update to Fedora 41.
https://bodhi.fedoraproject.org/updates/FEDORA-2024-bdcb38ee2d

Comment 3 Fedora Update System 2024-10-19 02:11:06 UTC
FEDORA-2024-bdcb38ee2d has been pushed to the Fedora 41 testing repository.
Soon you'll be able to install the update with the following command:
`sudo dnf upgrade --enablerepo=updates-testing --refresh --advisory=FEDORA-2024-bdcb38ee2d`
You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-2024-bdcb38ee2d

See also https://fedoraproject.org/wiki/QA:Updates_Testing for more information on how to test updates.

Comment 4 Fedora Update System 2024-10-27 20:31:51 UTC
FEDORA-2024-bdcb38ee2d (perl-Net-Server-2.014-7.fc41) has been pushed to the Fedora 41 stable repository.
If problem still persists, please make note of it in this bug report.