]> git.proxmox.com Git - pve-common.git/commitdiff
prevent autovivification of sectionconfig options
authorDominik Csapak <d.csapak@proxmox.com>
Wed, 15 May 2019 08:03:50 +0000 (10:03 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Wed, 15 May 2019 08:16:33 +0000 (10:16 +0200)
If, somehow, someone passes a config to check_config with keys set
that are not in the options for that type, this fixed check
lead to autovivification, meaning that any future calls to the same
worker had an additional option for that type which is not optional

this lead to a wrongfully deleting of entries when updating an entry of
a different type, since all entries of the original types suddenly
did not satisfy their required options and would not get parsed
by read_file anymore (thus missing when a successful write_file was done)

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
src/PVE/SectionConfig.pm

index cc03aeaed638db1a4f6c4a736ade97ea90633649..09ab5c2a3b023d614707ea1c4421469ef56b54a8 100644 (file)
@@ -379,10 +379,10 @@ sub check_config {
 
     foreach my $k (keys %$config) {
        my $value = $config->{$k};
 
     foreach my $k (keys %$config) {
        my $value = $config->{$k};
-       
+
        die "can't change value of fixed parameter '$k'\n"
        die "can't change value of fixed parameter '$k'\n"
-           if !$create && $opts->{$k}->{fixed};
-       
+           if !$create && $opts->{$k} && $opts->{$k}->{fixed};
+
        if (defined($value)) {
            my $tmp = $class->check_value($type, $k, $value, $sectionId, $skipSchemaCheck);
            $settings->{$k} = $class->decode_value($type, $k, $tmp);
        if (defined($value)) {
            my $tmp = $class->check_value($type, $k, $value, $sectionId, $skipSchemaCheck);
            $settings->{$k} = $class->decode_value($type, $k, $tmp);