|
Packit |
bd23c0 |
#!perl
|
|
Packit |
bd23c0 |
|
|
Packit |
bd23c0 |
use 5.008001;
|
|
Packit |
bd23c0 |
|
|
Packit |
bd23c0 |
use strict;
|
|
Packit |
bd23c0 |
use warnings;
|
|
Packit |
bd23c0 |
|
|
Packit |
bd23c0 |
BEGIN {
|
|
Packit |
bd23c0 |
if (!eval { require Socket }) {
|
|
Packit |
bd23c0 |
print "1..0 # no Socket\n"; exit 0;
|
|
Packit |
bd23c0 |
}
|
|
Packit |
bd23c0 |
undef *{Socket::inet_aton};
|
|
Packit |
bd23c0 |
undef *{Socket::inet_ntoa};
|
|
Packit |
bd23c0 |
if (ord('A') == 193 && !eval { require Convert::EBCDIC }) {
|
|
Packit |
bd23c0 |
print "1..0 # EBCDIC but no Convert::EBCDIC\n"; exit 0;
|
|
Packit |
bd23c0 |
}
|
|
Packit |
bd23c0 |
$INC{'Socket.pm'} = 1;
|
|
Packit |
bd23c0 |
}
|
|
Packit |
bd23c0 |
|
|
Packit |
bd23c0 |
package Socket;
|
|
Packit |
bd23c0 |
|
|
Packit |
bd23c0 |
sub import {
|
|
Packit |
bd23c0 |
my $pkg = caller();
|
|
Packit |
bd23c0 |
no strict 'refs'; ## no critic (TestingAndDebugging::ProhibitNoStrict)
|
|
Packit |
bd23c0 |
*{ $pkg . '::inet_aton' } = \&inet_aton;
|
|
Packit |
bd23c0 |
*{ $pkg . '::inet_ntoa' } = \&inet_ntoa;
|
|
Packit |
bd23c0 |
}
|
|
Packit |
bd23c0 |
|
|
Packit |
bd23c0 |
my $fail = 0;
|
|
Packit |
bd23c0 |
my %names;
|
|
Packit |
bd23c0 |
|
|
Packit |
bd23c0 |
sub set_fail {
|
|
Packit |
bd23c0 |
$fail = shift;
|
|
Packit |
bd23c0 |
}
|
|
Packit |
bd23c0 |
|
|
Packit |
bd23c0 |
sub inet_aton {
|
|
Packit |
bd23c0 |
return if $fail;
|
|
Packit |
bd23c0 |
my $num = unpack('N', pack('C*', split(/\./, $_[0])));
|
|
Packit |
bd23c0 |
$names{$num} = $_[0];
|
|
Packit |
bd23c0 |
return $num;
|
|
Packit |
bd23c0 |
}
|
|
Packit |
bd23c0 |
|
|
Packit |
bd23c0 |
sub inet_ntoa {
|
|
Packit |
bd23c0 |
return if $fail;
|
|
Packit |
bd23c0 |
return $names{$_[0]};
|
|
Packit |
bd23c0 |
}
|
|
Packit |
bd23c0 |
|
|
Packit |
bd23c0 |
package main;
|
|
Packit |
bd23c0 |
|
|
Packit |
bd23c0 |
|
|
Packit |
bd23c0 |
(my $libnet_t = __FILE__) =~ s/config.t/libnet_t.pl/;
|
|
Packit |
bd23c0 |
require $libnet_t;
|
|
Packit |
bd23c0 |
|
|
Packit |
bd23c0 |
print "1..10\n";
|
|
Packit |
bd23c0 |
|
|
Packit |
bd23c0 |
use Net::Config;
|
|
Packit |
bd23c0 |
ok( exists $INC{'Net/Config.pm'}, 'Net::Config should have been used' );
|
|
Packit |
bd23c0 |
ok( keys %NetConfig, '%NetConfig should be imported' );
|
|
Packit |
bd23c0 |
|
|
Packit |
bd23c0 |
Socket::set_fail(1);
|
|
Packit |
bd23c0 |
undef $NetConfig{'ftp_firewall'};
|
|
Packit |
bd23c0 |
is( Net::Config->requires_firewall(), 0,
|
|
Packit |
bd23c0 |
'requires_firewall() should return 0 without ftp_firewall defined' );
|
|
Packit |
bd23c0 |
|
|
Packit |
bd23c0 |
$NetConfig{'ftp_firewall'} = 1;
|
|
Packit |
bd23c0 |
is( Net::Config->requires_firewall('a.host.not.there'), -1,
|
|
Packit |
bd23c0 |
'... should return -1 without a valid hostname' );
|
|
Packit |
bd23c0 |
|
|
Packit |
bd23c0 |
Socket::set_fail(0);
|
|
Packit |
bd23c0 |
delete $NetConfig{'local_netmask'};
|
|
Packit |
bd23c0 |
is( Net::Config->requires_firewall('127.0.0.1'), 0,
|
|
Packit |
bd23c0 |
'... should return 0 without local_netmask defined' );
|
|
Packit |
bd23c0 |
|
|
Packit |
bd23c0 |
$NetConfig{'local_netmask'} = '127.0.0.1/24';
|
|
Packit |
bd23c0 |
is( Net::Config->requires_firewall('127.0.0.1'), 0,
|
|
Packit |
bd23c0 |
'... should return false if host is within netmask' );
|
|
Packit |
bd23c0 |
is( Net::Config->requires_firewall('192.168.10.0'), 1,
|
|
Packit |
bd23c0 |
'... should return true if host is outside netmask' );
|
|
Packit |
bd23c0 |
|
|
Packit |
bd23c0 |
# now try more netmasks
|
|
Packit |
bd23c0 |
$NetConfig{'local_netmask'} = [ '127.0.0.1/24', '10.0.0.0/8' ];
|
|
Packit |
bd23c0 |
is( Net::Config->requires_firewall('10.10.255.254'), 0,
|
|
Packit |
bd23c0 |
'... should find success with mutiple local netmasks' );
|
|
Packit |
bd23c0 |
is( Net::Config->requires_firewall('192.168.10.0'), 1,
|
|
Packit |
bd23c0 |
'... should handle failure with multiple local netmasks' );
|
|
Packit |
bd23c0 |
|
|
Packit |
bd23c0 |
is( \&Net::Config::is_external, \&Net::Config::requires_firewall,
|
|
Packit |
bd23c0 |
'is_external() should be an alias for requires_firewall()' );
|