$backup_options = array('mdonly' => IBASE_BKP_METADATA_ONLY, 'mdoldstyle' => IBASE_BKP_OLD_DESCRIPTIONS, 'transport' => IBASE_BKP_NON_TRANSPORTABLE, 'convert' => IBASE_BKP_CONVERT, 'nogc' => IBASE_BKP_NO_GARBAGE_COLLECT, 'ignorecs' => IBASE_BKP_IGNORE_CHECKSUMS, 'ignorelt' => IBASE_BKP_IGNORE_LIMBO);
        $options = 0;
        foreach ($backup_options as $idx => $option) {
            if ($s_backup[$idx]) {
                $options |= $option;
            }
        }
        $source_db = !empty($s_login['host']) ? $s_login['host'] . ':' . $s_login['database'] : $s_login['database'];
        $target_file = get_backup_filename($s_backup['target']);
        if ($s_backup['verbose']) {
            // remove pending backup-jobs from session
            $s_iframejobs = array_filter($s_iframejobs, create_function('$a', '$a["job"]!="backup";'));
            $iframekey_backup = md5(uniqid('backup'));
            $s_iframejobs[$iframekey_backup] = array('job' => 'backup', 'source' => $source_db, 'target' => $target_file, 'options' => $options, 'timestamp' => time());
        } elseif (($service = fbird_service_attach($s_login['host'], $s_login['user'], $s_login['password'])) != FALSE) {
            $result = fbird_backup($service, $source_db, $target_file, $options, $s_backup['verbose']);
            $message = nl2br(str_replace(array(chr(0x1) . chr(0xa), 'gbak: '), '', $result));
            fbird_service_detach($service);
        } else {
            $ib_error = fbird_errmsg();
        }
    }
}
//
// restore database
//
if (have_panel_permissions($s_login['user'], 'adm_restore')) {
    if (isset($_POST['adm_restore_doit'])) {
        $s_restore = array('source' => get_request_data('adm_re_source'), 'target' => get_request_data('adm_re_target'), 'overwrite' => (bool) get_request_data('adm_re_overwrite'), 'inactive' => (bool) get_request_data('adm_re_inactive'), 'oneattime' => (bool) get_request_data('adm_re_oneattime'), 'useall' => (bool) get_request_data('adm_re_useall'), 'novalidity' => (bool) get_request_data('adm_re_novalidity'), 'kill' => (bool) get_request_data('adm_re_kill'), 'verbose' => (bool) get_request_data('adm_re_verbose'), 'connect' => (bool) get_request_data('adm_re_connect'));
        if ($s_restore['connect']) {
            $s_restore['verbose'] = TRUE;
 case 'metadata':
     list($content, $error) = isql_get_metadata($s_login['user'], $s_login['password'], $s_login['database'], $s_login['host']);
     $content = implode("\n", $content);
     break;
 case 'dbstat':
     if (($service = fbird_service_attach($s_login['host'], $s_login['user'], $s_login['password'])) != FALSE) {
         $content = fbird_db_info($service, $s_login['database'], $job['option']);
         $content = trim(str_replace(array(chr(0x1), "\n\n"), array('', "\n"), $content));
         fbird_service_detach($service);
     } else {
         $error = fbird_errmsg();
     }
     break;
 case 'backup':
     if (($service = fbird_service_attach($s_login['host'], $s_login['user'], $s_login['password'])) != FALSE) {
         $content = fbird_backup($service, $job['source'], $job['target'], $job['options'], TRUE);
         $content = str_replace(array(chr(0x1) . chr(0xa), 'gbak: '), '', $content);
         fbird_service_detach($service);
     } else {
         $error = fbird_errmsg();
     }
     break;
 case 'restore':
     if (($service = fbird_service_attach($s_login['host'], $s_login['user'], $s_login['password'])) != FALSE) {
         $content = fbird_restore($service, $job['source'], $job['target'], $job['options'], TRUE);
         $content = str_replace(array(chr(0x1) . chr(0xa), 'gbak: '), '', $content);
         fbird_service_detach($service);
         // try to connect the restored database
         if ($job['connect']) {
             $s_login['database'] = $job['target'];
             if (!empty($s_sysdba_pw)) {