diff options
Diffstat (limited to 'src/etc/rc.initial.store_config_to_removable_device')
-rwxr-xr-x | src/etc/rc.initial.store_config_to_removable_device | 187 |
1 files changed, 107 insertions, 80 deletions
diff --git a/src/etc/rc.initial.store_config_to_removable_device b/src/etc/rc.initial.store_config_to_removable_device index a7814c1..e7a2c63 100755 --- a/src/etc/rc.initial.store_config_to_removable_device +++ b/src/etc/rc.initial.store_config_to_removable_device @@ -1,92 +1,119 @@ #!/usr/local/bin/php-cgi -f <?php /* - rc.initial.store_config_to_removable_device - part of m0n0wall (http://m0n0.ch/wall) + * rc.initial.store_config_to_removable_device + * + * part of pfSense (https://www.pfsense.org) + * Copyright (c) 2004-2016 Electric Sheep Fencing, LLC + * All rights reserved. + * + * originally part of m0n0wall (http://m0n0.ch/wall) + * Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>. + * 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. + * + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * "This product includes software developed by the pfSense Project + * for use in the pfSense® software distribution. (http://www.pfsense.org/). + * + * 4. The names "pfSense" and "pfSense Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * coreteam@pfsense.org. + * + * 5. Products derived from this software may not be called "pfSense" + * nor may "pfSense" appear in their names without prior written + * permission of the Electric Sheep Fencing, LLC. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * + * "This product includes software developed by the pfSense Project + * for use in the pfSense software distribution (http://www.pfsense.org/). + * + * THIS SOFTWARE IS PROVIDED BY THE pfSense PROJECT ``AS IS'' AND ANY + * EXPRESSED 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 pfSense PROJECT OR + * ITS CONTRIBUTORS 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. + */ - Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>. - All rights reserved. +/* parse the configuration and include all functions used below */ +require_once("config.inc"); +require_once("functions.inc"); +require_once("util.inc"); - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: +$fp = fopen('php://stdin', 'r'); - 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. -*/ - - /* parse the configuration and include all functions used below */ - require_once("config.inc"); - require_once("functions.inc"); - require_once("util.inc"); - - $fp = fopen('php://stdin', 'r'); - - do { - $dirs = array(); - $dirs = return_dir_as_array("/var/db/pfi/"); - if (!is_array($dirs)) { - echo "\nNo capable storage devices detected.\n"; - fclose($fp); - return; - } - echo "\nDevices capable of config.xml storage:\n"; - foreach ($dirs as $dir) { - preg_match_all("/capable\_(.*)/", $dir, $match_array); - echo $match_array[1][0] . " "; - } - echo "\n\n"; - echo "Enter the device that you wish the"; - echo "\n"; - echo "{$g['product_name']} configuration file to reside on: "; - $move_config_to_device = chop(fgets($fp)); - if ($move_config_to_device == "") { - fclose($fp); - return 0; - } - } while (!$move_config_to_device); - - mwexec("/bin/mkdir -p /tmp/mnt/cf"); - - $status = mwexec("/sbin/mount -w -t msdosfs /dev/{$move_config_to_device} /tmp/mnt/cf"); - if (!$status) { - echo "Error while mounting {$move_config_to_device}.\n"; +do { + $dirs = array(); + $dirs = return_dir_as_array("/var/db/pfi/"); + if (!is_array($dirs)) { + echo "\nNo capable storage devices detected.\n"; fclose($fp); return; } + echo "\nDevices capable of config.xml storage:\n"; + foreach ($dirs as $dir) { + preg_match_all("/capable\_(.*)/", $dir, $match_array); + echo $match_array[1][0] . " "; + } + echo "\n\n"; + echo "Enter the device that you wish the"; + echo "\n"; + echo "{$g['product_name']} configuration file to reside on: "; + $move_config_to_device = chop(fgets($fp)); + if ($move_config_to_device == "") { + fclose($fp); + return 0; + } +} while (!$move_config_to_device); + +mwexec("/bin/mkdir -p /tmp/mnt/cf"); - echo "\n\nProcessing: "; - $lockkey = lock('config'); - echo "moving..."; - mwexec("mkdir -p /tmp/mnt/cf/conf/"); - mwexec("/bin/mv /cf/conf/config.xml /tmp/mnt/cf/conf/"); - echo "removing old..."; - echo " nullfs... "; - system("/sbin/umount /cf/conf"); - system("/sbin/umount /conf"); - mwexec("/bin/rm -rf /conf/*.*"); - /* use nullfs to mount */ - system("/sbin/mount_nullfs /tmp/mnt/cf/conf /conf"); - system("/sbin/mount_nullfs /tmp/mnt/cf /cf"); - echo "linking..."; - mwexec("/bin/rm -rf /var/db/pfi"); - unlock($lockkey); - echo "done.\n"; - echo "\nYour configuration has been moved to {$move_config_to_device}\n"; - touch("/tmp/config_moved"); +$status = mwexec("/sbin/mount -w -t msdosfs /dev/{$move_config_to_device} /tmp/mnt/cf"); +if (!$status) { + echo "Error while mounting {$move_config_to_device}.\n"; fclose($fp); + return; +} + +echo "\n\nProcessing: "; +$lockkey = lock('config'); +echo "moving..."; +mwexec("mkdir -p /tmp/mnt/cf/conf/"); +mwexec("/bin/mv /cf/conf/config.xml /tmp/mnt/cf/conf/"); +echo "removing old..."; +echo " nullfs... "; +system("/sbin/umount /cf/conf"); +system("/sbin/umount /conf"); +mwexec("/bin/rm -rf /conf/*.*"); +/* use nullfs to mount */ +system("/sbin/mount_nullfs /tmp/mnt/cf/conf /conf"); +system("/sbin/mount_nullfs /tmp/mnt/cf /cf"); +echo "linking..."; +mwexec("/bin/rm -rf /var/db/pfi"); +unlock($lockkey); +echo "done.\n"; +echo "\nYour configuration has been moved to {$move_config_to_device}\n"; +touch("/tmp/config_moved"); +fclose($fp); ?> |