示例#1
0
 /**
  * Adds the new server
  */
 function add($post)
 {
     global $fmdb, $__FM_CONFIG, $fm_name;
     /** Validate entries */
     $post = $this->validatePost($post);
     if (!is_array($post)) {
         return $post;
     }
     $module = isset($post['module_name']) ? $post['module_name'] : $_SESSION['module'];
     /** Get a valid and unique serial number */
     $post['server_serial_no'] = isset($post['server_serial_no']) ? $post['server_serial_no'] : generateSerialNo($module);
     $sql_insert = "REPLACE INTO `fm_{$__FM_CONFIG[$_SESSION['module']]['prefix']}servers`";
     $sql_fields = '(';
     $sql_values = null;
     $post['account_id'] = $_SESSION['user']['account_id'];
     $exclude = array('submit', 'action', 'server_id', 'compress', 'AUTHKEY', 'module_name', 'module_type', 'config');
     foreach ($post as $key => $data) {
         $clean_data = sanitize($data);
         if ($key == 'server_name' && empty($clean_data)) {
             return __('No server name defined.');
         }
         if (!in_array($key, $exclude)) {
             $sql_fields .= $key . ',';
             $sql_values .= "'{$clean_data}',";
         }
     }
     $sql_fields = rtrim($sql_fields, ',') . ')';
     $sql_values = rtrim($sql_values, ',');
     $query = "{$sql_insert} {$sql_fields} VALUES ({$sql_values})";
     $result = $fmdb->query($query);
     if (!$fmdb->result) {
         return __('Could not add the server because a database error occurred.');
     }
     /** Add default fM interaction rules */
     $account_id = isset($post['AUTHKEY']) ? getAccountID($post['AUTHKEY']) : $_SESSION['user']['account_id'];
     include_once ABSPATH . 'fm-modules/' . $module . '/classes/class_policies.php';
     $fm_host_id = getNameFromID($fm_name, 'fm_' . $__FM_CONFIG[$module]['prefix'] . 'objects', 'object_', 'object_name', 'object_id', $account_id);
     $fm_service_id[] = 'g' . getNameFromID('Web Server', 'fm_' . $__FM_CONFIG[$module]['prefix'] . 'groups', 'group_', 'group_name', 'group_id', $account_id);
     if ($post['server_type'] == 'iptables') {
         $fm_service_id[] = 's' . getNameFromID('High TCP Ports', 'fm_' . $__FM_CONFIG[$module]['prefix'] . 'services', 'service_', 'service_name', 'service_id', $account_id);
     }
     $default_rules[] = array('account_id' => $account_id, 'server_serial_no' => $post['server_serial_no'], 'source_items' => 'o' . $fm_host_id, 'destination_items' => '', 'services_items' => implode(';', $fm_service_id), 'policy_comment' => sprintf(__('Required for %s client interaction.'), $fm_name));
     $default_rules[] = array('account_id' => $account_id, 'server_serial_no' => $post['server_serial_no'], 'policy_direction' => 'out', 'source_items' => '', 'destination_items' => 'o' . $fm_host_id, 'services_items' => implode(';', $fm_service_id), 'policy_comment' => sprintf(__('Required for %s client interaction.'), $fm_name));
     foreach ($default_rules as $rule) {
         $fm_module_policies->add($rule);
     }
     addLogEntry("Added server:\nName: {$post['server_name']} ({$post['server_serial_no']})\nType: {$post['server_type']}\n" . "Update Method: {$post['server_update_method']}\nConfig File: {$post['server_config_file']}");
     return true;
 }
示例#2
0
/**
 * Runs the installer
 *
 * @since 1.0
 * @package facileManager
 */
function installFM($proto, $compress)
{
    global $argv, $module_name, $data;
    unset($data['SERIALNO']);
    echo fM("Welcome to the {$module_name} installer.\n\n");
    echo fM("Please answer the following questions and the necessary configurations will be performed for you.\n\n");
    /** facileManager host **/
    echo "Please enter the location of the facileManager interface:\n";
    echo "    Examples include:\n";
    echo "\tfm.mydomain.com\n";
    echo "\tfm.mydomain.com:8443\n";
    echo "\tmydomain.com/fm\n";
    echo "\thttp://fm.mydomain.com/facileManager\n\n";
    echo 'Please enter the location of the facileManager interface: ';
    if (defined('FMHOST')) {
        $serverhost = FMHOST;
        echo FMHOST . "\n";
    } else {
        $serverhost = trim(fgets(STDIN));
    }
    /** Get server name from input */
    $server_location = getServerPath($serverhost);
    extract($server_location);
    $data['config'] = array();
    /** Run tests */
    echo fM("  --> Testing {$hostname} via https...");
    if (socketTest($hostname, 443)) {
        echo "ok\n";
        $proto = 'https';
    } else {
        echo "failed\n";
        echo fM("  --> Testing {$hostname} via http...");
        if (socketTest($hostname, 80)) {
            echo "ok\n";
            $proto = 'http';
        } else {
            echo "failed\n\n";
            echo fM("Cannot access {$hostname} with http or https.  Please correct this before proceeding.\n");
            exit(1);
        }
    }
    $data['config'][] = array('FMHOST', 'facileManager server', $hostname . '/' . $path);
    /** Account key **/
    $key = 'default';
    while (!isset($key)) {
        echo fM('Please enter your account key: ');
        $key = trim(fgets(STDIN));
    }
    $data['compress'] = $compress;
    $data['AUTHKEY'] = $key;
    $data['config'][] = array('AUTHKEY', 'Account number', $key);
    /** Test the authentication */
    echo fM('  --> Checking account details...');
    $url = "{$proto}://{$hostname}/{$path}admin-accounts.php?verify";
    $raw_data = getPostData($url, $data);
    $raw_data = $data['compress'] ? @unserialize(gzuncompress($raw_data)) : @unserialize($raw_data);
    echo $raw_data . "\n\n";
    if ($raw_data != 'Success') {
        echo "Installation failed.  ";
        echo !strlen($raw_data) ? fM("Could not communicate properly with {$hostname}.  Failed to access {$url}.") : fM('Please check your account key.');
        echo "\n";
        exit(1);
    }
    /** Server serial number **/
    $data['server_name'] = exec('hostname -f', $output, $rc);
    if ($rc > 0 || empty($data['server_name'])) {
        $data['server_name'] = php_uname('n');
    }
    $data['server_os'] = PHP_OS;
    $data['server_os_distro'] = detectOSDistro();
    echo fM('Please enter the serial number for ' . $data['server_name'] . ' (or leave blank to create new): ');
    if (defined('SERIALNO')) {
        $serialno = $data['server_serial_no'] = SERIALNO;
        echo SERIALNO . "\n";
    } else {
        $serialno = trim(fgets(STDIN));
    }
    $url = "{$proto}://{$hostname}/{$path}admin-servers.php?genserial";
    /** Process new server */
    if (empty($serialno)) {
        /** Generate new serial number */
        echo fM('  --> Generating new serial number: ');
        $serialno = $data['server_serial_no'] = generateSerialNo($url, $data);
        echo $serialno . "\n";
    }
    /** Add new server */
    echo fM('  --> Adding ' . $data['server_name'] . ' to the database...');
    $add_server_result = moduleAddServer($url, $data);
    extract($add_server_result, EXTR_OVERWRITE);
    echo fM($add_result);
    $data['SERIALNO'] = $serialno;
    $data['config'][] = array('SERIALNO', 'Server unique serial number', $serialno);
    $data = installFMModule($module_name, $proto, $compress, $data, $server_location, $url);
    /** Save the file */
    saveFMConfigFile($data);
    /** Complete installation */
    $url = "{$proto}://{$hostname}/{$path}admin-servers.php?install";
    $raw_data = getPostData($url, $data);
    /** Add log entry */
    addLogEntry('Client installed successfully.');
    echo fM("Installation is complete. Please login to the UI to ensure the server settings are correct.\n");
    /** chmod and prepend php to this file */
    chmod($argv[0], 0755);
    $contents = file_get_contents($argv[0]);
    $bin = '#!' . findProgram('php');
    if (strpos($contents, $bin) === false) {
        $contents = $bin . "\n" . $contents;
        file_put_contents($argv[0], $contents);
    }
    exit;
}
示例#3
0
 /**
  * Adds the new server
  */
 function add($post)
 {
     global $fmdb, $__FM_CONFIG;
     extract($post, EXTR_SKIP);
     $server_name = sanitize($server_name);
     if (empty($server_name)) {
         return __('No server name defined.');
     }
     /** Check name field length */
     $field_length = getColumnLength('fm_' . $__FM_CONFIG['fmSQLPass']['prefix'] . 'servers', 'server_name');
     if ($field_length !== false && strlen($server_name) > $field_length) {
         return sprintf(__('Server name is too long (maximum %d characters).'), $field_length);
     }
     /** Does the record already exist for this account? */
     basicGet('fm_' . $__FM_CONFIG['fmSQLPass']['prefix'] . 'servers', $server_name, 'server_', 'server_name');
     if ($fmdb->num_rows) {
         return __('This server name already exists.');
     }
     $sql_insert = "REPLACE INTO `fm_{$__FM_CONFIG['fmSQLPass']['prefix']}servers`";
     $sql_fields = '(';
     $sql_values = null;
     $log_message = "Added a database server with the following details:\n";
     $post['account_id'] = $_SESSION['user']['account_id'];
     /** Set default ports */
     if (!empty($post['server_port']) && !verifyNumber($post['server_port'], 1, 65535, false)) {
         return __('Server port must be a valid TCP port.');
     }
     if (empty($post['server_port'])) {
         $post['server_port'] = $__FM_CONFIG['fmSQLPass']['default']['ports'][$post['server_type']];
     }
     $module = isset($post['module_name']) ? $post['module_name'] : $_SESSION['module'];
     /** Get a valid and unique serial number */
     $post['server_serial_no'] = isset($post['server_serial_no']) ? $post['server_serial_no'] : generateSerialNo($module);
     $exclude = array('submit', 'action', 'server_id', 'compress', 'AUTHKEY', 'module_name', 'module_type', 'config');
     /** Convert groups and policies arrays into strings */
     if (isset($post['server_groups']) && is_array($post['server_groups'])) {
         $temp_var = null;
         foreach ($post['server_groups'] as $id) {
             $temp_var .= $id . ';';
         }
         $post['server_groups'] = rtrim($temp_var, ';');
     }
     /** Handle credentials */
     if (is_array($post['server_credentials'])) {
         $post['server_credentials'] = serialize($post['server_credentials']);
     }
     foreach ($post as $key => $data) {
         $clean_data = sanitize($data);
         if (!in_array($key, $exclude)) {
             $sql_fields .= $key . ',';
             $sql_values .= "'{$clean_data}',";
             if ($key == 'server_credentials') {
                 $clean_data = str_repeat('*', 7);
             }
             if ($key == 'server_groups') {
                 if ($post['server_groups']) {
                     $group_array = explode(';', $post['server_group']);
                     $clean_data = null;
                     foreach ($group_array as $group_id) {
                         $clean_data .= getNameFromID($group_id, 'fm_' . $__FM_CONFIG['fmSQLPass']['prefix'] . 'groups', 'group_', 'group_id', 'group_name') . '; ';
                     }
                     $clean_data = rtrim($clean_data, '; ');
                 } else {
                     $clean_data = 'None';
                 }
             }
             $log_message .= $clean_data && $key != 'account_id' ? formatLogKeyData('server_', $key, $clean_data) : null;
         }
     }
     $sql_fields = rtrim($sql_fields, ',') . ')';
     $sql_values = rtrim($sql_values, ',');
     $query = "{$sql_insert} {$sql_fields} VALUES ({$sql_values})";
     $result = $fmdb->query($query);
     if (!$fmdb->result) {
         return __('Could not add the server because a database error occurred.');
     }
     addLogEntry($log_message);
     return true;
 }
示例#4
0
 }
 require_once 'fm-init.php';
 if (file_exists(ABSPATH . 'fm-modules/' . $_POST['module_name'] . '/variables.inc.php')) {
     include ABSPATH . 'fm-modules/' . $_POST['module_name'] . '/variables.inc.php';
 }
 include ABSPATH . 'fm-includes/version.php';
 /** Check account key */
 include ABSPATH . 'fm-modules/facileManager/classes/class_accounts.php';
 $account_status = $fm_accounts->verifyAccount($_POST['AUTHKEY']);
 if ($account_status !== true) {
     $data = $account_status;
 } else {
     if (in_array($_POST['module_name'], getActiveModules())) {
         if (array_key_exists('genserial', $_GET)) {
             $module = $_POST['module_name'] ? $_POST['module_name'] : $_SESSION['module'];
             $data['server_serial_no'] = generateSerialNo($module);
         }
         if (array_key_exists('addserial', $_GET)) {
             /** Client expects an array for a good return */
             $data = $_POST;
             /** Does the record already exist for this account? */
             basicGet('fm_' . $__FM_CONFIG[$_POST['module_name']]['prefix'] . 'servers', $_POST['server_name'], 'server_', 'server_name');
             if ($fmdb->num_rows) {
                 $server_array = $fmdb->last_result;
                 $_POST['server_id'] = $server_array[0]->server_id;
                 $update_server = moduleAddServer('update');
             } else {
                 if (getOption('client_auto_register')) {
                     /** Add new server */
                     $add_server = moduleAddServer('add');
                     if ($add_server !== true) {
示例#5
0
 /**
  * Adds the new server
  */
 function addServer($post)
 {
     global $fmdb, $__FM_CONFIG;
     if (empty($post['server_name'])) {
         return __('No server name defined.');
     }
     /** Check name field length */
     $field_length = getColumnLength('fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'servers', 'server_name');
     if ($field_length !== false && strlen($post['server_name']) > $field_length) {
         return sprintf(dngettext($_SESSION['module'], 'Server name is too long (maximum %d character).', 'Server name is too long (maximum %d characters).', $field_length), $field_length);
     }
     /** Does the record already exist for this account? */
     basicGet('fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'servers', $post['server_name'], 'server_', 'server_name');
     if ($fmdb->num_rows) {
         return __('This server name already exists.');
     }
     if (empty($post['server_root_dir'])) {
         $post['server_root_dir'] = $__FM_CONFIG['ns']['named_root_dir'];
     }
     if (empty($post['server_zones_dir'])) {
         $post['server_zones_dir'] = $__FM_CONFIG['ns']['named_zones_dir'];
     }
     if (empty($post['server_config_file'])) {
         $post['server_config_file'] = $__FM_CONFIG['ns']['named_config_file'];
     }
     $post['server_root_dir'] = rtrim($post['server_root_dir'], '/');
     $post['server_chroot_dir'] = rtrim($post['server_chroot_dir'], '/');
     $post['server_zones_dir'] = rtrim($post['server_zones_dir'], '/');
     /** Process server_run_as */
     $server_run_as_options = enumMYSQLSelect('fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'servers', 'server_run_as_predefined');
     if (!in_array($post['server_run_as_predefined'], $server_run_as_options)) {
         $post['server_run_as'] = $post['server_run_as_predefined'];
         $post['server_run_as_predefined'] = 'as defined:';
     }
     /** Set default ports */
     if (!isset($post['server_update_method'])) {
         $post['server_update_method'] = 'http';
     }
     if ($post['server_update_method'] == 'cron') {
         $post['server_update_port'] = 0;
     }
     if (!empty($post['server_update_port']) && !verifyNumber($post['server_update_port'], 1, 65535, false)) {
         return __('Server update port must be a valid TCP port.');
     }
     if (empty($post['server_update_port'])) {
         if ($post['server_update_method'] == 'http') {
             $post['server_update_port'] = 80;
         } elseif ($post['server_update_method'] == 'https') {
             $post['server_update_port'] = 443;
         } elseif ($post['server_update_method'] == 'ssh') {
             $post['server_update_port'] = 22;
         }
     }
     $module = $post['module_name'] ? $post['module_name'] : $_SESSION['module'];
     /** Get a valid and unique serial number */
     $post['server_serial_no'] = isset($post['server_serial_no']) ? $post['server_serial_no'] : generateSerialNo($module);
     /** Process server_key */
     if (!isset($post['server_key']) || !is_numeric($post['server_key'])) {
         $post['server_key'] = 0;
     }
     $sql_insert = "REPLACE INTO `fm_{$__FM_CONFIG['fmDNS']['prefix']}servers`";
     $sql_fields = '(';
     $sql_values = null;
     $post['account_id'] = $_SESSION['user']['account_id'];
     $exclude = array('submit', 'action', 'server_id', 'compress', 'AUTHKEY', 'module_name', 'module_type', 'config', 'sub_type');
     foreach ($post as $key => $data) {
         $clean_data = sanitize($data);
         if ($key == 'server_name' && empty($clean_data)) {
             return __('No server name defined.');
         }
         if (!in_array($key, $exclude)) {
             $sql_fields .= $key . ',';
             $sql_values .= "'{$clean_data}',";
         }
     }
     $sql_fields = rtrim($sql_fields, ',') . ')';
     $sql_values = rtrim($sql_values, ',');
     $query = "{$sql_insert} {$sql_fields} VALUES ({$sql_values})";
     $result = $fmdb->query($query);
     if ($fmdb->sql_errors) {
         return __('Could not add the server because a database error occurred.');
     }
     $tmp_key = $post['server_key'] ? getNameFromID($post['server_key'], 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'keys', 'key_', 'key_id', 'key_name') : 'None';
     $tmp_runas = $post['server_run_as_predefined'] ? $post['server_run_as_predefined'] : $post['server_run_as'];
     addLogEntry("Added server:\nName: {$post['server_name']} ({$post['server_serial_no']})\nKey: {$tmp_key}\nType: {$post['server_type']}\n" . "Run-as: {$tmp_runas}\nUpdate Method: {$post['server_update_method']}\nConfig File: {$post['server_config_file']}\n" . "Server Root: {$post['server_root_dir']}\nServer Chroot: {$post['server_chroot_dir']}\n" . "Zone file directory: {$post['server_zones_dir']}");
     return true;
 }