From 46bc6e545a17e77202aaf01ec0cd8d5a46567525 Mon Sep 17 00:00:00 2001 From: Renato Botelho Date: Tue, 25 Aug 2015 08:08:24 -0300 Subject: Move main pfSense content to src/ --- src/etc/rc.initial.firmware_update | 190 +++++++++++++++++++++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100755 src/etc/rc.initial.firmware_update (limited to 'src/etc/rc.initial.firmware_update') diff --git a/src/etc/rc.initial.firmware_update b/src/etc/rc.initial.firmware_update new file mode 100755 index 0000000..2dff066 --- /dev/null +++ b/src/etc/rc.initial.firmware_update @@ -0,0 +1,190 @@ +#!/usr/local/bin/php-cgi -f + + "; + $url = chop(fgets($fp)); + if (!$url) { + fclose($fp); + die; + } + if ($url == "auto") { + $url = $autoupdateurl; + } + $status = does_url_exist($url); + if ($status) { + conf_mount_rw(); + mark_subsystem_dirty('firmware'); + unlink_if_exists("/root/firmware.tgz"); + echo "\nFetching file... "; + download_file_with_progress_bar($url, '/root/firmware.tgz'); + if (!file_exists("/root/firmware.tgz")) { + echo "Something went wrong during file transfer. Exiting.\n\n"; + fclose($fp); + clear_subsystem_dirty('firmware'); + die; + } + $status = does_url_exist("$url.sha256"); + if ($status) { + echo "\nFetching sha256... "; + download_file_with_progress_bar($url . ".sha256", '/root/firmware.tgz.sha256'); + echo "\n"; + } else { + echo "\n\nWARNING.\n"; + echo "\nCould not locate a sha256 file. We cannot verify the download once completed.\n\n"; + echo "Do you still want to proceed with the upgrade [n]? "; + $answer = strtoupper(chop(fgets($fp))); + if ($answer == "Y" or $answer == "YES") { + echo "\nContinuing upgrade..."; + } else { + echo "\nUpgrade cancelled.\n\n"; + die; + } + } + if (file_exists("/root/firmware.tgz.sha256")) { + $source_sha256 = trim(`cat /root/firmware.tgz.sha256 | awk '{ print \$4 }'`, "\r"); + $file_sha256 = trim(`sha256 /root/firmware.tgz | awk '{ print \$4 }'`, "\r"); + echo "URL sha256: $source_sha256\n"; + echo "Downloaded file sha256: $file_sha256\n"; + if ($source_sha256 <> $file_sha256) { + echo "\n\nsha256 checksum does not match. Cancelling upgrade.\n\n"; + unlink_if_exists("/root/firmware.tgz.sha256"); + fclose($fp); + clear_subsystem_dirty('firmware'); + die -1; + } + echo "\nsha256 checksum matches.\n"; + unlink_if_exists("/root/firmware.tgz.sha256"); + } + if (strstr($url, "nanobsd")) { + echo "NanoBSD upgrade file detected...\n"; + $type = "nanobsd"; + } else { + $type = "normal"; + } + do_upgrade("/root/firmware.tgz", $type); + clear_subsystem_dirty('firmware'); + exit; + } + case "2": + echo "\nEnter the complete path to the .tgz or .img.gz update file: "; + $path = chop(fgets($fp)); + if (!$path) { + fclose($fp); + die; + } + if (stristr($path, "nanobsd")) { + $type = "nanobsd"; + } + if (file_exists($path)) { + mark_subsystem_dirty('firmware'); + do_upgrade($path, $type); + clear_subsystem_dirty('firmware'); + } else { + echo "\nCould not find file.\n\n"; + fclose($fp); + die -1; + } +} + +function do_upgrade($path, $type) { + global $g, $fp; + + $sigchk = verify_digital_signature($path); + if ($sigchk == 1) { + $sig_warning = "The digital signature on this image is invalid."; + } elseif ($sigchk == 2) { + $sig_warning = "This image is not digitally signed."; + } elseif (($sigchk == 3) || ($sigchk == 4)) { + $sig_warning = "There has been an error verifying the signature on this image."; + } + if ($sig_warning) { + $sig_warning = "\nWARNING! ACHTUNG! DANGER!\n\n{$sig_warning}\n\n" . + "This means that the image you uploaded is not an official/supported image and\n" . + "may lead to unexpected behavior or security compromises.\n\n" . + "Only install images that come from sources that you trust, and make sure\n". + "that the image has not been tampered with.\n\n". + "Do you want to install this image anyway at your own risk [n]?"; + echo $sig_warning; + $command = strtoupper(chop(fgets($fp))); + if (strtoupper($command) == "Y" or strtoupper($command) == "Y" or strtoupper($command) == "YES") { + echo "\nContinuing upgrade..."; + } else { + echo "\nUpgrade cancelled.\n\n"; + die; + } + } + mark_subsystem_dirty('firmwarelock'); + echo "\nOne moment please...\nInvoking firmware upgrade..."; + if ($type == "nanobsd") { + mwexec_bg("/etc/rc.firmware pfSenseNanoBSDupgrade $path"); + } else { + mwexec_bg("/etc/rc.firmware pfSenseupgrade $path"); + } + sleep(10); + while (is_subsystem_dirty('firmwarelock')) { + sleep(1); + echo "."; + } + sleep(10); + echo "Done. Rebooting...\n\n"; + clear_subsystem_dirty('firmwarelock'); +} + +exec("rm -f /root/*.sha256"); +fclose($fp); + +?> -- cgit v1.1