Project

General

Profile

Download (12 KB) Statistics
| Branch: | Tag: | Revision:
1 50d49018 Colin Smith
<?php
2
/*
3 81d8a9ad Colin Smith
	$Id$
4 dc1cd85d Scott Ullrich
5 50d49018 Colin Smith
        xmlrpc.php
6 d1a6552b Scott Ullrich
        Copyright (C) 2009, 2010 Scott Ullrich
7 50d49018 Colin Smith
        Copyright (C) 2005 Colin Smith
8
        All rights reserved.
9
10
        Redistribution and use in source and binary forms, with or without
11
        modification, are permitted provided that the following conditions are met:
12
13
        1. Redistributions of source code must retain the above copyright notice,
14
           this list of conditions and the following disclaimer.
15
16
        2. Redistributions in binary form must reproduce the above copyright
17
           notice, this list of conditions and the following disclaimer in the
18
           documentation and/or other materials provided with the distribution.
19
20
        THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
21
        INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
22
        AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
23
        AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
24
        OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25
        SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
        INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27
        CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28
        ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 0e19e0e4 Scott Ullrich
        POSSIBILITY OF SUCH DAMAGE.
30 50d49018 Colin Smith
*/
31
32 6b07c15a Matthew Grooms
##|+PRIV
33
##|*IDENT=page-xmlrpclibrary
34
##|*NAME=XMLRPC Library page
35
##|*DESCR=Allow access to the 'XMLRPC Library' page.
36
##|*MATCH=xmlrpc.php*
37
##|-PRIV
38
39 0674f163 sullrich
require("config.inc");
40
require("functions.inc");
41
require("filter.inc");
42
require("shaper.inc");
43
require("xmlrpc_server.inc");
44
require("xmlrpc.inc");
45
require("array_intersect_key.inc");
46 50d49018 Colin Smith
47 ff664954 Scott Ullrich
/* grab sync to ip if enabled */
48 dd98e330 Scott Ullrich
if($config['installedpackages']['carpsettings']) {
49
	if ($config['installedpackages']['carpsettings']['config']) {
50
		foreach ($config['installedpackages']['carpsettings']['config'] as $carp) {
51
			$synchronizetoip = $carp['synchronizetoip'];
52
		}
53 ff664954 Scott Ullrich
	}
54
}
55
56
if($synchronizetoip) {
57
	if($synchronizetoip == $_SERVER['REMOTE_ADDR']) {
58
		log_error("Disallowing CARP sync loop.");
59
		die;	
60
	}
61
}
62
63 8da3de34 Colin Smith
$xmlrpc_g = array(
64
			"return" => array(
65
						"true" => new XML_RPC_Response(new XML_RPC_Value(true, $XML_RPC_Boolean)),
66
						"false" => new XML_RPC_Response(new XML_RPC_Value(false, $XML_RPC_Boolean)),
67 b298dd06 Scott Ullrich
						"authfail" => new XML_RPC_Response(new XML_RPC_Value("Authentication failed", $XML_RPC_String))
68 8da3de34 Colin Smith
				)
69
		);
70
71
/*
72
 *   pfSense XMLRPC errors
73
 *   $XML_RPC_erruser + 1 = Auth failure
74
 */
75
$XML_RPC_erruser = 200;
76
77
/* EXPOSED FUNCTIONS */
78 21dc3a7d Colin Smith
79 c3638879 Scott Ullrich
$exec_php_doc = 'XMLRPC wrapper for eval(). This method must be called with two parameters: a string containing the local system\'s password followed by the PHP code to evaluate.';
80
$exec_php_sig = array(
81 0e19e0e4 Scott Ullrich
					array(
82
						$XML_RPC_Boolean, // First signature element is return value.
83
						$XML_RPC_String, // password
84
						$XML_RPC_String, // shell code to exec
85
					)
86
				);
87 c3638879 Scott Ullrich
88
function exec_php_xmlrpc($raw_params) {
89
	global $config, $xmlrpc_g;
90
	$params = xmlrpc_params_to_php($raw_params);
91
	if(!xmlrpc_auth($params)) return $xmlrpc_g['return']['authfail'];
92
	$exec_php = $params[0];
93
	eval($exec_php);
94 2c0dd581 Scott Ullrich
	if($toreturn) {
95
		$response = XML_RPC_encode($toreturn);
96
		return new XML_RPC_Response($response);
97
	} else
98
		return $xmlrpc_g['return']['true'];
99 c3638879 Scott Ullrich
}
100
101
/*****************************/
102
103
$exec_shell_doc = 'XMLRPC wrapper for mwexec(). This method must be called with two parameters: a string containing the local system\'s password followed by an shell command to execute.';
104
$exec_shell_sig = array(
105 0e19e0e4 Scott Ullrich
					array(
106
						$XML_RPC_Boolean, // First signature element is return value.
107
						$XML_RPC_String, // password
108
						$XML_RPC_String, // shell code to exec
109
					)
110
				);
111 c3638879 Scott Ullrich
112
113
function exec_shell_xmlrpc($raw_params) {
114
	global $config, $xmlrpc_g;
115
	$params = xmlrpc_params_to_php($raw_params);
116
	if(!xmlrpc_auth($params)) return $xmlrpc_g['return']['authfail'];
117
	$shell_cmd = $params[0];
118
	mwexec($shell_cmd);
119
	return $xmlrpc_g['return']['true'];
120
}
121
122
123
124
/*****************************/
125
126
127 03d89831 Scott Ullrich
$backup_config_section_doc = 'XMLRPC wrapper for backup_config_section. This method must be called with two parameters: a string containing the local system\'s password followed by an array containing the keys to be backed up.';
128 8da3de34 Colin Smith
$backup_config_section_sig = array(
129 0e19e0e4 Scott Ullrich
								array(
130
									$XML_RPC_Struct, // First signature element is return value.
131
									$XML_RPC_String,
132
									$XML_RPC_Array
133
								)
134
							);
135 21dc3a7d Colin Smith
136 57e6d4c9 Colin Smith
function backup_config_section_xmlrpc($raw_params) {
137 03d89831 Scott Ullrich
	global $config, $xmlrpc_g;
138 8da3de34 Colin Smith
	$params = xmlrpc_params_to_php($raw_params);
139
	if(!xmlrpc_auth($params)) return $xmlrpc_g['return']['authfail'];
140 03d89831 Scott Ullrich
	$val = array_intersect_key($config, array_flip($params[0]));
141 8da3de34 Colin Smith
	return new XML_RPC_Response(XML_RPC_encode($val));
142 50d49018 Colin Smith
}
143
144 8da3de34 Colin Smith
/*****************************/
145
146 03d89831 Scott Ullrich
$restore_config_section_doc = 'XMLRPC wrapper for restore_config_section. This method must be called with two parameters: a string containing the local system\'s password and an array to merge into the system\'s config. This function returns true upon completion.';
147 8da3de34 Colin Smith
$restore_config_section_sig = array(
148 0e19e0e4 Scott Ullrich
								array(
149
									$XML_RPC_Boolean,
150
									$XML_RPC_String,
151
									$XML_RPC_Struct
152
								)
153
							);
154 21dc3a7d Colin Smith
155 57e6d4c9 Colin Smith
function restore_config_section_xmlrpc($raw_params) {
156 03d89831 Scott Ullrich
	global $config, $xmlrpc_g;
157 57e6d4c9 Colin Smith
	$params = xmlrpc_params_to_php($raw_params);
158 8da3de34 Colin Smith
	if(!xmlrpc_auth($params)) return $xmlrpc_g['return']['authfail'];
159 03d89831 Scott Ullrich
	$config = array_merge($config, $params[0]);
160
	$mergedkeys = implode(",", array_keys($params[0]));
161
	write_config("Merged in config ({$mergedkeys} sections) from XMLRPC client.");
162 8da3de34 Colin Smith
	return $xmlrpc_g['return']['true'];
163 50d49018 Colin Smith
}
164
165 82ae5cfc Scott Ullrich
166
/*****************************/
167
168
169
$merge_config_section_doc = 'XMLRPC wrapper for merging package sections. This method must be called with two parameters: a string containing the local system\'s password and an array to merge into the system\'s config. This function returns true upon completion.';
170
$merge_config_section_sig = array(
171 0e19e0e4 Scott Ullrich
								array(
172
									$XML_RPC_Boolean,
173
									$XML_RPC_String,
174
									$XML_RPC_Struct
175
								)
176
							);
177 82ae5cfc Scott Ullrich
178
function merge_installedpackages_section_xmlrpc($raw_params) {
179
	global $config, $xmlrpc_g;
180
	$params = xmlrpc_params_to_php($raw_params);
181
	if(!xmlrpc_auth($params)) return $xmlrpc_g['return']['authfail'];
182
	$config['installedpackages'] = array_merge($config['installedpackages'], $params[0]);
183
	$mergedkeys = implode(",", array_keys($params[0]));
184
	write_config("Merged in config ({$mergedkeys} sections) from XMLRPC client.");
185
	return $xmlrpc_g['return']['true'];
186
}
187
188
189 8da3de34 Colin Smith
/*****************************/
190
191 dc1cd85d Scott Ullrich
192
$merge_config_section_doc = 'XMLRPC wrapper for merge_config_section. This method must be called with two parameters: a string containing the local system\'s password and an array to merge into the system\'s config. This function returns true upon completion.';
193
$merge_config_section_sig = array(
194 0e19e0e4 Scott Ullrich
								array(
195
									$XML_RPC_Boolean,
196
									$XML_RPC_String,
197
									$XML_RPC_Struct
198
								)
199
							);
200 dc1cd85d Scott Ullrich
201
function merge_config_section_xmlrpc($raw_params) {
202
	global $config, $xmlrpc_g;
203
	$params = xmlrpc_params_to_php($raw_params);
204
	if(!xmlrpc_auth($params)) return $xmlrpc_g['return']['authfail'];
205 ee87d929 Scott Ullrich
	$config = array_merge_recursive_unique($config, $params[0]);
206 dc1cd85d Scott Ullrich
	$mergedkeys = implode(",", array_keys($params[0]));
207
	write_config("Merged in config ({$mergedkeys} sections) from XMLRPC client.");
208
	return $xmlrpc_g['return']['true'];
209
}
210
211
/*****************************/
212
213 07a7b08f Colin Smith
$filter_configure_doc = 'Basic XMLRPC wrapper for filter_configure. This method must be called with one paramater: a string containing the local system\'s password. This function returns true upon completion.';
214 8da3de34 Colin Smith
$filter_configure_sig = array(
215 0e19e0e4 Scott Ullrich
							array(
216
								$XML_RPC_Boolean,
217
								$XML_RPC_String
218
							)
219
						);
220 07a7b08f Colin Smith
221
function filter_configure_xmlrpc($raw_params) {
222 8da3de34 Colin Smith
	global $xmlrpc_g;
223 07a7b08f Colin Smith
	$params = xmlrpc_params_to_php($raw_params);
224 8da3de34 Colin Smith
	if(!xmlrpc_auth($params)) return $xmlrpc_g['return']['authfail'];
225 0674f163 sullrich
	require("vslb.inc");
226 07a7b08f Colin Smith
	filter_configure();
227 e700437b Scott Ullrich
	system_routing_configure();
228 41e6d4bd Seth Mos
	setup_gateways_monitor();
229 651c32e2 Bill Marquette
	relayd_configure();
230 8da3de34 Colin Smith
	return $xmlrpc_g['return']['true'];
231 07a7b08f Colin Smith
}
232
233 8da3de34 Colin Smith
/*****************************/
234
235 b4d19b46 Bill Marquette
$check_firmware_version_doc = 'Basic XMLRPC wrapper for check_firmware_version. This function will return the output of check_firmware_version upon completion.';
236 8da3de34 Colin Smith
$check_firmware_version_sig = array(
237 0e19e0e4 Scott Ullrich
								array(
238
									$XML_RPC_String,
239
									$XML_RPC_String
240
								)
241
							);
242 44488c3c Colin Smith
243
function check_firmware_version_xmlrpc($raw_params) {
244 b4d19b46 Bill Marquette
	global $xmlrpc_g, $XML_RPC_String;
245
	$params = xmlrpc_params_to_php($raw_params);
246
	if(!xmlrpc_auth($params)) return $xmlrpc_g['return']['authfail'];
247 8da3de34 Colin Smith
	return new XML_RPC_Response(new XML_RPC_Value(check_firmware_version(false), $XML_RPC_String));
248 44488c3c Colin Smith
}
249
250 8da3de34 Colin Smith
/*****************************/
251 44488c3c Colin Smith
252 bd0fe65b Colin Smith
$reboot_doc = 'Basic XMLRPC wrapper for rc.reboot.';
253 1cdca133 Colin Smith
$reboot_sig = array(array($XML_RPC_Boolean, $XML_RPC_String));
254 bd0fe65b Colin Smith
255
function reboot_xmlrpc($raw_params) {
256 8da3de34 Colin Smith
	global $xmlrpc_g;
257 bd0fe65b Colin Smith
	$params = xmlrpc_params_to_php($raw_params);
258 8da3de34 Colin Smith
	if(!xmlrpc_auth($params)) return $xmlrpc_g['return']['authfail'];
259 53cf5533 Colin Smith
	mwexec_bg("/etc/rc.reboot");
260 8da3de34 Colin Smith
	return $xmlrpc_g['return']['true'];
261 bd0fe65b Colin Smith
}
262
263 8da3de34 Colin Smith
/*****************************/
264
265
$get_notices_sig = array(
266 0e19e0e4 Scott Ullrich
					array(
267
						$XML_RPC_Array,
268
						$XML_RPC_String
269
					),
270
					array(
271
						$XML_RPC_Array
272
					)
273
				);
274 8da3de34 Colin Smith
275 d9064267 Colin Smith
function get_notices_xmlrpc($raw_params) {
276 8da3de34 Colin Smith
	global $g, $xmlrpc_g;
277 b4d19b46 Bill Marquette
	$params = xmlrpc_params_to_php($raw_params);
278
	if(!xmlrpc_auth($params)) return $xmlrpc_g['return']['authfail'];
279 0674f163 sullrich
	require("notices.inc");
280 8da3de34 Colin Smith
	if(!$params) {
281 d9064267 Colin Smith
		$toreturn = get_notices();
282
	} else {
283 8da3de34 Colin Smith
		$toreturn = get_notices($params);
284 d9064267 Colin Smith
	}
285
	$response = new XML_RPC_Response(XML_RPC_encode($toreturn));
286
	return $response;
287
}
288
289 8da3de34 Colin Smith
/*****************************/
290
291
$carp_configure_doc = 'Basic XMLRPC wrapper for configuring CARP interfaces.';
292 670fe849 Scott Ullrich
$carp_configure_sig = array(array($XML_RPC_Boolean, $XML_RPC_String));
293
294 52c3baf5 Scott Ullrich
function interfaces_carp_configure_xmlrpc($raw_params) {
295 670fe849 Scott Ullrich
	global $xmlrpc_g;
296 728d393d Colin Smith
	$params = xmlrpc_params_to_php($raw_params);
297 670fe849 Scott Ullrich
	if(!xmlrpc_auth($params)) return $xmlrpc_g['return']['authfail'];
298 0a595d84 Ermal Lu?i
	interfaces_carp_setup();
299 670fe849 Scott Ullrich
	return $xmlrpc_g['return']['true'];
300 52c3baf5 Scott Ullrich
}
301
302 8da3de34 Colin Smith
/*****************************/
303
304 21dc3a7d Colin Smith
$server = new XML_RPC_Server(
305
        array(
306 c3638879 Scott Ullrich
            'pfsense.exec_shell' 		=> array('function' => 'exec_shell_xmlrpc',
307
							'signature' => $exec_shell_sig,
308
							'docstring' => $exec_shell_doc),
309
            'pfsense.exec_php'	 		=> array('function' => 'exec_php_xmlrpc',
310
							'signature' => $exec_php_sig,
311
							'docstring' => $exec_php_doc),	
312 52c3baf5 Scott Ullrich
            'pfsense.interfaces_carp_configure' => array('function' => 'interfaces_carp_configure_xmlrpc',
313
							'signature' => $carp_configure_doc,
314
							'docstring' => $carp_configure_sig),
315 07a7b08f Colin Smith
            'pfsense.backup_config_section' => 	array('function' => 'backup_config_section_xmlrpc',
316 21dc3a7d Colin Smith
							'signature' => $backup_config_section_sig,
317
							'docstring' => $backup_config_section_doc),
318 0e19e0e4 Scott Ullrich
			'pfsense.restore_config_section' => array('function' => 'restore_config_section_xmlrpc',
319 21dc3a7d Colin Smith
							'signature' => $restore_config_section_sig,
320 07a7b08f Colin Smith
							'docstring' => $restore_config_section_doc),
321 0e19e0e4 Scott Ullrich
			'pfsense.merge_config_section' => array('function' => 'merge_config_section_xmlrpc',
322 dc1cd85d Scott Ullrich
							'signature' => $merge_config_section_sig,
323
							'docstring' => $merge_config_section_doc),
324 0e19e0e4 Scott Ullrich
			'pfsense.merge_installedpackages_section_xmlrpc' => array('function' => 'merge_installedpackages_section_xmlrpc',
325 c3638879 Scott Ullrich
							'signature' => $merge_config_section_sig,
326
							'docstring' => $merge_config_section_doc),							
327 0e19e0e4 Scott Ullrich
			'pfsense.filter_configure' => 	array('function' => 'filter_configure_xmlrpc',
328 07a7b08f Colin Smith
							'signature' => $filter_configure_sig,
329 44488c3c Colin Smith
							'docstring' => $filter_configure_doc),
330 0e19e0e4 Scott Ullrich
			'pfsense.check_firmware_version' =>	array('function' => 'check_firmware_version_xmlrpc',
331 44488c3c Colin Smith
							'signature' => $check_firmware_version_sig,
332 bd0fe65b Colin Smith
							'docstring' => $check_firmware_version_doc),
333 0e19e0e4 Scott Ullrich
			'pfsense.reboot' =>			array('function' => 'reboot_xmlrpc',
334 bd0fe65b Colin Smith
							'signature' => $reboot_sig,
335 d9064267 Colin Smith
							'docstring' => $reboot_doc),
336 0e19e0e4 Scott Ullrich
			'pfsense.get_notices' =>		array('function' => 'get_notices_xmlrpc',
337 d9064267 Colin Smith
							'signature' => $get_notices_sig)
338 50d49018 Colin Smith
        )
339
);
340 b298dd06 Scott Ullrich
341
?>