$j + 1 && $line{$j}.$line{$j+1} == '*/' ) { $mode = ''; $j++; } break; case 'D': // Delimiter detect switch ( $line{$j} ) { case '"': case "'": // Double quote string $delimiter = $value = $line{$j}; $mode = 'S'; break; case ' ': // Nothing yet break; default: if ( strtoupper( substr( $line, $j, 4 ) ) == 'TRUE' ) { // Boolean TRUE $newcfg{$key} = 'TRUE'; $key = ''; $mode = ';'; } else if ( strtoupper( substr( $line, $j, 5 ) ) == 'FALSE' ) { $newcfg{$key} = 'FALSE'; $key = ''; $mode = ';'; } else { // Number or function call $mode = 'N'; $value = $line{$j}; } } break; default: if ( $line{$j} == '$' ) { // We must detect $key name $mode = 'K'; $key = '$'; } else if ( $s < $j + 2 ) { } else if ( strtoupper( substr( $line, $j, 7 ) ) == 'GLOBAL ' ) { // Skip untill next ; $mode = ';'; $j += 6; } else if ( $line{$j}.$line{$j+1} == '/*' ) { $mode = 'C'; $j++; } else if ( $line{$j} == '#' || $line{$j}.$line{$j+1} == '//' ) { // Delete till the end of the line $j = $s; } } } } } /* Change paths containing SM_PATH to admin-friendly paths relative to the config dir, i.e.: '' --> SM_PATH . 'images/logo.gif' --> ../images/logo.gif '/absolute/path/logo.gif' --> /absolute/path/logo.gif 'http://whatever/' --> http://whatever Note removal of quotes in returned value */ function change_to_rel_path($old_path) { $new_path = str_replace("SM_PATH . '", "../", $old_path); $new_path = str_replace("../config/","", $new_path); $new_path = str_replace("'","", $new_path); return $new_path; } /* Change relative path (relative to config dir) to internal SM_PATH, i.e.: empty_string --> '' ../images/logo.gif --> SM_PATH . 'images/logo.gif' images/logo.gif --> SM_PATH . 'config/images/logo.gif' /absolute/path/logo.gif --> '/absolute/path/logo.gif' http://whatever/ --> 'http://whatever' */ function change_to_sm_path($old_path) { if ( $old_path === '' || $old_path == "''" ) { return "''"; } elseif ( preg_match("/^(\/|http)/", $old_path) ) { return "'" . $old_path . "'"; } elseif ( preg_match("/^(\$|SM_PATH)/", $old_path) ) { return $old_path; } $new_path = ''; $rel_path = explode("../", $old_path); if ( count($rel_path) > 2 ) { // Since we're relative to the config dir, // more than 1 ../ puts us OUTSIDE the SM tree. // get full path to config.php, then pop the filename $abs_path = explode('/', realpath (SM_PATH . 'config/config.php')); array_pop ($abs_path); foreach ( $rel_path as $subdir ) { if ( $subdir === '' ) { array_pop ($abs_path); } else { array_push($abs_path, $subdir); } } foreach ($abs_path as $subdir) { $new_path .= $subdir . '/'; } $new_path = "'$new_path'"; } elseif ( count($rel_path) > 1 ) { // we're within the SM tree, prepend SM_PATH $new_path = str_replace('../',"SM_PATH . '", $old_path . "'"); } else { // Last, if it's a relative path without a .. prefix, // we're somewhere within the config dir, so prepend // SM_PATH . 'config/ $new_path = "SM_PATH . 'config/" . $old_path . "'"; } return $new_path; } /* ---------------------- main -------------------------- */ define('SM_PATH','../../'); /* SquirrelMail required files. */ require_once(SM_PATH . 'include/validate.php'); require_once(SM_PATH . 'functions/page_header.php'); require_once(SM_PATH . 'functions/imap.php'); require_once(SM_PATH . 'include/load_prefs.php'); require_once(SM_PATH . 'plugins/administrator/defines.php'); require_once(SM_PATH . 'plugins/administrator/auth.php'); GLOBAL $data_dir, $username; if ( !adm_check_user() ) { header('Location: ' . SM_PATH . 'src/options.php') ; exit; } displayPageHeader($color, 'None'); $newcfg = array( ); foreach ( $defcfg as $key => $def ) { $newcfg[$key] = ''; } $cfgfile = SM_PATH . 'config/config.php'; parseConfig( SM_PATH . 'config/config_default.php' ); parseConfig( $cfgfile ); $colapse = array( 'Titles' => 'off', 'Group1' => getPref($data_dir, $username, 'adm_Group1', 'off' ), 'Group2' => getPref($data_dir, $username, 'adm_Group2', 'on' ), 'Group3' => getPref($data_dir, $username, 'adm_Group3', 'on' ), 'Group4' => getPref($data_dir, $username, 'adm_Group4', 'on' ), 'Group5' => getPref($data_dir, $username, 'adm_Group5', 'on' ), 'Group6' => getPref($data_dir, $username, 'adm_Group6', 'on' ), 'Group7' => getPref($data_dir, $username, 'adm_Group7', 'on' ), 'Group8' => getPref($data_dir, $username, 'adm_Group8', 'on' ) ); /* look in $_GET array for 'switch' */ if ( sqgetGlobalVar('switch', $switch, SQ_GET) ) { if ( $colapse[$switch] == 'on' ) { $colapse[$switch] = 'off'; } else { $colapse[$switch] = 'on'; } setPref($data_dir, $username, "adm_$switch", $colapse[$switch] ); } echo "
" . "
". "" , "", " $v ) { $l = strtolower( $v ); $type = SMOPT_TYPE_UNDEFINED; $n = substr( $k, 1 ); $n = str_replace( '[', '_', $n ); $n = str_replace( ']', '_', $n ); $e = 'adm_' . $n; $name = $k; $size = 50; if ( isset( $defcfg[$k] ) ) { $name = $defcfg[$k]['name']; $type = $defcfg[$k]['type']; if ( isset( $defcfg[$k]['size'] ) ) { $size = $defcfg[$k]['size']; } else { $size = 40; } } else if ( $l == 'true' ) { $v = 'TRUE'; $type = SMOPT_TYPE_BOOLEAN; } else if ( $l == 'false' ) { $v = 'FALSE'; $type = SMOPT_TYPE_BOOLEAN; } else if ( $v{0} == "'" ) { $type = SMOPT_TYPE_STRING; } else if ( $v{0} == '"' ) { $type = SMOPT_TYPE_STRING; } if ( substr( $k, 0, 7 ) == '$theme[' ) { $type = SMOPT_TYPE_THEME; } else if ( substr( $k, 0, 9 ) == '$plugins[' ) { $type = SMOPT_TYPE_PLUGINS; } else if ( substr( $k, 0, 13 ) == '$ldap_server[' ) { $type = SMOPT_TYPE_LDAP; } if( $type == SMOPT_TYPE_TITLE || $colapse[$act_grp] == 'off' ) { switch ( $type ) { case SMOPT_TYPE_LDAP: case SMOPT_TYPE_PLUGINS: case SMOPT_TYPE_THEME: case SMOPT_TYPE_HIDDEN: break; case SMOPT_TYPE_EXTERNAL: echo ""; break; case SMOPT_TYPE_TITLE: if ( $colapse[$k] == 'on' ) { $sw = '(+)'; } else { $sw = '(-)'; } echo ""; $act_grp = $k; break; case SMOPT_TYPE_COMMENT: $v = substr( $v, 1, strlen( $v ) - 2 ); echo "\n"; break; case SMOPT_TYPE_INTEGER: /* look for variable $e in POST, fill into $v */ if ( sqgetGlobalVar($e, $v, SQ_POST) ) { $v = intval( $v ); $newcfg[$k] = $v; } echo "\n"; break; case SMOPT_TYPE_NUMLIST: if ( sqgetGlobalVar($e, $v, SQ_POST) ) { $newcfg[$k] = $v; } echo "\n"; break; case SMOPT_TYPE_STRLIST: if ( sqgetGlobalVar($e, $v, SQ_POST) ) { $v = '"' . $v . '"'; $newcfg[$k] = $v; } echo "\n"; break; case SMOPT_TYPE_TEXTAREA: if ( sqgetGlobalVar($e, $v, SQ_POST) ) { $v = '"' . $v . '"'; $newcfg[$k] = str_replace( "\n", '', $v ); } echo "\n"; break; case SMOPT_TYPE_STRING: if ( sqgetGlobalVar($e, $v, SQ_POST) ) { $v = '"' . $v . '"'; $newcfg[$k] = $v; } if ( $v == '""' && isset( $defcfg[$k]['default'] ) ) { $v = "'" . $defcfg[$k]['default'] . "'"; $newcfg[$k] = $v; } echo "\n"; break; case SMOPT_TYPE_BOOLEAN: if ( sqgetGlobalVar($e, $v, SQ_POST) ) { $newcfg[$k] = $v; } else { $v = strtoupper( $v ); } if ( $v == 'TRUE' ) { $ct = ' checked'; $cf = ''; } else { $ct = ''; $cf = ' checked'; } echo "\n"; break; case SMOPT_TYPE_PATH: if ( sqgetGlobalVar($e, $v, SQ_POST) ) { $v = change_to_sm_path($v); $newcfg[$k] = $v; } if ( $v == "''" && isset( $defcfg[$k]['default'] ) ) { $v = change_to_sm_path($defcfg[$k]['default']); $newcfg[$k] = $v; } echo "\n"; break; default: echo "\n"; } } } /* Special Themes Block */ if ( $colapse['Group7'] == 'off' ) { $i = 0; echo ''; while ( isset( $newcfg["\$theme[$i]['NAME']"] ) ) { $k1 = "\$theme[$i]['NAME']"; $e1 = "theme_name_$i"; if ( sqgetGlobalVar($e, $v1, SQ_POST) ) { $v1 = '"' . str_replace( '\"', '"', $v1 ) . '"'; $v1 = '"' . str_replace( '"', '\"', $v1 ) . '"'; $newcfg[$k1] = $v1; } else { $v1 = $newcfg[$k1]; } $k2 = "\$theme[$i]['PATH']"; $e2 = "theme_path_$i"; if ( sqgetGlobalVar($e, $v2, SQ_POST) ) { $v2 = change_to_sm_path($v2); $newcfg[$k2] = $v2; } else { $v2 = $newcfg[$k2]; } $name = substr( $v1, 1, strlen( $v1 ) - 2 ); $path = change_to_rel_path($v2); echo ''. "". "". "\n"; $i++; } } /* Special Plugins Block */ if ( $colapse['Group8'] == 'on' ) { $sw = '(+)'; } else { $sw = '(-)'; } echo "'; if( $colapse['Group8'] == 'off' ) { $plugpath = SM_PATH . 'plugins/'; if ( file_exists($plugpath) ) { $fd = opendir( $plugpath ); $op_plugin = array(); $p_count = 0; while (false !== ($file = readdir($fd))) { if ($file != '.' && $file != '..' && $file != 'CVS' && is_dir($plugpath . $file) ) { $op_plugin[] = $file; $p_count++; } } closedir($fd); asort( $op_plugin ); /* Lets get the plugins that are active */ $plugins = array(); if ( sqgetGlobalVar('plg', $v, SQ_POST) ) { foreach ( $op_plugin as $plg ) { if ( sqgetGlobalVar("plgs_$plg", $v, SQ_POST) && $v == 'on' ) { $plugins[] = $plg; } } $i = 0; foreach ( $plugins as $plg ) { $k = "\$plugins[$i]"; $newcfg[$k] = "'$plg'"; $i++; } while ( isset( $newcfg["\$plugins[$i]"] ) ) { $k = "\$plugins[$i]"; $newcfg[$k] = ''; $i++; } } else { $i = 0; while ( isset( $newcfg["\$plugins[$i]"] ) ) { $k = "\$plugins[$i]"; $v = $newcfg[$k]; $plugins[] = substr( $v, 1, strlen( $v ) - 2 ); $i++; } } echo "'; } else { echo '\n"; } } echo "" , '
" . _("Configuration Administrator") . "
"; ?> Note: it is recommended that you configure your system using conf.pl, and not this plugin. conf.pl contains additional information regarding the purpose of variables and appropriate values, as well as additional verification steps.
Run or consult conf.pl should you run into difficulty with your configuration.
$name" . $defcfg[$k]['value'] . "
" . "$sw " . "$name
$name". "$v"; $newcfg[$k] = "'$v'"; if ( isset( $defcfg[$k]['comment'] ) ) { echo '   ' . $defcfg[$k]['comment']; } echo "
$name". ""; if ( isset( $defcfg[$k]['comment'] ) ) { echo '   ' . $defcfg[$k]['comment']; } echo "
$name"; echo "'; if ( isset( $defcfg[$k]['comment'] ) ) { echo '   ' . $defcfg[$k]['comment']; } echo "
$name". "'; if ( isset( $defcfg[$k]['comment'] ) ) { echo '   ' . $defcfg[$k]['comment']; } echo "
$name". ""; if ( isset( $defcfg[$k]['comment'] ) ) { echo '   ' . $defcfg[$k]['comment']; } echo "
$name". ""; if ( isset( $defcfg[$k]['comment'] ) ) { echo '   ' . $defcfg[$k]['comment']; } echo "
$name" . "" . _("Yes") . "" . _("No"); if ( isset( $defcfg[$k]['comment'] ) ) { echo '   ' . $defcfg[$k]['comment']; } echo "
$name". ""; if ( isset( $defcfg[$k]['comment'] ) ) { echo '   ' . $defcfg[$k]['comment']; } echo "
$name" . "$v"; if ( isset( $defcfg[$k]['comment'] ) ) { echo '   ' . $defcfg[$k]['comment']; } echo "
' . _("Theme Name") . '' . _("Theme Path") . '
$i.
" . "$sw " . _("Plugins") . '
' . "". "\n"; } echo '
"; foreach ( $op_plugin as $plg ) { if ( in_array( $plg, $plugins ) ) { $sw = ' checked'; } else { $sw = ''; } echo '
$plg
Plugin directory could not be found: ' . $plugpath . "
'; /* Write the options to the file. */ if( $fp = @fopen( $cfgfile, 'w' ) ) { fwrite( $fp, " $v ) { if ( $k{0} == '$' && $v <> '' ) { if ( substr( $k, 1, 11 ) == 'ldap_server' ) { $v = substr( $v, 0, strlen( $v ) - 1 ) . "\n)"; $v = str_replace( 'array(', "array(\n\t", $v ); $v = str_replace( "',", "',\n\t", $v ); } fwrite( $fp, "$k = $v;\n" ); } } fwrite( $fp, '?>' ); fclose( $fp ); } else { echo '
'. _("Config file can't be opened. Please check config.php."). '
'; } ?>