all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH-SERIES v2] loosen up mailto regex for backwards compatibility
@ 2021-02-15 12:24 Fabian Ebner
  2021-02-15 12:24 ` [pve-devel] [PATCH v2 common 1/8] sendmail: use more complete email regex and shellquote Fabian Ebner
                   ` (9 more replies)
  0 siblings, 10 replies; 15+ messages in thread
From: Fabian Ebner @ 2021-02-15 12:24 UTC (permalink / raw)
  To: pve-devel

especially regarding the whitespace-agnostic behavior. And while we're at it,
also use the more complete email regex from pve-common.

Changes from v1:
    * re-use the email regex from pve-common
    * improve printing out mailto parameters to the cron file


common:

Fabian Ebner (2):
  sendmail: use more complete email regex and shellquote
  register email-or-username format

 src/PVE/JSONSchema.pm | 14 +++++++++++++-
 src/PVE/Tools.pm      | 17 ++++++++++++-----
 2 files changed, 25 insertions(+), 6 deletions(-)


guest-common:

Fabian Ebner (3):
  vzdump: command line: refactor handling prune-backups
  vzdump: command line: make sure mailto is comma-separated
  vzdump: mailto: use email-or-username-list format

 PVE/VZDump/Common.pm | 14 +++++---------
 1 file changed, 5 insertions(+), 9 deletions(-)


manager:

Fabian Ebner (3):
  vzdump: refactor parsing mailto so it can be mocked
  test: vzdump: add tests for mailto
  test: vzdump: rename vzdump_new_retention_test.pl to
    vzdump_new_test.pl

 PVE/API2/VZDump.pm                            |  11 +-
 PVE/VZDump.pm                                 |  21 +++
 test/Makefile                                 |   8 +-
 ...w_retention_test.pl => vzdump_new_test.pl} | 174 +++++++++++++++++-
 4 files changed, 198 insertions(+), 16 deletions(-)
 rename test/{vzdump_new_retention_test.pl => vzdump_new_test.pl} (74%)

-- 
2.20.1





^ permalink raw reply	[flat|nested] 15+ messages in thread

* [pve-devel] [PATCH v2 common 1/8] sendmail: use more complete email regex and shellquote
  2021-02-15 12:24 [pve-devel] [PATCH-SERIES v2] loosen up mailto regex for backwards compatibility Fabian Ebner
@ 2021-02-15 12:24 ` Fabian Ebner
  2021-02-18 11:54   ` [pve-devel] applied: " Thomas Lamprecht
  2021-02-15 12:24 ` [pve-devel] [PATCH v2 common 2/8] register email-or-username format Fabian Ebner
                   ` (8 subsequent siblings)
  9 siblings, 1 reply; 15+ messages in thread
From: Fabian Ebner @ 2021-02-15 12:24 UTC (permalink / raw)
  To: pve-devel

Shellquote is needed for '~', and while it doesn't help with '-', there should
be no problem, because options are separated from mailto since commit
216a3f4f131693dc4bbad5e06e96a61baef5f5e9.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
---

New in v2.

Since JSONSchema already uses Tools, the pattern has to live in Tools.

 src/PVE/JSONSchema.pm |  2 +-
 src/PVE/Tools.pm      | 17 ++++++++++++-----
 2 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/src/PVE/JSONSchema.pm b/src/PVE/JSONSchema.pm
index 29ada5b..5870b69 100644
--- a/src/PVE/JSONSchema.pm
+++ b/src/PVE/JSONSchema.pm
@@ -471,7 +471,7 @@ register_format('email', \&pve_verify_email);
 sub pve_verify_email {
     my ($email, $noerr) = @_;
 
-    if ($email !~ /^[\w\+\-\~]+(\.[\w\+\-\~]+)*@[a-zA-Z0-9\-]+(\.[a-zA-Z0-9\-]+)*$/) {
+    if ($email !~ /^$PVE::Tools::EMAIL_RE$/) {
 	   return undef if $noerr;
 	   die "value does not look like a valid email address\n";
     }
diff --git a/src/PVE/Tools.pm b/src/PVE/Tools.pm
index 7fefa52..fc4a367 100644
--- a/src/PVE/Tools.pm
+++ b/src/PVE/Tools.pm
@@ -87,6 +87,9 @@ our $IPV6RE = "(?:" .
 
 our $IPRE = "(?:$IPV4RE|$IPV6RE)";
 
+our $EMAIL_USER_RE = qr/[\w\+\-\~]+(\.[\w\+\-\~]+)*/;
+our $EMAIL_RE = qr/$EMAIL_USER_RE@[a-zA-Z0-9\-]+(\.[a-zA-Z0-9\-]+)*/;
+
 use constant {CLONE_NEWNS   => 0x00020000,
               CLONE_NEWUTS  => 0x04000000,
               CLONE_NEWIPC  => 0x08000000,
@@ -1469,23 +1472,27 @@ sub sync_mountpoint {
 # mailto may be a single email string or an array of receivers
 sub sendmail {
     my ($mailto, $subject, $text, $html, $mailfrom, $author) = @_;
-    my $mail_re = qr/[^-a-zA-Z0-9+._@]/;
 
     $mailto = [ $mailto ] if !ref($mailto);
 
+    my $mailto_quoted = [];
     for my $to (@$mailto) {
-	die "illegal character in mailto address\n" if $to =~ $mail_re;
+	die "mailto does not look like a valid email address or username\n"
+	    if $to !~ /^$EMAIL_RE$/ && $to !~ /^$EMAIL_USER_RE$/;
+	push @$mailto_quoted, shellquote($to);
     }
 
     my $rcvrtxt = join (', ', @$mailto);
 
     $mailfrom = $mailfrom || "root";
-    die "illegal character in mailfrom address\n" if $mailfrom =~ $mail_re;
+    die "mailfrom does not look like a valid email address or username\n"
+	    if $mailfrom !~ /^$EMAIL_RE$/ && $mailfrom !~ /^$EMAIL_USER_RE$/;
+    my $mailfrom_quoted = shellquote($mailfrom);
 
     $author = $author // 'Proxmox VE';
 
-    open (MAIL, "|-", "sendmail", "-B", "8BITMIME", "-f", $mailfrom, "--", @$mailto) ||
-	die "unable to open 'sendmail' - $!";
+    open (MAIL, "|-", "sendmail", "-B", "8BITMIME", "-f", $mailfrom_quoted,
+	"--", @$mailto_quoted) || die "unable to open 'sendmail' - $!";
 
     my $date = time2str('%a, %d %b %Y %H:%M:%S %z', time());
 
-- 
2.20.1





^ permalink raw reply	[flat|nested] 15+ messages in thread

* [pve-devel] [PATCH v2 common 2/8] register email-or-username format
  2021-02-15 12:24 [pve-devel] [PATCH-SERIES v2] loosen up mailto regex for backwards compatibility Fabian Ebner
  2021-02-15 12:24 ` [pve-devel] [PATCH v2 common 1/8] sendmail: use more complete email regex and shellquote Fabian Ebner
@ 2021-02-15 12:24 ` Fabian Ebner
  2021-02-18 11:54   ` [pve-devel] applied: " Thomas Lamprecht
  2021-02-15 12:24 ` [pve-devel] [PATCH v2 guest-common 3/8] vzdump: command line: refactor handling prune-backups Fabian Ebner
                   ` (7 subsequent siblings)
  9 siblings, 1 reply; 15+ messages in thread
From: Fabian Ebner @ 2021-02-15 12:24 UTC (permalink / raw)
  To: pve-devel

To be used for the mailto vzdump parameter.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
---

New in v2.

 src/PVE/JSONSchema.pm | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/PVE/JSONSchema.pm b/src/PVE/JSONSchema.pm
index 5870b69..20d72b3 100644
--- a/src/PVE/JSONSchema.pm
+++ b/src/PVE/JSONSchema.pm
@@ -478,6 +478,18 @@ sub pve_verify_email {
     return $email;
 }
 
+register_format('email-or-username', \&pve_verify_email_or_username);
+sub pve_verify_email_or_username {
+    my ($email, $noerr) = @_;
+
+    if ($email !~ /^$PVE::Tools::EMAIL_RE$/ &&
+	$email !~ /^$PVE::Tools::EMAIL_USER_RE$/) {
+	   return undef if $noerr;
+	   die "value does not look like a valid email address or user name\n";
+    }
+    return $email;
+}
+
 register_format('dns-name', \&pve_verify_dns_name);
 sub pve_verify_dns_name {
     my ($name, $noerr) = @_;
-- 
2.20.1





^ permalink raw reply	[flat|nested] 15+ messages in thread

* [pve-devel] [PATCH v2 guest-common 3/8] vzdump: command line: refactor handling prune-backups
  2021-02-15 12:24 [pve-devel] [PATCH-SERIES v2] loosen up mailto regex for backwards compatibility Fabian Ebner
  2021-02-15 12:24 ` [pve-devel] [PATCH v2 common 1/8] sendmail: use more complete email regex and shellquote Fabian Ebner
  2021-02-15 12:24 ` [pve-devel] [PATCH v2 common 2/8] register email-or-username format Fabian Ebner
@ 2021-02-15 12:24 ` Fabian Ebner
  2021-02-15 12:24 ` [pve-devel] [PATCH v2 guest-common 4/8] vzdump: command line: make sure mailto is comma-separated Fabian Ebner
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Fabian Ebner @ 2021-02-15 12:24 UTC (permalink / raw)
  To: pve-devel

to re-use a line here and with the next patch.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
---

New in v2.

 PVE/VZDump/Common.pm | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/PVE/VZDump/Common.pm b/PVE/VZDump/Common.pm
index af141de..eceea7f 100644
--- a/PVE/VZDump/Common.pm
+++ b/PVE/VZDump/Common.pm
@@ -393,11 +393,10 @@ sub command_line {
 	    foreach my $path (split(/\0/, $v || '')) {
 		$cmd .= " --$p " . PVE::Tools::shellquote($path);
 	    }
-	} elsif ($p eq 'prune-backups') {
-	    my $property_string = PVE::JSONSchema::print_property_string($v, 'prune-backups');
-	    $cmd .= " --$p " . PVE::Tools::shellquote($property_string)
-		if defined($property_string) && $property_string ne '';
 	} else {
+	    $v = PVE::JSONSchema::print_property_string($v, 'prune-backups')
+		if $p eq 'prune-backups';
+
 	    $cmd .= " --$p " . PVE::Tools::shellquote($v) if defined($v) && $v ne '';
 	}
     }
-- 
2.20.1





^ permalink raw reply	[flat|nested] 15+ messages in thread

* [pve-devel] [PATCH v2 guest-common 4/8] vzdump: command line: make sure mailto is comma-separated
  2021-02-15 12:24 [pve-devel] [PATCH-SERIES v2] loosen up mailto regex for backwards compatibility Fabian Ebner
                   ` (2 preceding siblings ...)
  2021-02-15 12:24 ` [pve-devel] [PATCH v2 guest-common 3/8] vzdump: command line: refactor handling prune-backups Fabian Ebner
@ 2021-02-15 12:24 ` Fabian Ebner
  2021-02-15 12:24 ` [pve-devel] [PATCH v2 guest-common 5/8] vzdump: mailto: use email-or-username-list format Fabian Ebner
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Fabian Ebner @ 2021-02-15 12:24 UTC (permalink / raw)
  To: pve-devel

In addition to relying on shellquote(), it's still nice to avoid printing out
unnecessary whitespaces, especially newlines.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
---

New in v2.

 PVE/VZDump/Common.pm | 1 +
 1 file changed, 1 insertion(+)

diff --git a/PVE/VZDump/Common.pm b/PVE/VZDump/Common.pm
index eceea7f..5d93b51 100644
--- a/PVE/VZDump/Common.pm
+++ b/PVE/VZDump/Common.pm
@@ -394,6 +394,7 @@ sub command_line {
 		$cmd .= " --$p " . PVE::Tools::shellquote($path);
 	    }
 	} else {
+	    $v = join(",", PVE::Tools::split_list($v)) if $p eq 'mailto';
 	    $v = PVE::JSONSchema::print_property_string($v, 'prune-backups')
 		if $p eq 'prune-backups';
 
-- 
2.20.1





^ permalink raw reply	[flat|nested] 15+ messages in thread

* [pve-devel] [PATCH v2 guest-common 5/8] vzdump: mailto: use email-or-username-list format
  2021-02-15 12:24 [pve-devel] [PATCH-SERIES v2] loosen up mailto regex for backwards compatibility Fabian Ebner
                   ` (3 preceding siblings ...)
  2021-02-15 12:24 ` [pve-devel] [PATCH v2 guest-common 4/8] vzdump: command line: make sure mailto is comma-separated Fabian Ebner
@ 2021-02-15 12:24 ` Fabian Ebner
  2021-02-15 12:25 ` [pve-devel] [PATCH v2 manager 6/8] vzdump: refactor parsing mailto so it can be mocked Fabian Ebner
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Fabian Ebner @ 2021-02-15 12:24 UTC (permalink / raw)
  To: pve-devel

because it is a more complete pattern. Also, 'mailto' was a '-list' format in
PVE 6.2 and earlier, so this also fixes whitespace-related backwards
compatibility. In particular, this fixes creating a backup job in the GUI
without setting an address, which passes along ''.

For example,
> vzdump 153 --mailto " ,,,admin@proxmox.com;;; developer@proxmox.com , ; "
was valid and worked in PVE 6.2.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
---

Changes from v1:
    * re-use the more complete pattern from pve-common

Dependency bump for pve-common is needed.

 PVE/VZDump/Common.pm | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/PVE/VZDump/Common.pm b/PVE/VZDump/Common.pm
index 5d93b51..86cb7bd 100644
--- a/PVE/VZDump/Common.pm
+++ b/PVE/VZDump/Common.pm
@@ -71,9 +71,6 @@ sub parse_dow {
     return $res;
 };
 
-my $mailto_pattern = '[a-zA-Z0-9+._@][-a-zA-Z0-9+._@]*';
-my $mailto_list_pattern = "($mailto_pattern)([;,]$mailto_pattern)*";
-
 my $confdesc = {
     vmid => {
 	type => 'string', format => 'pve-vmid-list',
@@ -146,8 +143,7 @@ my $confdesc = {
     },
     mailto => {
 	type => 'string',
-	pattern => $mailto_list_pattern,
-	format_description => 'email-or-username-list',
+	format => 'email-or-username-list',
 	description => "Comma-separated list of email addresses or users that should" .
 	    " receive email notifications.",
 	optional => 1,
-- 
2.20.1





^ permalink raw reply	[flat|nested] 15+ messages in thread

* [pve-devel] [PATCH v2 manager 6/8] vzdump: refactor parsing mailto so it can be mocked
  2021-02-15 12:24 [pve-devel] [PATCH-SERIES v2] loosen up mailto regex for backwards compatibility Fabian Ebner
                   ` (4 preceding siblings ...)
  2021-02-15 12:24 ` [pve-devel] [PATCH v2 guest-common 5/8] vzdump: mailto: use email-or-username-list format Fabian Ebner
@ 2021-02-15 12:25 ` Fabian Ebner
  2021-02-15 12:25 ` [pve-devel] [PATCH v2 manager 7/8] test: vzdump: add tests for mailto Fabian Ebner
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Fabian Ebner @ 2021-02-15 12:25 UTC (permalink / raw)
  To: pve-devel

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
---

No changes from v1.

 PVE/API2/VZDump.pm | 11 +----------
 PVE/VZDump.pm      | 21 +++++++++++++++++++++
 2 files changed, 22 insertions(+), 10 deletions(-)

diff --git a/PVE/API2/VZDump.pm b/PVE/API2/VZDump.pm
index 806ac7fd..44376106 100644
--- a/PVE/API2/VZDump.pm
+++ b/PVE/API2/VZDump.pm
@@ -88,16 +88,7 @@ __PACKAGE__->register_method ({
 	# silent exit if specified VMs run on other nodes
 	return "OK" if !scalar(@{$local_vmids}) && !$param->{all};
 
-	# exclude-path list need to be 0 separated
-	if (defined($param->{'exclude-path'})) {
-	    my @expaths = split(/\0/, $param->{'exclude-path'} || '');
-	    $param->{'exclude-path'} = [ @expaths ];
-	}
-
-	if (defined($param->{mailto})) {
-	    my @mailto = PVE::Tools::split_list(extract_param($param, 'mailto'));
-	    $param->{mailto} = [ @mailto ];
-	}
+	PVE::VZDump::parse_mailto_exclude_path($param);
 
 	die "you can only backup a single VM with option --stdout\n"
 	    if $param->{stdout} && scalar(@{$local_vmids}) != 1;
diff --git a/PVE/VZDump.pm b/PVE/VZDump.pm
index a99d0565..2ddfa851 100644
--- a/PVE/VZDump.pm
+++ b/PVE/VZDump.pm
@@ -1177,6 +1177,27 @@ sub option_exists {
     return defined($confdesc->{$key});
 }
 
+# NOTE it might make sense to merge this and verify_vzdump_parameters(), but one
+# needs to adapt command_line() in guest-common's PVE/VZDump/Common.pm and detect
+# a second parsing attempt, because verify_vzdump_parameters() is called twice
+# during the update_job API call.
+sub parse_mailto_exclude_path {
+    my ($param) = @_;
+
+    # exclude-path list need to be 0 separated
+    if (defined($param->{'exclude-path'})) {
+	my @expaths = split(/\0/, $param->{'exclude-path'} || '');
+	$param->{'exclude-path'} = [ @expaths ];
+    }
+
+    if (defined($param->{mailto})) {
+	my @mailto = PVE::Tools::split_list(extract_param($param, 'mailto'));
+	$param->{mailto} = [ @mailto ];
+    }
+
+    return;
+}
+
 sub verify_vzdump_parameters {
     my ($param, $check_missing) = @_;
 
-- 
2.20.1





^ permalink raw reply	[flat|nested] 15+ messages in thread

* [pve-devel] [PATCH v2 manager 7/8] test: vzdump: add tests for mailto
  2021-02-15 12:24 [pve-devel] [PATCH-SERIES v2] loosen up mailto regex for backwards compatibility Fabian Ebner
                   ` (5 preceding siblings ...)
  2021-02-15 12:25 ` [pve-devel] [PATCH v2 manager 6/8] vzdump: refactor parsing mailto so it can be mocked Fabian Ebner
@ 2021-02-15 12:25 ` Fabian Ebner
  2021-02-15 12:25 ` [pve-devel] [PATCH v2 manager 8/8] test: vzdump: rename vzdump_new_retention_test.pl to vzdump_new_test.pl Fabian Ebner
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Fabian Ebner @ 2021-02-15 12:25 UTC (permalink / raw)
  To: pve-devel

Re-use the existing code, by allowing special kinds of 'tests' that just set
the options that are tested for.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
---

No changes from v1.

Dependency bump for pve-guest-common is needed.

 test/vzdump_new_retention_test.pl | 174 +++++++++++++++++++++++++++++-
 1 file changed, 172 insertions(+), 2 deletions(-)

diff --git a/test/vzdump_new_retention_test.pl b/test/vzdump_new_retention_test.pl
index 569419fb..a8f70d62 100755
--- a/test/vzdump_new_retention_test.pl
+++ b/test/vzdump_new_retention_test.pl
@@ -73,7 +73,7 @@ $pve_tools_module->mock(
     },
 );
 
-my @tested_options = qw(prune-backups remove);
+my $tested_options;
 
 # each test consists of the following:
 # name          - unique name for the test
@@ -81,7 +81,13 @@ my @tested_options = qw(prune-backups remove);
 # storage_param - parameters for the mocked storage configuration
 # vzdump_param  - parameters for the mocked /etc/vzdump.conf
 # expected      - expected options
+#
+# To begin testing for different options, use a fake test like the first one
 my @tests = (
+    {
+	description => 'BEGIN RETENTION TESTS',
+	tested_options => ['prune-backups', 'remove'],
+    },
     {
 	description => 'no params',
 	expected => {
@@ -464,11 +470,174 @@ my @tests = (
 	    remove => 0,
 	},
     },
+    {
+	description => 'BEGIN MAILTO TESTS',
+	tested_options => ['mailto'],
+    },
+    {
+	description => 'mailto vzdump 1',
+	vzdump_param => {
+	    'mailto' => 'developer@proxmox.com',
+	},
+	expected => {
+	    'mailto' => [
+		'developer@proxmox.com',
+	    ],
+	},
+    },
+    {
+	description => 'mailto vzdump 2',
+	vzdump_param => {
+	    'mailto' => 'developer@proxmox.com admin@proxmox.com',
+	},
+	expected => {
+	    'mailto' => [
+		'developer@proxmox.com',
+		'admin@proxmox.com',
+	    ],
+	},
+    },
+    {
+	description => 'mailto vzdump 3',
+	vzdump_param => {
+	    'mailto' => 'developer@proxmox.com,admin@proxmox.com',
+	},
+	expected => {
+	    'mailto' => [
+		'developer@proxmox.com',
+		'admin@proxmox.com',
+	    ],
+	},
+    },
+    {
+	description => 'mailto vzdump 4',
+	vzdump_param => {
+	    'mailto' => 'developer@proxmox.com, admin@proxmox.com',
+	},
+	expected => {
+	    'mailto' => [
+		'developer@proxmox.com',
+		'admin@proxmox.com',
+	    ],
+	},
+    },
+    {
+	description => 'mailto vzdump 5',
+	vzdump_param => {
+	    'mailto' => ' ,,; developer@proxmox.com, ; admin@proxmox.com ',
+	},
+	expected => {
+	    'mailto' => [
+		'developer@proxmox.com',
+		'admin@proxmox.com',
+	    ],
+	},
+    },
+    {
+	description => 'mailto vzdump 6',
+	vzdump_param => {
+	    'mailto' => '',
+	},
+	expected => {
+	    'mailto' => [],
+	},
+    },
+    {
+	description => 'mailto CLI 1',
+	cli_param => {
+	    'mailto' => 'developer@proxmox.com',
+	},
+	expected => {
+	    'mailto' => [
+		'developer@proxmox.com',
+	    ],
+	},
+    },
+    {
+	description => 'mailto CLI 2',
+	cli_param => {
+	    'mailto' => 'developer@proxmox.com admin@proxmox.com',
+	},
+	expected => {
+	    'mailto' => [
+		'developer@proxmox.com',
+		'admin@proxmox.com',
+	    ],
+	},
+    },
+    {
+	description => 'mailto CLI 3',
+	cli_param => {
+	    'mailto' => 'developer@proxmox.com,admin@proxmox.com',
+	},
+	expected => {
+	    'mailto' => [
+		'developer@proxmox.com',
+		'admin@proxmox.com',
+	    ],
+	},
+    },
+    {
+	description => 'mailto CLI 4',
+	cli_param => {
+	    'mailto' => 'developer@proxmox.com, admin@proxmox.com',
+	},
+	expected => {
+	    'mailto' => [
+		'developer@proxmox.com',
+		'admin@proxmox.com',
+	    ],
+	},
+    },
+    {
+	description => 'mailto CLI 5',
+	cli_param => {
+	    'mailto' => ' ,,; developer@proxmox.com, ; admin@proxmox.com ',
+	},
+	expected => {
+	    'mailto' => [
+		'developer@proxmox.com',
+		'admin@proxmox.com',
+	    ],
+	},
+    },
+    {
+	description => 'mailto both 1',
+	vzdump_param => {
+	    'mailto' => 'developer@proxmox.com',
+	},
+	cli_param => {
+	    'mailto' => 'admin@proxmox.com',
+	},
+	expected => {
+	    'mailto' => [
+		'admin@proxmox.com',
+	    ],
+	},
+    },
+    {
+	description => 'mailto both 2',
+	vzdump_param => {
+	    'mailto' => 'developer@proxmox.com',
+	},
+	cli_param => {
+	    'mailto' => '',
+	},
+	expected => {
+	    'mailto' => [],
+	},
+    },
 );
 
 plan tests => scalar @tests;
 
 foreach my $test (@tests) {
+    if (defined($test->{tested_options})) {
+	$tested_options = $test->{tested_options};
+	ok(1, $test->{description});
+	next;
+    }
+
     prepare_storage_config($test->{storage_param});
     prepare_vzdump_config($test->{vzdump_param});
 
@@ -477,6 +646,7 @@ foreach my $test (@tests) {
 
     my $got = eval {
 	PVE::VZDump::verify_vzdump_parameters($test->{cli_param}, 1);
+	PVE::VZDump::parse_mailto_exclude_path($test->{cli_param});
 
 	my $vzdump = PVE::VZDump->new('fake cmdline', $test->{cli_param}, undef);
 
@@ -484,7 +654,7 @@ foreach my $test (@tests) {
 	die "maxfiles is defined" if defined($opts->{maxfiles});
 
 	my $res = {};
-	foreach my $opt (@tested_options) {
+	foreach my $opt (@{$tested_options}) {
 	    next if !defined($opts->{$opt});
 	    $res->{$opt} = $opts->{$opt};
 	}
-- 
2.20.1





^ permalink raw reply	[flat|nested] 15+ messages in thread

* [pve-devel] [PATCH v2 manager 8/8] test: vzdump: rename vzdump_new_retention_test.pl to vzdump_new_test.pl
  2021-02-15 12:24 [pve-devel] [PATCH-SERIES v2] loosen up mailto regex for backwards compatibility Fabian Ebner
                   ` (6 preceding siblings ...)
  2021-02-15 12:25 ` [pve-devel] [PATCH v2 manager 7/8] test: vzdump: add tests for mailto Fabian Ebner
@ 2021-02-15 12:25 ` Fabian Ebner
  2021-02-17  9:52 ` [pve-devel] [PATCH-SERIES v2] loosen up mailto regex for backwards compatibility Dominik Csapak
  2021-02-19 15:36 ` [pve-devel] applied: " Thomas Lamprecht
  9 siblings, 0 replies; 15+ messages in thread
From: Fabian Ebner @ 2021-02-15 12:25 UTC (permalink / raw)
  To: pve-devel

as it now also includes tests for new() with non-retention options.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
---

No changes from v1.

 test/Makefile                                             | 8 ++++----
 test/{vzdump_new_retention_test.pl => vzdump_new_test.pl} | 0
 2 files changed, 4 insertions(+), 4 deletions(-)
 rename test/{vzdump_new_retention_test.pl => vzdump_new_test.pl} (100%)

diff --git a/test/Makefile b/test/Makefile
index d383e89f..eb6f38f1 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -18,14 +18,14 @@ replication%.t: replication_test%.pl
 test-mail:
 	./mail_test.pl
 
-test-vzdump: test-vzdump-guest-included test-vzdump-retention
+test-vzdump: test-vzdump-guest-included test-vzdump-new
 
-.PHONY: test-vzdump-guest-included test-vzdump-retention
+.PHONY: test-vzdump-guest-included test-vzdump-new
 test-vzdump-guest-included:
 	./vzdump_guest_included_test.pl
 
-test-vzdump-retention:
-	./vzdump_new_retention_test.pl
+test-vzdump-new:
+	./vzdump_new_test.pl
 
 .PHONY: install
 install:
diff --git a/test/vzdump_new_retention_test.pl b/test/vzdump_new_test.pl
similarity index 100%
rename from test/vzdump_new_retention_test.pl
rename to test/vzdump_new_test.pl
-- 
2.20.1





^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [pve-devel] [PATCH-SERIES v2] loosen up mailto regex for backwards compatibility
  2021-02-15 12:24 [pve-devel] [PATCH-SERIES v2] loosen up mailto regex for backwards compatibility Fabian Ebner
                   ` (7 preceding siblings ...)
  2021-02-15 12:25 ` [pve-devel] [PATCH v2 manager 8/8] test: vzdump: rename vzdump_new_retention_test.pl to vzdump_new_test.pl Fabian Ebner
@ 2021-02-17  9:52 ` Dominik Csapak
  2021-02-17 10:35   ` Fabian Ebner
  2021-02-19 15:36 ` [pve-devel] applied: " Thomas Lamprecht
  9 siblings, 1 reply; 15+ messages in thread
From: Dominik Csapak @ 2021-02-17  9:52 UTC (permalink / raw)
  To: pve-devel

LGTM, nothing obvious that is wrong
one small thing though, after this patch i cannot
have an @ in the local part of an email anymore, though
i do not think that people actually use that?

e.g. foo@bar@example.com does not work anymore

Other than that, i tested it and worked as advertised

Reviewed-By: Dominik Csapak <d.csapak@proxmox.com>

On 2/15/21 13:24, Fabian Ebner wrote:
> especially regarding the whitespace-agnostic behavior. And while we're at it,
> also use the more complete email regex from pve-common.
> 
> Changes from v1:
>      * re-use the email regex from pve-common
>      * improve printing out mailto parameters to the cron file
> 
> 
> common:
> 
> Fabian Ebner (2):
>    sendmail: use more complete email regex and shellquote
>    register email-or-username format
> 
>   src/PVE/JSONSchema.pm | 14 +++++++++++++-
>   src/PVE/Tools.pm      | 17 ++++++++++++-----
>   2 files changed, 25 insertions(+), 6 deletions(-)
> 
> 
> guest-common:
> 
> Fabian Ebner (3):
>    vzdump: command line: refactor handling prune-backups
>    vzdump: command line: make sure mailto is comma-separated
>    vzdump: mailto: use email-or-username-list format
> 
>   PVE/VZDump/Common.pm | 14 +++++---------
>   1 file changed, 5 insertions(+), 9 deletions(-)
> 
> 
> manager:
> 
> Fabian Ebner (3):
>    vzdump: refactor parsing mailto so it can be mocked
>    test: vzdump: add tests for mailto
>    test: vzdump: rename vzdump_new_retention_test.pl to
>      vzdump_new_test.pl
> 
>   PVE/API2/VZDump.pm                            |  11 +-
>   PVE/VZDump.pm                                 |  21 +++
>   test/Makefile                                 |   8 +-
>   ...w_retention_test.pl => vzdump_new_test.pl} | 174 +++++++++++++++++-
>   4 files changed, 198 insertions(+), 16 deletions(-)
>   rename test/{vzdump_new_retention_test.pl => vzdump_new_test.pl} (74%)
> 





^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [pve-devel] [PATCH-SERIES v2] loosen up mailto regex for backwards compatibility
  2021-02-17  9:52 ` [pve-devel] [PATCH-SERIES v2] loosen up mailto regex for backwards compatibility Dominik Csapak
@ 2021-02-17 10:35   ` Fabian Ebner
  2021-02-17 11:42     ` Fabian Ebner
  0 siblings, 1 reply; 15+ messages in thread
From: Fabian Ebner @ 2021-02-17 10:35 UTC (permalink / raw)
  To: pve-devel, Dominik Csapak

On 17.02.21 10:52, Dominik Csapak wrote:
> LGTM, nothing obvious that is wrong
> one small thing though, after this patch i cannot
> have an @ in the local part of an email anymore, though
> i do not think that people actually use that?
> 
> e.g. foo@bar@example.com does not work anymore
> 

Thanks for the review and for catching that! I'll send a follow-up (or 
does this warrant a v3?) including '@' in the local part, and check that 
other users of the 'email' format are not confused by that in some way.

> Other than that, i tested it and worked as advertised
> 
> Reviewed-By: Dominik Csapak <d.csapak@proxmox.com>
> 
> On 2/15/21 13:24, Fabian Ebner wrote:
>> especially regarding the whitespace-agnostic behavior. And while we're 
>> at it,
>> also use the more complete email regex from pve-common.
>>
>> Changes from v1:
>>      * re-use the email regex from pve-common
>>      * improve printing out mailto parameters to the cron file
>>
>>
>> common:
>>
>> Fabian Ebner (2):
>>    sendmail: use more complete email regex and shellquote
>>    register email-or-username format
>>
>>   src/PVE/JSONSchema.pm | 14 +++++++++++++-
>>   src/PVE/Tools.pm      | 17 ++++++++++++-----
>>   2 files changed, 25 insertions(+), 6 deletions(-)
>>
>>
>> guest-common:
>>
>> Fabian Ebner (3):
>>    vzdump: command line: refactor handling prune-backups
>>    vzdump: command line: make sure mailto is comma-separated
>>    vzdump: mailto: use email-or-username-list format
>>
>>   PVE/VZDump/Common.pm | 14 +++++---------
>>   1 file changed, 5 insertions(+), 9 deletions(-)
>>
>>
>> manager:
>>
>> Fabian Ebner (3):
>>    vzdump: refactor parsing mailto so it can be mocked
>>    test: vzdump: add tests for mailto
>>    test: vzdump: rename vzdump_new_retention_test.pl to
>>      vzdump_new_test.pl
>>
>>   PVE/API2/VZDump.pm                            |  11 +-
>>   PVE/VZDump.pm                                 |  21 +++
>>   test/Makefile                                 |   8 +-
>>   ...w_retention_test.pl => vzdump_new_test.pl} | 174 +++++++++++++++++-
>>   4 files changed, 198 insertions(+), 16 deletions(-)
>>   rename test/{vzdump_new_retention_test.pl => vzdump_new_test.pl} (74%)
>>
> 
> 
> 
> _______________________________________________
> pve-devel mailing list
> pve-devel@lists.proxmox.com
> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
> 
> 




^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [pve-devel] [PATCH-SERIES v2] loosen up mailto regex for backwards compatibility
  2021-02-17 10:35   ` Fabian Ebner
@ 2021-02-17 11:42     ` Fabian Ebner
  0 siblings, 0 replies; 15+ messages in thread
From: Fabian Ebner @ 2021-02-17 11:42 UTC (permalink / raw)
  To: pve-devel

On 17.02.21 11:35, Fabian Ebner wrote:
> On 17.02.21 10:52, Dominik Csapak wrote:
>> LGTM, nothing obvious that is wrong
>> one small thing though, after this patch i cannot
>> have an @ in the local part of an email anymore, though
>> i do not think that people actually use that?
>>
>> e.g. foo@bar@example.com does not work anymore
>>
> 
> Thanks for the review and for catching that! I'll send a follow-up (or 
> does this warrant a v3?) including '@' in the local part, and check that 
> other users of the 'email' format are not confused by that in some way.
> 

After a bit of discussion, I decided to not send that follow-up, because 
'@' is technically only valid in quoted strings (which we didn't/don't 
support here) and AFAICT we used the same 'email' format from pve-common 
in some parts of PMG without noticeable complaints.

>> Other than that, i tested it and worked as advertised
>>
>> Reviewed-By: Dominik Csapak <d.csapak@proxmox.com>
>>
>> On 2/15/21 13:24, Fabian Ebner wrote:
>>> especially regarding the whitespace-agnostic behavior. And while 
>>> we're at it,
>>> also use the more complete email regex from pve-common.
>>>
>>> Changes from v1:
>>>      * re-use the email regex from pve-common
>>>      * improve printing out mailto parameters to the cron file
>>>
>>>
>>> common:
>>>
>>> Fabian Ebner (2):
>>>    sendmail: use more complete email regex and shellquote
>>>    register email-or-username format
>>>
>>>   src/PVE/JSONSchema.pm | 14 +++++++++++++-
>>>   src/PVE/Tools.pm      | 17 ++++++++++++-----
>>>   2 files changed, 25 insertions(+), 6 deletions(-)
>>>
>>>
>>> guest-common:
>>>
>>> Fabian Ebner (3):
>>>    vzdump: command line: refactor handling prune-backups
>>>    vzdump: command line: make sure mailto is comma-separated
>>>    vzdump: mailto: use email-or-username-list format
>>>
>>>   PVE/VZDump/Common.pm | 14 +++++---------
>>>   1 file changed, 5 insertions(+), 9 deletions(-)
>>>
>>>
>>> manager:
>>>
>>> Fabian Ebner (3):
>>>    vzdump: refactor parsing mailto so it can be mocked
>>>    test: vzdump: add tests for mailto
>>>    test: vzdump: rename vzdump_new_retention_test.pl to
>>>      vzdump_new_test.pl
>>>
>>>   PVE/API2/VZDump.pm                            |  11 +-
>>>   PVE/VZDump.pm                                 |  21 +++
>>>   test/Makefile                                 |   8 +-
>>>   ...w_retention_test.pl => vzdump_new_test.pl} | 174 +++++++++++++++++-
>>>   4 files changed, 198 insertions(+), 16 deletions(-)
>>>   rename test/{vzdump_new_retention_test.pl => vzdump_new_test.pl} (74%)
>>>
>>
>>
>>
>> _______________________________________________
>> pve-devel mailing list
>> pve-devel@lists.proxmox.com
>> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
>>
>>
> 
> 
> _______________________________________________
> pve-devel mailing list
> pve-devel@lists.proxmox.com
> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel




^ permalink raw reply	[flat|nested] 15+ messages in thread

* [pve-devel] applied: [PATCH v2 common 1/8] sendmail: use more complete email regex and shellquote
  2021-02-15 12:24 ` [pve-devel] [PATCH v2 common 1/8] sendmail: use more complete email regex and shellquote Fabian Ebner
@ 2021-02-18 11:54   ` Thomas Lamprecht
  0 siblings, 0 replies; 15+ messages in thread
From: Thomas Lamprecht @ 2021-02-18 11:54 UTC (permalink / raw)
  To: Proxmox VE development discussion, Fabian Ebner

On 15.02.21 13:24, Fabian Ebner wrote:
> Shellquote is needed for '~', and while it doesn't help with '-', there should
> be no problem, because options are separated from mailto since commit
> 216a3f4f131693dc4bbad5e06e96a61baef5f5e9.
> 
> Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
> ---
> 
> New in v2.
> 
> Since JSONSchema already uses Tools, the pattern has to live in Tools.
> 
>  src/PVE/JSONSchema.pm |  2 +-
>  src/PVE/Tools.pm      | 17 ++++++++++++-----
>  2 files changed, 13 insertions(+), 6 deletions(-)
> 
>

applied, thanks!




^ permalink raw reply	[flat|nested] 15+ messages in thread

* [pve-devel] applied: [PATCH v2 common 2/8] register email-or-username format
  2021-02-15 12:24 ` [pve-devel] [PATCH v2 common 2/8] register email-or-username format Fabian Ebner
@ 2021-02-18 11:54   ` Thomas Lamprecht
  0 siblings, 0 replies; 15+ messages in thread
From: Thomas Lamprecht @ 2021-02-18 11:54 UTC (permalink / raw)
  To: Proxmox VE development discussion, Fabian Ebner

On 15.02.21 13:24, Fabian Ebner wrote:
> To be used for the mailto vzdump parameter.
> 
> Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
> ---
> 
> New in v2.
> 
>  src/PVE/JSONSchema.pm | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
> 
>

applied, thanks!




^ permalink raw reply	[flat|nested] 15+ messages in thread

* [pve-devel] applied: [PATCH-SERIES v2] loosen up mailto regex for backwards compatibility
  2021-02-15 12:24 [pve-devel] [PATCH-SERIES v2] loosen up mailto regex for backwards compatibility Fabian Ebner
                   ` (8 preceding siblings ...)
  2021-02-17  9:52 ` [pve-devel] [PATCH-SERIES v2] loosen up mailto regex for backwards compatibility Dominik Csapak
@ 2021-02-19 15:36 ` Thomas Lamprecht
  9 siblings, 0 replies; 15+ messages in thread
From: Thomas Lamprecht @ 2021-02-19 15:36 UTC (permalink / raw)
  To: Proxmox VE development discussion, Fabian Ebner

On 15.02.21 13:24, Fabian Ebner wrote:
> especially regarding the whitespace-agnostic behavior. And while we're at it,
> also use the more complete email regex from pve-common.
> 
> Changes from v1:
>     * re-use the email regex from pve-common
>     * improve printing out mailto parameters to the cron file
> 
> 
> common:
> 
> Fabian Ebner (2):
>   sendmail: use more complete email regex and shellquote
>   register email-or-username format
> 
>  src/PVE/JSONSchema.pm | 14 +++++++++++++-
>  src/PVE/Tools.pm      | 17 ++++++++++++-----
>  2 files changed, 25 insertions(+), 6 deletions(-)
> 
> 
> guest-common:
> 
> Fabian Ebner (3):
>   vzdump: command line: refactor handling prune-backups
>   vzdump: command line: make sure mailto is comma-separated
>   vzdump: mailto: use email-or-username-list format
> 
>  PVE/VZDump/Common.pm | 14 +++++---------
>  1 file changed, 5 insertions(+), 9 deletions(-)
> 
> 
> manager:
> 
> Fabian Ebner (3):
>   vzdump: refactor parsing mailto so it can be mocked
>   test: vzdump: add tests for mailto
>   test: vzdump: rename vzdump_new_retention_test.pl to
>     vzdump_new_test.pl
> 
>  PVE/API2/VZDump.pm                            |  11 +-
>  PVE/VZDump.pm                                 |  21 +++
>  test/Makefile                                 |   8 +-
>  ...w_retention_test.pl => vzdump_new_test.pl} | 174 +++++++++++++++++-
>  4 files changed, 198 insertions(+), 16 deletions(-)
>  rename test/{vzdump_new_retention_test.pl => vzdump_new_test.pl} (74%)
> 



applied, with Dominik's R-b tag added to most (I forgot in guest-common)...
Thanks to both of you!




^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2021-02-19 15:36 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-15 12:24 [pve-devel] [PATCH-SERIES v2] loosen up mailto regex for backwards compatibility Fabian Ebner
2021-02-15 12:24 ` [pve-devel] [PATCH v2 common 1/8] sendmail: use more complete email regex and shellquote Fabian Ebner
2021-02-18 11:54   ` [pve-devel] applied: " Thomas Lamprecht
2021-02-15 12:24 ` [pve-devel] [PATCH v2 common 2/8] register email-or-username format Fabian Ebner
2021-02-18 11:54   ` [pve-devel] applied: " Thomas Lamprecht
2021-02-15 12:24 ` [pve-devel] [PATCH v2 guest-common 3/8] vzdump: command line: refactor handling prune-backups Fabian Ebner
2021-02-15 12:24 ` [pve-devel] [PATCH v2 guest-common 4/8] vzdump: command line: make sure mailto is comma-separated Fabian Ebner
2021-02-15 12:24 ` [pve-devel] [PATCH v2 guest-common 5/8] vzdump: mailto: use email-or-username-list format Fabian Ebner
2021-02-15 12:25 ` [pve-devel] [PATCH v2 manager 6/8] vzdump: refactor parsing mailto so it can be mocked Fabian Ebner
2021-02-15 12:25 ` [pve-devel] [PATCH v2 manager 7/8] test: vzdump: add tests for mailto Fabian Ebner
2021-02-15 12:25 ` [pve-devel] [PATCH v2 manager 8/8] test: vzdump: rename vzdump_new_retention_test.pl to vzdump_new_test.pl Fabian Ebner
2021-02-17  9:52 ` [pve-devel] [PATCH-SERIES v2] loosen up mailto regex for backwards compatibility Dominik Csapak
2021-02-17 10:35   ` Fabian Ebner
2021-02-17 11:42     ` Fabian Ebner
2021-02-19 15:36 ` [pve-devel] applied: " Thomas Lamprecht

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal