Ejemplo n.º 1
0
/**
 * 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;
}
Ejemplo n.º 2
0
 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;
 }
Ejemplo n.º 3
0
 +-------------------------------------------------------------------------+
*/
$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;
    }
}
Ejemplo n.º 4
0
                    }
                }
            } 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");
Ejemplo n.º 5
0
            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";
Ejemplo n.º 6
0
 /**
  * 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;
}
Ejemplo n.º 8
0
*/
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;
Ejemplo n.º 9
0
                $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'));
Ejemplo n.º 10
0
 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;
 }
Ejemplo n.º 11
0
            $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)) {
Ejemplo n.º 12
0
/**
 * 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;
}