%PDF- %PDF-
| Direktori : /proc/thread-self/root/backups/router/usr/local/sbin/ |
| Current File : //proc/thread-self/root/backups/router/usr/local/sbin/opnsense-crypt |
#!/usr/local/bin/php
<?php
/*
* Copyright (C) 2023 Franco Fichtner <franco@opnsense.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
require_once('script/load_phalcon.php');
$crypter = new OPNsense\Backup\Local();
$config_xml = $argv[1] ?? '';
if ($config_xml == '') {
echo "No file given.\n";
exit(1);
}
if (!file_exists($config_xml)) {
echo "File not found: $config_xml\n";
exit(1);
}
$config_secret = preg_replace('/\.xml$/s', '.secret', $config_xml);
if ($config_xml == $config_secret) {
echo "File not ending with \".xml\": $config_xml\n";
exit(1);
}
if (!file_exists($config_secret)) {
echo "File not found: $config_secret\n";
exit(1);
}
$secret = file_get_contents($config_secret);
$secret = rtrim(file_get_contents($config_secret), "\n\r\t\v\x00");
if ($secret == '') {
echo "Secret is empty.\n";
exit(1);
}
$data = file_get_contents($config_xml);
$tagged = strpos($data, '---- BEGIN config.xml ----') === 0;
if ($tagged) {
$data = $crypter->decrypt($data, $secret);
} else {
$data = $crypter->encrypt($data, $secret);
}
if (empty($data)) {
echo sprintf("Could not %s file.\n", $tagged ? 'decrypt' : 'encrypt');
exit(1);
}
/* replace resulting file when ok as the operation is reversible */
file_put_contents($config_xml, $data);
exit(0);