/** * Checks the app functionality * * @since 1.0 * @package facileManager * @subpackage fmSQLPass */ function moduleFunctionalCheck() { global $fmdb, $__FM_CONFIG; $html_checks = null; $checks = array(); /** Count active database servers */ $checks[] = basicGetList('fm_' . $__FM_CONFIG[$_SESSION['module']]['prefix'] . 'servers', 'server_id', 'server_', 'active') ? null : sprintf(__('<p>You currently have no active database servers defined. <a href="%s">Click here</a> to define one or more to manage.</p>'), getMenuURL(__('Servers'))); /** Count groups */ $checks[] = basicGetList('fm_' . $__FM_CONFIG[$_SESSION['module']]['prefix'] . 'groups', 'group_id', 'group_') ? null : sprintf(__('<p>You currently have no database server groups defined. <a href="%s">Click here</a> to define one or more.</p>'), getMenuURL(__('Server Groups'))); foreach ($checks as $val) { $html_checks .= $val; } return $html_checks; }
function buildServerConfig($serial_no) { global $fmdb, $__FM_CONFIG, $fm_name; /** Check serial number */ basicGet('fm_' . $__FM_CONFIG[$_SESSION['module']]['prefix'] . 'servers', sanitize($serial_no), 'server_', 'server_serial_no'); if (!$fmdb->num_rows) { return sprintf('<p class="error">%s</p>', __('This server is not found.')); } $server_details = $fmdb->last_result; extract(get_object_vars($server_details[0]), EXTR_SKIP); $response = null; switch ($server_update_method) { case 'cron': if ($action == 'buildconf') { /* set the server_update_config flag */ setBuildUpdateConfigFlag($serial_no, 'conf', 'update'); $response = sprintf('<p>%s</p>' . "\n", __('This server will be updated on the next cron run.')); } else { $response = sprintf('<p>%s</p>' . "\n", __('This server receives updates via cron - please manage the server manually.')); } break; case 'http': case 'https': /** Test the port first */ if (!socketTest($server_name, $server_update_port, 10)) { return sprintf('<p class="error">%s</p>' . "\n", sprintf(__('Failed: could not access %s using %s (tcp/%d).'), $server_name, $server_update_method, $server_update_port)); } /** Remote URL to use */ $url = $server_update_method . '://' . $server_name . ':' . $server_update_port . '/' . $_SESSION['module'] . '/reload.php'; /** Data to post to $url */ $post_data = array('action' => 'buildconf', 'serial_no' => $server_serial_no); $post_result = @unserialize(getPostData($url, $post_data)); if (!is_array($post_result)) { /** Something went wrong */ if (empty($post_result)) { return sprintf('<p class="error">%s</p>', sprintf(__('It appears %s does not have php configured properly within httpd or httpd is not running.'), $server_name)); } return $response . '<p class="error">' . $post_result . '</p>' . "\n"; } else { if (count($post_result) > 1) { $response .= '<textarea rows="7" cols="100">'; /** Loop through and format the output */ foreach ($post_result as $line) { $response .= "[{$server_name}] {$line}\n"; } $response .= "</textarea>\n"; } else { $response .= "<p>[{$server_name}] " . $post_result[0] . '</p>'; } } break; case 'ssh': /** Test the port first */ if (!socketTest($server_name, $server_update_port, 10)) { return sprintf('<p class="error">%s</p>' . "\n", sprintf(__('Failed: could not access %s using %s (tcp/%d).'), $server_name, $server_update_method, $server_update_port)); } /** Get SSH key */ $ssh_key = getOption('ssh_key_priv', $_SESSION['user']['account_id']); if (!$ssh_key) { return sprintf('<p class="error">%s</p>' . "\n", sprintf(__('Failed: SSH key is not <a href="%s">defined</a>.'), getMenuURL(_('General')))); } $temp_ssh_key = sys_get_temp_dir() . '/fm_id_rsa'; if (file_exists($temp_ssh_key)) { @unlink($temp_ssh_key); } if (@file_put_contents($temp_ssh_key, $ssh_key) === false) { return sprintf('<p class="error">%s</p>' . "\n", sprintf(__('Failed: could not load SSH key into %s.'), $temp_ssh_key)); } @chmod($temp_ssh_key, 0400); $ssh_user = getOption('ssh_user', $_SESSION['user']['account_id']); if (!$ssh_user) { return sprintf('<p class="error">%s</p>' . "\n", sprintf(__('Failed: SSH user is not <a href="%s">defined</a>.'), getMenuURL(_('General')))); } /** Test SSH authentication */ exec(findProgram('ssh') . " -t -i {$temp_ssh_key} -o 'StrictHostKeyChecking no' -p {$server_update_port} -l {$ssh_user} {$server_name} 'ls /usr/local/{$fm_name}/{$_SESSION['module']}/fw.php'", $post_result, $retval); if ($retval) { /** Something went wrong */ @unlink($temp_ssh_key); return sprintf('<p class="error">%s</p>' . "\n", __('Could not login via SSH.')); } unset($post_result); /** Run build */ exec(findProgram('ssh') . " -t -i {$temp_ssh_key} -o 'StrictHostKeyChecking no' -p {$server_update_port} -l {$ssh_user} {$server_name} 'sudo php /usr/local/{$fm_name}/{$_SESSION['module']}/fw.php {$action} " . implode(' ', $options) . "'", $post_result, $retval); @unlink($temp_ssh_key); if ($retval) { /** Something went wrong */ return '<p class="error">' . ucfirst($friendly_action) . ' failed.</p>' . "\n"; } else { if (!count($post_result)) { $post_result[] = ucfirst($friendly_action) . ' was successful.'; } if (count($post_result) > 1) { $response .= '<textarea rows="4" cols="100">'; /** Loop through and format the output */ foreach ($post_result as $line) { $response .= "[{$server_name}] {$line}\n"; } $response .= "</textarea>\n"; } else { $response .= "<p>[{$server_name}] " . $post_result[0] . '</p>'; } } break; } /* reset the server_build_config flag */ if (!strpos($response, strtolower('failed'))) { setBuildUpdateConfigFlag($serial_no, 'no', 'build'); } $tmp_name = getNameFromID($serial_no, 'fm_' . $__FM_CONFIG[$_SESSION['module']]['prefix'] . 'servers', 'server_', 'server_serial_no', 'server_name'); addLogEntry(ucfirst($friendly_action) . " was performed on server '{$tmp_name}'."); return $response; }
+-------------------------------------------------------------------------+ */ $map = isset($_GET['map']) ? strtolower($_GET['map']) : 'forward'; /** Include module variables */ if (isset($_SESSION['module'])) { include ABSPATH . 'fm-modules/' . $_SESSION['module'] . '/variables.inc.php'; } $default_record_type = $map == 'reverse' ? 'PTR' : 'A'; if (isset($_GET['record_type'])) { $record_type = strtoupper($_GET['record_type']); } else { $record_type = $default_record_type; } $domain_id = isset($_GET['domain_id']) ? $_GET['domain_id'] : header('Location: ' . getMenuURL(__('Zones'))); if (!isValidDomain($domain_id)) { header('Location: ' . getMenuURL(__('Zones'))); } /** Does the user have access? */ if (!currentUserCan(array('access_specific_zones', 'view_all'), $_SESSION['module'], array(0, $domain_id))) { unAuth(); } if (in_array($record_type, $__FM_CONFIG['records']['require_zone_rights']) && !currentUserCan('manage_zones', $_SESSION['module'])) { unAuth(); } if ($record_type == 'SOA') { if (getNameFromID($domain_id, 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'domains', 'domain_', 'domain_id', 'domain_clone_domain_id')) { $record_type = $default_record_type; } elseif (getNameFromID($domain_id, 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'domains', 'domain_', 'domain_id', 'domain_template_id')) { $record_type = $default_record_type; } }
} } } else { header('Location: ' . $GLOBALS['basename']); } break; } } define('FM_INCLUDE_SEARCH', true); printHeader(); @printMenu(); $search_query = createSearchSQL(array('name', 'mapping', 'type'), 'domain_'); /** Check if any servers need their configs built first */ $reload_allowed = reloadAllowed(); if (!$reload_allowed && !$response) { $response = '<p>' . sprintf(__('You currently have no name servers hosting zones. <a href="%s">Click here</a> to manage one or more servers.'), getMenuURL(__('Servers'))) . '</p>'; } echo printPageHeader($response, null, currentUserCan('manage_zones', $_SESSION['module']), $map); $sort_direction = null; $sort_field = 'domain_name'; if (isset($_SESSION[$_SESSION['module']][$GLOBALS['path_parts']['filename']])) { extract($_SESSION[$_SESSION['module']][$GLOBALS['path_parts']['filename']], EXTR_OVERWRITE); } /** Get zones based on access */ $user_capabilities = getUserCapabilities($_SESSION['user']['id'], 'all'); $limited_domain_ids = array_key_exists('access_specific_zones', $user_capabilities[$_SESSION['module']]) && !array_key_exists('view_all', $user_capabilities[$_SESSION['module']]) && $user_capabilities[$_SESSION['module']]['access_specific_zones'][0] ? "AND domain_id IN (" . implode(',', $user_capabilities[$_SESSION['module']]['access_specific_zones']) . ")" : null; /** Process domain_view filtering */ if (isset($_GET['domain_view']) && !in_array(0, $_GET['domain_view'])) { foreach ((array) $_GET['domain_view'] as $view_id) { $view_id = sanitize($view_id); (string) ($domain_view_sql .= " (domain_view='{$view_id}' OR domain_view LIKE '{$view_id};%' OR domain_view LIKE '%;{$view_id};%' OR domain_view LIKE '%;{$view_id}') OR");
break; } $output = null; if (is_array($_POST['item_id'])) { foreach ($_POST['item_id'] as $id) { $result = $bulk_class->{$bulk_function}($id, $_POST['bulk_action']); if (!is_int($result)) { $output .= $result . "\n"; } } } if (isset($output)) { $output = "<pre>{$output}</pre>\n"; } $output .= "<p class=\"complete\">" . _('Complete') . '.</p>'; echo buildPopup('header', ucwords($_POST['bulk_action']) . ' Results') . $output . buildPopup('footer', _('OK'), array('cancel_button' => 'cancel'), getMenuURL($page)); /** Handle mass updates */ } elseif (is_array($_POST) && array_key_exists('action', $_POST) && $_POST['action'] == 'process-all-updates') { $result = "<pre>\n"; /** Server config builds */ if (currentUserCan('build_server_configs', $_SESSION['module'])) { basicGetList('fm_' . $__FM_CONFIG[$_SESSION['module']]['prefix'] . 'servers', 'server_id', 'server_', 'AND server_status="active" AND server_installed="yes"'); $server_count = $fmdb->num_rows; $server_results = $fmdb->last_result; for ($i = 0; $i < $server_count; $i++) { if (isset($server_results[$i]->server_client_version) && $server_results[$i]->server_client_version != getOption('client_version', 0, $_SESSION['module'])) { $result .= $fm_shared_module_servers->doClientUpgrade($server_results[$i]->server_serial_no); $result .= "\n"; } elseif ($server_results[$i]->server_build_config != 'no') { $result .= $fm_shared_module_servers->doBulkServerBuild($server_results[$i]->server_serial_no); $result .= "\n";
/** * Upgrades the client sotware * * @since 1.1 * @package facileManager */ function doClientUpgrade($serial_no) { global $fmdb, $__FM_CONFIG, $fm_name; /** Check permissions */ if (!currentUserCan('manage_servers', $_SESSION['module'])) { echo buildPopup('header', _('Error')); printf('<p>%s</p>', _('You do not have permission to manage servers.')); echo buildPopup('footer', _('OK'), array('cancel_button' => 'cancel')); exit; } /** Process server group */ if ($serial_no[0] == 'g') { $group_servers = $this->getGroupServers(substr($serial_no, 1)); if (!is_array($group_servers)) { return $group_servers; } $response = null; foreach ($group_servers as $serial_no) { if (is_numeric($serial_no)) { $response .= $this->doClientUpgrade($serial_no) . "\n"; } } return $response; } /** Check serial number */ basicGet('fm_' . $__FM_CONFIG[$_SESSION['module']]['prefix'] . 'servers', sanitize($serial_no), 'server_', 'server_serial_no'); if (!$fmdb->num_rows) { return sprintf(_('%d is not a valid serial number.'), $serial_no); } $server_details = $fmdb->last_result; extract(get_object_vars($server_details[0]), EXTR_SKIP); $response[] = $server_name; if ($server_installed != 'yes') { $response[] = ' --> ' . _('Failed: Client is not installed.') . "\n"; } if (count($response) == 1) { switch ($server_update_method) { case 'cron': /* Servers updated via cron require manual upgrades */ $response[] = ' --> ' . _('This server needs to be upgraded manually with the following command:'); $response[] = " --> sudo php /usr/local/{$fm_name}/{$_SESSION['module']}/\$(ls /usr/local/{$fm_name}/{$_SESSION['module']} | grep php | grep -v functions) upgrade"; addLogEntry(sprintf(_('Upgraded client scripts on %s.'), $server_name)); break; case 'http': case 'https': /** Test the port first */ if (!socketTest($server_name, $server_update_port, 10)) { $response[] = ' --> ' . sprintf(_('Failed: could not access %s using %s (tcp/%d).'), $server_name, $server_update_method, $server_update_port); break; } /** Remote URL to use */ $url = $server_update_method . '://' . $server_name . ':' . $server_update_port . '/' . $_SESSION['module'] . '/reload.php'; /** Data to post to $url */ $post_data = array('action' => 'upgrade', 'serial_no' => $server_serial_no); $post_result = @unserialize(getPostData($url, $post_data)); if (!is_array($post_result)) { /** Something went wrong */ if (empty($post_result)) { $response[] = ' --> ' . sprintf(_('It appears %s does not have php configured properly within httpd or httpd is not running.'), $server_name); break; } } else { if (count($post_result) > 1) { /** Loop through and format the output */ foreach ($post_result as $line) { if (strlen(trim($line))) { $response[] = " --> {$line}"; } } } else { $response[] = " --> " . $post_result[0]; } addLogEntry(sprintf(_('Upgraded client scripts on %s.'), $server_name)); } break; case 'ssh': /** Test the port first */ if (!socketTest($server_name, $server_update_port, 10)) { $response[] = ' --> ' . sprintf(_('Failed: could not access %s using %s (tcp/%d).'), $server_name, $server_update_method, $server_update_port); break; } /** Get SSH key */ $ssh_key = getOption('ssh_key_priv', $_SESSION['user']['account_id']); if (!$ssh_key) { $response[] = ' --> ' . sprintf(_('Failed: SSH key is not %sdefined</a>.'), '<a href="' . getMenuURL(_('General')) . '">'); break; } $temp_ssh_key = sys_get_temp_dir() . '/fm_id_rsa'; if (file_exists($temp_ssh_key)) { @unlink($temp_ssh_key); } if (@file_put_contents($temp_ssh_key, $ssh_key) === false) { $response[] = ' --> ' . sprintf(_('Failed: could not load SSH key into %s.'), $temp_ssh_key); break; } @chmod($temp_ssh_key, 0400); $ssh_user = getOption('ssh_user', $_SESSION['user']['account_id']); if (!$ssh_user) { return sprintf('<p class="error">%s</p>' . "\n", sprintf(_('Failed: SSH user is not <a href="%s">defined</a>.'), getMenuURL(_('General')))); } unset($post_result); exec(findProgram('ssh') . " -t -i {$temp_ssh_key} -o 'StrictHostKeyChecking no' -p {$server_update_port} -l {$ssh_user} {$server_name} 'sudo php /usr/local/{$fm_name}/{$_SESSION['module']}/\$(ls /usr/local/{$fm_name}/{$_SESSION['module']} | grep php | grep -v functions) upgrade 2>&1'", $post_result, $retval); @unlink($temp_ssh_key); if ($retval) { /** Something went wrong */ $post_result[] = _('Client upgrade failed.'); } else { if (!count($post_result)) { $post_result[] = _('Config build was successful.'); addLogEntry(sprintf(_('Upgraded client scripts on %s.'), $server_name)); } } if (count($post_result) > 1) { /** Loop through and format the output */ foreach ($post_result as $line) { if (strlen(trim($line))) { $response[] = " --> {$line}"; } } } else { $response[] = " --> " . $post_result[0]; } break; } $response[] = null; } return implode("\n", $response); }
function get_recommended_items($url, $numberOfReviews) { $html_page = file_get_html($url); $all_reviews = extract_all_comments($html_page); $menu_url = getMenuURL($html_page); $menu_items = getMenuItems($menu_url); if ($menu_items !== false) { $menu_items_occurences; for ($i = 0; $i <= floor($numberOfReviews / 40); $i++) { $temp = $url . '?start=' . $i * 40; $html_page = file_get_html($temp); $all_reviews = extract_all_comments($html_page); $comments = strtolower(implode(' ', $all_reviews)); $index = 0; foreach ($menu_items as $menu_item) { $menu_item = strtolower($menu_item); $numberOfOccurences = substr_count($comments, $menu_item); if ($numberOfOccurences != 0 & strlen($menu_item) >= 4) { $menu_items_occurences[$menu_item] += $numberOfOccurences; } } } asort($menu_items_occurences); $recommended_items = '{'; if (!empty($menu_items_occurences) | !$menu_items_occurences) { $length = count($menu_items_occurences); $keys = array_keys($menu_items_occurences); $values = array_values($menu_items_occurences); if ($length >= 3) { $recommended_items .= '"' . $keys[$length - 1] . '": ' . $values[$length - 1] . ', "' . $keys[$length - 2] . '": ' . $values[$length - 2] . ', "' . $keys[$length - 3] . '": ' . $values[$length - 3] . '}'; } else { if ($length == 2) { $recommended_items .= '"' . $keys[$length - 1] . '": ' . $values[$length - 1] . ', "' . $keys[$length - 2] . '": ' . $values[$length - 2] . '}'; } else { $recommended_items .= '"' . $keys[$length - 1] . '": ' . $values[$length - 1] . '}'; } } } else { $recommended_items .= '}'; } } else { $typesOfFood = array('bacon', 'burrito', 'taco', 'burger', 'pizza', 'beef', 'chicken', 'pork', 'lamb', 'tuna', 'salmon', 'veggie', 'vegetarian', 'tofu'); $typesOfFood_occurences; for ($i = 0; $i <= floor($numberOfReviews / 40); $i++) { $temp = $url . '?start=' . $i * 40; $html_page = file_get_html($temp); $all_reviews = extract_all_comments($html_page); $comments = strtolower(implode(' ', $all_reviews)); $index = 0; foreach ($typesOfFood as $typeOfFood) { $numberOfOccurences = substr_count($comments, $typeOfFood); if ($numberOfOccurences != 0) { $typesOfFood_occurences[$typeOfFood] += $numberOfOccurences; } } } asort($typesOfFood_occurences); $recommended_items = '{'; if (!empty($typesOfFood_occurences)) { $length = count($typesOfFood_occurences); $keys = array_keys($typesOfFood_occurences); $values = array_values($typesOfFood_occurences); if ($length >= 3) { $recommended_items .= '"' . $keys[$length - 1] . '": ' . $values[$length - 1] . ', "' . $keys[$length - 2] . '": ' . $values[$length - 2] . ', "' . $keys[$length - 3] . '": ' . $values[$length - 3] . '}'; } else { if ($length == 2) { $recommended_items .= '"' . $keys[$length - 1] . '": ' . $values[$length - 1] . ', "' . $keys[$length - 2] . '": ' . $values[$length - 2] . '}'; } else { $recommended_items .= '"' . $keys[$length - 1] . '": ' . $values[$length - 1] . '}'; } } } else { $recommended_items .= '}'; } } echo $recommended_items; }
*/ if (!defined('AJAX')) { define('AJAX', true); } require_once '../../../fm-init.php'; include_once ABSPATH . 'fm-modules/' . $_SESSION['module'] . '/classes/class_servers.php'; include_once ABSPATH . 'fm-modules/' . $_SESSION['module'] . '/classes/class_views.php'; include_once ABSPATH . 'fm-modules/' . $_SESSION['module'] . '/classes/class_acls.php'; include_once ABSPATH . 'fm-modules/' . $_SESSION['module'] . '/classes/class_keys.php'; include_once ABSPATH . 'fm-modules/' . $_SESSION['module'] . '/classes/class_options.php'; include_once ABSPATH . 'fm-modules/' . $_SESSION['module'] . '/classes/class_zones.php'; include_once ABSPATH . 'fm-modules/' . $_SESSION['module'] . '/classes/class_logging.php'; include_once ABSPATH . 'fm-modules/' . $_SESSION['module'] . '/classes/class_controls.php'; include_once ABSPATH . 'fm-modules/' . $_SESSION['module'] . '/classes/class_templates.php'; if (is_array($_POST) && array_key_exists('action', $_POST) && $_POST['action'] == 'bulk' && array_key_exists('bulk_action', $_POST) && in_array($_POST['bulk_action'], array('reload'))) { $popup_footer = buildPopup('footer', __('OK'), array('cancel_button' => 'cancel'), getMenuURL(ucfirst(getNameFromID($_POST['item_id'][0], 'fm_' . $__FM_CONFIG[$_SESSION['module']]['prefix'] . 'domains', 'domain_', 'domain_id', 'domain_mapping')))); echo buildPopup('header', 'Reload Results') . '<pre>'; echo processBulkDomainIDs($_POST['item_id']); echo "\n" . ucfirst($_POST['bulk_action']) . ' is complete.</pre>' . $popup_footer; exit; /** Handle mass updates */ } elseif (is_array($_POST) && array_key_exists('action', $_POST) && $_POST['action'] == 'process-all-updates') { $result .= processBulkDomainIDs(getZoneReloads('ids')); return; } $unpriv_message = __('You do not have sufficient privileges.'); $checks_array = array('servers' => 'manage_servers', 'views' => 'manage_servers', 'acls' => 'manage_servers', 'keys' => 'manage_servers', 'options' => 'manage_servers', 'logging' => 'manage_servers', 'controls' => 'manage_servers', 'domains' => 'manage_zones', 'domain' => 'manage_zones', 'soa' => 'manage_zones'); $allowed_capabilities = array_unique($checks_array); if (is_array($_POST) && count($_POST) && currentUserCan($allowed_capabilities, $_SESSION['module'])) { if (!checkUserPostPerms($checks_array, $_POST['item_type'])) { echo $unpriv_message;
$response .= $fm_tools->installModule($module_name); if ($fmdb->last_error) { $response .= $fmdb->last_error; } $response .= buildPopup('footer', _('OK'), array('cancel_button' => 'cancel'), getMenuURL(_('Modules'))); echo $response; exit; break; case 'module_upgrade': $module_name = isset($_POST['item']) ? sanitize($_POST['item']) : null; $response = buildPopup('header', _('Upgrading Module')); $response .= $fm_tools->upgradeModule($module_name); if ($fmdb->last_error) { $response .= $fmdb->last_error; } $response .= buildPopup('footer', _('OK'), array('cancel_button' => 'cancel'), getMenuURL(_('Modules'))); echo $response; exit; break; case 'db-cleanup': $response = buildPopup('header', _('Database Clean Up Results')); $response .= '<p>' . $fm_tools->cleanupDatabase() . '</p>'; break; case 'purge-logs': $response = buildPopup('header', _('Log Purge Results')); $response .= '<p>' . $fm_tools->purgeLogs() . '</p>'; break; } } } else { echo buildPopup('header', _('Error'));
function buildZoneConfig($domain_id) { global $fmdb, $__FM_CONFIG, $fm_name; /** Check domain_id and soa */ $parent_domain_ids = getZoneParentID($domain_id); if (!isset($parent_domain_ids[2])) { $query = "SELECT * FROM fm_{$__FM_CONFIG['fmDNS']['prefix']}domains d, fm_{$__FM_CONFIG['fmDNS']['prefix']}soa s WHERE domain_status='active' AND d.account_id='{$_SESSION['user']['account_id']}' AND s.soa_id=d.soa_id AND d.domain_id IN (" . join(',', $parent_domain_ids) . ")"; } else { $query = "SELECT * FROM fm_{$__FM_CONFIG['fmDNS']['prefix']}domains d, fm_{$__FM_CONFIG['fmDNS']['prefix']}soa s WHERE domain_status='active' AND d.account_id='{$_SESSION['user']['account_id']}' AND\n\t\t\t\ts.soa_id=(SELECT soa_id FROM fm_dns_domains WHERE domain_id={$parent_domain_ids[2]})"; } $result = $fmdb->query($query); if (!$fmdb->num_rows) { return sprintf('<p class="error">%s</p>' . "\n", __('Failed: There was no SOA record found for this zone.')); } $domain_details = $fmdb->last_result; extract(get_object_vars($domain_details[0]), EXTR_SKIP); $name_servers = $this->getNameServers($domain_name_servers, array('masters')); /** No name servers so return */ if (!$name_servers) { return sprintf('<p class="error">%s</p>' . "\n", __('There are no DNS servers hosting this zone.')); } /** Loop through name servers */ $name_server_count = $fmdb->num_rows; $response = '<textarea rows="12" cols="85">'; $failures = false; for ($i = 0; $i < $name_server_count; $i++) { switch ($name_servers[$i]->server_update_method) { case 'cron': /** Add records to fm_{$__FM_CONFIG['fmDNS']['prefix']}track_reloads */ foreach ($this->getZoneCloneChildren($domain_id) as $child_id) { $this->addZoneReload($name_servers[$i]->server_serial_no, $child_id); } /** Set the server_update_config flag */ setBuildUpdateConfigFlag($name_servers[$i]->server_serial_no, 'yes', 'update'); $response .= '[' . $name_servers[$i]->server_name . '] ' . __('This zone will be updated on the next cron run.') . "\n"; break; case 'http': case 'https': /** Test the port first */ if (!socketTest($name_servers[$i]->server_name, $name_servers[$i]->server_update_port, 10)) { $response .= '[' . $name_servers[$i]->server_name . '] ' . sprintf(__('Failed: could not access %s (tcp/%d).'), $name_servers[$i]->server_update_method, $name_servers[$i]->server_update_port) . "\n"; $failures = true; break; } /** Remote URL to use */ $url = $name_servers[$i]->server_update_method . '://' . $name_servers[$i]->server_name . ':' . $name_servers[$i]->server_update_port . '/' . $_SESSION['module'] . '/reload.php'; /** Data to post to $url */ $post_data = array('action' => 'reload', 'serial_no' => $name_servers[$i]->server_serial_no, 'domain_id' => $domain_id); $post_result = unserialize(getPostData($url, $post_data)); if (!is_array($post_result)) { /** Something went wrong */ return '<div class="error"><p>' . $post_result . '</p></div>' . "\n"; } else { if (count($post_result) > 1) { /** Loop through and format the output */ foreach ($post_result as $line) { $response .= '[' . $name_servers[$i]->server_name . "] {$line}\n"; if (strpos(strtolower($line), 'fail')) { $failures = true; } } } else { $response .= "[{$name_servers[$i]->server_name}] " . $post_result[0] . "\n"; if (strpos(strtolower($post_result[0]), 'fail')) { $failures = true; } } } /** Set the server_update_config flag */ setBuildUpdateConfigFlag($name_servers[$i]->server_serial_no, 'yes', 'update'); break; case 'ssh': /** Test the port first */ if (!socketTest($name_servers[$i]->server_name, $name_servers[$i]->server_update_port, 10)) { $response .= '[' . $name_servers[$i]->server_name . '] ' . sprintf(__('Failed: could not access %s (tcp/%d).'), $name_servers[$i]->server_update_method, $name_servers[$i]->server_update_port) . "\n"; $failures = true; break; } /** Get SSH key */ $ssh_key = getOption('ssh_key_priv', $_SESSION['user']['account_id']); if (!$ssh_key) { return '<p class="error">' . sprintf(__('Failed: SSH key is not <a href="%s">defined</a>.'), getMenuURL(_('Settings'))) . '</p>' . "\n"; } $temp_ssh_key = sys_get_temp_dir() . '/fm_id_rsa'; if (file_exists($temp_ssh_key)) { @unlink($temp_ssh_key); } if (@file_put_contents($temp_ssh_key, $ssh_key) === false) { return '<p class="error">' . sprintf(__('Failed: could not load SSH key into %s.'), $temp_ssh_key) . '</p>' . "\n"; } @chmod($temp_ssh_key, 0400); $ssh_user = getOption('ssh_user', $_SESSION['user']['account_id']); if (!$ssh_user) { return '<p class="error">' . sprintf(__('Failed: SSH user is not <a href="%s">defined</a>.'), getMenuURL(_('Settings'))) . '</p>' . "\n"; } unset($post_result); exec(findProgram('ssh') . " -t -i {$temp_ssh_key} -o 'StrictHostKeyChecking no' -p {$name_servers[$i]->server_update_port} -l {$ssh_user} {$name_servers[$i]->server_name} 'sudo php /usr/local/{$fm_name}/{$_SESSION['module']}/dns.php zones id={$domain_id}'", $post_result, $retval); @unlink($temp_ssh_key); if (!is_array($post_result)) { /** Something went wrong */ return sprintf('<p class="error">%s</p>' . "\n", $post_result); } else { if (!count($post_result)) { $post_result[] = __('Zone reload was successful.'); } if (count($post_result) > 1) { /** Loop through and format the output */ foreach ($post_result as $line) { $response .= '[' . $name_servers[$i]->server_name . "] {$line}\n"; if (strpos(strtolower($line), 'fail')) { $failures = true; } } } else { $response .= "[{$name_servers[$i]->server_name}] " . $post_result[0] . "\n"; if (strpos(strtolower($post_result[0]), 'fail')) { $failures = true; } } } /** Set the server_update_config flag */ setBuildUpdateConfigFlag($name_servers[$i]->server_serial_no, 'yes', 'update'); break; } } $response .= "</textarea>\n"; /** Reset the domain_reload flag */ if (!$failures) { global $fm_dns_records; if (!isset($fm_dns_records)) { include ABSPATH . 'fm-modules/fmDNS/classes/class_records.php'; } $fm_dns_records->updateSOAReload($domain_id, 'no'); } addLogEntry(sprintf(__("Reloaded zone '%s'."), displayFriendlyDomainName($domain_name))); return $response; }
$action_verb = _('deactivated'); } elseif ($_GET['action'] == 'uninstall') { $action_verb = _('uninstalled'); } if ($fm_tools->manageModule(sanitize($_GET['module']), sanitize($_GET['action']))) { $response = sprintf(_('%s was %s'), $_GET['module'], $action_verb); addLogEntry($response, $fm_name); if ($_GET['module'] == $_SESSION['module']) { $_SESSION['module'] = $fm_name; } header('Location: ' . getMenuURL(_('Modules'))); } else { $response = sprintf(_('Could not %s this module.'), sanitize($_GET['action'])); } } else { header('Location: ' . getMenuURL(_('Modules'))); } } require ABSPATH . 'fm-includes/version.php'; $fm_new_version_available = isNewVersionAvailable($fm_name, $fm_version); printHeader(); @printMenu(); echo '<div id="body_container">'; if (!empty($response) || !empty($fm_new_version_available)) { echo '<div id="response">' . $fm_new_version_available . '<p>' . $response . '</p></div>'; } $table_info = array('class' => 'display_results modules', 'id' => 'table_edits', 'name' => 'modules'); if (currentUserCan('manage_modules')) { $bulk_actions_list = array(_('Activate'), _('Deactivate')); } if (count((array) $bulk_actions_list)) {
/** * Builds the dashboard for display * * @since 1.0 * @package facileManager * @subpackage fmDNS */ function buildModuleDashboard() { global $fmdb, $__FM_CONFIG; $dashboard = $errors = null; /** Name server stats */ if (currentUserCan('manage_servers', $_SESSION['module'])) { basicGetList('fm_' . $__FM_CONFIG[$_SESSION['module']]['prefix'] . 'servers', 'server_id', 'server_'); $server_count = $fmdb->num_rows; $server_results = $fmdb->last_result; for ($i = 0; $i < $server_count; $i++) { if ($server_results[$i]->server_installed != 'yes') { $errors .= sprintf('<b>%s</b> - %s' . "\n", $server_results[$i]->server_name, __('Client is not installed.')); } elseif (isset($server_results[$i]->server_client_version) && $server_results[$i]->server_client_version != getOption('client_version', 0, $_SESSION['module'])) { $errors .= sprintf('<a href="%s"><b>%s</b></a> - %s' . "\n", getMenuURL(__('Servers')), $server_results[$i]->server_name, __('Client needs to be upgraded.')); } elseif ($server_results[$i]->server_build_config != 'no' && $server_results[$i]->server_status == 'active') { $errors .= sprintf('<a href="%s"><b>%s</b></a> - %s' . "\n", getMenuURL(__('Servers')), $server_results[$i]->server_name, __('Server needs a new configuration built.')); } } } /** Zone stats */ basicGet('fm_' . $__FM_CONFIG[$_SESSION['module']]['prefix'] . 'domains', 'no', 'domain_', 'domain_template'); $domain_count = $fmdb->num_rows; $domain_results = $fmdb->last_result; for ($i = 0; $i < $domain_count; $i++) { if (!getSOACount($domain_results[$i]->domain_id) && !$domain_results[$i]->domain_clone_domain_id && $domain_results[$i]->domain_type == 'master' && currentUserCan(array('access_specific_zones'), $_SESSION['module'], array(0, $domain_results[$i]->domain_id))) { $errors .= '<a href="zone-records.php?map=' . $domain_results[$i]->domain_mapping . '&domain_id=' . $domain_results[$i]->domain_id; if (currentUserCan('manage_zones', $_SESSION['module'])) { $errors .= '&record_type=SOA'; } $errors .= '">' . displayFriendlyDomainName($domain_results[$i]->domain_name) . '</a> - ' . __('Zone does not have a SOA defined.') . "\n"; } elseif (!getNSCount($domain_results[$i]->domain_id) && !$domain_results[$i]->domain_clone_domain_id && $domain_results[$i]->domain_type == 'master' && currentUserCan(array('access_specific_zones'), $_SESSION['module'], array(0, $domain_results[$i]->domain_id))) { $errors .= '<a href="zone-records.php?map=' . $domain_results[$i]->domain_mapping . '&domain_id=' . $domain_results[$i]->domain_id; if (currentUserCan('manage_zones', $_SESSION['module'])) { $errors .= '&record_type=NS'; } $errors .= '">' . displayFriendlyDomainName($domain_results[$i]->domain_name) . '</a> - ' . __('Zone does not have any NS records defined.') . "\n"; } elseif ($domain_results[$i]->domain_reload != 'no' && currentUserCan(array('access_specific_zones'), $_SESSION['module'], array(0, $domain_results[$i]->domain_id)) && currentUserCan('reload_zones', $_SESSION['module'])) { $errors .= '<a href="' . getMenuURL(ucfirst($domain_results[$i]->domain_mapping)) . '"><b>' . displayFriendlyDomainName($domain_results[$i]->domain_name) . '</b></a> - ' . __('Zone needs to be reloaded.') . "\n"; } } if ($errors) { $error_display = '<li>' . str_replace("\n", "</li>\n<li>", $errors); $error_display = rtrim($error_display, '<li>'); } else { $error_display = null; } /** Record stats */ $query = 'SELECT COUNT(*) record_count FROM fm_' . $__FM_CONFIG[$_SESSION['module']]['prefix'] . 'records WHERE record_status!="deleted" AND account_id=' . $_SESSION['user']['account_id'] . ' AND domain_id NOT IN (SELECT domain_id FROM fm_' . $__FM_CONFIG[$_SESSION['module']]['prefix'] . 'domains WHERE domain_status!="deleted" AND account_id=' . $_SESSION['user']['account_id'] . ' AND domain_template="yes")'; $fmdb->get_results($query); $record_count = $fmdb->last_result[0]->record_count; $dashboard = sprintf('<div> <div id="shadow_box"> <div id="shadow_container"> <h3>%s</h3> <li>%s</li> <li>%s</li> <li>%s</li> </div> </div> </div>', __('Summary'), sprintf(__('You have <b>%s</b> name servers configured.'), $server_count), sprintf(__('You have <b>%s</b> zones defined.'), $domain_count), sprintf(__('You have <b>%s</b> records.'), $record_count)); if ($error_display) { $dashboard .= sprintf('<div> <div id="shadow_box"> <div id="shadow_container"> <h3>%s</h3> %s </div> </div> </div>', __('Needs Attention'), $error_display); } return $dashboard; }