Project

General

Profile

Download (20.3 KB) Statistics
| Branch: | Tag: | Revision:
1
<?php
2
/****h* pfSense/service-utils
3
	NAME
4
		service-utils.inc - Service facility
5
	DESCRIPTION
6
		This file contains various functions used by the pfSense service facility.
7
	HISTORY
8
	$Id$
9

    
10
	Copyright (C) 2005-2006 Colin Smith (ethethlay@gmail.com)
11
	All rights reserved.
12
	Redistribution and use in source and binary forms, with or without
13
	modification, are permitted provided that the following conditions are met:
14

    
15
	1. Redistributions of source code must retain the above copyright notice,
16
	   this list of conditions and the following disclaimer.
17

    
18
	2. Redistributions in binary form must reproduce the above copyright
19
	   notice, this list of conditions and the following disclaimer in the
20
	   documentation and/or other materials provided with the distribution.
21

    
22
	THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
23
	INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
24
	AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25
	AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
26
	OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27
	SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28
	INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29
	CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30
	RISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31
	POSSIBILITY OF SUCH DAMAGE.
32

    
33
 */
34

    
35
/*
36
	pfSense_BUILDER_BINARIES:	/bin/pgrep /bin/sh /usr/bin/killall
37
	pfSense_MODULE:	utils
38
*/
39
require_once("globals.inc");
40
require_once("captiveportal.inc");
41
require_once("openvpn.inc");
42
require_once("ipsec.inc");
43
require_once("vpn.inc");
44
require_once("vslb.inc");
45
require_once("gwlb.inc");
46

    
47
define("RCFILEPREFIX", "/usr/local/etc/rc.d/");
48
function write_rcfile($params) {
49
	global $g;
50

    
51
	safe_mkdir(RCFILEPREFIX);
52
	$rcfile_fullname = RCFILEPREFIX . $params['file'];
53
	if (!file_exists($rcfile_fullname) && !is_link($rcfile_fullname) && !touch($rcfile_fullname)) {
54
		return false;
55
	}
56

    
57
	if (!is_writable($rcfile_fullname) || empty($params['start'])) {
58
		return false;
59
	}
60

    
61
	$towrite = "#!/bin/sh\n";
62
	$towrite .= "# This file was automatically generated\n# by the {$g['product_name']} service handler.\n\n";
63

    
64
	/* write our rc functions */
65
	$towrite .= "rc_start() {\n";
66
	$towrite .= "\t{$params['start']}\n";
67
	$towrite .= "}\n\n";
68
	if (!empty($params['stop'])) {
69
		$tokill =& $params['stop'];
70
	} else if (!empty($params['executable'])) {
71
		/* just nuke the executable */
72
		$tokill = "/usr/bin/killall " . escapeshellarg($params['executable']);
73
	} else {
74
		/* make an educated guess (bad) */
75
		$tokill = array_pop(explode('/', array_shift(explode(' ', $params['start']))));
76
	}
77
	$towrite .= "rc_stop() {\n";
78
	$towrite .= "\t{$tokill}\n";
79
	$towrite .= "}\n\n";
80

    
81
	/* begin rcfile logic */
82
	$towrite .= "case \$1 in\n\tstart)\n\t\trc_start\n\t\t;;\n\tstop)\n\t\trc_stop\n\t\t;;\n\trestart)\n\t\trc_stop\n\t\trc_start\n\t\t;;\nesac\n\n";
83

    
84
	@file_put_contents($rcfile_fullname, $towrite);
85
	unset($towrite);
86
	@chmod("{$rcfile_fullname}", 0755);
87

    
88
	return;
89
}
90

    
91
function start_service($name) {
92
	global $config;
93

    
94
	if (empty($name)) {
95
		return;
96
	}
97

    
98
	if (is_array($config['installedpackages']) && is_array($config['installedpackages']['service'])) {
99
		foreach ($config['installedpackages']['service'] as $service) {
100
			if (strtolower($service['name']) == strtolower($name)) {
101
				if ($service['rcfile']) {
102
					$prefix = RCFILEPREFIX;
103
					if (!empty($service['prefix'])) {
104
						$prefix =& $service['prefix'];
105
					}
106
					if (file_exists("{$prefix}{$service['rcfile']}") || is_link("{$prefix}{$service['rcfile']}")) {
107
						mwexec_bg("{$prefix}{$service['rcfile']} start");
108
					}
109
				}
110
				if (!empty($service['startcmd'])) {
111
					eval($service['startcmd']);
112
				}
113
				break;
114
			}
115
		}
116
	}
117
}
118

    
119
function stop_service($name) {
120
	global $config;
121

    
122
	if (empty($name)) {
123
		return;
124
	}
125

    
126
	if (is_array($config['installedpackages']) && is_array($config['installedpackages']['service'])) {
127
		foreach ($config['installedpackages']['service'] as $service) {
128
			if (strtolower($service['name']) == strtolower($name)) {
129
				if ($service['rcfile']) {
130
					$prefix = RCFILEPREFIX;
131
					if (!empty($service['prefix'])) {
132
						$prefix =& $service['prefix'];
133
					}
134
					if (file_exists("{$prefix}{$service['rcfile']}") || is_link("{$prefix}{$service['rcfile']}")) {
135
						mwexec("{$prefix}{$service['rcfile']} stop");
136
					}
137
					return;
138
				}
139
				if (!empty($service['stopcmd'])) {
140
					eval($service['stopcmd']);
141
				}
142

    
143
				break;
144
			}
145
		}
146
	}
147
}
148

    
149
function restart_service($name) {
150
	global $config;
151

    
152
	if (empty($name)) {
153
		return;
154
	}
155

    
156
	stop_service($name);
157
	start_service($name);
158

    
159
	if (is_array($config['installedpackages']) && is_array($config['installedpackages']['service'])) {
160
		foreach ($config['installedpackages']['service'] as $service) {
161
			if (strtolower($service['name']) == strtolower($name)) {
162
				if ($service['restartcmd']) {
163
					eval($service['restartcmd']);
164
				}
165
				break;
166
			}
167
		}
168
	}
169
}
170

    
171
function is_pid_running($pidfile) {
172
	if (!file_exists($pidfile)) {
173
		return false;
174
	}
175

    
176
	return (isvalidpid($pidfile));
177
}
178

    
179
function is_dhcp_running($interface) {
180
	$status = find_dhclient_process($interface);
181
	if ($status != 0) {
182
		return true;
183
	}
184
	return false;
185
}
186

    
187
function restart_service_if_running($service) {
188
	global $config;
189
	if (is_service_running($service)) {
190
		restart_service($service);
191
	}
192
	return;
193
}
194

    
195
function is_service_enabled($service_name) {
196
	global $config;
197
	if ($service_name == "") {
198
		return false;
199
	}
200
	if (is_array($config['installedpackages'])) {
201
		if (isset($config['installedpackages'][$service_name]['config'][0]['enable']) &&
202
		    ((empty($config['installedpackages'][$service_name]['config'][0]['enable'])) ||
203
		    ($config['installedpackages'][$service_name]['config'][0]['enable'] === 'off'))) {
204
			return false;
205
		}
206
	}
207
	return true;
208
}
209

    
210
function is_service_running($service, $ps = "") {
211
	global $config;
212

    
213
	if (is_array($config['installedpackages']['service'])) {
214
		foreach ($config['installedpackages']['service'] as $aservice) {
215
			if (strtolower($service) == strtolower($aservice['name'])) {
216
				if ($aservice['custom_php_service_status_command'] <> "") {
217
					eval("\$rc={$aservice['custom_php_service_status_command']};");
218
					return $rc;
219
				}
220
				if (empty($aservice['executable'])) {
221
					return false;
222
				}
223
				if (is_process_running($aservice['executable'])) {
224
					return true;
225
				}
226

    
227
				return false;
228
			}
229
		}
230
	}
231

    
232
	if (is_process_running($service)) {
233
		return true;
234
	}
235

    
236
	return false;
237
}
238

    
239
function get_services() {
240
	global $config;
241
	if (is_array($config['installedpackages']['service'])) {
242
		$services = $config['installedpackages']['service'];
243
	} else {
244
		$services = array();
245
	}
246

    
247
	/*
248
	 * Add services that are in the base.
249
	 */
250
	if (is_radvd_enabled()) {
251
		$pconfig = array();
252
		$pconfig['name'] = "radvd";
253
		$pconfig['description'] = gettext("Router Advertisement Daemon");
254
		$services[] = $pconfig;
255
	}
256

    
257
	if (isset($config['dnsmasq']['enable'])) {
258
		$pconfig = array();
259
		$pconfig['name'] = "dnsmasq";
260
		$pconfig['description'] = gettext("DNS Forwarder");
261
		$services[] = $pconfig;
262
	}
263

    
264
	if (isset($config['unbound']['enable'])) {
265
		$pconfig = array();
266
		$pconfig['name'] = "unbound";
267
		$pconfig['description'] = gettext("DNS Resolver");
268
		$services[] = $pconfig;
269
	}
270

    
271
	$pconfig = array();
272
	$pconfig['name'] = "ntpd";
273
	$pconfig['description'] = gettext("NTP clock sync");
274
	$services[] = $pconfig;
275

    
276
	if (is_array($config['captiveportal'])) {
277
		foreach ($config['captiveportal'] as $zone => $setting) {
278
			if (isset($setting['enable'])) {
279
				$pconfig = array();
280
				$pconfig['name'] = "captiveportal";
281
				$pconfig['zone'] = $zone;
282
				$pconfig['description'] = gettext("Captive Portal") . ": ".htmlspecialchars($setting['zone']);
283
				$services[] = $pconfig;
284
			}
285
		}
286
	}
287

    
288
	$iflist = array();
289
	$ifdescrs = get_configured_interface_list();
290
	foreach ($ifdescrs as $if) {
291
		$oc = $config['interfaces'][$if];
292
		if ($oc['if'] && (!link_interface_to_bridge($if))) {
293
			$iflist[$if] = $if;
294
		}
295
	}
296

    
297
	if (isset($config['dhcrelay']['enable'])) {
298
		$pconfig = array();
299
		$pconfig['name'] = "dhcrelay";
300
		$pconfig['description'] = gettext("DHCP Relay");
301
		$services[] = $pconfig;
302
	}
303

    
304
	if (isset($config['dhcrelay6']['enable'])) {
305
		$pconfig = array();
306
		$pconfig['name'] = "dhcrelay6";
307
		$pconfig['description'] = gettext("DHCPv6 Relay");
308
		$services[] = $pconfig;
309
	}
310

    
311
	if (is_dhcp_server_enabled()) {
312
		$pconfig = array();
313
		$pconfig['name'] = "dhcpd";
314
		$pconfig['description'] = gettext("DHCP Service");
315
		$services[] = $pconfig;
316
	}
317

    
318
	$gateways_arr = return_gateways_array();
319
	if (is_array($gateways_arr)) {
320
		$pconfig = array();
321
		$pconfig['name'] = "apinger";
322
		$pconfig['description'] = gettext("Gateway Monitoring Daemon");
323
		$services[] = $pconfig;
324
	}
325

    
326
	if (isset($config['snmpd']['enable'])) {
327
		$pconfig = array();
328
		$pconfig['name'] = "bsnmpd";
329
		$pconfig['description'] = gettext("SNMP Service");
330
		$services[] = $pconfig;
331
	}
332

    
333
	if (is_array($config['igmpproxy']['igmpentry']) && (count($config['igmpproxy']['igmpentry']) > 0)) {
334
		$pconfig = array();
335
		$pconfig['name'] = "igmpproxy";
336
		$pconfig['description'] = gettext("IGMP proxy");
337
		$services[] = $pconfig;
338
	}
339

    
340
	if (isset($config['installedpackages']['miniupnpd']) && $config['installedpackages']['miniupnpd']['config'][0]['enable']) {
341
		$pconfig = array();
342
		$pconfig['name'] = "miniupnpd";
343
		$pconfig['description'] = gettext("UPnP Service");
344
		$services[] = $pconfig;
345
	}
346

    
347
	if (isset($config['ipsec']['enable'])) {
348
		$pconfig = array();
349
		$pconfig['name'] = "ipsec";
350
		$pconfig['description'] = gettext("IPsec VPN");
351
		$services[] = $pconfig;
352
	}
353

    
354
	if (isset($config['system']['enablesshd'])) {
355
		$pconfig = array();
356
		$pconfig['name'] = "sshd";
357
		$pconfig['description'] = gettext("Secure Shell Daemon");
358
		$services[] = $pconfig;
359
	}
360

    
361
	foreach (array('server', 'client') as $mode) {
362
		if (is_array($config['openvpn']["openvpn-{$mode}"])) {
363
			foreach ($config['openvpn']["openvpn-{$mode}"] as $id => $setting) {
364
				if (!isset($setting['disable'])) {
365
					$pconfig = array();
366
					$pconfig['name'] = "openvpn";
367
					$pconfig['mode'] = $mode;
368
					$pconfig['id'] = $id;
369
					$pconfig['vpnid'] = $setting['vpnid'];
370
					$pconfig['description'] = gettext("OpenVPN") . " ".$mode.": ".htmlspecialchars($setting['description']);
371
					$services[] = $pconfig;
372
				}
373
			}
374
		}
375
	}
376

    
377
	if (count($config['load_balancer']['virtual_server']) && count($config['load_balancer']['lbpool'])) {
378
		$pconfig = array();
379
		$pconfig['name'] = "relayd";
380
		$pconfig['description'] = gettext("Server load balancing daemon");
381
		$services[] = $pconfig;
382
	}
383
	return $services;
384
}
385

    
386
function find_service_by_name($name) {
387
	$services = get_services();
388
	foreach ($services as $service) {
389
		if ($service["name"] == $name) {
390
			return $service;
391
		}
392
	}
393
	return array();
394
}
395

    
396
function find_service_by_openvpn_vpnid($vpnid) {
397
	$services = get_services();
398
	foreach ($services as $service) {
399
		if (($service["name"] == "openvpn") && isset($service["vpnid"]) && ($service["vpnid"] == $vpnid)) {
400
			return $service;
401
		}
402
	}
403
	return array();
404
}
405

    
406
function find_service_by_cp_zone($zone) {
407
	$services = get_services();
408
	foreach ($services as $service) {
409
		if (($service["name"] == "captiveportal") && isset($service["zone"]) && ($service["zone"] == $zone)) {
410
			return $service;
411
		}
412
	}
413
	return array();
414
}
415

    
416
function service_name_compare($a, $b) {
417
	if (strtolower($a['name']) == strtolower($b['name'])) {
418
		return 0;
419
	}
420
	return (strtolower($a['name']) < strtolower($b['name'])) ? -1 : 1;
421
}
422

    
423
function get_pkg_descr($package_name) {
424
	global $config;
425
	if (is_array($config['installedpackages']['package'])) {
426
		foreach ($config['installedpackages']['package'] as $pkg) {
427
			if ($pkg['name'] == $package_name) {
428
				return $pkg['descr'];
429
			}
430
		}
431
	}
432
	return gettext("Not available.");
433
}
434

    
435
function get_service_status($service) {
436
	global $g;
437
	switch ($service['name']) {
438
		case "openvpn":
439
			$running = is_pid_running("{$g['varrun_path']}/openvpn_{$service['mode']}{$service['vpnid']}.pid");
440
			break;
441
		case "captiveportal":
442
			$running = is_pid_running("{$g['varrun_path']}/lighty-{$service['zone']}-CaptivePortal.pid");
443
			if (isset($config['captiveportal'][$service['zone']]['httpslogin'])) {
444
				$running = $running && is_pid_running("{$g['varrun_path']}/lighty-{$service['zone']}-CaptivePortal-SSL.pid");
445
			}
446
			break;
447
		case "vhosts-http":
448
			$running = is_pid_running("{$g['varrun_path']}/vhosts-http.pid");
449
			break;
450
		case "dhcrelay6":
451
			$running = is_pid_running("{$g['varrun_path']}/dhcrelay6.pid");
452
			break;
453
		case 'ipsec':
454
			$running = is_pid_running("{$g['varrun_path']}/charon.pid");
455
			break;
456
		default:
457
			$running = is_service_running($service['name']);
458
	}
459
	return $running;
460
}
461

    
462
function get_service_status_icon($service, $withtext = true, $smallicon = false) {
463
	global $g;
464
	$output = "";
465
	if (get_service_status($service)) {
466
		$statustext = gettext("Running");
467
		$output .= "<a title=\"" . sprintf(gettext("%s Service is"), $service["name"]) . " {$statustext}\" ><i class=\"";
468
		$output .= ($smallicon) ? "icon icon-play" : "icon icon-large icon-play";
469
		$output .= "\" ></i></a>";
470
		if ($withtext) {
471
			$output .= "&nbsp;" . $statustext;
472
		}
473
	} else {
474
		$service_enabled = is_service_enabled($service['name']);
475
		$statustext = ($service_enabled) ? gettext("Stopped") : gettext("Disabled");
476
		$output .= "<a title=\"" . sprintf(gettext("%s Service is"), $service["name"]) . " {$statustext}\" ><i class=\"";
477
		$output .= ($smallicon) ? "icon icon-remove" : "icon icon-large icon-remove";
478
		$output .= "\" ></i></a>";
479
		if ($withtext) {
480
			$output .= "&nbsp;" . $statustext;
481
		}
482
	}
483
	return $output;
484
}
485

    
486
function get_service_control_links($service, $addname = false) {
487
	global $g;
488
	$output = "";
489
	$stitle = ($addname) ? $service['name'] . " " : "";
490

    
491
	switch ($service['name']) {
492
		case "openvpn":
493
			$link = '<a title="%s" href="#" id="openvpn-%s-' . $service['mode'] . '-' . $service['vpnid'] . '" >';
494
		break;
495
		case "captiveportal":
496
			$link = '<a title="%s" href="#" id="captiveportal-%s-' . $service['zone'] . '">';
497
		break;
498
		default:
499
			$link = '<a title="%s" href="#" value="" id="%s-' . $service['name'] . '">';
500
	}
501

    
502
	if (get_service_status($service)) {
503
		switch ($service['name']) {
504
			case "openvpn":
505
				$output .= '<a href="#" id="openvpn-restartservice-' . $service['mode'] . '-' . $service['vpnid'] . '" >';
506
				break;
507
			case "captiveportal":
508
				$output .= '<a href="#" value="" id=captiveportal-restartservice-' . $service['zone'] . '">';
509
				break;
510
			default:
511
				$output .= '<a href="#" id="restartservice-' . $service['name'] . '" >';
512
		}
513

    
514
		$output .= "<i class=\"icon-large icon-repeat\" title='" . sprintf(gettext("Restart %sService"), $stitle) . "' alt='restart'></i></a>\n";
515

    
516
		switch ($service['name']) {
517
			case "openvpn":
518
				$output .= '<a href="#" id="openvpn-stopservice-' . $service['mode'] . '-' . $service['vpnid'] . '" >';
519
				break;
520
			case "captiveportal":
521
				$output .= '<a href="#" value="" id=captiveportal-stopservice-' . $service['zone'] . '">';
522
				break;
523
			default:
524
				$output .= '<a href="#" id="stopservice-' . $service['name'] . '">';
525
		}
526

    
527
		$output .= "<i class=\"icon-large icon-stop\" title='" . sprintf(gettext("Stop %sService"), $stitle) . "' alt='stop'></i></a>";
528

    
529
	} else {
530
		$service_enabled = is_service_enabled($service['name']);
531

    
532
		if ($service['name'] == 'openvpn' || $service['name'] == 'captiveportal' || $service_enabled) {
533
			$output .= sprintf($link, sprintf(gettext("Start %sService"), $stitle), 'startservice');
534
			$output .= '<i class="icon icon-play-circle"></i></a> ';
535
		}
536
	}
537

    
538
	return $output;
539
}
540

    
541
function service_control_start($name, $extras) {
542
	global $g;
543
	switch ($name) {
544
		case 'radvd':
545
			services_radvd_configure();
546
			break;
547
		case 'captiveportal':
548
			$zone = htmlspecialchars($extras['zone']);
549
			captiveportal_init_webgui_zonename($zone);
550
			break;
551
		case 'ntpd':
552
		case 'openntpd':
553
			system_ntp_configure();
554
			break;
555
		case 'apinger':
556
			setup_gateways_monitor();
557
			break;
558
		case 'bsnmpd':
559
			services_snmpd_configure();
560
			break;
561
		case 'dhcrelay':
562
			services_dhcrelay_configure();
563
			break;
564
		case 'dhcrelay6':
565
			services_dhcrelay6_configure();
566
			break;
567
		case 'dnsmasq':
568
			services_dnsmasq_configure();
569
			break;
570
		case 'unbound':
571
			services_unbound_configure();
572
			break;
573
		case 'dhcpd':
574
			services_dhcpd_configure();
575
			break;
576
		case 'igmpproxy':
577
			services_igmpproxy_configure();
578
			break;
579
		case 'miniupnpd':
580
			upnp_action('start');
581
			break;
582
		case 'ipsec':
583
			vpn_ipsec_force_reload();
584
			break;
585
		case 'sshd':
586
			send_event("service restart sshd");
587
			break;
588
		case 'openvpn':
589
			$vpnmode = isset($extras['vpnmode']) ? htmlspecialchars($extras['vpnmode']) : htmlspecialchars($extras['mode']);
590
			if (($vpnmode == "server") || ($vpnmode == "client")) {
591
				$id = isset($extras['vpnid']) ? htmlspecialchars($extras['vpnid']) : htmlspecialchars($extras['id']);
592
				$configfile = "{$g['varetc_path']}/openvpn/{$vpnmode}{$id}.conf";
593
				if (file_exists($configfile)) {
594
					openvpn_restart_by_vpnid($vpnmode, $id);
595
				}
596
			}
597
			break;
598
		case 'relayd':
599
			relayd_configure();
600
			break;
601
		default:
602
			start_service($name);
603
			break;
604
	}
605
	return sprintf(gettext("%s has been started."), htmlspecialchars($name));
606
}
607
function service_control_stop($name, $extras) {
608
	global $g;
609
	switch ($name) {
610
		case 'radvd':
611
			killbypid("{$g['varrun_path']}/radvd.pid");
612
			break;
613
		case 'captiveportal':
614
			$zone = htmlspecialchars($extras['zone']);
615
			killbypid("{$g['varrun_path']}/lighty-{$zone}-CaptivePortal.pid");
616
			killbypid("{$g['varrun_path']}/lighty-{$zone}-CaptivePortal-SSL.pid");
617
			break;
618
		case 'ntpd':
619
			killbyname("ntpd");
620
			break;
621
		case 'openntpd':
622
			killbyname("openntpd");
623
			break;
624
		case 'apinger':
625
			killbypid("{$g['varrun_path']}/apinger.pid");
626
			break;
627
		case 'bsnmpd':
628
			killbypid("{$g['varrun_path']}/snmpd.pid");
629
			break;
630
		case 'choparp':
631
			killbyname("choparp");
632
			break;
633
		case 'dhcpd':
634
			killbyname("dhcpd");
635
			break;
636
		case 'dhcrelay':
637
			killbypid("{$g['varrun_path']}/dhcrelay.pid");
638
			break;
639
		case 'dhcrelay6':
640
			killbypid("{$g['varrun_path']}/dhcrelay6.pid");
641
			break;
642
		case 'dnsmasq':
643
			killbypid("{$g['varrun_path']}/dnsmasq.pid");
644
			break;
645
		case 'unbound':
646
			killbypid("{$g['varrun_path']}/unbound.pid");
647
			break;
648
		case 'igmpproxy':
649
			killbyname("igmpproxy");
650
			break;
651
		case 'miniupnpd':
652
			upnp_action('stop');
653
			break;
654
		case 'sshd':
655
			killbyname("sshd");
656
			break;
657
		case 'ipsec':
658
			exec("/usr/local/sbin/ipsec stop");
659
			break;
660
		case 'openvpn':
661
			$vpnmode = htmlspecialchars($extras['vpnmode']);
662
			if (($vpnmode == "server") or ($vpnmode == "client")) {
663
				$id = htmlspecialchars($extras['id']);
664
				$pidfile = "{$g['varrun_path']}/openvpn_{$vpnmode}{$id}.pid";
665
				killbypid($pidfile);
666
			}
667
			break;
668
		case 'relayd':
669
			mwexec('pkill relayd');
670
			break;
671
		default:
672
			stop_service($name);
673
			break;
674
	}
675
	return sprintf(gettext("%s has been stopped."), htmlspecialchars($name));
676
}
677

    
678
function service_control_restart($name, $extras) {
679
	global $g;
680
	switch ($name) {
681
		case 'radvd':
682
			services_radvd_configure();
683
			break;
684
		case 'captiveportal':
685
			$zone = htmlspecialchars($extras['zone']);
686
			killbypid("{$g['varrun_path']}/lighty-{$zone}-CaptivePortal.pid");
687
			killbypid("{$g['varrun_path']}/lighty-{$zone}-CaptivePortal-SSL.pid");
688
			captiveportal_init_webgui_zonename($zone);
689
			break;
690
		case 'ntpd':
691
		case 'openntpd':
692
			system_ntp_configure();
693
			break;
694
		case 'apinger':
695
			killbypid("{$g['varrun_path']}/apinger.pid");
696
			setup_gateways_monitor();
697
			break;
698
		case 'bsnmpd':
699
			services_snmpd_configure();
700
			break;
701
		case 'dhcrelay':
702
			services_dhcrelay_configure();
703
			break;
704
		case 'dhcrelay6':
705
			services_dhcrelay6_configure();
706
			break;
707
		case 'dnsmasq':
708
			services_dnsmasq_configure();
709
			break;
710
		case 'unbound':
711
			services_unbound_configure();
712
			break;
713
		case 'dhcpd':
714
			services_dhcpd_configure();
715
			break;
716
		case 'igmpproxy':
717
			services_igmpproxy_configure();
718
			break;
719
		case 'miniupnpd':
720
			upnp_action('restart');
721
			break;
722
		case 'ipsec':
723
			vpn_ipsec_force_reload();
724
			break;
725
		case 'sshd':
726
			send_event("service restart sshd");
727
			break;
728
		case 'openvpn':
729
			$vpnmode = htmlspecialchars($extras['vpnmode']);
730
			if ($vpnmode == "server" || $vpnmode == "client") {
731
				$id = htmlspecialchars($extras['id']);
732
				$configfile = "{$g['varetc_path']}/openvpn/{$vpnmode}{$id}.conf";
733
				if (file_exists($configfile)) {
734
					openvpn_restart_by_vpnid($vpnmode, $id);
735
				}
736
			}
737
			break;
738
		case 'relayd':
739
			relayd_configure(true);
740
			break;
741
		default:
742
			restart_service($name);
743
			break;
744
	}
745
	return sprintf(gettext("%s has been restarted."), htmlspecialchars($name));
746
}
747

    
748
?>
(49-49/68)