Project

General

Profile

Download (20.6 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="status_services.php?mode=%s&amp;service='.$service['name'] . '&amp;vpnmode=' . $service['mode'] . '&amp;id=' . $service['vpnid'] . '">';
494
		break;
495
		case "captiveportal":
496
			$link = '<a title="%s" href="status_services.php?mode=%s&amp;service=' . $service['name'] . '&amp;zone=' . $service['zone'] . '">';
497
		break;
498
		default:
499
			$link = '<a title="%s" href="status_services.php?mode=%s&amp;service=' . $service['name'] . '">';
500
	}
501

    
502
	if (get_service_status($service)) {
503
		switch ($service['name']) {
504
			case "openvpn":
505
				$output .= "<a href='status_services.php?mode=restartservice&amp;service={$service['name']}&amp;vpnmode={$service['mode']}&amp;id={$service['vpnid']}'>";
506
				break;
507
			case "captiveportal":
508
				$output .= "<a href='status_services.php?mode=restartservice&amp;service={$service['name']}&amp;zone={$service['zone']}'>";
509
				break;
510
			default:
511
				$output .= "<a href='status_services.php?mode=restartservice&amp;service={$service['name']}'>";
512
		}
513
		$output .= "<i class=\"icon-large icon-repeat\" title='" . sprintf(gettext("Restart %sService"), $stitle) . "' alt='restart'></i></a>\n";
514
		switch ($service['name']) {
515
			case "openvpn":
516
				$output .= "<a href='status_services.php?mode=stopservice&amp;service={$service['name']}&amp;vpnmode={$service['mode']}&amp;id={$service['vpnid']}'>";
517
				break;
518
			case "captiveportal":
519
				$output .= "<a href='status_services.php?mode=stopservice&amp;service={$service['name']}&amp;zone={$service['zone']}'>";
520
				break;
521
			default:
522
				$output .= "<a href='status_services.php?mode=stopservice&amp;service={$service['name']}'>";
523
		}
524
		$output .= "<i class=\"icon-large icon-stop\" title='" . sprintf(gettext("Stop %sService"), $stitle) . "' alt='stop'></i></a>";
525
	} else {
526
		$service_enabled = is_service_enabled($service['name']);
527

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

    
534
	return $output;
535
}
536

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

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

    
744
?>
(49-49/68)