1
0
mirror of https://github.com/mail-in-a-box/mailinabox.git synced 2025-04-03 00:07:05 +00:00
mailinabox/tools/editconf.php
2022-09-19 14:45:11 -04:00

134 lines
3.2 KiB
PHP

<?php
#####
##### This file is part of Mail-in-a-Box-LDAP which is released under the
##### terms of the GNU Affero General Public License as published by the
##### Free Software Foundation, either version 3 of the License, or (at
##### your option) any later version. See file LICENSE or go to
##### https://github.com/downtownallday/mailinabox-ldap for full license
##### details.
#####
#
# Edit a Nextcloud or other config.php file
#
# Specify the path to config.php as the first argument.
#
# Specify the name of the config variable as the second argument.
#
# Subsequent arguments specify the name and value pairs of elements to
# change or add. Each element of the pair are separate
# arguments. Arrays should be specified as "array(...)".
#
# Names may be preceeded with '+' to indicate that the value should be
# added, but not modify an existing value if it already exists.
#
# For example, to set dbhost to 'localhost' and trusted_domains to an
# array of values:
#
# php editconfig.php /usr/local/lib/roundcubemail/config/config.inc.php config dbhost localhost trusted_domains "array(0=>'localhost',1=>'127.0.0.1')"
#
# The original file is MODIFIED in-place!!!
#
require($argv[1]);
$config_var_name = $argv[2];
$configref = &$$config_var_name;
$dry_run = false;
function print_array($v, $level, $fp) {
fwrite($fp, "array (\n");
if ((array) $v !== $v) {
foreach($v as $kv) {
fwrite($fp, $kv . ",");
}
}
else {
foreach($v as $key => $kv) {
fwrite($fp,str_repeat(' ', $level));
if (is_string($key)) {
fwrite($fp,"'" . $key . "' => ");
}
else {
fwrite($fp,$key . " => ");
}
if (is_array($kv)) {
print_array($kv, $level+1, $fp);
}
else if (is_string($kv)) {
fwrite($fp,"'" . $kv . "',\n");
}
else if (is_bool($kv)) {
fwrite($fp, ($kv ? 'true' : 'false') . ",\n");
}
else {
fwrite($fp,$kv . ",\n");
}
}
}
fwrite($fp,str_repeat(' ', $level-1));
fwrite($fp,")");
if ($level>1) fwrite($fp,",\n");
}
for($i=3; $i<count($argv); $i+=2) {
$overwrite = true;
$name=$argv[$i];
if (substr($name,0,1) == "+") {
$overwrite = false;
$name=substr($name,1);
}
$value=$argv[$i+1];
if(substr($value,0,5) == "array") {
$value = eval('return ' . $value . ';');
}
else if (substr($value,0,8) == "constant") {
$value = eval('return ' . $value . ';');
}
else if (is_numeric($value)) {
if (strstr($value, ".") === FALSE) $value = intval($value);
else $value = floatval($value);
}
else if ($value == "true") {
$value = true;
}
else if ($value == "false") {
$value = false;
}
if ($overwrite || ! array_key_exists($name, $configref)) {
$configref[$name] = $value;
}
}
if ($dry_run) {
$fp = STDOUT;
} else {
$fp = fopen($argv[1] . ".new", "w");
}
fwrite($fp, "<?php\n");
fwrite($fp, "\$$config_var_name=");
print_array($configref, 1, $fp);
fwrite($fp, ";\n");
fwrite($fp, "?>\n");
fclose($fp);
# ok - rename
if (! $dry_run) {
if (file_exists($argv[1] . ".old")) {
unlink($argv[1] . ".old");
}
rename($argv[1], $argv[1] . ".old");
rename($argv[1] . ".new", $argv[1]);
}
?>