<?php // File admin.php / ibWebAdmin // Purpose panels for database administration tasks, gsec, gbak etc. // Author Lutz Brueckner <irie@gmx.de> // Copyright (c) 2000, 2001, 2002, 2003, 2004 by Lutz Brueckner, // published under the terms of the GNU General Public Licence v.2, // see file LICENCE for details // Created <02/10/02 08:47:06 lb> // // $Id$ require('./inc/script_start.inc.php'); // execute a delayed external command if ($HTTP_SERVER_VARS['REQUEST_METHOD'] == 'GET' && !empty($s_adm_command)) { list($binary_output, $binary_error) = exec_command($s_adm_command['command'], $s_adm_command['parameters'], $s_adm_command['stderr']); $s_adm_command = array(); } // // interface for the gfix command // $idx = get_panel_index($s_admin_panels, 'adm_gfix'); if ($s_admin_panels[$idx][2] == 'open') { if ($HTTP_SERVER_VARS['REQUEST_METHOD'] == 'POST') { $s_sysdba_pw = get_sysdba_pw(); $s_housekeeping = isset($HTTP_POST_VARS['adm_housekeeping']) ? $HTTP_POST_VARS['adm_housekeeping'] : ''; $s_adm_dialect = isset($HTTP_POST_VARS['adm_sql_dialect']) ? $HTTP_POST_VARS['adm_sql_dialect'] : ''; $s_adm_buffers = isset($HTTP_POST_VARS['adm_buffers']) ? $HTTP_POST_VARS['adm_buffers'] : ''; $s_access_mode = isset($HTTP_POST_VARS['adm_access_mode']) ? $HTTP_POST_VARS['adm_access_mode'] : ''; $s_write_mode = isset($HTTP_POST_VARS['adm_write_mode']) ? $HTTP_POST_VARS['adm_write_mode'] : ''; $s_shut_secs = isset($HTTP_POST_VARS['adm_shut_secs']) ? $HTTP_POST_VARS['adm_shut_secs'] : ''; $s_adm_sweep_ignore = isset($HTTP_POST_VARS['adm_sweep_ignore']) ? $HTTP_POST_VARS['adm_sweep_ignore'] : ''; $s_adm_validate_ignore = isset($HTTP_POST_VARS['adm_validate_ignore']) ? $HTTP_POST_VARS['adm_validate_ignore']: ''; $s_adm_validate = isset($HTTP_POST_VARS['adm_validate']) ? $HTTP_POST_VARS['adm_validate'] : ''; $s_adm_validate_option = isset($HTTP_POST_VARS['adm_validate_option']) ? $HTTP_POST_VARS['adm_validate_option']: ''; $s_adm_transaction = isset($HTTP_POST_VARS['adm_transaction']) ? $HTTP_POST_VARS['adm_transaction'] : ''; $s_adm_shut_noconns = isset($HTTP_POST_VARS['adm_shut_noconns']) ? $HTTP_POST_VARS['adm_shut_noconns'] : ''; $s_adm_shut_notrans = isset($HTTP_POST_VARS['adm_shut_notrans']) ? $HTTP_POST_VARS['adm_shut_notrans'] : ''; $s_adm_shut_force = isset($HTTP_POST_VARS['adm_shut_force']) ? $HTTP_POST_VARS['adm_shut_force'] : ''; $s_adm_shut_reconnect = isset($HTTP_POST_VARS['adm_shut_reconnect']) ? $HTTP_POST_VARS['adm_shut_reconnect'] : ''; } if (empty($warning)) { $parameters = ''; $disconnect = $logout = $redirect = FALSE; // set cache buffers if (isset($HTTP_POST_VARS['adm_gfix_buffers']) && !empty($HTTP_POST_VARS['adm_buffers'])) { $parameters .= ' -buffers '.$HTTP_POST_VARS['adm_buffers']; } // set dialect if (isset($HTTP_POST_VARS['adm_gfix_dialect']) && !empty($HTTP_POST_VARS['adm_sql_dialect'])) { $parameters .= ' -sql_dialect '.$HTTP_POST_VARS['adm_sql_dialect']; } // set access mode if (isset($HTTP_POST_VARS['adm_gfix_access_mode']) && !empty($HTTP_POST_VARS['adm_access_mode'])) { $mode = ($HTTP_POST_VARS['adm_access_mode'] == $adm_strings['ReadWrite']) ? 'read_write' : 'read_only'; $parameters .= ' -mode '.$mode; $disconnect = TRUE; $redirect = TRUE; } // set write mode if (isset($HTTP_POST_VARS['adm_gfix_write_mode']) && !empty($HTTP_POST_VARS['adm_write_mode'])) { $mode = ($HTTP_POST_VARS['adm_write_mode'] == $adm_strings['Sync']) ? 'sync' : 'async'; $parameters .= ' -write '.$mode; } // set housekeeping interval if (isset($HTTP_POST_VARS['adm_gfix_housekeeping']) && trim($HTTP_POST_VARS['adm_housekeeping']) != '') { $parameters .= ' -housekeeping '.$HTTP_POST_VARS['adm_housekeeping']; } // execute database sweep if (isset($HTTP_POST_VARS['adm_gfix_sweep'])) { $parameters .= ' -sweep'; $parameters .= (isset($HTTP_POST_VARS['adm_sweep_ignore']) && $HTTP_POST_VARS['adm_sweep_ignore'] == 'ignore') ? ' -ignore' : ''; } // perform data repair if (isset($HTTP_POST_VARS['adm_gfix_validate'])) { if (isset($HTTP_POST_VARS['adm_validate'])) { if ($HTTP_POST_VARS['adm_validate'] == 'mend') { $parameters .= ' -mend'; } if ($HTTP_POST_VARS['adm_validate'] == 'validate') { $parameters .= ' -validate'; $parameters .= (isset($HTTP_POST_VARS['adm_validate_option'])) ? ' -'.$HTTP_POST_VARS['adm_validate_option'] : ''; } } $parameters .= (isset($HTTP_POST_VARS['adm_validate_ignore'])) ? ' -ignore' : ''; $disconnect = TRUE; $redirect = TRUE; } // transaction recovery if (isset($HTTP_POST_VARS['adm_gfix_trans']) && isset($HTTP_POST_VARS['adm_transaction'])) { $parameters .= ' -'.$HTTP_POST_VARS['adm_transaction'].' all'; } // execute shutdown if (isset($HTTP_POST_VARS['adm_gfix_shutdown'])) { $seconds = (trim($HTTP_POST_VARS['adm_shut_secs']) == '') ? ' 0' : ' '.$HTTP_POST_VARS['adm_shut_secs']; $parameters .= (isset($HTTP_POST_VARS['adm_shut_noconns'])) ? ' -attach'.$seconds : ''; $parameters .= (isset($HTTP_POST_VARS['adm_shut_notrans'])) ? ' -tran'.$seconds : ''; $parameters .= (isset($HTTP_POST_VARS['adm_shut_force'])) ? ' -force'.$seconds : ''; if (strlen($parameters) > 0) { $parameters = ' -shut'.$parameters; } $disconnect = TRUE; $redirect = (isset($HTTP_POST_VARS['adm_shut_noconns'])) ? TRUE : FALSE; $logout = (isset($HTTP_POST_VARS['adm_shut_reconnect'])) ? FALSE : TRUE; } // rescind shutdown if (isset($HTTP_POST_VARS['adm_gfix_rescind'])) { $parameters .= ' -online'; } if (strlen($parameters) > 0) { $usr_str = !empty($s_sysdba_pw) ? ' -user SYSDBA' : ' -user '.ibwa_escapeshellarg($s_login['user']); $pw_str = !empty($s_sysdba_pw) ? ' -password ' . ibwa_escapeshellarg($s_sysdba_pw) : ' -password ' . ibwa_escapeshellarg($s_login['password']); $db_str = !empty($s_login['host']) ? ' ' . ibwa_escapeshellarg($s_login['host'].':'.$s_login['database']) : ' ' . ibwa_escapeshellarg($s_login['database']); $parameters .= $usr_str . $pw_str . $db_str ; if ($disconnect == TRUE) { ibase_close($dbhandle); } if ($logout == TRUE) { remove_edit_panels(); cleanup_session(); $s_connected = FALSE; } if ($redirect == TRUE) { $s_adm_command = array('command' => 'gfix', 'parameters' => $parameters, 'stderr' => TRUE); globalize_session_vars(); $script = (!empty($HTTP_SERVER_VARS['PHP_SELF'])) ? $HTTP_SERVER_VARS['PHP_SELF'] : $HTTP_SERVER_VARS['SCRIPT_NAME']; redirect(url_session($script.'?unconnected=1')); } list($binary_output, $binary_error) = exec_command('gfix', $parameters, TRUE); } } } // // get database statistics via gstat // $idx = get_panel_index($s_admin_panels, 'adm_dbstat'); if ($s_admin_panels[$idx][2] == 'open' && $s_connected) { list($gstat_output, $binary_error) = exec_command('gstat', ' -user '.ibwa_escapeshellarg($s_login['user']).' -password '.ibwa_escapeshellarg($s_login['password']).' '.ibwa_escapeshellarg($s_login['database'])); } // // get server statistics via gds_lock_print / iblockpr // $idx = get_panel_index($s_admin_panels, 'adm_server'); if ($s_admin_panels[$idx][2] == 'open') { if (stristr(php_uname(), 'wind') !== FALSE) { $exe = $s_login['server'] == 'FB_1.5' ? 'fb_lock_print' : 'iblockpr'; } else { $exe = $s_login['server'] == 'FB_1.5' ? 'fb_lock_mgr' : 'gds_lock_print'; } // get the LOCK_HEADER BLOCK list($iblockpr_output, $binary_error) = exec_command($exe, ' -o'); $lock_header = ''; unset($iblockpr_output[0]); foreach ($iblockpr_output as $line) { if (strlen(trim($line)) == 0) { break; } $lock_header .= $line."<br>\n"; } // get the server statistics list($iblockpr_output, $binray_error) = exec_command($exe, ' -i'); if (count($iblockpr_output) > 3) { $iblock['names'] = preg_split('/[\s,]+/', $iblockpr_output[0]); $iblock['last'] = preg_split('/[\s,]+/', $iblockpr_output[1]); $iblock['avg'] = preg_split('/[\s,]+/', $iblockpr_output[3]); } } // // backup the current database // $idx = get_panel_index($s_admin_panels, 'adm_backup'); if ($s_admin_panels[$idx][2] == 'open') { if ($HTTP_SERVER_VARS['REQUEST_METHOD'] == 'POST') { $s_backup['target'] = isset($HTTP_POST_VARS['adm_bu_target']) ? trim($HTTP_POST_VARS['adm_bu_target']) : ''; $s_backup['servicemgr'] = isset($HTTP_POST_VARS['adm_bu_servicemgr']) ? trim($HTTP_POST_VARS['adm_bu_servicemgr']) : ''; $s_backup['bfactor'] = isset($HTTP_POST_VARS['adm_bu_bfactor']) ? trim($HTTP_POST_VARS['adm_bu_bfactor']) : 0; $s_backup['mdonly'] = isset($HTTP_POST_VARS['adm_bu_mdonly']) ? $HTTP_POST_VARS['adm_bu_mdonly'] : ''; $s_backup['mdoldstyle'] = isset($HTTP_POST_VARS['adm_bu_mdoldstyle']) ? $HTTP_POST_VARS['adm_bu_mdoldstyle'] : ''; $s_backup['create'] = isset($HTTP_POST_VARS['adm_bu_create']) ? $HTTP_POST_VARS['adm_bu_create'] : ''; $s_backup['transport'] = isset($HTTP_POST_VARS['adm_bu_transport']) ? $HTTP_POST_VARS['adm_bu_transport'] : ''; $s_backup['convert'] = isset($HTTP_POST_VARS['adm_bu_convert']) ? $HTTP_POST_VARS['adm_bu_convert'] : ''; $s_backup['nogc'] = isset($HTTP_POST_VARS['adm_bu_nogc']) ? $HTTP_POST_VARS['adm_bu_nogc'] : ''; $s_backup['ignorecs'] = isset($HTTP_POST_VARS['adm_bu_ignorecs']) ? $HTTP_POST_VARS['adm_bu_ignorecs'] : ''; $s_backup['ignorelt'] = isset($HTTP_POST_VARS['adm_bu_ignorelt']) ? $HTTP_POST_VARS['adm_bu_ignorelt'] : ''; } if (isset($HTTP_POST_VARS['adm_backup_doit']) && !empty($s_backup['target'])) { $s_sysdba_pw = get_sysdba_pw(); $parameters = ' -backup_database'; // invoke a service manager if (!empty($s_backup['servicemgr'])) { $parameters .= ' -service '.$s_backup['servicemgr']; } // use blocking factor n for a tape device if (!empty($s_backup['bfactor'])) { $parameters .= ' -factor '.$s_backup['bfactor']; } // backup metadata only if (!empty($s_backup['mdonly'])) { $parameters .= ' -metadata'; } // metadata in old-style format if (!empty($s_backup['mdoldstyle'])) { $parameters .= ' -old_descriptions'; } // create a non compressed backup if (!empty($s_backup['create'])) { $parameters .= ' -expand'; } // create backup in non transportable format if (!empty($s_backup['transport'])) { $parameters .= ' -nt'; } // convert external files as internal tables if (!empty($s_backup['convert'])) { $parameters .= ' -convert'; } // do not run garbage collection if (!empty($s_backup['nogc'])) { $parameters .= ' -garbage_collect'; } // ignore checksums if (!empty($s_backup['ignorecs'])) { $parameters .= ' -ignore'; } // ignore limbo transactions if (!empty($s_backup['ignorelt'])) { $parameters .= ' -limbo'; } // call the gbak command to create the backup $usr_str = !empty($s_sysdba_pw) ? ' -user SYSDBA' : ' -user '.ibwa_escapeshellarg($s_login['user']); $pw_str = !empty($s_sysdba_pw) ? ' -password '.ibwa_escapeshellarg($s_sysdba_pw) : ' -password '.ibwa_escapeshellarg($s_login['password']); $db_str = !empty($s_login['host']) ? ' ' . ibwa_escapeshellarg($s_login['host'].':'.$s_login['database']) : ' ' . ibwa_escapeshellarg($s_login['database']); $backup_filename = ibwa_escapeshellarg(get_backup_filename($s_backup['target'])); $parameters .= $usr_str . $pw_str . $db_str .' '.$backup_filename; list($binary_output, $binary_error) = exec_command('gbak', $parameters, TRUE); } } // // restore database // $idx = get_panel_index($s_admin_panels, 'adm_restore'); if ($s_admin_panels[$idx][2] == 'open') { if ($HTTP_SERVER_VARS['REQUEST_METHOD'] == 'POST') { $s_restore['source'] = isset($HTTP_POST_VARS['adm_re_source']) ? trim($HTTP_POST_VARS['adm_re_source']) : ''; $s_restore['servicemgr'] = isset($HTTP_POST_VARS['adm_re_servicemgr']) ? trim($HTTP_POST_VARS['adm_re_servicemgr']) : ''; $s_restore['target'] = isset($HTTP_POST_VARS['adm_re_target']) ? trim($HTTP_POST_VARS['adm_re_target']) : ''; $s_restore['overwrite'] = isset($HTTP_POST_VARS['adm_re_overwrite']) ? $HTTP_POST_VARS['adm_re_overwrite'] : 'no'; $s_restore['pagesize'] = isset($HTTP_POST_VARS['adm_re_pagesize']) ? $HTTP_POST_VARS['adm_re_pagesize'] : ''; $s_restore['buffers'] = isset($HTTP_POST_VARS['adm_re_buffers']) ? trim($HTTP_POST_VARS['adm_re_buffers']) : ''; $s_restore['amode'] = isset($HTTP_POST_VARS['adm_re_amode']) ? $HTTP_POST_VARS['adm_re_amode'] : ''; $s_restore['inactive'] = isset($HTTP_POST_VARS['adm_re_inactive']) ? $HTTP_POST_VARS['adm_re_inactive'] : ''; $s_restore['oneattime'] = isset($HTTP_POST_VARS['adm_re_oneattime']) ? $HTTP_POST_VARS['adm_re_oneattime'] : ''; $s_restore['useall'] = isset($HTTP_POST_VARS['adm_re_useall']) ? $HTTP_POST_VARS['adm_re_useall'] : ''; $s_restore['novalidity'] = isset($HTTP_POST_VARS['adm_re_novalidity']) ? $HTTP_POST_VARS['adm_re_novalidity'] : ''; $s_restore['kill'] = isset($HTTP_POST_VARS['adm_re_kill']) ? $HTTP_POST_VARS['adm_re_kill'] : ''; $s_restore['connect'] = isset($HTTP_POST_VARS['adm_re_connect']) ? $HTTP_POST_VARS['adm_re_connect'] : 'no'; } if (isset($HTTP_POST_VARS['adm_restore_doit']) && !empty($s_restore['source'])) { $parameters = ($s_restore['overwrite'] == 'yes') ? ' -replace_database' : ' -create_database'; // invoke a service manager if (!empty($s_restore['servicemgr'])) { $parameters .= ' -service '.$s_restore['servicemgr']; } // set the page size if (!empty($s_restore['pagesize'])) { $parameters .= ' -page_size '.$s_restore['pagesize']; } // set the cache size if (!empty($s_restore['buffers'])) { $parameters .= ' -buffers '.$s_restore['buffers']; } // set the access mode if (!empty($s_restore['amode'])) { $parameters .= ' -mode '. ($s_restore['amode'] == $adm_strings['ReadWrite'] ? 'read_write' : 'read_only'); } // make indexes inactive upon restore if (!empty($s_restore['inactive'])) { $parameters .= ' -inactive'; } // restore one table at time if (!empty($s_restore['oneattime'])) { $parameters .= ' -one_at_a_time'; } // restore database with 100% fill ratio if (!empty($s_restore['useall'])) { $parameters .= ' -use_all_space'; } // delete validity constraintsfrom restored metadata if (!empty($s_restore['novalidity'])) { $parameters .= ' -no_validity'; } // do not create shodow files if (!empty($s_restore['kill'])) { $parameters .= ' -kill'; } if (!have_db_suffix($s_restore['target'])) { $error = sprintf($ERRORS['WRONG_DB_SUFFIX'], "'".implode("', '", $DATABASE_SUFFIXES)."'"); } elseif (!is_allowed_db($s_restore['target'])) { $error = sprintf($ERRORS['DB_NOT_ALLOWED'], $s_restore['target']); } // call the gbak command to restore the database if (empty($error)) { $usr_str = !empty($s_sysdba_pw) ? ' -user SYSDBA' : ' -user ' . ibwa_escapeshellarg($s_login['user']); $pw_str = !empty($s_sysdba_pw) ? ' -password ' . ibwa_escapeshellarg($s_sysdba_pw) : ' -password ' . ibwa_escapeshellarg($s_login['password']); $backup_filename = ibwa_escapeshellarg(get_backup_filename($s_restore['source'])); $parameters .= $usr_str . $pw_str . ' ' . $backup_filename . ' ' . ibwa_escapeshellarg($s_restore['target']); list($binary_output, $binary_error) = exec_command('gbak', $parameters, TRUE); // try to connect the restored database if ($s_restore['connect'] == 'yes') { $s_login['database'] = $s_restore['target']; if (!empty($s_sysdba_pw)) { $s_login['user'] = 'SYSDBA'; $s_login['password'] = $s_sysdba_pw; } if ($dbhandle = db_connect()) { // connected successfully $s_connected = TRUE; remove_edit_panels(); } else { // connect failed $ib_error = ibase_errmsg(); $s_login['password'] = ''; $s_connected = FALSE; } } cleanup_session(); } } } // print out all the panels // $active = 'Admin'; $panels = $s_admin_panels; require('./inc/script_end.inc.php'); function get_backup_filename($pname) { return (defined('BACKUP_DIR') && BACKUP_DIR !== '') ? BACKUP_DIR . basename($pname) : $pname; } ?>