We need this to correctly update the password file. --- PVE/API2/Storage/Config.pm | 25 +++++++++++++++++++++++-- PVE/Storage/Plugin.pm | 9 +++++++++ 2 files changed, 32 insertions(+), 2 deletions(-)
diff --git a/PVE/API2/Storage/Config.pm b/PVE/API2/Storage/Config.pm index d202784..09724f4 100755 --- a/PVE/API2/Storage/Config.pm +++ b/PVE/API2/Storage/Config.pm @@ -204,12 +204,25 @@ __PACKAGE__->register_method ({ PVE::SectionConfig::assert_if_modified($cfg, $digest); my $scfg = PVE::Storage::storage_config($cfg, $storeid); + my $type = $scfg->{type}; + + my $password; + # always extract pw, else it gets written to the www-data readable scfg + if (my $tmp_pw = extract_param($param, 'password')) { + if (($type eq 'pbs') || ($type eq 'cifs' && $param->{username})) { + $password = $tmp_pw; + } else { + warn "ignore password parameter\n"; + } + } - my $plugin = PVE::Storage::Plugin->lookup($scfg->{type}); + my $plugin = PVE::Storage::Plugin->lookup($type); my $opts = $plugin->check_config($storeid, $param, 0, 1); + my $delete_password = 0; + if ($delete) { - my $options = $plugin->private()->{options}->{$scfg->{type}}; + my $options = $plugin->private()->{options}->{$type}; foreach my $k (PVE::Tools::split_list($delete)) { my $d = $options->{$k} || die "no such option '$k'\n"; die "unable to delete required option '$k'\n" if !$d->{optional}; @@ -218,9 +231,17 @@ __PACKAGE__->register_method ({ if defined($opts->{$k}); delete $scfg->{$k}; + + $delete_password = 1 if $k eq 'password'; } } + if ($delete_password || defined($password)) { + $plugin->on_update_hook($storeid, $opts, password => $password); + } else { + $plugin->on_update_hook($storeid, $opts); + } + for my $k (keys %$opts) { $scfg->{$k} = $opts->{$k}; } diff --git a/PVE/Storage/Plugin.pm b/PVE/Storage/Plugin.pm index 0c39cbd..fb06c38 100644 --- a/PVE/Storage/Plugin.pm +++ b/PVE/Storage/Plugin.pm @@ -366,6 +366,15 @@ sub on_add_hook { # do nothing by default } +# called during storage configuration update (before the updated storage config got written) +# die to abort the update if there are (grave) problems +# NOTE: runs in a storage config *locked* context +sub on_update_hook { + my ($class, $storeid, $scfg, %param) = @_; + + # do nothing by default +} + # called during deletion of storage (before the new storage config got written) # and if the activate check on addition fails, to cleanup all storage traces # which on_add_hook may have created. -- 2.20.1 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel