Example #1
0
 /**
  * Updates the selected policy
  */
 function update($post)
 {
     global $fmdb, $__FM_CONFIG;
     /** Update sort order */
     if ($post['action'] == 'update_sort') {
         /** Make new order in array */
         $new_sort_order = explode(';', rtrim($post['sort_order'], ';'));
         /** Get policy listing for server */
         basicGetList('fm_' . $__FM_CONFIG[$_SESSION['module']]['prefix'] . 'policies', 'policy_order_id', 'policy_', 'AND server_serial_no=' . $post['server_serial_no']);
         $count = $fmdb->num_rows;
         $policy_result = $fmdb->last_result;
         for ($i = 0; $i < $count; $i++) {
             $order_id = array_search($policy_result[$i]->policy_id, $new_sort_order);
             if ($order_id === false) {
                 return __('The sort order could not be updated due to an invalid request.');
             }
             $query = "UPDATE `fm_{$__FM_CONFIG[$_SESSION['module']]['prefix']}policies` SET `policy_order_id`={$order_id} WHERE `policy_id`={$policy_result[$i]->policy_id} AND `server_serial_no`={$post['server_serial_no']} AND `account_id`='{$_SESSION['user']['account_id']}'";
             $result = $fmdb->query($query);
             if ($result === false) {
                 return __('Could not update the policy order because a database error occurred.');
             }
         }
         setBuildUpdateConfigFlag($post['server_serial_no'], 'yes', 'build');
         addLogEntry('Updated firewall policy order for ' . getNameFromID($post['server_serial_no'], 'fm_' . $__FM_CONFIG[$_SESSION['module']]['prefix'] . 'servers', 'server_', 'server_serial_no', 'server_name'));
         return true;
     }
     /** Validate entries */
     $post = $this->validatePost($post);
     if (!is_array($post)) {
         return $post;
     }
     $exclude = array('submit', 'action', 'policy_id', 'compress', 'AUTHKEY', 'module_name', 'module_type', 'config', 'SERIALNO');
     $sql_edit = null;
     $log_message = "Updated a firewall policy for " . getNameFromID($post['server_serial_no'], 'fm_' . $__FM_CONFIG[$_SESSION['module']]['prefix'] . 'servers', 'server_', 'server_serial_no', 'server_name') . " with the following details:\n";
     foreach ($post as $key => $data) {
         if (!in_array($key, $exclude)) {
             $clean_data = sanitize($data);
             $sql_edit .= $key . "='" . $clean_data . "',";
             if ($clean_data && !in_array($key, array('account_id', 'server_serial_no'))) {
                 if (in_array($key, array('policy_source', 'policy_destination', 'policy_services'))) {
                     $clean_data = str_replace("<br />\n", ', ', $this->formatPolicyIDs($clean_data));
                 }
                 $log_message .= formatLogKeyData('policy_', $key, $clean_data);
             }
         }
     }
     $sql = rtrim($sql_edit, ',');
     /** Update the policy */
     $query = "UPDATE `fm_{$__FM_CONFIG[$_SESSION['module']]['prefix']}policies` SET {$sql} WHERE `policy_id`={$post['policy_id']} AND `account_id`='{$_SESSION['user']['account_id']}'";
     $result = $fmdb->query($query);
     if (!$fmdb->result) {
         return __('Could not update the firewall policy because a database error occurred.');
     }
     /** Return if there are no changes */
     if (!$fmdb->rows_affected) {
         return true;
     }
     setBuildUpdateConfigFlag($post['server_serial_no'], 'yes', 'build');
     addLogEntry($log_message);
     return true;
 }
Example #2
0
 /**
  * Updates the selected server
  */
 function update($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['fmSQLPass']['prefix'] . 'servers', 'server_name');
     /** Does the record already exist for this account? */
     basicGet('fm_' . $__FM_CONFIG['fmSQLPass']['prefix'] . 'servers', sanitize($post['server_name']), 'server_', 'server_name');
     if ($fmdb->num_rows) {
         $result = $fmdb->last_result;
         if ($result[0]->server_id != $post['server_id']) {
             return __('This server name already exists.');
         }
     }
     /** 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']];
     }
     $exclude = array('submit', 'action', 'server_id', 'page');
     $sql_edit = null;
     $old_name = getNameFromID($post['server_id'], 'fm_' . $__FM_CONFIG['fmSQLPass']['prefix'] . 'servers', 'server_', 'server_id', 'server_name');
     $log_message = "Updated a database server ({$old_name}) with the following details:\n";
     /** 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) {
         if (!in_array($key, $exclude)) {
             $sql_edit .= $key . "='" . sanitize($data) . "',";
             if ($key == 'server_credentials') {
                 $data = str_repeat('*', 7);
             }
             if ($key == 'server_groups') {
                 if ($data) {
                     $group_array = explode(';', $data);
                     $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') . '; ';
                     }
                     $data = rtrim($clean_data, '; ');
                 } else {
                     $data = 'None';
                 }
             }
             $log_message .= $data ? formatLogKeyData('server_', $key, $data) : null;
         }
     }
     $sql = rtrim($sql_edit, ',');
     // Update the server
     $query = "UPDATE `fm_{$__FM_CONFIG['fmSQLPass']['prefix']}servers` SET {$sql} WHERE `server_id`={$post['server_id']} AND `account_id`='{$_SESSION['user']['account_id']}'";
     $result = $fmdb->query($query);
     if (!$fmdb->result) {
         return __('Could not add the server because a database error occurred.');
     }
     /** Return if there are no changes */
     if (!$fmdb->rows_affected) {
         return true;
     }
     addLogEntry($log_message);
     return true;
 }
Example #3
0
 /**
  * Updates the selected zone
  */
 function update()
 {
     global $fmdb, $__FM_CONFIG;
     $domain_id = sanitize($_POST['domain_id']);
     /** Validate post */
     $_POST['domain_mapping'] = getNameFromID($domain_id, 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'domains', 'domain_', 'domain_id', 'domain_mapping');
     $_POST['domain_type'] = getNameFromID($domain_id, 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'domains', 'domain_', 'domain_id', 'domain_type');
     $post = $this->validatePost($_POST);
     if (!is_array($post)) {
         return $post;
     }
     $sql_edit = $domain_name_servers = $domain_view = null;
     $old_name = displayFriendlyDomainName(getNameFromID($domain_id, 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'domains', 'domain_', 'domain_id', 'domain_name'));
     $log_message = "Updated a zone ({$old_name}) with the following details:\n";
     /** If changing zone to clone or different domain_type, are there any existing associated records? */
     if ($post['domain_clone_domain_id'] || $post['domain_type'] != 'master') {
         basicGet('fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'records', $domain_id, 'record_', 'domain_id');
         if ($fmdb->num_rows) {
             return __('There are associated records with this zone.');
         }
     }
     /** Format domain_view */
     $log_message_views = null;
     if (is_array($post['domain_view'])) {
         foreach ($post['domain_view'] as $val) {
             if ($val == 0) {
                 $domain_view = 0;
                 break;
             }
             $domain_view .= $val . ';';
             $view_name = getNameFromID($val, 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'views', 'view_', 'view_id', 'view_name');
             $log_message_views .= $val ? "{$view_name}; " : null;
         }
         $post['domain_view'] = rtrim($domain_view, ';');
     }
     /** Format domain_name_servers */
     $log_message_name_servers = null;
     foreach ($post['domain_name_servers'] as $val) {
         if ($val == '0') {
             $domain_name_servers = 0;
             break;
         }
         $domain_name_servers .= $val . ';';
         $server_name = getNameFromID($val, 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'servers', 'server_', 'server_id', 'server_name');
         $log_message_name_servers .= $val ? "{$server_name}; " : null;
     }
     $post['domain_name_servers'] = rtrim($domain_name_servers, ';');
     if (!$post['domain_name_servers']) {
         $post['domain_name_servers'] = 0;
     }
     $exclude = array('submit', 'action', 'domain_id', 'domain_required_servers', 'domain_forward');
     foreach ($post as $key => $data) {
         if (!in_array($key, $exclude)) {
             $sql_edit .= strlen(sanitize($data)) ? $key . "='" . mysql_real_escape_string($data) . "'," : $key . '=NULL,';
             if ($key == 'domain_view') {
                 $data = $log_message_views;
             }
             if ($key == 'domain_name_servers') {
                 $data = $log_message_name_servers;
             }
             $log_message .= $data ? formatLogKeyData('domain_', $key, $data) : null;
             if ($key == 'domain_default' && $data == 'yes') {
                 $query = "UPDATE `fm_{$__FM_CONFIG['fmDNS']['prefix']}domains` SET {$key} = 'no' WHERE `account_id`='{$_SESSION['user']['account_id']}'";
                 $result = $fmdb->query($query);
             }
         }
     }
     $sql_edit .= "domain_reload='no'";
     /** Set the server_build_config flag for existing servers */
     if (getSOACount($domain_id) && getNSCount($domain_id)) {
         setBuildUpdateConfigFlag(getZoneServers($domain_id, array('masters', 'slaves')), 'yes', 'build');
     }
     /** Update the zone */
     $query = "UPDATE `fm_{$__FM_CONFIG['fmDNS']['prefix']}domains` SET {$sql_edit} WHERE `domain_id`='{$domain_id}' AND `account_id`='{$_SESSION['user']['account_id']}'";
     $result = $fmdb->query($query);
     if ($fmdb->sql_errors) {
         return __('Could not update the zone because a database error occurred.');
     }
     $rows_affected = $fmdb->rows_affected;
     /** Update the child zones */
     if ($post['domain_template'] == 'yes') {
         $query = "UPDATE `fm_{$__FM_CONFIG['fmDNS']['prefix']}domains` SET domain_view='{$post['domain_view']}' WHERE `domain_template_id`='{$domain_id}' AND `account_id`='{$_SESSION['user']['account_id']}'";
         $result = $fmdb->query($query);
         if ($fmdb->sql_errors) {
             return __('Could not update the child zones because a database error occurred.');
         }
         $rows_affected += $fmdb->rows_affected;
     }
     /** Add mandatory config options */
     $query = "INSERT INTO `fm_{$__FM_CONFIG['fmDNS']['prefix']}config` \n\t\t\t(account_id,domain_id,cfg_name,cfg_data) VALUES ({$_SESSION['user']['account_id']}, {$domain_id}, ";
     $required_servers = sanitize($post['domain_required_servers']);
     if (!$post['domain_template_id']) {
         if ($post['domain_type'] == 'forward') {
             if (getNameFromID($domain_id, 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'config', 'cfg_', 'domain_id', 'cfg_data', null, "AND cfg_name='forwarders'")) {
                 basicUpdate("fm_{$__FM_CONFIG['fmDNS']['prefix']}config", getNameFromID($domain_id, 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'config', 'cfg_', 'domain_id', 'cfg_id', null, "AND cfg_name='forwarders'"), 'cfg_data', $required_servers, 'cfg_id');
             } else {
                 $result = $fmdb->query($query . "'forwarders', '" . $required_servers . "')");
             }
             $log_message .= formatLogKeyData('domain_', 'forwarders', $required_servers);
             $domain_forward = sanitize($post['domain_forward'][0]);
             if (getNameFromID($domain_id, 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'config', 'cfg_', 'domain_id', 'cfg_data', null, "AND cfg_name='forward'")) {
                 basicUpdate("fm_{$__FM_CONFIG['fmDNS']['prefix']}config", getNameFromID($domain_id, 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'config', 'cfg_', 'domain_id', 'cfg_id', null, "AND cfg_name='forward'"), 'cfg_data', $domain_forward, 'cfg_id');
             } else {
                 $result = $fmdb->query($query . "'forward', '" . $domain_forward . "')");
             }
             $log_message .= formatLogKeyData('domain_', 'forward', $domain_forward);
         } elseif (in_array($post['domain_type'], array('slave', 'stub'))) {
             if (getNameFromID($domain_id, 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'config', 'cfg_', 'domain_id', 'cfg_data', null, "AND cfg_name='masters'")) {
                 basicUpdate("fm_{$__FM_CONFIG['fmDNS']['prefix']}config", getNameFromID($domain_id, 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'config', 'cfg_', 'domain_id', 'cfg_id', null, "AND cfg_name='masters'"), 'cfg_data', $required_servers, 'cfg_id');
             } else {
                 $query .= "'masters', '" . $required_servers . "')";
                 $result = $fmdb->query($query);
             }
             $log_message .= formatLogKeyData('domain_', 'masters', $required_servers);
         }
     } else {
         /** Remove all zone config options */
         basicDelete("fm_{$__FM_CONFIG['fmDNS']['prefix']}config", $domain_id, 'domain_id');
     }
     if ($fmdb->sql_errors) {
         return __('Could not update zone because a database error occurred.') . ' ' . $fmdb->last_error;
     }
     /** Return if there are no changes */
     if ($rows_affected + ($fmdb->rows_affected = 0)) {
         return true;
     }
     /** Set the server_build_config flag for new servers */
     if (getSOACount($domain_id) && getNSCount($domain_id)) {
         setBuildUpdateConfigFlag(getZoneServers($domain_id, array('masters', 'slaves')), 'yes', 'build');
     }
     /** Delete associated records from fm_{$__FM_CONFIG['fmDNS']['prefix']}track_builds */
     basicDelete('fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'track_builds', $domain_id, 'domain_id', false);
     addLogEntry($log_message);
     return true;
 }
Example #4
0
 /**
  * Updates the selected record
  */
 function update($domain_id, $id, $record_type, $array, $skipped_record = false)
 {
     global $fmdb, $__FM_CONFIG, $fm_dns_zones;
     $domain_name = displayFriendlyDomainName(getNameFromID($domain_id, 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'domains', 'domain_', 'domain_id', 'domain_name'));
     $record_name = getNameFromID($id, 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'records', 'record_', 'record_id', 'record_name');
     $log_message = "Updated a record ({$record_name}) with the following details:\nDomain: {$domain_name}\nType: {$record_type}\n";
     $table = $record_type == 'SOA' ? 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'soa' : 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'records';
     $field = $record_type == 'SOA' ? 'soa_id' : 'record_id';
     $record_type_sql = $record_type != 'SOA' ? ",record_type='{$record_type}'" : null;
     $excluded_keys = array('record_skipped', 'PTR');
     $null_keys = array('record_key_tag');
     $sql_edit = null;
     foreach ($array as $key => $data) {
         if (in_array($key, $excluded_keys)) {
             continue;
         }
         if (in_array($key, $null_keys) && empty($data)) {
             $sql_edit .= $key . '=NULL,';
         } else {
             $sql_edit .= $key . "='" . mysql_real_escape_string(str_replace("\r\n", "\n", $data)) . "',";
         }
         if (!$skipped_record) {
             $log_message .= $data ? formatLogKeyData('record_', $key, $data) : null;
         }
         if ($key == 'soa_default' && $data == 'yes') {
             $query = "UPDATE `{$table}` SET {$key} = 'no' WHERE `account_id`='{$_SESSION['user']['account_id']}'";
             $result = $fmdb->query($query);
         }
     }
     $sql_edit = rtrim($sql_edit, ',');
     /** Update the record */
     if ($skipped_record) {
         $table .= '_skipped';
         $query = "SELECT * FROM `{$table}` WHERE account_id={$_SESSION['user']['account_id']} AND domain_id={$domain_id} AND record_id={$id}";
         $result = $fmdb->query($query);
         if ($fmdb->num_rows) {
             $query = "UPDATE `{$table}` SET domain_id={$domain_id}, record_id={$id}, record_status='{$array['record_status']}' WHERE account_id={$_SESSION['user']['account_id']} AND domain_id={$domain_id} AND record_id={$id}";
         } else {
             $query = "INSERT INTO `{$table}` VALUES(NULL, {$_SESSION['user']['account_id']}, {$domain_id}, {$id}, '{$array['record_status']}')";
         }
         $data = $array['record_status'] == 'active' ? 'no' : 'yes';
         $log_message .= formatLogKeyData(null, 'Included', $data);
     } else {
         $query = "UPDATE `{$table}` SET {$sql_edit} {$record_type_sql} WHERE `{$field}`='{$id}' AND `account_id`='{$_SESSION['user']['account_id']}'";
     }
     $result = $fmdb->query($query);
     if (!$fmdb->result) {
         return false;
     }
     /** Return if there are no changes */
     if (!$fmdb->rows_affected) {
         return true;
     }
     if (!$fm_dns_zones) {
         include ABSPATH . 'fm-modules/' . $_SESSION['module'] . '/classes/class_zones.php';
     }
     /** Update the SOA serial number */
     foreach ($fm_dns_zones->getZoneTemplateChildren($domain_id) as $child_id) {
         $domain_id = getParentDomainID($child_id);
         if (reloadAllowed($domain_id) && getSOACount($domain_id) && getNSCount($domain_id)) {
             $this->updateSOAReload($child_id, 'yes');
         }
     }
     addLogEntry($log_message);
     return $result;
 }