/** * 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; }
/** * 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; }
/** * 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; }
/** * 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; }