From 8c2008dcfe028cf95efa505b10dd5fb9852a7970 Mon Sep 17 00:00:00 2001 From: Jesse Norell <jesse@kci.net> Date: Wed, 2 Mar 2022 14:18:23 -0700 Subject: [PATCH] fix $app->system-> calls in system/ but not interface/ --- interface/lib/classes/functions.inc.php | 7 ++++--- interface/lib/classes/system.inc.php | 26 +++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/interface/lib/classes/functions.inc.php b/interface/lib/classes/functions.inc.php index b39486e2c4..1b39668674 100644 --- a/interface/lib/classes/functions.inc.php +++ b/interface/lib/classes/functions.inc.php @@ -472,15 +472,16 @@ class functions { global $app; // generate the SSH key pair for the client - $app->system->exec_safe('mktemp -dt id_rsa.XXXXXXXX'); - $tmpdir = $app->system->last_exec_out(); + if (! $tmpdir = $app->system->exec_safe('mktemp -dt id_rsa.XXXXXXXX')) { + $app->log("mktemp failed, cannot create SSH keypair for ".$username, LOGLEVEL_WARN); + } $id_rsa_file = $tmpdir . uniqid('',true); $id_rsa_pub_file = $id_rsa_file.'.pub'; if(file_exists($id_rsa_file)) unset($id_rsa_file); if(file_exists($id_rsa_pub_file)) unset($id_rsa_pub_file); if(!file_exists($id_rsa_file) && !file_exists($id_rsa_pub_file)) { $app->system->exec_safe('ssh-keygen -t rsa -C ? -f ? -N ""', $username.'-rsa-key-'.time(), $id_rsa_file); - $app->db->query("UPDATE client SET created_at = UNIX_TIMESTAMP(), id_rsa = ?, ssh_rsa = ? WHERE client_id = ?", $app->system->file_get_contents($id_rsa_file), $app->system->file_get_contents($id_rsa_pub_file), $client_id); + $app->db->query("UPDATE client SET created_at = UNIX_TIMESTAMP(), id_rsa = ?, ssh_rsa = ? WHERE client_id = ?", @file_get_contents($id_rsa_file), @file_get_contents($id_rsa_pub_file), $client_id); $app->system->rmdir($tmpdir, true); } else { $app->log("Failed to create SSH keypair for ".$username, LOGLEVEL_WARN); diff --git a/interface/lib/classes/system.inc.php b/interface/lib/classes/system.inc.php index d6b0ef149e..9cb171cae5 100644 --- a/interface/lib/classes/system.inc.php +++ b/interface/lib/classes/system.inc.php @@ -79,6 +79,32 @@ class system { return false; } + function rmdir($path, $recursive=false) { + // Disallow operating on root directory + if(realpath($path) == '/') { + $app->log("rmdir: afraid I might delete root: $path", LOGLEVEL_WARN); + return false; + } + + $path = rtrim($path, '/'); + if (is_dir($path) && !is_link($path)) { + $objects = array_diff(scandir($path), array('.', '..')); + foreach ($objects as $object) { + if ($recursive) { + if (is_dir("$path/$object") && !is_link("$path/$object")) { + $this->rmdir("$path/$object", $recursive); + } else { + unlink ("$path/$object"); + } + } else { + $app->log("rmdir: invoked non-recursive, not removing $path (expect rmdir failure)", LOGLEVEL_DEBUG); + } + } + return rmdir($path); + } + return false; + } + public function last_exec_out() { return $this->_last_exec_out; } -- GitLab