aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config/vhosts/lighty-vhosts.conf179
-rw-r--r--config/vhosts/vhosts.inc228
-rw-r--r--config/vhosts/vhosts.xml132
-rw-r--r--config/vhosts/vhosts_php.tmp191
-rw-r--r--config/vhosts/vhosts_php_edit.tmp231
-rwxr-xr-xpkg_config.7.xml14
6 files changed, 975 insertions, 0 deletions
diff --git a/config/vhosts/lighty-vhosts.conf b/config/vhosts/lighty-vhosts.conf
new file mode 100644
index 00000000..b3178771
--- /dev/null
+++ b/config/vhosts/lighty-vhosts.conf
@@ -0,0 +1,179 @@
+#
+# lighttpd configuration file
+#
+# use a it as base for lighttpd 1.0.0 and above
+#
+############ Options you really have to take care of ####################
+
+## FreeBSD!
+server.event-handler = "freebsd-kqueue"
+server.network-backend = "writev" ## Fixes 7.x upload issues
+
+
+
+## modules to load
+server.modules = (
+ "mod_accesslog",
+ "mod_access", "mod_accesslog",
+ "mod_fastcgi", "mod_cgi","mod_rewrite"
+ )
+
+## Unused modules
+# "mod_setenv",
+# "mod_compress"
+# "mod_redirect",
+# "mod_rewrite",
+# "mod_ssi",
+# "mod_usertrack",
+# "mod_expire",
+# "mod_secdownload",
+# "mod_rrdtool",
+# "mod_auth",
+# "mod_status",
+# "mod_alias",
+# "mod_proxy",
+# "mod_simple_vhost",
+# "mod_evhost",
+# "mod_userdir",
+# "mod_cgi",
+# "mod_accesslog"
+
+## a static document-root, for virtual-hosting take look at the
+## server.virtual-* options
+server.document-root = "/usr/local/vhosts/"
+
+
+# Maximum idle time with nothing being written (php downloading)
+server.max-write-idle = 999
+
+## where to send error-messages to
+server.errorlog = "/var/log/lighttpd.error.log"
+
+# files to check for if .../ is requested
+server.indexfiles = ( "index.php", "index.html",
+ "index.htm", "default.htm" )
+
+# mimetype mapping
+mimetype.assign = (
+ ".pdf" => "application/pdf",
+ ".sig" => "application/pgp-signature",
+ ".spl" => "application/futuresplash",
+ ".class" => "application/octet-stream",
+ ".ps" => "application/postscript",
+ ".torrent" => "application/x-bittorrent",
+ ".dvi" => "application/x-dvi",
+ ".gz" => "application/x-gzip",
+ ".pac" => "application/x-ns-proxy-autoconfig",
+ ".swf" => "application/x-shockwave-flash",
+ ".tar.gz" => "application/x-tgz",
+ ".tgz" => "application/x-tgz",
+ ".tar" => "application/x-tar",
+ ".zip" => "application/zip",
+ ".mp3" => "audio/mpeg",
+ ".m3u" => "audio/x-mpegurl",
+ ".wma" => "audio/x-ms-wma",
+ ".wax" => "audio/x-ms-wax",
+ ".ogg" => "audio/x-wav",
+ ".wav" => "audio/x-wav",
+ ".gif" => "image/gif",
+ ".jpg" => "image/jpeg",
+ ".jpeg" => "image/jpeg",
+ ".png" => "image/png",
+ ".xbm" => "image/x-xbitmap",
+ ".xpm" => "image/x-xpixmap",
+ ".xwd" => "image/x-xwindowdump",
+ ".css" => "text/css",
+ ".html" => "text/html",
+ ".htm" => "text/html",
+ ".js" => "text/javascript",
+ ".asc" => "text/plain",
+ ".c" => "text/plain",
+ ".conf" => "text/plain",
+ ".text" => "text/plain",
+ ".txt" => "text/plain",
+ ".dtd" => "text/xml",
+ ".xml" => "text/xml",
+ ".mpeg" => "video/mpeg",
+ ".mpg" => "video/mpeg",
+ ".mov" => "video/quicktime",
+ ".qt" => "video/quicktime",
+ ".avi" => "video/x-msvideo",
+ ".asf" => "video/x-ms-asf",
+ ".asx" => "video/x-ms-asf",
+ ".wmv" => "video/x-ms-wmv",
+ ".bz2" => "application/x-bzip",
+ ".tbz" => "application/x-bzip-compressed-tar",
+ ".tar.bz2" => "application/x-bzip-compressed-tar"
+ )
+
+# Use the "Content-Type" extended attribute to obtain mime type if possible
+#mimetypes.use-xattr = "enable"
+
+#### accesslog module
+#accesslog.filename = "/dev/null"
+
+## deny access the file-extensions
+#
+# ~ is for backupfiles from vi, emacs, joe, ...
+# .inc is often used for code includes which should in general not be part
+# of the document-root
+url.access-deny = ( "~", ".db" )
+
+
+######### Options that are good to be but not neccesary to be changed #######
+
+## bind to port (default: 80)
+server.port = 8001
+
+## error-handler for status 404
+#server.error-handler-404 = "/error-handler.html"
+#server.error-handler-404 = "/error-handler.php"
+
+## to help the rc.scripts
+server.pid-file = "/var/run/lighty-vhosts.pid"
+
+## virtual directory listings
+server.dir-listing = "disable"
+
+## enable debugging
+debug.log-request-header = "disable"
+debug.log-response-header = "disable"
+debug.log-request-handling = "disable"
+debug.log-file-not-found = "disable"
+
+#### compress module
+#compress.cache-dir = "/tmp/lighttpd/cache/compress/"
+#compress.filetype = ("text/plain", "text/html")
+
+#server.network-backend = "writev"
+
+server.upload-dirs = ( "/root/", "/tmp/", "/var/" )
+
+
+server.max-request-size = 2097152
+
+#### fastcgi module
+## read fastcgi.txt for more info
+fastcgi.server = ( ".php" =>
+ ( "localhost" =>
+ (
+ "socket" => "/tmp/php5-fastcgi.socket",
+ "min-procs" => 1,
+ "max-procs" => 1,
+ "idle-timeout" => 0,
+ "bin-environment" => (
+ "PHP_FCGI_MAX_REQUESTS" => "500",
+ "PHP_FCGI_CHILDREN" => "1"
+ ),
+ "bin-path" => "/usr/local/php5/php-cgi"
+ )
+ )
+)
+
+#### CGI module
+cgi.assign = ( ".cgi" => "" )
+
+
+
+
+
diff --git a/config/vhosts/vhosts.inc b/config/vhosts/vhosts.inc
new file mode 100644
index 00000000..0cb88064
--- /dev/null
+++ b/config/vhosts/vhosts.inc
@@ -0,0 +1,228 @@
+<?php
+/* $Id$ */
+/*
+/* ========================================================================== */
+/*
+ vhosts.inc
+ Copyright (C) 2008 Mark J Crane
+ 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.
+*/
+
+function pkg_is_service_running($servicename)
+{
+ exec("/bin/ps ax | awk '{ print $5 }'", $psout);
+ array_shift($psout);
+ foreach($psout as $line) {
+ $ps[] = trim(array_pop(explode(' ', array_pop(explode('/', $line)))));
+ }
+ if(is_service_running($servicename, $ps) or is_process_running($servicename) ) {
+ return true;
+ }
+ else {
+ return false;
+ }
+}
+
+function byte_convert( $bytes ) {
+
+ if ($bytes<=0)
+ return '0 Byte';
+
+ $convention=1000; //[1000->10^x|1024->2^x]
+ $s=array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB');
+ $e=floor(log($bytes,$convention));
+ return round($bytes/pow($convention,$e),2).' '.$s[$e];
+}
+
+
+function vhosts_sync_package_php()
+{
+
+ global $config;
+ if($config['installedpackages']['vhosts']['config'] != "") {
+
+ conf_mount_rw();
+ config_unlock();
+
+ $tmp = "<?php\n";
+ $tmp .= "\n";
+ $tmp .= "// Set time limit to indefinite execution\n";
+ $tmp .= "set_time_limit (0);\n";
+ $tmp .= "\n";
+ $tmp .= "//run this program as long as the pid file exists\n";
+ $tmp .= "\$filename = '/tmp/phpmonitor.pid';\n";
+ $tmp .= "\$fp = fopen(\$filename, 'w');\n";
+ $tmp .= "fwrite(\$fp, \"If this file is deleted then phpmonitor will stop.\");\n";
+ $tmp .= "fclose(\$fp);\n";
+ $tmp .= "unset(\$filename);\n";
+ $tmp .= "\n";
+ $tmp .= "//require_once(\"config.inc\");\n";
+ $tmp .= "//global \$config;\n";
+ $tmp .= "//\$syslogaddress = \$config['syslog']['remoteserver'];\n";
+ $tmp .= "\$syslogaddress = \"127.0.0.1\";\n";
+ $tmp .= "\$syslogport = 514;\n";
+ $tmp .= "echo \"syslog server: \".\$syslogaddress.\"\\n\";\n";
+ $tmp .= "\n";
+ $tmp .= "\n";
+ $tmp .= "\n";
+ $tmp .= "function send_to_syslog(\$syslogaddress, \$syslogport, \$syslogmsg) {\n";
+ $tmp .= "\n";
+ $tmp .= " \$fp = fsockopen(\"udp://\".\$syslogaddress, \$syslogport, \$errno, \$errstr);\n";
+ $tmp .= " if (!\$fp) {\n";
+ $tmp .= " //echo \"ERROR: \$errno - \$errstr<br />\\n\";\n";
+ $tmp .= " } else {\n";
+ $tmp .= " fwrite(\$fp, \$syslogmsg);\n";
+ $tmp .= " fclose(\$fp);\n";
+ $tmp .= " }\n";
+ $tmp .= "\n";
+ $tmp .= "}\n";
+ $tmp .= "\n";
+ $tmp .= "\n";
+ $tmp .= "//\$msg = \"1.begin loop. \".date('r').\"\\n\";\n";
+ $tmp .= "//\$fp = fopen('/tmp/phpmonitor.txt', 'a');\n";
+ $tmp .= "//fwrite(\$fp, \$msg.\"\\n\");\n";
+ $tmp .= "//fclose(\$fp);\n";
+ $tmp .= "\n";
+ $tmp .= "\$x = 0;\n";
+ $tmp .= "while(\$x == 0) {\n";
+ $tmp .= "\n";
+ $tmp .= "\n";
+ $tmp .= " if(!file_exists('/tmp/phpmonitor.pid')) {\n";
+ $tmp .= " //if the file does not exist then close the program.\n";
+ $tmp .= " echo \"program closing\\n\";\n";
+ $tmp .= " return;\n";
+ $tmp .= " }\n";
+ $tmp .= "\n";
+ $tmp .= "\n";
+ $tmp .= "\n";
+
+ foreach($config['installedpackages']['vhosts']['config'] as $rowhelper) {
+ if ($rowhelper['enabled'] != "false") {
+ $tmp_php = base64_decode($rowhelper['php']);
+ if (strlen($tmp_php) > 0) {
+ $tmp .= "// name: ".$rowhelper['name']." \n";
+ $tmp .= "// description: ".$rowhelper['description']." \n\n";
+ $tmp .= base64_decode($rowhelper['php']);
+ $tmp .= "\n";
+ }
+ }
+
+ }
+
+ $tmp .= "\n";
+ $tmp .= "\n";
+ $tmp .= " //usleep(100000); //micro seconds //2 seconds 2000000\n";
+ $tmp .= " sleep(1); //in seconds\n";
+ $tmp .= " //if (\$x > 60){ exit; } //exit after 60 seconds for testing\n";
+ $tmp .= "} //emd while\n";
+ $tmp .= "\n";
+ $tmp .= "\n";
+ $tmp .= "?>";
+
+ $fout = fopen("/usr/local/pkg/vhosts.php","w");
+ fwrite($fout, $tmp);
+ unset($tmp);
+ fclose($fout);
+
+ conf_mount_ro();
+
+ }
+}
+
+
+function php_sync_package()
+{
+
+ global $config;
+ vhosts_sync_package_php();
+
+}
+
+
+function php_install_command()
+{
+
+ global $config;
+ conf_mount_rw();
+ config_lock();
+
+ if (!is_dir('/usr/local/www/packages/')) {
+ exec("mkdir /usr/local/www/packages/");
+ }
+
+ if (!is_dir('/usr/local/www/packages/vhosts/')) {
+ exec("mkdir /usr/local/www/packages/vhosts/");
+ }
+
+ //rename PHP files from .tmp to .php
+ exec("cp /tmp/vhosts_php.tmp /usr/local/www/packages/vhosts/vhosts_php.php");
+ unlink_if_exists("/tmp/vhosts_php.tmp");
+
+ exec("cp /tmp/vhosts_php_edit.tmp /usr/local/www/packages/vhosts/vhosts_php_edit.php");
+ unlink_if_exists("/tmp/vhosts_php_edit.tmp");
+
+ //extract php5
+ exec("cp /tmp/vhosts_php_edit.tmp /usr/local/www/packages/vhosts/vhosts_php_edit.php");
+ unlink_if_exists("/tmp/php5.tar.gz");
+
+ //write_config();
+
+ write_rcfile(array(
+ "file" => "vhosts.sh",
+ "start" => "/usr/local/sbin/lighttpd -f /var/etc/lighty-vhosts.conf",
+ "stop" => "rm /tmp/phpmonitor.pid"
+ )
+ );
+
+ php_sync_package();
+ //$handle = popen("/usr/local/etc/rc.d/vhosts.sh start", "r");
+ //pclose($handle);
+
+ //if (pkg_is_service_running('vhosts')) {
+ //documentation purposes
+ //}
+
+ conf_mount_ro();
+ config_unlock();
+
+}
+
+
+function deinstall_command()
+{
+ conf_mount_rw();
+ config_lock();
+ $handle = popen("/usr/local/etc/rc.d/vhosts.sh stop", "r");
+ unlink_if_exists("/usr/local/pkg/vhosts.xml");
+ unlink_if_exists("/usr/local/pkg/vhosts.inc");
+ unlink_if_exists("/usr/local/www/vhosts.inc");
+ unlink_if_exists("/usr/local/etc/rc.d/vhosts.sh");
+ exec("rm -R /usr/local/php5");
+ conf_mount_ro();
+ config_unlock();
+}
+
+?> \ No newline at end of file
diff --git a/config/vhosts/vhosts.xml b/config/vhosts/vhosts.xml
new file mode 100644
index 00000000..cbb01582
--- /dev/null
+++ b/config/vhosts/vhosts.xml
@@ -0,0 +1,132 @@
+<?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$ */
+/* ========================================================================== */
+/*
+ vhosts.xml
+ Copyright (C) 2008 Mark J Crane
+ 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>PHP Service</description>
+ <requirements>Describe your package requirements here</requirements>
+ <faq>Currently there are no FAQ items provided.</faq>
+ <name>vHosts Settings</name>
+ <version>0.1</version>
+ <title>Settings</title>
+ <include_file>/usr/local/pkg/vhosts.inc</include_file>
+ <menu>
+ <name>vhosts</name>
+ <tooltiptext>vHosts Service settings.</tooltiptext>
+ <section>Services</section>
+ <configfile>vhosts.xml</configfile>
+ <url>/packages/vhosts/vhosts_php.php</url>
+ </menu>
+ <service>
+ <name>vhosts</name>
+ <rcfile>vhosts.sh</rcfile>
+ <executable>vhosts</executable>
+ <description>Lighttpd web server service.</description>
+ </service>
+ <tabs>
+ <tab>
+ <text>Settings</text>
+ <url>/pkg_edit.php?xml=vhosts.xml&amp;id=0</url>
+ <active/>
+ </tab>
+ <tab>
+ <text>Settings</text>
+ <url>/packages/vhosts_php.php</url>
+ <active/>
+ </tab>
+ </tabs>
+ <configpath>installedpackages->package->$packagename->configuration->vhosts</configpath>
+ <additional_files_needed>
+ <prefix>/usr/local/pkg/</prefix>
+ <chmod>0755</chmod>
+ <item>http://www.pfsense.com/packages/config/vhosts/vhosts.xml</item>
+ </additional_files_needed>
+ <additional_files_needed>
+ <prefix>/usr/local/pkg/</prefix>
+ <chmod>0755</chmod>
+ <item>http://www.pfsense.com/packages/config/vhosts/vhosts.inc</item>
+ </additional_files_needed>
+ <additional_files_needed>
+ <prefix>/tmp/</prefix>
+ <chmod>0755</chmod>
+ <item>http://www.pfsense.com/packages/config/vhosts/vhosts_php.tmp</item>
+ </additional_files_needed>
+ <additional_files_needed>
+ <prefix>/tmp/</prefix>
+ <chmod>0755</chmod>
+ <item>http://www.pfsense.com/packages/config/vhosts/vhosts_php_edit.tmp</item>
+ </additional_files_needed>
+ <additional_files_needed>
+ <prefix>/var/etc/</prefix>
+ <chmod>0755</chmod>
+ <item>http://www.pfsense.com/packages/config/vhosts/lighty-vhosts.conf</item>
+ </additional_files_needed>
+ <additional_files_needed>
+ <prefix>/tmp/</prefix>
+ <chmod>0755</chmod>
+ <item>http://www.pfsense.com/packages/config/vhosts/php5.tar.gz</item>
+ </additional_files_needed>
+
+ <fields>
+ <field>
+ <fielddescr>Variable One</fielddescr>
+ <fieldname>var1</fieldname>
+ <description>Enter the variable one here.</description>
+ <type>input</type>
+ </field>
+ <field>
+ <fielddescr>Variable Two</fielddescr>
+ <fieldname>var1</fieldname>
+ <description>Enter the variable one here.</description>
+ <type>input</type>
+ </field>
+ </fields>
+ <custom_add_php_command>
+ </custom_add_php_command>
+ <custom_php_resync_config_command>
+ php_sync_package();
+ </custom_php_resync_config_command>
+ <custom_delete_php_command>
+ php_sync_package();
+ </custom_delete_php_command>
+ <custom_php_install_command>
+ php_install_command();
+ </custom_php_install_command>
+ <custom_php_deinstall_command>
+ deinstall_command();
+ </custom_php_deinstall_command>
+</packagegui> \ No newline at end of file
diff --git a/config/vhosts/vhosts_php.tmp b/config/vhosts/vhosts_php.tmp
new file mode 100644
index 00000000..c77d50a3
--- /dev/null
+++ b/config/vhosts/vhosts_php.tmp
@@ -0,0 +1,191 @@
+<?php
+/* $Id$ */
+/*
+ vhosts_php.php
+ Copyright (C) 2008 Mark J Crane
+ 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.
+*/
+
+require("guiconfig.inc");
+require("/usr/local/pkg/vhosts.inc");
+
+$a_vhosts = &$config['installedpackages']['vhosts']['config'];
+
+
+if ($_GET['act'] == "del") {
+ if ($_GET['type'] == 'php') {
+ if ($a_vhosts[$_GET['id']]) {
+ unset($a_vhosts[$_GET['id']]);
+ write_config();
+ header("Location: vhosts_php.php");
+ exit;
+ }
+ }
+}
+
+include("head.inc");
+
+?>
+
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<p class="pgtitle">vHosts Service:</p>
+
+<div id="mainlevel">
+<table width="100%" border="0" cellpadding="0" cellspacing="0">
+<tr><td class="tabnavtbl">
+<?php
+
+ $tab_array = array();
+ $tab_array[] = array(gettext("Settings"), false, "/packages/vhosts/vhosts_php.php");
+ display_top_tabs($tab_array);
+
+?>
+</td></tr>
+</table>
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td class="tabcont" >
+
+ <form action="vhosts_php.php" method="post" name="iform" id="iform">
+ <?php
+
+ if ($config_change == 1) {
+ write_config();
+ $config_change = 0;
+ }
+
+ //if ($savemsg) print_info_box($savemsg);
+ //if (file_exists($d_hostsdirty_path)): echo"<p>";
+ //print_info_box_np("This is an info box.");
+ //echo"<br />";
+ //endif;
+
+ ?>
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td><p><!--<span class="vexpl"><span class="red"><strong>PHP Service<br></strong></span>-->
+ Is command line PHP designed to run PHP as a Service. The custom PHP code that is defined below is run over and over again inside a continuous loop. There are many possible uses such as monitoring CPU, Memory, File System Space, interacting with Snort, and many others uses that are yet to be discovered.
+ It can send events to the sylog that will can be viewed from the system log or remote syslog server. example: exec("logger This is a test");
+ <br /><br />
+ For more information see: <a href='http://doc.pfsense.org/index.php/vhosts'>http://doc.pfsense.org/index.php/vhosts</a>
+ </p></td>
+ </tr>
+ </table>
+ <br />
+
+ <table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td width="30%" class="listhdrr">Name</td>
+ <td width="20%" class="listhdrr">Enabled</td>
+ <td width="40%" class="listhdr">Description</td>
+ <td width="10%" class="list">
+
+ <table border="0" cellspacing="0" cellpadding="1">
+ <tr>
+ <td width="17"></td>
+ <td valign="middle"><a href="vhosts_php_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0"></a></td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+
+
+ <?php
+
+ $i = 0;
+ if (count($a_vhosts) > 0) {
+
+ foreach ($a_vhosts as $ent) {
+
+ ?>
+ <tr>
+ <td class="listr" ondblclick="document.location='vhosts_php_edit.php?id=<?=$i;?>';">
+ <?=$ent['name'];?>&nbsp;
+ </td>
+ <td class="listr" ondblclick="document.location='vhosts_php_edit.php?id=<?=$i;?>';">
+ <?=$ent['enabled'];?>&nbsp;
+ </td>
+ <td class="listbg" ondblclick="document.location='vhosts_php_edit.php?id=<?=$i;?>';">
+ <font color="#FFFFFF"><?=htmlspecialchars($ent['description']);?>&nbsp;
+ </td>
+ <td valign="middle" nowrap class="list">
+ <table border="0" cellspacing="0" cellpadding="1">
+ <tr>
+ <td valign="middle"><a href="vhosts_php_edit.php?id=<?=$i;?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0"></a></td>
+ <td><a href="vhosts_php_edit.php?type=php&act=del&id=<?=$i;?>" onclick="return confirm('Do you really want to delete this?')"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0"></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <?php
+
+ $i++;
+ }
+ }
+ ?>
+
+ <tr>
+ <td class="list" colspan="3"></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1">
+ <tr>
+ <td width="17"></td>
+ <td valign="middle"><a href="vhosts_php_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0"></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="list" colspan="3"></td>
+ <td class="list"></td>
+ </tr>
+ </table>
+
+ </form>
+
+
+ <br>
+ <br>
+ <br>
+ <br>
+ <br>
+ <br>
+ <br>
+ <br>
+
+</td>
+</tr>
+</table>
+
+</div>
+
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/config/vhosts/vhosts_php_edit.tmp b/config/vhosts/vhosts_php_edit.tmp
new file mode 100644
index 00000000..db3235d6
--- /dev/null
+++ b/config/vhosts/vhosts_php_edit.tmp
@@ -0,0 +1,231 @@
+<?php
+/* $Id$ */
+/*
+
+ vhosts_php_edit.php
+ Copyright (C) 2008 Mark J Crane
+ 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.
+*/
+
+require("guiconfig.inc");
+require("/usr/local/pkg/vhosts.inc");
+
+
+$a_vhosts = &$config['installedpackages']['vhosts']['config'];
+
+$id = $_GET['id'];
+if (isset($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if ($_GET['act'] == "del") {
+ if ($_GET['type'] == 'php') {
+ if ($a_vhosts[$_GET['id']]) {
+ unset($a_vhosts[$_GET['id']]);
+ write_config();
+ php_sync_package();
+ header("Location: vhosts_php.php");
+ exit;
+ }
+ }
+}
+
+if (isset($id) && $a_vhosts[$id]) {
+ $pconfig['name'] = $a_vhosts[$id]['name'];
+ $pconfig['host'] = $a_vhosts[$id]['host'];
+ $pconfig['ipaddress'] = $a_vhosts[$id]['ipaddress'];
+ $pconfig['port'] = $a_vhosts[$id]['port'];
+ $pconfig['enabled'] = $a_vhosts[$id]['enabled'];
+ $pconfig['description'] = $a_vhosts[$id]['description'];
+
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ if (!$input_errors) {
+
+ $ent = array();
+ $ent['name'] = $_POST['name'];
+ $ent['host'] = $_POST['host'];
+ $ent['ipaddress'] = $_POST['ipaddress'];
+ $ent['port'] = $_POST['port'];
+ $ent['enabled'] = $_POST['enabled'];
+ $ent['description'] = $_POST['description'];
+
+ if (isset($id) && $a_vhosts[$id]) {
+ //update
+ $a_vhosts[$id] = $ent;
+ }
+ else {
+ //add
+ $a_vhosts[] = $ent;
+ }
+
+ write_config();
+ php_sync_package();
+
+ header("Location: vhosts_php.php");
+ exit;
+ }
+}
+
+include("head.inc");
+
+?>
+
+<script type="text/javascript" language="JavaScript">
+
+function show_advanced_config() {
+ document.getElementById("showadvancedbox").innerHTML='';
+ aodiv = document.getElementById('showadvanced');
+ aodiv.style.display = "block";
+</script>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<p class="pgtitle">PHP Service: Edit</p>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+
+
+<div id="mainlevel">
+<table width="100%" border="0" cellpadding="0" cellspacing="0">
+<tr><td class="tabnavtbl">
+<?php
+
+ $tab_array = array();
+ $tab_array[] = array(gettext("Settings"), false, "/packages/vhosts/vhosts_php.php");
+ display_top_tabs($tab_array);
+
+?>
+</td></tr>
+</table>
+<table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td class="tabcont" >
+
+ <!--
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td><p><span class="vexpl"><span class="red"><strong>PHP<br>
+ </strong></span>
+ </p></td>
+ </tr>
+ </table>
+ -->
+ <br />
+
+ <form action="vhosts_php_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+
+ <tr>
+ <td width="25%" valign="top" class="vncellreq">Name</td>
+ <td width="75%" class="vtable">
+ <input name="name" type="text" class="formfld" id="name" size="40" value="<?=htmlspecialchars($pconfig['name']);?>">
+ </td>
+ </tr>
+
+ <tr>
+ <td width="25%" valign="top" class="vncellreq">Host</td>
+ <td width="75%" class="vtable">
+ <input name="name" type="text" class="formfld" id="host" size="40" value="<?=htmlspecialchars($pconfig['host']);?>">
+ </td>
+ </tr>
+
+ <tr>
+ <td width="25%" valign="top" class="vncellreq">IP Address</td>
+ <td width="75%" class="vtable">
+ <input name="name" type="text" class="formfld" id="ipaddress" size="40" value="<?=htmlspecialchars($pconfig['ipaddress']);?>">
+ </td>
+ </tr>
+
+ <tr>
+ <td width="25%" valign="top" class="vncellreq">Port</td>
+ <td width="75%" class="vtable">
+ <input name="name" type="text" class="formfld" id="port" size="40" value="<?=htmlspecialchars($pconfig['port']);?>">
+ Example: 8001
+ </td>
+ </tr>
+
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">Enabled</td>
+ <td width="78%" class="vtable">
+ <?php
+ echo " <select name='enabled' class='formfld'>\n";
+ echo " <option></option>\n";
+ switch (htmlspecialchars($pconfig['enabled'])) {
+ case "true":
+ echo " <option value='true' selected='yes'>true</option>\n";
+ echo " <option value='false'>false</option>\n";
+ break;
+ case "false":
+ echo " <option value='true'>true</option>\n";
+ echo " <option value='false' selected='yes'>false</option>\n";
+ break;
+ default:
+ echo " <option value='true' selected='yes'>true</option>\n";
+ echo " <option value='false'>false</option>\n";
+ }
+ echo " </select>\n";
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="25%" valign="top" class="vncellreq">Description</td>
+ <td width="75%" class="vtable">
+ <input name="description" type="text" class="formfld" id="description" size="40" value="<?=htmlspecialchars($pconfig['description']);?>">
+ <br><span class="vexpl">Enter the description here.<br></span>
+ </td>
+ </tr>
+
+ <tr>
+ <td valign="top">&nbsp;</td>
+ <td>
+ <input name="Submit" type="submit" class="formbtn" value="Save"> <input class="formbtn" type="button" value="Cancel" onclick="history.back()">
+ <?php if (isset($id) && $a_vhosts[$id]): ?>
+ <input name="id" type="hidden" value="<?=$id;?>">
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+ </form>
+
+ <br>
+ <br>
+ <br>
+ <br>
+ <br>
+ <br>
+
+ </td>
+ </tr>
+</table>
+
+</div>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/pkg_config.7.xml b/pkg_config.7.xml
index 682c5e1b..3ac0c1c4 100755
--- a/pkg_config.7.xml
+++ b/pkg_config.7.xml
@@ -290,6 +290,20 @@
<configurationfile>dnsblacklist.xml</configurationfile>
</package>
<package>
+ <name>vHosts</name>
+ <website/>
+ <descr>Web server package that can host html, javascript, php files. It uses the lighttpd web server that is already installed. Supports PHP5, PHP PDO and PDO SQLite.</descr>
+ <category>Services</category>
+ <pkginfolink>http://doc.pfsense.org/index.php/vhosts</pkginfolink>
+ <config_file>http://www.pfsense.com/packages/config/vhosts/vhosts.xml</config_file>
+ <depends_on_package_base_url>http://files.pfsense.org/packages/7/All/</depends_on_package_base_url>
+ <version>0.1</version>
+ <status>Alpha</status>
+ <required_version>1.2.3</required_version>
+ <maintainer>markjcrane@gmail.com</maintainer>
+ <configurationfile>vhosts.xml</configurationfile>
+ </package>
+ <package>
<name>snort</name>
<pkginfolink>http://forum.pfsense.org/index.php/topic,16847.0.html</pkginfolink>
<website>http://www.snort.org</website>