';
echo '
';
@@ -105,8 +124,9 @@ else {
$address = get_parameter_post ("address");
$description = get_parameter_post ("description");
$id_server = get_parameter_post ("server");
+ $exec_proxy = get_parameter_post ("exec_proxy");
- $values = array('ip_address' => $address, 'description' => $description);
+ $values = array('ip_address' => $address, 'description' => $description, 'exec_proxy' => $exec_proxy);
$result = db_process_sql_update('tserver', $values, array('id_server' => $id_server));
if ($result !== false) {
ui_print_success_message(__('Server updated successfully'));
@@ -141,3 +161,38 @@ else {
require($config['homedir'] . '/godmode/servers/servers.build_table.php');
}
?>
+
+
diff --git a/pandora_console/include/ajax/events.php b/pandora_console/include/ajax/events.php
index e2aa878f1b..cad5efae1a 100644
--- a/pandora_console/include/ajax/events.php
+++ b/pandora_console/include/ajax/events.php
@@ -122,19 +122,64 @@ if ($perform_event_response) {
global $config;
$command = get_parameter('target','');
-
- switch (PHP_OS) {
- case "FreeBSD":
- $timeout_bin = '/usr/local/bin/gtimeout';
- break;
- case "NetBSD":
- $timeout_bin = '/usr/pkg/bin/gtimeout';
- break;
- default:
- $timeout_bin = '/usr/bin/timeout';
- break;
+ $response_id = get_parameter ('response_id');
+
+ $event_response = db_get_row('tevent_response','id',$response_id);
+
+ if (enterprise_installed()) {
+ if ($event_response['server_to_exec'] != 0 && $event_response['type'] == 'command') {
+ $commandExclusions = array ('vi', 'vim', 'nano');
+
+ $server_data = db_get_row('tserver','id_server', $event_response['server_to_exec']);
+
+ if (in_array(strtolower($command),$commandExclusions)) {
+ echo "Only stdin/stdout commands are supported";
+ }
+ else {
+ switch (PHP_OS) {
+ case "FreeBSD":
+ $timeout_bin = '/usr/local/bin/gtimeout';
+ break;
+ case "NetBSD":
+ $timeout_bin = '/usr/pkg/bin/gtimeout';
+ break;
+ default:
+ $timeout_bin = '/usr/bin/timeout';
+ break;
+ }
+
+ echo system("ssh pandora_exec_proxy@" . $server_data['ip_address'] . " \"" . $timeout_bin . " 90 " . io_safe_output($command) . " 2>&1\"", $ret_val);
+ }
+ }
+ else {
+ switch (PHP_OS) {
+ case "FreeBSD":
+ $timeout_bin = '/usr/local/bin/gtimeout';
+ break;
+ case "NetBSD":
+ $timeout_bin = '/usr/pkg/bin/gtimeout';
+ break;
+ default:
+ $timeout_bin = '/usr/bin/timeout';
+ break;
+ }
+ echo system($timeout_bin . ' 90 '.io_safe_output($command).' 2>&1');
+ }
+ }
+ else {
+ switch (PHP_OS) {
+ case "FreeBSD":
+ $timeout_bin = '/usr/local/bin/gtimeout';
+ break;
+ case "NetBSD":
+ $timeout_bin = '/usr/pkg/bin/gtimeout';
+ break;
+ default:
+ $timeout_bin = '/usr/bin/timeout';
+ break;
+ }
+ echo system($timeout_bin . ' 90 '.io_safe_output($command).' 2>&1');
}
- echo system($timeout_bin . ' 9 '.io_safe_output($command).' 2>&1');
return;
}
@@ -162,7 +207,7 @@ if ($dialogue_event_response) {
echo "
";
echo "
";
- html_print_button(__('Execute again'),'btn_str',false,'perform_response(\''.$command.'\');', "class='sub next'");
+ html_print_button(__('Execute again'),'btn_str',false,'perform_response(\''.$command.'\', ' . $response_id . ');', "class='sub next'");
echo "
";
break;
case 'url':
diff --git a/pandora_console/include/functions.php b/pandora_console/include/functions.php
index 06081117f4..057d6b4561 100644
--- a/pandora_console/include/functions.php
+++ b/pandora_console/include/functions.php
@@ -1506,7 +1506,7 @@ function get_snmpwalk($ip_target, $snmp_version, $snmp_community = '',
$snmp3_auth_user = '', $snmp3_security_level = '',
$snmp3_auth_method = '', $snmp3_auth_pass = '',
$snmp3_privacy_method = '', $snmp3_privacy_pass = '',
- $quick_print = 0, $base_oid = "", $snmp_port = '') {
+ $quick_print = 0, $base_oid = "", $snmp_port = '', $server_to_exec = 0) {
global $config;
@@ -1598,7 +1598,18 @@ function get_snmpwalk($ip_target, $snmp_version, $snmp_community = '',
break;
}
- exec($command_str, $output, $rc);
+ if (enterprise_installed()) {
+ if ($server_to_exec != 0) {
+ $server_data = db_get_row('tserver','id_server', $server_to_exec);
+ exec("ssh pandora_exec_proxy@" . $server_data['ip_address'] . " \"" . $command_str . "\"", $output, $rc);
+ }
+ else {
+ exec($command_str, $output, $rc);
+ }
+ }
+ else {
+ exec($command_str, $output, $rc);
+ }
// Parse the output of snmpwalk
$snmpwalk = array();
diff --git a/pandora_console/include/functions_snmp_browser.php b/pandora_console/include/functions_snmp_browser.php
index 7318e871cf..417cd135fa 100644
--- a/pandora_console/include/functions_snmp_browser.php
+++ b/pandora_console/include/functions_snmp_browser.php
@@ -138,7 +138,7 @@ function snmp_browser_print_tree ($tree, $id = 0, $depth = 0, $last = 0, $last_a
*
* @return array The SNMP tree.
*/
-function snmp_browser_get_tree ($target_ip, $community, $starting_oid = '.', $version = '2c', $snmp3_auth_user = '', $snmp3_security_level = '', $snmp3_auth_method = '', $snmp3_auth_pass = '', $snmp3_privacy_method = '', $snmp3_privacy_pass = '') {
+function snmp_browser_get_tree ($target_ip, $community, $starting_oid = '.', $version = '2c', $snmp3_auth_user = '', $snmp3_security_level = '', $snmp3_auth_method = '', $snmp3_auth_pass = '', $snmp3_privacy_method = '', $snmp3_privacy_pass = '', $server_to_exec = 0) {
global $config;
if ($target_ip == '') {
@@ -173,27 +173,73 @@ function snmp_browser_get_tree ($target_ip, $community, $starting_oid = '.', $ve
$error_redir_dir = '/dev/null';
break;
}
+
+ if ($server_to_exec != 0) {
+ $sql = sprintf("SELECT ip_address FROM tserver WHERE id_server = %d", $server_to_exec);
+ $server_data = db_get_row_sql($sql);
- $oid_tree = array('__LEAVES__' => array());
- if ($version == "3") {
- switch ($snmp3_security_level) {
- case "authPriv":
- exec ($snmpwalk_bin . ' -m ALL -v 3 -u ' . escapeshellarg($snmp3_auth_user) . ' -A ' . escapeshellarg($snmp3_auth_pass) . ' -l ' . escapeshellarg($snmp3_security_level) . ' -a ' . escapeshellarg($snmp3_auth_method) . ' -x ' . escapeshellarg($snmp3_privacy_method) . ' -X ' . escapeshellarg($snmp3_privacy_pass) . ' ' . escapeshellarg($target_ip) . ' ' . escapeshellarg($starting_oid) . ' 2> ' . $error_redir_dir, $output, $rc);
- break;
- case "authNoPriv":
- exec ($snmpwalk_bin . ' -m ALL -v 3 -u ' . escapeshellarg($snmp3_auth_user) . ' -A ' . escapeshellarg($snmp3_auth_pass) . ' -l ' . escapeshellarg($snmp3_security_level) . ' -a ' . escapeshellarg($snmp3_auth_method) . ' ' . escapeshellarg($target_ip) . ' ' . escapeshellarg($starting_oid) . ' 2> ' . $error_redir_dir, $output, $rc);
- break;
- case "noAuthNoPriv":
- exec ($snmpwalk_bin . ' -m ALL -v 3 -u ' . escapeshellarg($snmp3_auth_user) . ' -l ' . escapeshellarg($snmp3_security_level) . ' ' . escapeshellarg($target_ip) . ' ' . escapeshellarg($starting_oid) . ' 2> ' . $error_redir_dir, $output, $rc);
- break;
+ if (enterprise_installed()) {
+ enterprise_include_once ('include/functions_satellite.php');
+
+ $oid_tree = array('__LEAVES__' => array());
+ if ($version == "3") {
+ switch ($snmp3_security_level) {
+ case "authPriv":
+ $command = $snmpwalk_bin . " -m ALL -v 3 -u " . escapeshellarg($snmp3_auth_user) . " -A " . escapeshellarg($snmp3_auth_pass) . " -l " . escapeshellarg($snmp3_security_level) . " -a " . escapeshellarg($snmp3_auth_method) . " -x " . escapeshellarg($snmp3_privacy_method) . " -X " . escapeshellarg($snmp3_privacy_pass) . " " . escapeshellarg($target_ip) . " " . escapeshellarg($starting_oid) . " 2> " . $error_redir_dir;
+ break;
+ case "authNoPriv":
+ $command = $snmpwalk_bin . " -m ALL -v 3 -u " . escapeshellarg($snmp3_auth_user) . " -A " . escapeshellarg($snmp3_auth_pass) . " -l " . escapeshellarg($snmp3_security_level) . " -a " . escapeshellarg($snmp3_auth_method) . " " . escapeshellarg($target_ip) . " " . escapeshellarg($starting_oid) . " 2> " . $error_redir_dir;
+ break;
+ case "noAuthNoPriv":
+ $command = $snmpwalk_bin . " -m ALL -v 3 -u " . escapeshellarg($snmp3_auth_user) . " -l " . escapeshellarg($snmp3_security_level) . " " . escapeshellarg($target_ip) . ' ' . escapeshellarg($starting_oid) . " 2> " . $error_redir_dir;
+ break;
+ }
+ }
+ else {
+ $command = $snmpwalk_bin . " -m ALL -M +" . escapeshellarg($config['homedir'] . "/attachment/mibs") . " -Cc -c " . escapeshellarg($community) . " -v " . escapeshellarg($version) . " " . escapeshellarg($target_ip) . " " . escapeshellarg($starting_oid) . " 2> " . $error_redir_dir;
+ }
+ exec("ssh pandora_exec_proxy@" . $server_data['ip_address'] . " \"" . $command . "\"", $output, $rc);
+ }
+ else {
+ $oid_tree = array('__LEAVES__' => array());
+ if ($version == "3") {
+ switch ($snmp3_security_level) {
+ case "authPriv":
+ exec ($snmpwalk_bin . ' -m ALL -v 3 -u ' . escapeshellarg($snmp3_auth_user) . ' -A ' . escapeshellarg($snmp3_auth_pass) . ' -l ' . escapeshellarg($snmp3_security_level) . ' -a ' . escapeshellarg($snmp3_auth_method) . ' -x ' . escapeshellarg($snmp3_privacy_method) . ' -X ' . escapeshellarg($snmp3_privacy_pass) . ' ' . escapeshellarg($target_ip) . ' ' . escapeshellarg($starting_oid) . ' 2> ' . $error_redir_dir, $output, $rc);
+ break;
+ case "authNoPriv":
+ exec ($snmpwalk_bin . ' -m ALL -v 3 -u ' . escapeshellarg($snmp3_auth_user) . ' -A ' . escapeshellarg($snmp3_auth_pass) . ' -l ' . escapeshellarg($snmp3_security_level) . ' -a ' . escapeshellarg($snmp3_auth_method) . ' ' . escapeshellarg($target_ip) . ' ' . escapeshellarg($starting_oid) . ' 2> ' . $error_redir_dir, $output, $rc);
+ break;
+ case "noAuthNoPriv":
+ exec ($snmpwalk_bin . ' -m ALL -v 3 -u ' . escapeshellarg($snmp3_auth_user) . ' -l ' . escapeshellarg($snmp3_security_level) . ' ' . escapeshellarg($target_ip) . ' ' . escapeshellarg($starting_oid) . ' 2> ' . $error_redir_dir, $output, $rc);
+ break;
+ }
+ }
+ else {
+ exec ($snmpwalk_bin . ' -m ALL -M +' . escapeshellarg($config['homedir'] . '/attachment/mibs') . ' -Cc -c ' . escapeshellarg($community) . ' -v ' . escapeshellarg($version) . ' ' . escapeshellarg($target_ip) . ' ' . escapeshellarg($starting_oid) . ' 2> ' . $error_redir_dir, $output, $rc);
+ }
}
}
else {
- exec ($snmpwalk_bin . ' -m ALL -M +' . escapeshellarg($config['homedir'] . '/attachment/mibs') . ' -Cc -c ' . escapeshellarg($community) . ' -v ' . escapeshellarg($version) . ' ' . escapeshellarg($target_ip) . ' ' . escapeshellarg($starting_oid) . ' 2> ' . $error_redir_dir, $output, $rc);
+ $oid_tree = array('__LEAVES__' => array());
+ if ($version == "3") {
+ switch ($snmp3_security_level) {
+ case "authPriv":
+ exec ($snmpwalk_bin . ' -m ALL -v 3 -u ' . escapeshellarg($snmp3_auth_user) . ' -A ' . escapeshellarg($snmp3_auth_pass) . ' -l ' . escapeshellarg($snmp3_security_level) . ' -a ' . escapeshellarg($snmp3_auth_method) . ' -x ' . escapeshellarg($snmp3_privacy_method) . ' -X ' . escapeshellarg($snmp3_privacy_pass) . ' ' . escapeshellarg($target_ip) . ' ' . escapeshellarg($starting_oid) . ' 2> ' . $error_redir_dir, $output, $rc);
+ break;
+ case "authNoPriv":
+ exec ($snmpwalk_bin . ' -m ALL -v 3 -u ' . escapeshellarg($snmp3_auth_user) . ' -A ' . escapeshellarg($snmp3_auth_pass) . ' -l ' . escapeshellarg($snmp3_security_level) . ' -a ' . escapeshellarg($snmp3_auth_method) . ' ' . escapeshellarg($target_ip) . ' ' . escapeshellarg($starting_oid) . ' 2> ' . $error_redir_dir, $output, $rc);
+ break;
+ case "noAuthNoPriv":
+ exec ($snmpwalk_bin . ' -m ALL -v 3 -u ' . escapeshellarg($snmp3_auth_user) . ' -l ' . escapeshellarg($snmp3_security_level) . ' ' . escapeshellarg($target_ip) . ' ' . escapeshellarg($starting_oid) . ' 2> ' . $error_redir_dir, $output, $rc);
+ break;
+ }
+ }
+ else {
+ exec ($snmpwalk_bin . ' -m ALL -M +' . escapeshellarg($config['homedir'] . '/attachment/mibs') . ' -Cc -c ' . escapeshellarg($community) . ' -v ' . escapeshellarg($version) . ' ' . escapeshellarg($target_ip) . ' ' . escapeshellarg($starting_oid) . ' 2> ' . $error_redir_dir, $output, $rc);
+ }
}
- //if ($rc != 0) {
- // return __('No data');
- //}
+html_debug($output, true);
foreach ($output as $line) {
// Separate the OID from the value
@@ -518,7 +564,21 @@ function snmp_browser_print_container ($return = false, $width = '100%', $height
'3' => 'v. 3'),
'snmp_browser_version', '', 'checkSNMPVersion();', '', '', true, false, false, '');
- $table->data[0][4] = html_print_button(__('Browse'), 'browse', false, 'snmpBrowse()', 'class="sub search" style="margin-top:0px;"', true);
+ $servers_to_exec = array();
+ $servers_to_exec[0] = __('Local console');
+
+ if (enterprise_installed()) {
+ enterprise_include_once ('include/functions_satellite.php');
+
+ $rows = get_proxy_servers();
+ foreach ($rows as $row) {
+ $servers_to_exec[$row['id_server']] = $row['name'];
+ }
+ }
+ $table->data[0][4] = '
' . __('Server to execute') . ' ';
+ $table->data[0][4] .= html_print_select($servers_to_exec, 'server_to_exec', '', '', '', '', true);
+
+ $table->data[0][5] = html_print_button(__('Browse'), 'browse', false, 'snmpBrowse()', 'class="sub search" style="margin-top:0px;"', true);
// SNMP v3 options
$table3 = new stdClass();
diff --git a/pandora_console/include/javascript/pandora_events.js b/pandora_console/include/javascript/pandora_events.js
index 80c6affeb5..bd9b6cfcb6 100644
--- a/pandora_console/include/javascript/pandora_events.js
+++ b/pandora_console/include/javascript/pandora_events.js
@@ -177,7 +177,7 @@ function show_response_dialog(event_id, response_id, response) {
draggable: true,
modal: false,
open: function(event, ui) {
- perform_response(response['target']);
+ perform_response(response['target'], response_id);
},
width: response['modal_width'],
height: response['modal_height']
@@ -336,7 +336,7 @@ function get_response_target(event_id, response_id, server_id) {
}
// Perform a response and put the output into a div
-function perform_response(target) {
+function perform_response(target, response_id) {
var ajax_file = $('#hidden-ajax_file').val();
$('#re_exec_command').hide();
@@ -351,6 +351,7 @@ function perform_response(target) {
params.push("page=include/ajax/events");
params.push("perform_event_response=1");
params.push("target="+target);
+ params.push("response_id="+response_id)
jQuery.ajax ({
data: params.join ("&"),
diff --git a/pandora_console/include/javascript/pandora_snmp_browser.js b/pandora_console/include/javascript/pandora_snmp_browser.js
index 3b9067729c..12f2f62296 100644
--- a/pandora_console/include/javascript/pandora_snmp_browser.js
+++ b/pandora_console/include/javascript/pandora_snmp_browser.js
@@ -19,6 +19,7 @@ function snmpBrowse () {
var community = $('#text-community').val();
var starting_oid = $('#text-starting_oid').val();
var snmp_version = $('#snmp_browser_version').val();
+ var server_to_exec = $('#server_to_exec').val();
var snmp3_auth_user = $('#text-snmp3_browser_auth_user').val();
var snmp3_security_level = $('#snmp3_browser_security_level').val();
var snmp3_auth_method = $('#snmp3_browser_auth_method').val();
@@ -33,6 +34,7 @@ function snmpBrowse () {
"community=" + community,
"starting_oid=" + starting_oid,
"snmp_browser_version=" + snmp_version,
+ "server_to_exec=" + server_to_exec,
"snmp3_browser_auth_user=" + snmp3_auth_user,
"snmp3_browser_security_level=" + snmp3_security_level,
"snmp3_browser_auth_method=" + snmp3_auth_method,
diff --git a/pandora_console/operation/snmpconsole/snmp_browser.php b/pandora_console/operation/snmpconsole/snmp_browser.php
index 191c0caab9..0a8204208e 100644
--- a/pandora_console/operation/snmpconsole/snmp_browser.php
+++ b/pandora_console/operation/snmpconsole/snmp_browser.php
@@ -27,6 +27,7 @@ if (is_ajax()) {
$target_ip = (string) get_parameter ("target_ip", '');
$community = (string) get_parameter ("community", '');
$snmp_version = (string) get_parameter ("snmp_browser_version", '');
+ $server_to_exec = (int) get_parameter ("server_to_exec", 0);
$snmp3_auth_user = get_parameter('snmp3_browser_auth_user');
$snmp3_security_level = get_parameter('snmp3_browser_security_level');
$snmp3_auth_method = get_parameter('snmp3_browser_auth_method');
@@ -41,7 +42,8 @@ if (is_ajax()) {
$snmp_tree = snmp_browser_get_tree(
$target_ip, $community, $starting_oid, $snmp_version,
$snmp3_auth_user, $snmp3_security_level, $snmp3_auth_method,
- $snmp3_auth_pass, $snmp3_privacy_method, $snmp3_privacy_pass);
+ $snmp3_auth_pass, $snmp3_privacy_method, $snmp3_privacy_pass,
+ $server_to_exec);
if (! is_array ($snmp_tree)) {
echo $snmp_tree;
}
diff --git a/pandora_console/pandoradb.sql b/pandora_console/pandoradb.sql
index 7167c79281..ce3dc212e2 100644
--- a/pandora_console/pandoradb.sql
+++ b/pandora_console/pandoradb.sql
@@ -976,6 +976,7 @@ CREATE TABLE IF NOT EXISTS `tserver` (
`my_modules` int(11) NOT NULL default 0,
`server_keepalive` int(11) NOT NULL default 0,
`stat_utimestamp` bigint(20) NOT NULL default '0',
+ `exec_proxy` tinyint(1) UNSIGNED NOT NULL default 0,
PRIMARY KEY (`id_server`),
KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
@@ -1844,6 +1845,7 @@ CREATE TABLE IF NOT EXISTS `tevent_response` (
`modal_height` INTEGER NOT NULL DEFAULT 0,
`new_window` TINYINT(4) NOT NULL DEFAULT 0,
`params` TEXT NOT NULL,
+ `server_to_exec` int(10) unsigned NOT NULL DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
diff --git a/pandora_console/pandoradb_data.sql b/pandora_console/pandoradb_data.sql
index 7e0f84dee6..8047512f4d 100644
--- a/pandora_console/pandoradb_data.sql
+++ b/pandora_console/pandoradb_data.sql
@@ -1148,7 +1148,7 @@ INSERT INTO `tagent_custom_fields` VALUES (1,'Serial Number',0,0),(2,'Depar
INSERT INTO `ttag` VALUES (1,'network','Network equipment','http://artica.es','',''),(2,'critical','Critical modules','','',''),(3,'dmz','DMZ Network Zone','','',''),(4,'performance','Performance anda capacity modules','','',''),(5,'configuration','','','','');
-INSERT INTO `tevent_response` VALUES (1,'Ping to host','Ping to the agent host','ping -c 5 _agent_address_','command',0,620,500,0,''),(2,'SSH to host','Connect via SSH to the agent','http://localhost:8022/anyterm.html?param=_User_@_agent_address_','url',0,800,450,0,'User'),(3,'Create incident from event','Create a incident from the event with the standard incidents system of Pandora FMS','index.php?sec=workspace&sec2=operation/incidents/incident_detail&insert_form&from_event=_event_id_','url',0,0,0,1,''),(4,'Create Integria IMS incident from event','Create a incident from the event with integria incidents system of Pandora FMS.
Is necessary to enable and configure the Integria incidents in Pandora FMS setup.','index.php?sec=workspace&sec2=operation/integria_incidents/incident&tab=editor&from_event=_event_id_','url',0,0,0,1,''),(5,'Restart agent','Restart the agent with using UDP protocol.
To use this response is necessary to have installed Pandora FMS server and console in the same machine.','/usr/share/pandora_server/util/udp_client.pl _agent_address_ 41122 "REFRESH AGENT"','command',0,620,500,0,''),(6,'Ping to module agent host','Ping to the module agent host','ping -c 5 _module_address_','command',0,620,500,0,'');
+INSERT INTO `tevent_response` VALUES (1,'Ping to host','Ping to the agent host','ping -c 5 _agent_address_','command',0,620,500,0,'',0),(2,'SSH to host','Connect via SSH to the agent','http://localhost:8022/anyterm.html?param=_User_@_agent_address_','url',0,800,450,0,'User',0),(3,'Create incident from event','Create a incident from the event with the standard incidents system of Pandora FMS','index.php?sec=workspace&sec2=operation/incidents/incident_detail&insert_form&from_event=_event_id_','url',0,0,0,1,'',0),(4,'Create Integria IMS incident from event','Create a incident from the event with integria incidents system of Pandora FMS.
Is necessary to enable and configure the Integria incidents in Pandora FMS setup.','index.php?sec=workspace&sec2=operation/integria_incidents/incident&tab=editor&from_event=_event_id_','url',0,0,0,1,'',0),(5,'Restart agent','Restart the agent with using UDP protocol.
To use this response is necessary to have installed Pandora FMS server and console in the same machine.','/usr/share/pandora_server/util/udp_client.pl _agent_address_ 41122 "REFRESH AGENT"','command',0,620,500,0,'',0),(6,'Ping to module agent host','Ping to the module agent host','ping -c 5 _module_address_','command',0,620,500,0,'',0);
INSERT INTO `tupdate_settings` VALUES ('current_update', '412'), ('customer_key', 'PANDORA-FREE'), ('updating_binary_path', 'Path where the updated binary files will be stored'), ('updating_code_path', 'Path where the updated code is stored'), ('dbname', ''), ('dbhost', ''), ('dbpass', ''), ('dbuser', ''), ('dbport', ''), ('proxy', ''), ('proxy_port', ''), ('proxy_user', ''), ('proxy_pass', '');