Project

General

Profile

Download (17.1 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 c87f4b70 Ermal
function xmlrpc_loop_detect() {
48
	global $config;
49
50
	/* grab sync to ip if enabled */
51
	if ($config['hasync'])
52
		$synchronizetoip = $config['hasync']['synchronizetoip'];
53
	if($synchronizetoip) {
54
		if($synchronizetoip == $_SERVER['REMOTE_ADDR'])
55
			return true;	
56 ff664954 Scott Ullrich
	}
57 c87f4b70 Ermal
58
	return false;
59 ff664954 Scott Ullrich
}
60
61 8da3de34 Colin Smith
$xmlrpc_g = array(
62 137f46d8 Ermal
	"return" => array(
63
		"true" => new XML_RPC_Response(new XML_RPC_Value(true, $XML_RPC_Boolean)),
64
		"false" => new XML_RPC_Response(new XML_RPC_Value(false, $XML_RPC_Boolean)),
65
		"authfail" => new XML_RPC_Response(new XML_RPC_Value(gettext("Authentication failed"), $XML_RPC_String))
66
	)
67
);
68 8da3de34 Colin Smith
69
/*
70
 *   pfSense XMLRPC errors
71
 *   $XML_RPC_erruser + 1 = Auth failure
72
 */
73
$XML_RPC_erruser = 200;
74
75
/* EXPOSED FUNCTIONS */
76 de63649b Rafael Lucas
$exec_php_doc = gettext("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.");
77 c3638879 Scott Ullrich
$exec_php_sig = array(
78 137f46d8 Ermal
	array(
79
		$XML_RPC_Boolean, // First signature element is return value.
80
		$XML_RPC_String, // password
81
		$XML_RPC_String, // shell code to exec
82
	)
83
);
84 c3638879 Scott Ullrich
85 3dd2a278 Scott Ullrich
function xmlrpc_authfail() {
86
	log_auth("webConfigurator authentication error for 'admin' from {$_SERVER['REMOTE_ADDR']}");
87
}
88
89 c3638879 Scott Ullrich
function exec_php_xmlrpc($raw_params) {
90
	global $config, $xmlrpc_g;
91 137f46d8 Ermal
92 c3638879 Scott Ullrich
	$params = xmlrpc_params_to_php($raw_params);
93 3dd2a278 Scott Ullrich
	if(!xmlrpc_auth($params)) {
94
		xmlrpc_authfail();
95 137f46d8 Ermal
		return $xmlrpc_g['return']['authfail'];
96 3dd2a278 Scott Ullrich
	}
97 c3638879 Scott Ullrich
	$exec_php = $params[0];
98
	eval($exec_php);
99 2c0dd581 Scott Ullrich
	if($toreturn) {
100
		$response = XML_RPC_encode($toreturn);
101
		return new XML_RPC_Response($response);
102
	} else
103
		return $xmlrpc_g['return']['true'];
104 c3638879 Scott Ullrich
}
105
106
/*****************************/
107 de63649b Rafael Lucas
$exec_shell_doc = gettext("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.");
108 c3638879 Scott Ullrich
$exec_shell_sig = array(
109 137f46d8 Ermal
	array(
110
		$XML_RPC_Boolean, // First signature element is return value.
111
		$XML_RPC_String, // password
112
		$XML_RPC_String, // shell code to exec
113
	)
114
);
115 c3638879 Scott Ullrich
116
function exec_shell_xmlrpc($raw_params) {
117
	global $config, $xmlrpc_g;
118 137f46d8 Ermal
119 c3638879 Scott Ullrich
	$params = xmlrpc_params_to_php($raw_params);
120 3dd2a278 Scott Ullrich
	if(!xmlrpc_auth($params)) {
121
		xmlrpc_authfail();
122 137f46d8 Ermal
		return $xmlrpc_g['return']['authfail'];
123 3dd2a278 Scott Ullrich
	}
124 c3638879 Scott Ullrich
	$shell_cmd = $params[0];
125
	mwexec($shell_cmd);
126 137f46d8 Ermal
127 c3638879 Scott Ullrich
	return $xmlrpc_g['return']['true'];
128
}
129
130
/*****************************/
131 de63649b Rafael Lucas
$backup_config_section_doc = gettext("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.");
132 8da3de34 Colin Smith
$backup_config_section_sig = array(
133 137f46d8 Ermal
	array(
134
		$XML_RPC_Struct, // First signature element is return value.
135
		$XML_RPC_String,
136
		$XML_RPC_Array
137
	)
138
);
139 21dc3a7d Colin Smith
140 57e6d4c9 Colin Smith
function backup_config_section_xmlrpc($raw_params) {
141 03d89831 Scott Ullrich
	global $config, $xmlrpc_g;
142 137f46d8 Ermal
143 c87f4b70 Ermal
	if (xmlrpc_loop_detect())
144
		log_error("Disallowing CARP sync loop");
145
146 8da3de34 Colin Smith
	$params = xmlrpc_params_to_php($raw_params);
147 3dd2a278 Scott Ullrich
	if(!xmlrpc_auth($params)) {
148
		xmlrpc_authfail();
149 137f46d8 Ermal
		return $xmlrpc_g['return']['authfail'];
150 3dd2a278 Scott Ullrich
	}
151 03d89831 Scott Ullrich
	$val = array_intersect_key($config, array_flip($params[0]));
152 137f46d8 Ermal
153 8da3de34 Colin Smith
	return new XML_RPC_Response(XML_RPC_encode($val));
154 50d49018 Colin Smith
}
155
156 8da3de34 Colin Smith
/*****************************/
157 de63649b Rafael Lucas
$restore_config_section_doc = gettext("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.");
158 8da3de34 Colin Smith
$restore_config_section_sig = array(
159 137f46d8 Ermal
	array(
160
		$XML_RPC_Boolean,
161
		$XML_RPC_String,
162
		$XML_RPC_Struct
163
	)
164
);
165 21dc3a7d Colin Smith
166 57e6d4c9 Colin Smith
function restore_config_section_xmlrpc($raw_params) {
167 03d89831 Scott Ullrich
	global $config, $xmlrpc_g;
168 137f46d8 Ermal
169 c87f4b70 Ermal
	if (xmlrpc_loop_detect())
170
		log_error("Disallowing CARP sync loop");
171
172 57e6d4c9 Colin Smith
	$params = xmlrpc_params_to_php($raw_params);
173 3dd2a278 Scott Ullrich
	if(!xmlrpc_auth($params)) {
174
		xmlrpc_authfail();
175 19b5c3e7 Ermal
		return $xmlrpc_g['return']['authfail'];
176 3dd2a278 Scott Ullrich
	}
177 1b99e1e5 jim-p
178
	// Some sections should just be copied and not merged or we end
179
	//   up unable to sync the deletion of the last item in a section
180
	$sync_full = array('ipsec', 'aliases', 'wol', 'load_balancer', 'openvpn', 'cert', 'ca', 'crl', 'schedules');
181
	$sync_full_done = array();
182
	foreach ($sync_full as $syncfull) {
183
		if (isset($params[0][$syncfull])) {
184
			$config[$syncfull] = $params[0][$syncfull];
185
			unset($params[0][$syncfull]);
186
			$sync_full_done[] = $syncfull;
187
		}
188
	}
189
190 a8200dbf Ermal
	$vipbackup = array();
191 51611440 Ermal
	$oldvips = array();
192 4d775dd0 Ermal
	if (isset($params[0]['virtualip'])) {
193 7b47bd4c Ermal
		if (is_array($config['virtualip']['vip'])) {
194 51611440 Ermal
			foreach ($config['virtualip']['vip'] as $vipindex => $vip) {
195
				if ($vip['mode'] == "carp")
196 7b47bd4c Ermal
					$oldvips["{$vip['interface']}_vip{$vip['vhid']}"] = "{$vip['password']}{$vip['advskew']}{$vip['subnet']}{$vip['subnet_bits']}{$vip['advbase']}";
197
				else if ($vip['mode'] == "ipalias" && strstr($vip['interface'], "_vip"))
198 2708a5cf Ermal
					$oldvips[$vip['subnet']] = "{$vip['interface']}{$vip['subnet']}{$vip['subnet_bits']}";
199 7b47bd4c Ermal
				else if (($vip['mode'] == "ipalias" || $vip['mode'] == 'proxyarp') && !strstr($vip['interface'], "_vip"))
200 51611440 Ermal
					$vipbackup[] = $vip;
201
			}
202 19b5c3e7 Ermal
		}
203
	}
204 f51d4f98 Ermal
205 b019222a pierrepomes
        // For vip section, first keep items sent from the master
206 aa6699fb jim-p
	$config = array_merge_recursive_unique($config, $params[0]);
207 51611440 Ermal
208 f51d4f98 Ermal
        /* Then add ipalias and proxyarp types already defined on the backup */
209
	if (is_array($vipbackup) && !empty($vipbackup)) {
210 51611440 Ermal
		if (!is_array($config['virtualip']))
211
			$config['virtualip'] = array();
212 f51d4f98 Ermal
		if (!is_array($config['virtualip']['vip']))
213
			$config['virtualip']['vip'] = array();
214
		foreach ($vipbackup as $vip)
215 51611440 Ermal
			array_unshift($config['virtualip']['vip'], $vip);
216 a8200dbf Ermal
	}
217 51611440 Ermal
218
	/* Log what happened */
219 1b99e1e5 jim-p
	$mergedkeys = implode(",", array_merge(array_keys($params[0]), $sync_full_done));
220 3a3fb8ea Erik Fonnesbeck
	write_config(sprintf(gettext("Merged in config (%s sections) from XMLRPC client."),$mergedkeys));
221 51611440 Ermal
222
	/* 
223
	 * The real work on handling the vips specially
224
	 * This is a copy of intefaces_vips_configure with addition of not reloading existing/not changed carps
225
	 */
226 63f81fbd Ermal
	if (isset($params[0]['virtualip']) && is_array($config['virtualip']) && is_array($config['virtualip']['vip'])) {
227 51611440 Ermal
		$carp_setuped = false;
228 f51d4f98 Ermal
		$anyproxyarp = false;
229 51611440 Ermal
		foreach ($config['virtualip']['vip'] as $vip) {
230 7b47bd4c Ermal
			if ($vip['mode'] == "carp" && isset($oldvips["{$vip['interface']}_vip{$vip['vhid']}"])) {
231
				if ($oldvips["{$vip['interface']}_vip{$vip['vhid']}"] == "{$vip['password']}{$vip['advskew']}{$vip['subnet']}{$vip['subnet_bits']}{$vip['advbase']}") {
232 2708a5cf Ermal
					if (does_vip_exist($vip)) {
233 7b47bd4c Ermal
						unset($oldvips["{$vip['interface']}_vip{$vip['vhid']}"]);
234 d1e03822 Ermal
						continue; // Skip reconfiguring this vips since nothing has changed.
235 19ed1624 Ermal
					}
236 92ca32cc Ermal
				}
237 7b47bd4c Ermal
				unset($oldvips["{$vip['interface']}_vip{$vip['vhid']}"]);
238
			} else if ($vip['mode'] == "ipalias" && strstr($vip['interface'], "_vip") && isset($oldvips[$vip['subnet']])) {
239 2708a5cf Ermal
				if ($oldvips[$vip['subnet']] = "{$vip['interface']}{$vip['subnet']}{$vip['subnet_bits']}") {
240
					if (does_vip_exist($vip)) {
241
						unset($oldvips[$vip['subnet']]);
242
						continue; // Skip reconfiguring this vips since nothing has changed.
243
					}
244
				}
245
				unset($oldvips[$vip['subnet']]);
246 51611440 Ermal
			}
247
248
			switch ($vip['mode']) {
249
			case "proxyarp":
250
				$anyproxyarp = true;
251
				break;
252
			case "ipalias":
253 3dacbd7c Renato Botelho
				interface_ipalias_configure($vip);
254 51611440 Ermal
				break;
255
			case "carp":
256
				if ($carp_setuped == false)
257
                                        $carp_setuped = true;
258
				interface_carp_configure($vip);
259
				break;
260
			}
261
		}
262
		/* Cleanup remaining old carps */
263
		foreach ($oldvips as $oldvipif => $oldvippar) {
264 7b47bd4c Ermal
			if (!is_ipaddr($oldvipif) && does_interface_exist($oldvipif))
265
					pfSense_interface_destroy($oldvipif);
266 51611440 Ermal
		}
267
		if ($carp_setuped == true)
268
			interfaces_carp_setup();
269
		if ($anyproxyarp == true)
270
			interface_proxyarp_configure();
271
	}
272 137f46d8 Ermal
273 8da3de34 Colin Smith
	return $xmlrpc_g['return']['true'];
274 50d49018 Colin Smith
}
275
276 82ae5cfc Scott Ullrich
/*****************************/
277 de63649b Rafael Lucas
$merge_config_section_doc = gettext("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.");
278 82ae5cfc Scott Ullrich
$merge_config_section_sig = array(
279 137f46d8 Ermal
	array(
280
		$XML_RPC_Boolean,
281
		$XML_RPC_String,
282
		$XML_RPC_Struct
283
	)
284
);
285 82ae5cfc Scott Ullrich
286
function merge_installedpackages_section_xmlrpc($raw_params) {
287
	global $config, $xmlrpc_g;
288 137f46d8 Ermal
289 c87f4b70 Ermal
	if (xmlrpc_loop_detect())
290
		log_error("Disallowing CARP sync loop");
291
292 82ae5cfc Scott Ullrich
	$params = xmlrpc_params_to_php($raw_params);
293 3dd2a278 Scott Ullrich
	if(!xmlrpc_auth($params)) {
294
		xmlrpc_authfail();
295 137f46d8 Ermal
		return $xmlrpc_g['return']['authfail'];
296 3dd2a278 Scott Ullrich
	}
297 82ae5cfc Scott Ullrich
	$config['installedpackages'] = array_merge($config['installedpackages'], $params[0]);
298
	$mergedkeys = implode(",", array_keys($params[0]));
299 3a3fb8ea Erik Fonnesbeck
	write_config(sprintf(gettext("Merged in config (%s sections) from XMLRPC client."),$mergedkeys));
300 137f46d8 Ermal
301 82ae5cfc Scott Ullrich
	return $xmlrpc_g['return']['true'];
302
}
303
304 8da3de34 Colin Smith
/*****************************/
305 de63649b Rafael Lucas
$merge_config_section_doc = gettext("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.");
306 dc1cd85d Scott Ullrich
$merge_config_section_sig = array(
307 137f46d8 Ermal
	array(
308
		$XML_RPC_Boolean,
309
		$XML_RPC_String,
310
		$XML_RPC_Struct
311
	)
312
);
313 dc1cd85d Scott Ullrich
314
function merge_config_section_xmlrpc($raw_params) {
315
	global $config, $xmlrpc_g;
316 c87f4b70 Ermal
317
	if (xmlrpc_loop_detect())
318
		log_error("Disallowing CARP sync loop");
319
320 db748384 Scott Ullrich
	$params = xmlrpc_params_to_php($raw_params);
321 3dd2a278 Scott Ullrich
	if(!xmlrpc_auth($params)) {
322
		xmlrpc_authfail();
323 db748384 Scott Ullrich
		return $xmlrpc_g['return']['authfail'];
324 3dd2a278 Scott Ullrich
	}
325 f9d7c5b3 Scott Ullrich
	$config_new = array_overlay($config, $params[0]);
326 db748384 Scott Ullrich
	$config = $config_new;
327
	$mergedkeys = implode(",", array_keys($params[0]));
328
	write_config(sprintf(gettext("Merged in config (%s sections) from XMLRPC client."), $mergedkeys));
329
	return $xmlrpc_g['return']['true'];
330 dc1cd85d Scott Ullrich
}
331
332
/*****************************/
333 de63649b Rafael Lucas
$filter_configure_doc = gettext("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.");
334 8da3de34 Colin Smith
$filter_configure_sig = array(
335 137f46d8 Ermal
	array(
336
		$XML_RPC_Boolean,
337
		$XML_RPC_String
338
	)
339
);
340 07a7b08f Colin Smith
341
function filter_configure_xmlrpc($raw_params) {
342 8da3de34 Colin Smith
	global $xmlrpc_g;
343 137f46d8 Ermal
344 07a7b08f Colin Smith
	$params = xmlrpc_params_to_php($raw_params);
345 3dd2a278 Scott Ullrich
	if(!xmlrpc_auth($params)) {
346
		xmlrpc_authfail();
347 137f46d8 Ermal
		return $xmlrpc_g['return']['authfail'];
348 3dd2a278 Scott Ullrich
	}
349 07a7b08f Colin Smith
	filter_configure();
350 e700437b Scott Ullrich
	system_routing_configure();
351 41e6d4bd Seth Mos
	setup_gateways_monitor();
352 651c32e2 Bill Marquette
	relayd_configure();
353 c3fef0c9 jim-p
	require_once("openvpn.inc");
354
	openvpn_resync_all();
355
	services_dhcpd_configure();
356 62c4d0fb jim-p
	services_dnsmasq_configure();
357 0ce72662 jim-p
	local_sync_accounts();
358 137f46d8 Ermal
359 8da3de34 Colin Smith
	return $xmlrpc_g['return']['true'];
360 07a7b08f Colin Smith
}
361
362 8da3de34 Colin Smith
/*****************************/
363 de63649b Rafael Lucas
$carp_configure_doc = gettext("Basic XMLRPC wrapper for configuring CARP interfaces.");
364 efe7562e Scott Ullrich
$carp_configure_sig = array(
365 137f46d8 Ermal
	array(
366
		$XML_RPC_Boolean,
367
		$XML_RPC_String
368
	)
369
);
370 efe7562e Scott Ullrich
371
function interfaces_carp_configure_xmlrpc($raw_params) {
372
	global $xmlrpc_g;
373 137f46d8 Ermal
374 c87f4b70 Ermal
	if (xmlrpc_loop_detect())
375
		log_error("Disallowing CARP sync loop");
376
377 efe7562e Scott Ullrich
	$params = xmlrpc_params_to_php($raw_params);
378 3dd2a278 Scott Ullrich
	if(!xmlrpc_auth($params)) {
379
		xmlrpc_authfail();
380 137f46d8 Ermal
		return $xmlrpc_g['return']['authfail'];
381 3dd2a278 Scott Ullrich
	}
382 efe7562e Scott Ullrich
	interfaces_vips_configure();
383 137f46d8 Ermal
384 efe7562e Scott Ullrich
	return $xmlrpc_g['return']['true'];
385
}
386
387
/*****************************/
388 de63649b Rafael Lucas
$check_firmware_version_doc = gettext("Basic XMLRPC wrapper for check_firmware_version. This function will return the output of check_firmware_version upon completion.");
389 137f46d8 Ermal
390 8da3de34 Colin Smith
$check_firmware_version_sig = array(
391 137f46d8 Ermal
	array(
392
		$XML_RPC_String,
393
		$XML_RPC_String
394
	)
395
);
396 44488c3c Colin Smith
397
function check_firmware_version_xmlrpc($raw_params) {
398 b4d19b46 Bill Marquette
	global $xmlrpc_g, $XML_RPC_String;
399 137f46d8 Ermal
400 b4d19b46 Bill Marquette
	$params = xmlrpc_params_to_php($raw_params);
401 3dd2a278 Scott Ullrich
	if(!xmlrpc_auth($params)) {
402
		xmlrpc_authfail();
403 137f46d8 Ermal
		return $xmlrpc_g['return']['authfail'];
404 3dd2a278 Scott Ullrich
	}
405 8da3de34 Colin Smith
	return new XML_RPC_Response(new XML_RPC_Value(check_firmware_version(false), $XML_RPC_String));
406 44488c3c Colin Smith
}
407
408 e501de37 Ermal
/*****************************/
409 0567899d Ermal
$pfsense_firmware_version_doc = gettext("Basic XMLRPC wrapper for check_firmware_version. This function will return the output of check_firmware_version upon completion.");
410
411
$pfsense_firmware_version_sig = array (
412
        array (
413
                $XML_RPC_Struct,
414
                $XML_RPC_String
415
        )
416
);
417 e501de37 Ermal
418
function pfsense_firmware_version_xmlrpc($raw_params) {
419 0567899d Ermal
        global $xmlrpc_g;
420 e501de37 Ermal
421
        $params = xmlrpc_params_to_php($raw_params);
422 3dd2a278 Scott Ullrich
        if(!xmlrpc_auth($params)) {
423
			xmlrpc_authfail();
424
			return $xmlrpc_g['return']['authfail'];
425
		}
426 0567899d Ermal
        return new XML_RPC_Response(XML_RPC_encode(host_firmware_version()));
427 e501de37 Ermal
}
428
429 8da3de34 Colin Smith
/*****************************/
430 de63649b Rafael Lucas
$reboot_doc = gettext("Basic XMLRPC wrapper for rc.reboot.");
431 1cdca133 Colin Smith
$reboot_sig = array(array($XML_RPC_Boolean, $XML_RPC_String));
432 bd0fe65b Colin Smith
function reboot_xmlrpc($raw_params) {
433 8da3de34 Colin Smith
	global $xmlrpc_g;
434 137f46d8 Ermal
435 bd0fe65b Colin Smith
	$params = xmlrpc_params_to_php($raw_params);
436 3dd2a278 Scott Ullrich
	if(!xmlrpc_auth($params)) {
437
		xmlrpc_authfail();
438 137f46d8 Ermal
		return $xmlrpc_g['return']['authfail'];
439 3dd2a278 Scott Ullrich
	}
440 53cf5533 Colin Smith
	mwexec_bg("/etc/rc.reboot");
441 137f46d8 Ermal
442 8da3de34 Colin Smith
	return $xmlrpc_g['return']['true'];
443 bd0fe65b Colin Smith
}
444
445 8da3de34 Colin Smith
/*****************************/
446
$get_notices_sig = array(
447 137f46d8 Ermal
	array(
448
		$XML_RPC_Array,
449
		$XML_RPC_String
450
	),
451
	array(
452
		$XML_RPC_Array
453
	)
454
);
455 8da3de34 Colin Smith
456 d9064267 Colin Smith
function get_notices_xmlrpc($raw_params) {
457 8da3de34 Colin Smith
	global $g, $xmlrpc_g;
458 137f46d8 Ermal
459 b4d19b46 Bill Marquette
	$params = xmlrpc_params_to_php($raw_params);
460 3dd2a278 Scott Ullrich
	if(!xmlrpc_auth($params)) {
461
		xmlrpc_authfail();
462
		return $xmlrpc_g['return']['authfail'];
463
	}
464 0674f163 sullrich
	require("notices.inc");
465 8da3de34 Colin Smith
	if(!$params) {
466 d9064267 Colin Smith
		$toreturn = get_notices();
467
	} else {
468 8da3de34 Colin Smith
		$toreturn = get_notices($params);
469 d9064267 Colin Smith
	}
470
	$response = new XML_RPC_Response(XML_RPC_encode($toreturn));
471 137f46d8 Ermal
472 d9064267 Colin Smith
	return $response;
473
}
474
475 67d78c87 Ermal
$xmlrpclockkey = lock('xmlrpc', LOCK_EX);
476
477 8da3de34 Colin Smith
/*****************************/
478 21dc3a7d Colin Smith
$server = new XML_RPC_Server(
479
        array(
480 137f46d8 Ermal
		'pfsense.exec_shell' => array('function' => 'exec_shell_xmlrpc',
481 0567899d Ermal
			'signature' => $exec_shell_sig,
482
			'docstring' => $exec_shell_doc),
483 137f46d8 Ermal
		'pfsense.exec_php' => array('function' => 'exec_php_xmlrpc',
484 0567899d Ermal
			'signature' => $exec_php_sig,
485
			'docstring' => $exec_php_doc),	
486 137f46d8 Ermal
		'pfsense.filter_configure' => array('function' => 'filter_configure_xmlrpc',
487 0567899d Ermal
			'signature' => $filter_configure_sig,
488
			'docstring' => $filter_configure_doc),
489 137f46d8 Ermal
		'pfsense.interfaces_carp_configure' => array('function' => 'interfaces_carp_configure_xmlrpc',
490 0567899d Ermal
			'docstring' => $carp_configure_sig),
491 137f46d8 Ermal
		'pfsense.backup_config_section' => array('function' => 'backup_config_section_xmlrpc',
492 0567899d Ermal
			'signature' => $backup_config_section_sig,
493
			'docstring' => $backup_config_section_doc),
494 137f46d8 Ermal
		'pfsense.restore_config_section' => array('function' => 'restore_config_section_xmlrpc',
495 0567899d Ermal
			'signature' => $restore_config_section_sig,
496
			'docstring' => $restore_config_section_doc),
497 137f46d8 Ermal
		'pfsense.merge_config_section' => array('function' => 'merge_config_section_xmlrpc',
498 0567899d Ermal
			'signature' => $merge_config_section_sig,
499
			'docstring' => $merge_config_section_doc),
500 137f46d8 Ermal
		'pfsense.merge_installedpackages_section_xmlrpc' => array('function' => 'merge_installedpackages_section_xmlrpc',
501 0567899d Ermal
			'signature' => $merge_config_section_sig,
502
			'docstring' => $merge_config_section_doc),							
503 137f46d8 Ermal
		'pfsense.check_firmware_version' => array('function' => 'check_firmware_version_xmlrpc',
504 0567899d Ermal
			'signature' => $check_firmware_version_sig,
505
			'docstring' => $check_firmware_version_doc),
506 e501de37 Ermal
		'pfsense.host_firmware_version' => array('function' => 'pfsense_firmware_version_xmlrpc',
507 0567899d Ermal
			'signature' => $pfsense_firmware_version_sig,
508
			'docstring' => $host_firmware_version_doc),
509 137f46d8 Ermal
		'pfsense.reboot' => array('function' => 'reboot_xmlrpc',
510 0567899d Ermal
			'signature' => $reboot_sig,
511
			'docstring' => $reboot_doc),
512 137f46d8 Ermal
		'pfsense.get_notices' => array('function' => 'get_notices_xmlrpc',
513 0567899d Ermal
			'signature' => $get_notices_sig)
514 50d49018 Colin Smith
        )
515
);
516 b298dd06 Scott Ullrich
517 67d78c87 Ermal
unlock($xmlrpclockkey);
518
519 f9d7c5b3 Scott Ullrich
    function array_overlay($a1,$a2)
520
    {
521
        foreach($a1 as $k => $v) {
522
            if(!array_key_exists($k,$a2)) continue;
523
            if(is_array($v) && is_array($a2[$k])){
524
                $a1[$k] = array_overlay($v,$a2[$k]);
525
            }else{
526
                $a1[$k] = $a2[$k];
527 0b581a8a Scott Ullrich
            }
528
        }
529 f9d7c5b3 Scott Ullrich
        return $a1;
530 0b581a8a Scott Ullrich
    }
531
532 de63649b Rafael Lucas
?>