Signed-off-by: Stefan Reiter <s.rei...@proxmox.com>
---
 PVE/API2/Storage/Status.pm | 25 +++++++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)

diff --git a/PVE/API2/Storage/Status.pm b/PVE/API2/Storage/Status.pm
index 9a5a952..8649a7d 100644
--- a/PVE/API2/Storage/Status.pm
+++ b/PVE/API2/Storage/Status.pm
@@ -369,7 +369,7 @@ __PACKAGE__->register_method ({
                type => 'string',
            },
            tmpfilename => { 
-               description => "The source file name. This parameter is usually 
set by the REST handler. You can only overwrite it when connecting to the 
trustet port on localhost.",
+               description => "The source file name. This parameter is usually 
set by the REST handler. You can only overwrite it when connecting to the 
trusted port on localhost.",
                type => 'string',
                optional => 1,
            },
@@ -427,10 +427,15 @@ __PACKAGE__->register_method ({
        my $dest = "$path/$filename";
        my $dirname = dirname($dest);
 
-       # we simply overwrite when destination when file already exists
+       # we simply overwrite when destination file already exists
+
+       # default mode for $dest is 600, templates have default 644
+       # let's keep them in sync
+       my $mode_cmd = ['chmod', 'a+r', '--', PVE::Tools::shell_quote($dest)];
 
        my $cmd;
        if ($node ne 'localhost' && $node ne PVE::INotify::nodename()) {
+           # remote node, execute commands over ssh
            my $remip = PVE::Cluster::remote_node_ip($node);
 
            my @ssh_options = ('-o', 'BatchMode=yes');
@@ -446,8 +451,9 @@ __PACKAGE__->register_method ({
 
            PVE::Tools::run_command([@remcmd, '/bin/mkdir', '-p', '--', 
PVE::Tools::shell_quote($dirname)],
                                    errmsg => "mkdir failed");
- 
+
            $cmd = ['/usr/bin/scp', @ssh_options, '--', $tmpfilename, 
"[$remip]:" . PVE::Tools::shell_quote($dest)];
+           $mode_cmd = [@remcmd, @$mode_cmd];
        } else {
            PVE::Storage::activate_storage($cfg, $param->{storage});
            File::Path::make_path($dirname);
@@ -456,7 +462,7 @@ __PACKAGE__->register_method ({
 
        my $worker = sub  {
            my $upid = shift;
-           
+
            print "starting file import from: $tmpfilename\n";
            print "target node: $node\n";
            print "target file: $dest\n";
@@ -468,6 +474,17 @@ __PACKAGE__->register_method ({
                unlink $dest;
                die $err;
            }
+
+           print "set file mode: " . join(' ', @$mode_cmd) . "\n";
+
+           # set file mode
+           eval { PVE::Tools::run_command($mode_cmd, errmsg => 'chmod error'); 
};
+           if (my $err = $@) {
+               # pve works with the default mode too, so this error has
+               # "cosmetic" consequences only - hence we warn, not die
+               warn $err;
+           }
+
            print "finished file import successfully\n";
        };
 
-- 
2.20.1


_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to