]> git.proxmox.com Git - pmg-api.git/commitdiff
fix #1673: Allow email addresses in transport maps
authorDietmar Maurer <dietmar@proxmox.com>
Sat, 17 Feb 2018 09:00:27 +0000 (10:00 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Sat, 17 Feb 2018 09:00:27 +0000 (10:00 +0100)
PMG/API2/Transport.pm
PMG/Config.pm

index fdc15091c9ded73691afd40f1babd0f010fcc4c5..98ab4143ba5e29468bbfede2dc78fc37054928ce 100644 (file)
@@ -67,7 +67,7 @@ __PACKAGE__->register_method ({
        properties => {
            domain => {
                description => "Domain name.",
-               type => 'string', format => 'transport-domain',
+               type => 'string', format => 'transport-domain-or-email',
            },
            host => {
                description => "Target host (name or IP address).",
@@ -135,7 +135,7 @@ __PACKAGE__->register_method ({
        properties => {
            domain => {
                description => "Domain name.",
-               type => 'string', format => 'transport-domain',
+               type => 'string', format => 'transport-domain-or-email',
            },
        },
     },
@@ -174,7 +174,7 @@ __PACKAGE__->register_method ({
        properties => {
            domain => {
                description => "Domain name.",
-               type => 'string', format => 'transport-domain',
+               type => 'string', format => 'transport-domain-or-email',
            },
            host => {
                description => "Target host (name or IP address).",
@@ -243,7 +243,7 @@ __PACKAGE__->register_method ({
        properties => {
            domain => {
                description => "Domain name.",
-               type => 'string', format => 'transport-domain',
+               type => 'string', format => 'transport-domain-or-email',
            },
        }
     },
index 18b076aefd0e9c258db86315863a66f56bae4462..9f79fa5ae4e95e95768359d4f4429fc3505417a4 100755 (executable)
@@ -649,6 +649,27 @@ sub pmg_verify_transport_domain {
     return $name;
 }
 
+PVE::JSONSchema::register_format(
+    'transport-domain-or-email', \&pmg_verify_transport_domain_or_email);
+
+sub pmg_verify_transport_domain_or_email {
+    my ($name, $noerr) = @_;
+
+    my $namere = "([a-zA-Z0-9]([a-zA-Z0-9\-]*[a-zA-Z0-9])?)";
+
+    # email address
+    if ($name =~ m/^(?:[^\s\/\@]+\@)(${namere}\.)*${namere}$/) {
+       return $name;
+    }
+
+    # like dns-name, but can contain leading dot
+    if ($name !~ /^\.?(${namere}\.)*${namere}$/) {
+          return undef if $noerr;
+          die "value does not look like a valid transport domain or email address\n";
+    }
+    return $name;
+}
+
 PVE::JSONSchema::register_format(
     'dnsbl-entry', \&pmg_verify_dnsbl_entry);
 
@@ -934,7 +955,7 @@ sub read_transport_map {
        if ($line =~ m/^(\S+)\s+smtp:(\S+):(\d+)\s*$/) {
            my ($domain, $host, $port) = ($1, $2, $3);
 
-           eval { pmg_verify_transport_domain($domain); };
+           eval { pmg_verify_transport_domain_or_email($domain); };
            if (my $err = $@) {
                $parse_error->($err);
                next;