* @copyright 2003-2015 PgPool Global Development Group * @version CVS: $Id$ */ require_once('common.php'); $tpl->assign('help', basename( __FILE__, '.php')); if (!isset($_SESSION[SESSION_LOGIN_USER])) { header('Location: login.php'); exit(); } if (isset($_POST['action'])) { $action = $_POST['action']; } else { $action = FALSE; } global $g_msg_nodef; $g_msg_nodef = $message['errNoDefined']; global $g_msg_notfound; $g_msg_notfound = $message['errFileNotFound']; global $g_post; $g_post = $_POST; global $params; $params = array(); global $errors; $errors = array(); /* --------------------------------------------------------------------- */ /* define */ /* --------------------------------------------------------------------- */ $select_options = array( 'lang' => array('auto' => 'auto') + $messageList, 'version' => array_combine(versions(), versions()), 'm' => array('s' => 'smart', 'f' => 'fast', 'i' => 'immediate'), ); $tpl->assign('select_options', $select_options); /* --------------------------------------------------------------------- */ /* main */ /* --------------------------------------------------------------------- */ /* * Read current parameter */ $params['lang'] = (defined('_PGPOOL2_LANG')) ? _PGPOOL2_LANG : $message['errNoDefined']; $params['version'] = (defined('_PGPOOL2_LANG')) ? _PGPOOL2_VERSION : $message['errNoDefined']; $params['pgpool_config_file'] = (defined('_PGPOOL2_CONFIG_FILE')) ? _PGPOOL2_CONFIG_FILE : $message['errNoDefined']; $params['password_file'] = (defined('_PGPOOL2_PASSWORD_FILE')) ? _PGPOOL2_PASSWORD_FILE : $message['errNoDefined']; $params['pgpool_command'] = (defined('_PGPOOL2_COMMAND')) ? _PGPOOL2_COMMAND : $message['errNoDefined']; $params['c'] = (defined('_PGPOOL2_CMD_OPTION_C')) ? _PGPOOL2_CMD_OPTION_C : $message['errNoDefined']; $params['d'] = (defined('_PGPOOL2_CMD_OPTION_D')) ? _PGPOOL2_CMD_OPTION_D : $message['errNoDefined']; $params['D'] = (defined('_PGPOOL2_CMD_OPTION_LARGE_D')) ? _PGPOOL2_CMD_OPTION_LARGE_D : $message['errNoDefined']; $params['m'] = (defined('_PGPOOL2_CMD_OPTION_M')) ? _PGPOOL2_CMD_OPTION_M : $message['errNoDefined']; $params['n'] = (defined('_PGPOOL2_CMD_OPTION_N')) ? _PGPOOL2_CMD_OPTION_N : $message['errNoDefined']; $params['C'] = (defined('_PGPOOL2_CMD_OPTION_LARGE_C')) ? _PGPOOL2_CMD_OPTION_LARGE_C : $message['errNoDefined']; $params['pgpool_logfile'] = (defined('_PGPOOL2_LOG_FILE')) ? _PGPOOL2_LOG_FILE : $message['errNoDefined']; $params['pcp_client_dir'] = (defined('_PGPOOL2_PCP_DIR')) ? _PGPOOL2_PCP_DIR : $message['errNoDefined']; $params['pcp_hostname'] = (defined('_PGPOOL2_PCP_HOSTNAME')) ? _PGPOOL2_PCP_HOSTNAME : $message['errNoDefined']; $params['pcp_refresh_time'] = (defined('_PGPOOL2_STATUS_REFRESH_TIME')) ? _PGPOOL2_STATUS_REFRESH_TIME : $message['errNoDefined']; // PostgreSQL connect timeout. Default is 10. // This is also defined in common.php. $params['pg_connect_timeout'] = (defined('_PGPOOL2_PG_CONNECT_TIMEOUT')) ? _PGPOOL2_PG_CONNECT_TIMEOUT : 10; $tpl->assign('status', NULL); switch ( $action ) { case 'update': setValue('lang'); setValue('version'); setValue('pgpool_config_file'); setValue('password_file'); setValue('pgpool_command'); if (!is_executable($params['pgpool_command'])) { $errors['pgpool_command'] = $message['errFileNotFound']; } setBool('c'); setBool('D'); setBool('d'); setValue('m'); setBool('n'); setBool('C'); setValue('pgpool_logfile'); if ($params['pgpool_logfile'] != '' && isPipe($params['pgpool_logfile'])) { $tmp_str = trim($params['pgpool_logfile']); if ($tmp_str[0] != '|' || $tmp_str[strlen($tmp_str) - 1] == '|') { $errors['pgpool_logfile'] = $message['errIllegalPipe']; } } elseif ($params['pgpool_logfile'] != '' && !is_writable(dirname($params['pgpool_logfile']))) { $errors['pgpool_logfile'] = $message['errFileNotWritable']; } setValue('pcp_client_dir'); setValue('pcp_hostname'); if (!preg_match("/^[0-9a-zA-Z\._\-]+$/", $params['pcp_hostname'])) { $errors[$key] = $message['errIllegalHostname']; } setValue('pcp_refresh_time'); if (!is_numeric($params['pcp_refresh_time'] )) { $errors['pcp_refresh_time'] = $message['errShouldBeInteger']; } else { if ($params['pcp_refresh_time'] < 0) { $errors['pcp_refresh_time'] = $message['errShouldBeZeroOrMore']; } } setValue('pg_connect_timeout'); if (!is_numeric($params['pg_connect_timeout'] )) { $errors['pg_connect_timeout'] = $message['errShouldBeInteger']; } else { if ($params['pg_connect_timeout'] < 0) { $errors['pg_connect_timeout'] = $message['errShouldBeZeroOrMore']; } } /* * Confirm pgpool_version corresponds with pgpool_command's output in stderr * like "pgpool-II version 3.5alpha1 (ekieboshi)" */ $cmd = "{$params['pgpool_command']} --version 2>&1"; $ret = exec($cmd, $output, $return_var); if ($return_var == 0) { $output_arr = explode(" ", $output[0]); if (strpos($output_arr[2], $params['version']) !== 0) { $errors['version'] = $message['errWrongVersion']; } } /* * If no error, write conf/pgmgt.conf.php. */ if (count($errors) == 0) { $pgmgtConfigFile = dirname(__FILE__) . '/conf/pgmgt.conf.php'; if (! is_writable($pgmgtConfigFile)) { errorPage('e5003'); } $result = writePgmtConf($pgmgtConfigFile); if (!$result) { errorPage('e5001'); } $tpl->assign('status', 'success'); } else { $tpl->assign('errors', $errors); } /* * reload message catalog */ $lang = selectLanguage($params['lang'], $messageList); include('lang/' . $lang . '.lang.php'); $tpl->assign('message', $message); break; default: } $tpl->assign('pgpoolConf', _PGPOOL2_CONFIG_FILE); $tpl->assign('pcpConf', _PGPOOL2_PASSWORD_FILE); $tpl->assign('params', $params); $tpl->assign('errors', $errors); $tpl->display('config.tpl'); /* --------------------------------------------------------------------- */ /* Functions */ /* --------------------------------------------------------------------- */ function setValue($key) { global $g_post; global $g_err_msg; global $params; if (isset($g_post[$key])) { $params[$key] = $g_post[$key]; } else { $params[$key] = $g_msg_nodef; } if (strpos($key, 'file') !== FALSE && $key != 'pgpool_logfile') { fileError($key); } } function setBool($key) { global $g_post; global $params; switch ($key) { case 'C': $key_in_form = 'large_c'; break; case 'D': $key_in_form = 'large_d'; break; default: $key_in_form = $key; break; } if (isset($g_post[$key_in_form])) { $params[$key] = $g_post[$key_in_form]; } else { $params[$key] = 0; } } function fileError($key) { global $params; global $errors; global $g_msg_notfound; if (!@is_file($params[$key])) { $errors[$key] = $g_msg_notfound; } } function writePgmtConf($pgmgtConfigFile) { global $params; $fp = fopen($pgmgtConfigFile, "w"); if ($fp == FALSE) { return FALSE; } $str = "\n"; fputs($fp, $str); fclose($fp); return TRUE; } function write($fp, $defname, $val) { fputs($fp, "define('{$defname}', '{$val}');\n"); } ?>