]> git.proxmox.com Git - pve-storage.git/commitdiff
content path overrides: allow single dots and enforce max-lengths
authorThomas Lamprecht <t.lamprecht@proxmox.com>
Mon, 20 Mar 2023 14:11:40 +0000 (15:11 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Mon, 20 Mar 2023 14:11:44 +0000 (15:11 +0100)
Allow a dot as long as its not followed by another dot and enforce
max component and (a reduced) max path length checking already at
schema level.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
PVE/Storage/Plugin.pm

index 09f6ad215f0eada9410d47d3ea613dacfc380382..c323085d774ba7ebcf556559af21acb36de16959 100644 (file)
@@ -355,8 +355,14 @@ PVE::JSONSchema::register_format('pve-dir-override', \&verify_dir_override);
 sub verify_dir_override {
     my ($value, $noerr) = @_;
 
-    if ($value =~ m/^([a-z]+)=[^.]+$/ && verify_content($1, $noerr)) {
-       return $value;
+    if ($value =~ m/^([a-z]+)=([^.]*(?:\.?[^.]+)+)$/) {
+       my ($content_type, $relative_path) = ($1, $2);
+       if (verify_content($content_type, $noerr)) {
+           # linux has 4k max-path, but limit total length to lower as its concat'd for full path
+           if (length($relative_path) < 1023 && !(grep { length($_) >= 255 } split('/', $relative_path))) {
+               return $value;
+           }
+       }
     }
 
     return undef if $noerr;