diff options
author | jim-p <jim@pingle.org> | 2010-01-23 19:22:08 -0500 |
---|---|---|
committer | jim-p <jim@pingle.org> | 2010-01-23 19:22:08 -0500 |
commit | 10c9531d2c6541a0c90c752db1a43baa05632078 (patch) | |
tree | 22370f5bbc4256b2d5812512cbd99cfab4e5e90c | |
parent | 758ea2ed160802c392463c2f043cbc1cee28591f (diff) | |
download | pfsense-packages-10c9531d2c6541a0c90c752db1a43baa05632078.tar.gz pfsense-packages-10c9531d2c6541a0c90c752db1a43baa05632078.tar.bz2 pfsense-packages-10c9531d2c6541a0c90c752db1a43baa05632078.zip |
Add a package for 1.2.3 that will show an OpenVPN server status (client list) like 2.0 has.
-rw-r--r-- | config/openvpn-status/openvpn-status.xml | 70 | ||||
-rw-r--r-- | config/openvpn-status/status_openvpn.php | 161 | ||||
-rwxr-xr-x | pkg_config.7.xml | 11 |
3 files changed, 242 insertions, 0 deletions
diff --git a/config/openvpn-status/openvpn-status.xml b/config/openvpn-status/openvpn-status.xml new file mode 100644 index 00000000..4f7a876b --- /dev/null +++ b/config/openvpn-status/openvpn-status.xml @@ -0,0 +1,70 @@ +<?xml version="1.0" encoding="utf-8" ?> +<!DOCTYPE packagegui SYSTEM "../schema/packages.dtd"> +<?xml-stylesheet type="text/xsl" href="../xsl/package.xsl"?> +<packagegui> + <copyright> + <![CDATA[ +/* $Id$ */ +/* ========================================================================== */ +/* + status_openvpn.xml + part of pfSense (http://www.pfSense.com) + Copyright (C) 2010 to whom it may belong + All rights reserved. + + Based on m0n0wall (http://m0n0.ch/wall) + Copyright (C) 2003-2006 Manuel Kasper <mk@neon1.net>. + All rights reserved. + */ +/* ========================================================================== */ +/* + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + */ +/* ========================================================================== */ + ]]> + </copyright> + <description>OpenVPN Status Page</description> + <requirements>Management Port Defined in OpenVPN Config</requirements> + <faq>Currently there are no FAQ items provided.</faq> + <name>OpenVPN Status</name> + <version>1.0</version> + <title>Status: OpenVPN</title> + <menu> + <name>OpenVPN</name> + <tooltiptext></tooltiptext> + <section>Status</section> + <url>/status_openvpn.php</url> + </menu> + <additional_files_needed> + <prefix>/usr/local/www/</prefix> + <chmod>077</chmod> + <item>http://www.pfsense.com/packages/config/openvpn-status/status_openvpn.php</item> + </additional_files_needed> + <custom_php_deinstall_command> + <![CDATA[ + $version = file_get_contents("/etc/version"); + if ($version[0] < 2) { + unlink_if_exists("/usr/local/www/status_openvpn.php"); + } + ]]> + </custom_php_deinstall_command> +</packagegui>
\ No newline at end of file diff --git a/config/openvpn-status/status_openvpn.php b/config/openvpn-status/status_openvpn.php new file mode 100644 index 00000000..7238c0ca --- /dev/null +++ b/config/openvpn-status/status_openvpn.php @@ -0,0 +1,161 @@ +<?php +/* + status_ovpenvpn.php + + Copyright (C) 2008 Shrew Soft Inc. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. +*/ + +$pgtitle = "Status: OpenVPN"; +require("guiconfig.inc"); +require_once("vpn.inc"); +include("head.inc"); + +$servers = array(); + +$ovpnservers = $config['installedpackages']['openvpnserver']['config']; +if (is_array($ovpnservers)) { + foreach ($ovpnservers as $settings) { + + $prot = $settings['protocol']; + $port = $settings['local_port']; + + $server = array(); + if ($settings['description']) + $server['name'] = "{$settings['description']} {$prot}:{$port}"; + else + $server['name'] = "Server {$prot}:{$port}"; + $server['conns'] = array(); + + $errval; + $errstr; + + /* open a tcp connection to the management port of each server */ + $fp = fsockopen("127.0.0.1", $port, $errval, $errstr, 1); + if ($fp) { + + /* send our status request */ + fputs($fp, "status 2\n"); + + /* recv all response lines */ + $buff = ""; + while (!feof($fp)) { + + /* read the next line */ + $line = fgets($fp, 1024); + + /* parse header list line */ + if (strstr($line, "HEADER")) + continue; + + /* parse end of output line */ + if (strstr($line, "END")) + break; + + /* parse client list line */ + if (strstr($line, "CLIENT_LIST")) { + $list = explode(",", $line); + $conn = array(); + $conn['common_name'] = $list[1]; + $conn['remote_host'] = $list[2]; + $conn['virtual_addr'] = $list[3]; + $conn['bytes_recv'] = $list[4]; + $conn['bytes_sent'] = $list[5]; + $conn['connect_time'] = $list[6]; + $server['conns'][] = $conn; + } + } + + /* cleanup */ + fclose($fp); + } + + $servers[] = $server; + } +} + +include("head.inc"); +include("fbegin.inc"); +echo "<p class=\"pgtitle\">$pgtitle</p>"; + +echo $buff; + +?> + <?php foreach ($servers as $server): ?> + + <table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" width="100%" border="0" cellpadding="0" cellspacing="0"> + <tr> + <td colspan="6" class="listtopic"> + Client connections for <?=$server['name'];?> + </td> + </tr> + <tr> + <td> + <table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0"> + <tr> + <td class="listhdrr">Common Name</td> + <td class="listhdrr">Real Address</td> + <td class="listhdrr">Virtual Address</td> + <td class="listhdrr">Connected Since</td> + <td class="listhdrr">Bytes Sent</td> + <td class="listhdrr">Bytes Received</td> + </tr> + + <?php foreach ($server['conns'] as $conn): ?> + <tr> + <td class="listlr"> + <?=$conn['common_name'];?> + </td> + <td class="listr"> + <?=$conn['remote_host'];?> + </td> + <td class="listr"> + <?=$conn['virtual_addr'];?> + </td> + <td class="listr"> + <?=$conn['connect_time'];?> + </td> + <td class="listr"> + <?=$conn['bytes_sent'];?> + </td> + <td class="listr"> + <?=$conn['bytes_recv'];?> + </td> + </tr> + + <?php endforeach; ?> + <tr> + <td colspan="6" class="list" height="12"></td> + </tr> + + </table> + </td> + </tr> + </table> + + <?php endforeach; ?> + <br/> + <br/><b>NOTE:</b> You must enable the OpenVPN management interface for each server you want to monitor. You can do this by placing "management 127.0.0.1 <port>;" in the custom options box for the server, where <port> is the port number set for that server. + +<?php include("fend.inc"); ?> diff --git a/pkg_config.7.xml b/pkg_config.7.xml index 48baa637..5dad96c8 100755 --- a/pkg_config.7.xml +++ b/pkg_config.7.xml @@ -933,5 +933,16 @@ <config_file>http://www.pfsense.org/packages/config/blinkled/blinkled.xml</config_file> <configurationfile>blinkled.xml</configurationfile> </package> + <package> + <name>OpenVPN Status</name> + <descr>OpenVPN Status Page, backported from 2.0</descr> + <category>System</category> + <version>1.0</version> + <status>Beta</status> + <maintainer>jimp@pfsense.org</maintainer> + <required_version>1.2.3</required_version> + <config_file>http://www.pfsense.org/packages/config/openvpn-status/openvpn-status.xml</config_file> + <configurationfile>openvpn-status.xml</configurationfile> + </package> </packages> </pfsensepkgs> |