pve-installer/test/parse-fqdn.pl
Christoph Heiss f6bea065f7 fix #5230: sys: net: properly escape FQDN regex
Due to interpolation, the \. sequence must be double-escaped.
Previously, this would result in a non-escaped dot, thus matching much
more liberally than it should.

Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
 [ TL: fix bug # reference in code comments ]
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2024-02-23 17:28:54 +01:00

58 lines
1.7 KiB
Perl
Executable File

#!/usr/bin/env perl
use strict;
use warnings;
use Test::More;
use Proxmox::Sys::Net qw(parse_fqdn);
# some constants just to avoid repeating ourselves
use constant ERR_INVALID => "Hostname does not look like a fully qualified domain name\n";
use constant ERR_ALPHANUM => "FQDN must only consist of alphanumeric characters and dashes\n";
use constant ERR_NUMERIC => "Purely numeric hostnames are not allowed\n";
use constant ERR_TOOLONG => "FQDN too long\n";
use constant ERR_EMPTY => "FQDN cannot be empty\n";
sub is_parsed {
my ($fqdn, $expected) = @_;
my @parsed = parse_fqdn($fqdn);
is_deeply(\@parsed, $expected, "FQDN is valid and compared successfully: $fqdn");
}
sub is_invalid {
my ($fqdn, $expected_err) = @_;
my $parsed = eval { parse_fqdn($fqdn) };
is($parsed, undef, "invalid FQDN did fail parsing: $fqdn");
is($@, $expected_err, "invalid FQDN threw correct error: $fqdn");
}
is_invalid(undef, ERR_EMPTY);
is_invalid('', ERR_EMPTY);
is_parsed('foo.example.com', ['foo', 'example.com']);
is_parsed('foo-bar.com', ['foo-bar', 'com']);
is_parsed('a-b.com', ['a-b', 'com']);
is_invalid('foo', ERR_INVALID);
is_invalid('-foo.com', ERR_ALPHANUM);
is_invalid('foo-.com', ERR_ALPHANUM);
is_invalid('foo.com-', ERR_ALPHANUM);
is_invalid('-o-.com', ERR_ALPHANUM);
# https://bugzilla.proxmox.com/show_bug.cgi?id=1054
is_invalid('123.com', ERR_NUMERIC);
is_parsed('foo123.com', ['foo123', 'com']);
is_parsed('123foo.com', ['123foo', 'com']);
is_parsed('a' x 63 . '.com', ['a' x 63, 'com']);
is_invalid('a' x 250 . '.com', ERR_TOOLONG);
is_invalid('a' x 64 . '.com', ERR_ALPHANUM);
# https://bugzilla.proxmox.com/show_bug.cgi?id=5230
is_invalid('123@foo.com', ERR_ALPHANUM);
done_testing();