aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormcrane <mctch@yahoo.com>2009-12-20 07:06:59 -0700
committermcrane <mctch@yahoo.com>2009-12-20 07:08:46 -0700
commit6102105a07880d0dafb02c33019e23fe9491ec1c (patch)
treed0a9ff99a86543ab77581744498e655bd7b62f67
parent1e955b0d13602eadea82c9158728d81e04c08b75 (diff)
downloadpfsense-packages-6102105a07880d0dafb02c33019e23fe9491ec1c.tar.gz
pfsense-packages-6102105a07880d0dafb02c33019e23fe9491ec1c.tar.bz2
pfsense-packages-6102105a07880d0dafb02c33019e23fe9491ec1c.zip
vHosts web server 0.2 http web server functioning. https support needs a little more work.
-rw-r--r--config/vhosts/lighty-vhosts.conf179
-rw-r--r--config/vhosts/system_advanced_create_certs.tmp262
-rw-r--r--config/vhosts/vhosts.inc402
-rw-r--r--config/vhosts/vhosts.xml15
-rw-r--r--config/vhosts/vhosts_php.tmp75
-rw-r--r--config/vhosts/vhosts_php_edit.tmp154
-rwxr-xr-xpkg_config.7.xml6
7 files changed, 733 insertions, 360 deletions
diff --git a/config/vhosts/lighty-vhosts.conf b/config/vhosts/lighty-vhosts.conf
deleted file mode 100644
index b3178771..00000000
--- a/config/vhosts/lighty-vhosts.conf
+++ /dev/null
@@ -1,179 +0,0 @@
-#
-# 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/system_advanced_create_certs.tmp b/config/vhosts/system_advanced_create_certs.tmp
new file mode 100644
index 00000000..2b0b2229
--- /dev/null
+++ b/config/vhosts/system_advanced_create_certs.tmp
@@ -0,0 +1,262 @@
+<?php
+/* $Id$ */
+/*
+ system_advanced_create_certs.php
+ part of pfSense
+
+ Copyright (C) 2004 Scott Ullrich
+ 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");
+
+if(file_exists("/var/etc/ssl/openssl.cnf")) {
+ $openssl = file_get_contents("/var/etc/ssl/openssl.cnf");
+}
+
+/* Lets match the fileds in the read in file and
+ populate the variables for the form */
+preg_match('/C\=(.*)\n/', $openssl, $countrycodeA);
+preg_match('/\nST\=(.*)\n/', $openssl, $stateorprovinceA);
+preg_match('/\nL\=(.*)\n/', $openssl, $citynameA);
+preg_match('/\nO\=(.*)\n/', $openssl, $orginizationnameA);
+preg_match('/\nOU\=(.*)\n/', $openssl, $orginizationdepartmentA);
+preg_match('/\nCN\=(.*)\n/', $openssl, $commonnameA);
+
+$countrycode = $countrycodeA[1];
+$stateorprovince = $stateorprovinceA[1];
+$cityname = $citynameA[1];
+$orginizationname = $orginizationnameA[1];
+$orginizationdepartment = $orginizationdepartmentA[1];
+$commonname = $commonnameA[1];
+
+if ($_POST) {
+
+ /* Grab posted variables and create a new openssl.cnf */
+ $countrycode=$_POST['countrycode'];
+ $stateorprovince=$_POST['stateorprovince'];
+ $cityname=$_POST['cityname'];
+ $orginizationname=$_POST['orginizationname'];
+ $orginizationdepartment=$_POST['orginizationdepartment'];
+ $commonname=$_POST['commonname'];
+
+ /* Write out /var/etc/ssl/openssl.cnf */
+ conf_mount_rw();
+ safe_mkdir("/var/etc/ssl/");
+ $fd = fopen("/var/etc/ssl/openssl.cnf", "w");
+ fwrite($fd, "");
+ fwrite($fd, "[ req ]\n");
+ fwrite($fd, "distinguished_name=req_distinguished_name \n");
+ fwrite($fd, "req_extensions = v3_req \n");
+ fwrite($fd, "prompt=no\n");
+ fwrite($fd, "default_bits = 1024\n");
+ fwrite($fd, "default_keyfile = privkey.pem\n");
+ fwrite($fd, "distinguished_name = req_distinguished_name\n");
+ fwrite($fd, "attributes = req_attributes\n");
+ fwrite($fd, "x509_extensions = v3_ca # The extentions to add to the self signed cert\n");
+ fwrite($fd, "[ req_distinguished_name ] \n");
+ fwrite($fd, "C=" . $countrycode . " \n");
+ fwrite($fd, "ST=" . $stateorprovince. " \n");
+ fwrite($fd, "L=" . $cityname . " \n");
+ fwrite($fd, "O=" . $orginizationname . " \n");
+ fwrite($fd, "OU=" . $orginizationdepartment . " \n");
+ fwrite($fd, "CN=" . $commonname . " \n");
+ fwrite($fd, "[EMAIL PROTECTED] \n");
+ fwrite($fd, "[EMAIL PROTECTED] \n");
+ fwrite($fd, "[ v3_req ] \n");
+ fwrite($fd, "basicConstraints = critical,CA:FALSE \n");
+ fwrite($fd, "keyUsage = nonRepudiation, digitalSignature, keyEncipherment, dataEncipherment, keyAgreement \n");
+ fwrite($fd, "extendedKeyUsage=emailProtection,clientAuth \n");
+ fwrite($fd, "[ ca ]\n");
+ fwrite($fd, "default_ca = CA_default\n");
+ fwrite($fd, "[ CA_default ]\n");
+ fwrite($fd, "certificate = /tmp/cacert.pem \n");
+ fwrite($fd, "private_key = /tmp/cakey.pem \n");
+ fwrite($fd, "dir = /tmp/\n");
+ fwrite($fd, "certs = /tmp/certs\n");
+ fwrite($fd, "crl_dir = /tmp/crl\n");
+ fwrite($fd, "database = /tmp/index.txt \n");
+ fwrite($fd, "new_certs_dir = /tmp/newcerts \n");
+ fwrite($fd, "serial = /tmp/serial \n");
+ fwrite($fd, "crl = /tmp/crl.pem \n");
+ fwrite($fd, "RANDFILE = /tmp/.rand \n");
+ fwrite($fd, "x509_extensions = usr_cert \n");
+ fwrite($fd, "name_opt = ca_default \n");
+ fwrite($fd, "cert_opt = ca_default \n");
+ fwrite($fd, "default_days = 365 \n");
+ fwrite($fd, "default_crl_days = 30 \n");
+ fwrite($fd, "default_md = md5 \n");
+ fwrite($fd, "preserve = no \n");
+ fwrite($fd, "policy = policy_match\n");
+ fwrite($fd, "[ policy_match ]\n");
+ fwrite($fd, "countryName = match\n");
+ fwrite($fd, "stateOrProvinceName = match\n");
+ fwrite($fd, "organizationName = match\n");
+ fwrite($fd, "organizationalUnitName = optional\n");
+ fwrite($fd, "commonName = supplied\n");
+ fwrite($fd, "emailAddress = optional\n");
+ fwrite($fd, "[ policy_anything ]\n");
+ fwrite($fd, "countryName = optional\n");
+ fwrite($fd, "stateOrProvinceName = optional\n");
+ fwrite($fd, "localityName = optional\n");
+ fwrite($fd, "organizationName = optional\n");
+ fwrite($fd, "organizationalUnitName = optional\n");
+ fwrite($fd, "commonName = supplied\n");
+ fwrite($fd, "emailAddress = optional\n");
+ fwrite($fd, "[ req_distinguished_name ]\n");
+ //fwrite($fd, "countryName = US\n");
+ fwrite($fd, "[ req_attributes ]\n");
+ fwrite($fd, "challengePassword = A challenge password\n");
+ fwrite($fd, "unstructuredName = An optional company name\n");
+ fwrite($fd, "[ usr_cert ]\n");
+ fwrite($fd, "basicConstraints=CA:FALSE\n");
+ fwrite($fd, "[ v3_ca ]\n");
+ fwrite($fd, "subjectKeyIdentifier=hash\n");
+ fwrite($fd, "authorityKeyIdentifier=keyid:always,issuer:always\n");
+ fwrite($fd, "basicConstraints = CA:true\n");
+ fwrite($fd, "[ crl_ext ]\n");
+ fwrite($fd, "authorityKeyIdentifier=keyid:always,issuer:always\n");
+ fclose($fd);
+
+$pgtitle = "System: Advanced functions: Create Certificates";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<p class="pgtitle"><?=$pgtitle?></p>
+<form action="system_advanced_create_certs.php" method="post" name="iform" id="iform">
+ <?php if ($input_errors) print_input_errors($input_errors); ?>
+ <?php if ($savemsg) print_info_box($savemsg); ?>
+ <p>One moment please...
+ <?php
+ mwexec("cd /tmp/ && /usr/bin/openssl req -new -x509 -keyout /tmp/cakey.pem -out /tmp/cacert.pem -days 3650 -config /var/etc/ssl/openssl.cnf -passin pass:test -nodes");
+ $cacert1 = file_get_contents("/tmp/cacert.pem");
+ $cakey1 = file_get_contents("/tmp/cakey.pem");
+ $cacertA = str_replace("\r","",$cacert1);
+ $cakeyA = str_replace("\r","",$cakey1);
+ $cacert = str_replace("\n","\\n",$cacertA);
+ $cakey = str_replace("\n","\\n",$cakeyA);
+ ?>
+ <script language="JavaScript">
+ <!--
+ var cacert='<?=$cacert?>';
+ var cakey='<?=$cakey?>';
+ opener.document.forms[0].certificate.value=cacert;
+ opener.document.forms[0].privatekey.value=cakey;
+ this.close();
+ -->
+ </script>
+
+</body>
+</html>
+
+<?php
+
+} else {
+
+$pgtitle = '&nbsp; &nbsp; System: Advanced - Create Certificates';
+include("head.inc");
+?>
+
+
+ <body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+ <form action="system_advanced_create_certs.php" method="post" name="iform" id="iform">
+ <p class="pgtitle">System: Advanced - Create Certificates</p>
+
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td width="35%" valign="top" class="vncell"><B>Country Code (2 Letters)</td>
+ <td width="78%" class="vtable">
+ <input name="countrycode" value="<?=$countrycode?>">
+ </span>
+ </td>
+ </tr>
+
+ <tr>
+ <td width="35%" valign="top" class="vncell"><B>State or Province name</td>
+ <td width="78%" class="vtable">
+ <input name="stateorprovince" value="<?=$stateorprovince?>">
+ </span>
+ </td>
+ </tr>
+
+ <tr>
+ <td width="35%" valign="top" class="vncell"><B>City name</td>
+ <td width="78%" class="vtable">
+ <input name="cityname" value="<?=$cityname?>">
+ </span>
+ </td>
+ </tr>
+
+ <tr>
+ <td width="35%" valign="top" class="vncell"><B>Organization name</td>
+ <td width="78%" class="vtable">
+ <input name="orginizationname" value="<?=$orginizationname?>">
+ </span>
+ </td>
+ </tr>
+
+ <tr>
+ <td width="35%" valign="top" class="vncell"><B>Organization department</td>
+ <td width="78%" class="vtable">
+ <input name="orginizationdepartment" value="<?=$orginizationdepartment?>">
+ </span>
+ </td>
+ </tr>
+
+ <tr>
+ <td width="35%" valign="top" class="vncell"><B>Common Name (Your name)</td>
+ <td width="78%" class="vtable">
+ <input name="commonname" value="<?=$commonname?>">
+ </span>
+ </td>
+ </tr>
+
+ <!--
+ <tr>
+ <td width="35%" valign="top" class="vncell"><B>E-Mail address</td>
+ <td width="78%" class="vtable">
+ <input name="email" value="<?=$email?>">
+ </span>
+ </td>
+ </tr>
+ -->
+
+ <tr>
+ <td width="35%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="Save">
+ </td>
+ </tr>
+ </table>
+
+ </body>
+ </html>
+
+<?php
+}
+ conf_mount_ro();
+
+?>
diff --git a/config/vhosts/vhosts.inc b/config/vhosts/vhosts.inc
index 0cb88064..8e013f4b 100644
--- a/config/vhosts/vhosts.inc
+++ b/config/vhosts/vhosts.inc
@@ -33,148 +33,365 @@
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;
- }
+ 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';
- 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];
+ $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];
}
-
+
+//sort array
+ function sort_host($a, $b){
+ return strcmp($a["host"], $b["host"]);
+ }
+
+ function sort_port($a, $b){
+ return strcmp($a["port"], $b["port"]);
+ }
+
+ function sort_ip_address($a, $b){
+ return natsort($a["ipaddress"], $b["ipaddress"]);
+ }
+
+
function vhosts_sync_package_php()
{
+ global $config;
+ if($config['installedpackages']['vhosts']['config'] != "") {
- global $config;
- if($config['installedpackages']['vhosts']['config'] != "") {
+ conf_mount_rw();
+ config_unlock();
- conf_mount_rw();
- config_unlock();
-
- $tmp = "<?php\n";
+ $tmp = "#\n";
+ $tmp .= "# lighttpd configuration file\n";
+ $tmp .= "#\n";
+ $tmp .= "# use a it as base for lighttpd 1.0.0 and above\n";
+ $tmp .= "#\n";
+ $tmp .= "############ Options you really have to take care of ####################\n";
$tmp .= "\n";
- $tmp .= "// Set time limit to indefinite execution\n";
- $tmp .= "set_time_limit (0);\n";
+ $tmp .= "## FreeBSD!\n";
+ $tmp .= "server.event-handler = \"freebsd-kqueue\"\n";
+ $tmp .= "server.network-backend = \"writev\" ## Fixes 7.x upload issues\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 .= "## modules to load\n";
+ $tmp .= "server.modules = (\n";
+ $tmp .= " \"mod_accesslog\",\n";
+ $tmp .= " \"mod_access\", \"mod_accesslog\",\n";
+ $tmp .= " \"mod_fastcgi\", \"mod_cgi\",\"mod_rewrite\"\n";
+ $tmp .= " )\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 .= "## Unused modules\n";
+ $tmp .= "# \"mod_setenv\",\n";
+ $tmp .= "# \"mod_compress\"\n";
+ $tmp .= "# \"mod_redirect\",\n";
+ $tmp .= "# \"mod_rewrite\",\n";
+ $tmp .= "# \"mod_ssi\",\n";
+ $tmp .= "# \"mod_usertrack\",\n";
+ $tmp .= "# \"mod_expire\",\n";
+ $tmp .= "# \"mod_secdownload\",\n";
+ $tmp .= "# \"mod_rrdtool\",\n";
+ $tmp .= "# \"mod_auth\",\n";
+ $tmp .= "# \"mod_status\",\n";
+ $tmp .= "# \"mod_alias\",\n";
+ $tmp .= "# \"mod_proxy\",\n";
+ $tmp .= "# \"mod_simple_vhost\",\n";
+ $tmp .= "# \"mod_evhost\",\n";
+ $tmp .= "# \"mod_userdir\",\n";
+ $tmp .= "# \"mod_cgi\",\n";
+ $tmp .= "# \"mod_accesslog\"\n";
$tmp .= "\n";
+ $tmp .= "## a static document-root, for virtual-hosting take look at the\n";
+ $tmp .= "## server.virtual-* options\n";
+ $tmp .= "server.document-root = \"/usr/local/vhosts/\"\n";
$tmp .= "\n";
+ $tmp .= "# Maximum idle time with nothing being written (php downloading)\n";
+ $tmp .= "server.max-write-idle = 999\n";
$tmp .= "\n";
- $tmp .= "function send_to_syslog(\$syslogaddress, \$syslogport, \$syslogmsg) {\n";
+ $tmp .= "## where to send error-messages to\n";
+ $tmp .= "server.errorlog = \"/var/log/lighttpd.error.log\"\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 .= "# files to check for if .../ is requested\n";
+ $tmp .= "server.indexfiles = ( \"index.php\", \"index.html\",\n";
+ $tmp .= " \"index.htm\", \"default.htm\" )\n";
$tmp .= "\n";
- $tmp .= "}\n";
+ $tmp .= "# mimetype mapping\n";
+ $tmp .= "mimetype.assign = (\n";
+ $tmp .= " \".pdf\" => \"application/pdf\",\n";
+ $tmp .= " \".sig\" => \"application/pgp-signature\",\n";
+ $tmp .= " \".spl\" => \"application/futuresplash\",\n";
+ $tmp .= " \".class\" => \"application/octet-stream\",\n";
+ $tmp .= " \".ps\" => \"application/postscript\",\n";
+ $tmp .= " \".torrent\" => \"application/x-bittorrent\",\n";
+ $tmp .= " \".dvi\" => \"application/x-dvi\",\n";
+ $tmp .= " \".gz\" => \"application/x-gzip\",\n";
+ $tmp .= " \".pac\" => \"application/x-ns-proxy-autoconfig\",\n";
+ $tmp .= " \".swf\" => \"application/x-shockwave-flash\",\n";
+ $tmp .= " \".tar.gz\" => \"application/x-tgz\",\n";
+ $tmp .= " \".tgz\" => \"application/x-tgz\",\n";
+ $tmp .= " \".tar\" => \"application/x-tar\",\n";
+ $tmp .= " \".zip\" => \"application/zip\",\n";
+ $tmp .= " \".mp3\" => \"audio/mpeg\",\n";
+ $tmp .= " \".m3u\" => \"audio/x-mpegurl\",\n";
+ $tmp .= " \".wma\" => \"audio/x-ms-wma\",\n";
+ $tmp .= " \".wax\" => \"audio/x-ms-wax\",\n";
+ $tmp .= " \".ogg\" => \"audio/x-wav\",\n";
+ $tmp .= " \".wav\" => \"audio/x-wav\",\n";
+ $tmp .= " \".gif\" => \"image/gif\",\n";
+ $tmp .= " \".jpg\" => \"image/jpeg\",\n";
+ $tmp .= " \".jpeg\" => \"image/jpeg\",\n";
+ $tmp .= " \".png\" => \"image/png\",\n";
+ $tmp .= " \".xbm\" => \"image/x-xbitmap\",\n";
+ $tmp .= " \".xpm\" => \"image/x-xpixmap\",\n";
+ $tmp .= " \".xwd\" => \"image/x-xwindowdump\",\n";
+ $tmp .= " \".css\" => \"text/css\",\n";
+ $tmp .= " \".html\" => \"text/html\",\n";
+ $tmp .= " \".htm\" => \"text/html\",\n";
+ $tmp .= " \".js\" => \"text/javascript\",\n";
+ $tmp .= " \".asc\" => \"text/plain\",\n";
+ $tmp .= " \".c\" => \"text/plain\",\n";
+ $tmp .= " \".conf\" => \"text/plain\",\n";
+ $tmp .= " \".text\" => \"text/plain\",\n";
+ $tmp .= " \".txt\" => \"text/plain\",\n";
+ $tmp .= " \".dtd\" => \"text/xml\",\n";
+ $tmp .= " \".xml\" => \"text/xml\",\n";
+ $tmp .= " \".mpeg\" => \"video/mpeg\",\n";
+ $tmp .= " \".mpg\" => \"video/mpeg\",\n";
+ $tmp .= " \".mov\" => \"video/quicktime\",\n";
+ $tmp .= " \".qt\" => \"video/quicktime\",\n";
+ $tmp .= " \".avi\" => \"video/x-msvideo\",\n";
+ $tmp .= " \".asf\" => \"video/x-ms-asf\",\n";
+ $tmp .= " \".asx\" => \"video/x-ms-asf\",\n";
+ $tmp .= " \".wmv\" => \"video/x-ms-wmv\",\n";
+ $tmp .= " \".bz2\" => \"application/x-bzip\",\n";
+ $tmp .= " \".tbz\" => \"application/x-bzip-compressed-tar\",\n";
+ $tmp .= " \".tar.bz2\" => \"application/x-bzip-compressed-tar\"\n";
+ $tmp .= " )\n";
$tmp .= "\n";
+ $tmp .= "# Use the \"Content-Type\" extended attribute to obtain mime type if possible\n";
+ $tmp .= "#mimetypes.use-xattr = \"enable\"\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 .= "#### accesslog module\n";
+ $tmp .= "#accesslog.filename = \"/dev/null\"\n";
$tmp .= "\n";
- $tmp .= "\$x = 0;\n";
- $tmp .= "while(\$x == 0) {\n";
+ $tmp .= "## deny access the file-extensions\n";
+ $tmp .= "#\n";
+ $tmp .= "# ~ is for backupfiles from vi, emacs, joe, ...\n";
+ $tmp .= "# .inc is often used for code includes which should in general not be part\n";
+ $tmp .= "# of the document-root\n";
+ $tmp .= "url.access-deny = ( \"~\", \".db\" )\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 .= "######### Options that are good to be but not neccesary to be changed #######\n";
$tmp .= "\n";
+ $tmp .= "## bind to port (default: 80)\n";
+ $tmp .= "server.port = 8001\n";
$tmp .= "\n";
+ $tmp .= "#the regex method isn't working\n";
+ $tmp .= "#\$HTTP[\"host\"] =~ \"(^|\\.)host01\\.com\$\" {\n";
+ $tmp .= "# server.document-root = \"/usr/local/vhosts/host01\"\n";
+ $tmp .= "#}\n";
$tmp .= "\n";
-
- foreach($config['installedpackages']['vhosts']['config'] as $rowhelper) {
+
+ $vhostarray = $config['installedpackages']['vhosts']['config'];
+ if (count(vhostarray) > 1) {
+ usort($vhostarray, 'sort_ipaddress');
+ usort($vhostarray, 'sort_host');
+ usort($vhostarray, 'sort_port');
+ }
+ $ipaddress_previous_value = '';
+ $host_previous_value = '';
+ $port_previous_value = '';
+ $ipaddress_and_port_previous_value = '';
+ $x=1;
+ foreach($vhostarray 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";
+
+ $host = $rowhelper['host'];
+ $ipaddress = $rowhelper['ipaddress'];
+ $port = $rowhelper['port'];
+ $directory = $rowhelper['directory'];
+ if (strlen($rowhelper['certificate']) > 0) {
+ $certificate = base64_decode($rowhelper['certificate']);
}
- }
+ if (strlen($rowhelper['privatekey']) > 0) {
+ $privatekey = base64_decode($rowhelper['privatekey']);
+ }
+
+ //set directory default to the host
+ if (strlen($directory) == 0) { $directory = $host; }
+
+ //if the vhost directory doesn't exist then create it
+ //echo '/usr/local/vhosts/'.$directory.'<br />';
+ if (!is_dir('/usr/local/vhosts/'.$directory)) {
+ exec("mkdir /usr/local/vhosts/".$directory);
+ }
+
+ //set the default port
+ if (strlen($port) == 0) { $port = '8001'; }
+ if ($ipaddress.':'.$port != $ipaddress_and_port_previous_value) {
+ if ($x > 1) { $tmp .= "}\n\n"; }
+ $tmp .= "\$SERVER[\"socket\"] == \"".$ipaddress.":".$port."\" {\n";
+ }
+
+ if (strlen($rowhelper['description']) > 0) {
+ $tmp .= "# ".$rowhelper['description']." \n\n";
+ }
+ $tmp .= " \$HTTP[\"host\"] == \"".$host."\" {\n";
+ $tmp .= " server.document-root = \"/usr/local/vhosts/".$directory."\"\n";
+
+ //enable ssl if the cert and key were both provided
+ if (strlen($rowhelper['certificate']) > 0 && strlen($rowhelper['privatekey']) > 0) {
+ $pem_file = "/var/etc/cert-vhosts-".$ipaddress."-".$port.".pem";
+ $fout = fopen($pem_file,"w");
+ fwrite($fout, $certificate.$privatekey);
+ fclose($fout);
+ $tmp .= " ssl.pemfile = \"".$pem_file."\"\n";
+ $tmp .= " ssl.engine = \"enable\"\n";
+ unset($pem_file);
+ }
+ if (count(vhostarray) > 0) {
+ $tmp .= " }\n";
+ }
+
+ $ipaddress_previous_value = $ipaddress;
+ $host_previous_value = $host;
+ $port_previous_value = $port;
+ $ipaddress_and_port_previous_value = $ipaddress.':'.$port;
+ $x++;
+ }
}
+ $tmp .= "}\n";
+
+ /*
+ $tmp .= "\$SERVER[\"socket\"] == \"10.7.0.1:8001\" {\n";
+ $tmp .= " \$HTTP[\"host\"] == \"vhost01.com\" {\n";
+ $tmp .= " #ssl.pemfile = \"/var/www/certs/localhost.pem\"\n";
+ $tmp .= " #ssl.engine = \"enable\"\n";
+ $tmp .= " server.document-root = \"/usr/local/vhosts/host01\"\n";
+ $tmp .= " #server.errorlog = \"/var/log/lighttpd/nixcraft/error.log\"\n";
+ $tmp .= " #accesslog.filename = \"/var/log/lighttpd/nixcraft/access.log\"\n";
+ $tmp .= " #server.error-handler-404 = \"/e404.php\"\n";
+ $tmp .= " }\n";
$tmp .= "\n";
+ $tmp .= " \$HTTP[\"host\"] == \"vhost03.com\" {\n";
+ $tmp .= " #ssl.pemfile = \"/var/www/certs/localhost.pem\"\n";
+ $tmp .= " #ssl.engine = \"enable\"\n";
+ $tmp .= " server.document-root = \"/usr/local/vhosts/host03\"\n";
+ $tmp .= " #server.errorlog = \"/var/log/lighttpd/nixcraft/error.log\"\n";
+ $tmp .= " #accesslog.filename = \"/var/log/lighttpd/nixcraft/access.log\"\n";
+ $tmp .= " #server.error-handler-404 = \"/e404.php\"\n";
+ $tmp .= " }\n";
+ $tmp .= "}\n";
+ $tmp .= "\n";
+ $tmp .= "\$SERVER[\"socket\"] == \"10.7.0.1:8002\" {\n";
+ $tmp .= " \$HTTP[\"host\"] == \"vhost02.com\" {\n";
+ $tmp .= " #ssl.pemfile = \"/var/www/certs/localhost.pem\"\n";
+ $tmp .= " #ssl.engine = \"enable\"\n";
+ $tmp .= " server.document-root = \"/usr/local/vhosts/host02\"\n";
+ $tmp .= " #server.errorlog = \"/var/log/lighttpd/nixcraft/error.log\"\n";
+ $tmp .= " #accesslog.filename = \"/var/log/lighttpd/nixcraft/access.log\"\n";
+ $tmp .= " #server.error-handler-404 = \"/e404.php\"\n";
+ $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 .= "## error-handler for status 404\n";
+ $tmp .= "#server.error-handler-404 = \"/error-handler.html\"\n";
+ $tmp .= "#server.error-handler-404 = \"/error-handler.php\"\n";
$tmp .= "\n";
+ $tmp .= "## to help the rc.scripts\n";
+ $tmp .= "server.pid-file = \"/var/run/lighty-vhosts.pid\"\n";
$tmp .= "\n";
- $tmp .= "?>";
+ $tmp .= "## virtual directory listings\n";
+ $tmp .= "server.dir-listing = \"disable\"\n";
+ $tmp .= "\n";
+ $tmp .= "## enable debugging\n";
+ $tmp .= "debug.log-request-header = \"disable\"\n";
+ $tmp .= "debug.log-response-header = \"disable\"\n";
+ $tmp .= "debug.log-request-handling = \"disable\"\n";
+ $tmp .= "debug.log-file-not-found = \"disable\"\n";
+ $tmp .= "\n";
+ $tmp .= "#### compress module\n";
+ $tmp .= "#compress.cache-dir = \"/tmp/lighttpd/cache/compress/\"\n";
+ $tmp .= "#compress.filetype = (\"text/plain\", \"text/html\")\n";
+ $tmp .= "\n";
+ $tmp .= "#server.network-backend = \"writev\"\n";
+ $tmp .= "server.upload-dirs = ( \"/root/\", \"/tmp/\", \"/var/\" )\n";
+ $tmp .= "server.max-request-size = 2097152\n";
+ $tmp .= "\n";
+ $tmp .= "#### fastcgi module\n";
+ $tmp .= "## read fastcgi.txt for more info\n";
+ $tmp .= "fastcgi.server = ( \".php\" =>\n";
+ $tmp .= " ( \"localhost\" =>\n";
+ $tmp .= " (\n";
+ $tmp .= " \"socket\" => \"/tmp/php5-fastcgi.socket\",\n";
+ $tmp .= " \"min-procs\" => 1,\n";
+ $tmp .= " \"max-procs\" => 1,\n";
+ $tmp .= " \"idle-timeout\" => 0,\n";
+ $tmp .= " \"bin-environment\" => (\n";
+ $tmp .= " \"PHP_FCGI_MAX_REQUESTS\" => \"500\",\n";
+ $tmp .= " \"PHP_FCGI_CHILDREN\" => \"1\"\n";
+ $tmp .= " ),\n";
+ $tmp .= " \"bin-path\" => \"/usr/local/php5/php-cgi\"\n";
+ $tmp .= " )\n";
+ $tmp .= " )\n";
+ $tmp .= ")\n";
+ $tmp .= "\n";
+ $tmp .= "#### CGI module\n";
+ $tmp .= "cgi.assign = ( \".cgi\" => \"\" )\n";
- $fout = fopen("/usr/local/pkg/vhosts.php","w");
+ $fout = fopen("/var/etc/lighty-vhosts.conf","w");
fwrite($fout, $tmp);
unset($tmp);
fclose($fout);
-
+
conf_mount_ro();
- }
+ }
}
-function php_sync_package()
-{
-
+function php_sync_package() {
global $config;
vhosts_sync_package_php();
-
}
-
-function php_install_command()
-{
+
+function php_install_command() {
global $config;
conf_mount_rw();
config_lock();
if (!is_dir('/usr/local/www/packages/')) {
- exec("mkdir /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/");
+ exec("mkdir /usr/local/www/packages/vhosts/");
+ }
+
+ if (!is_dir('/usr/local/vhosts/')) {
+ exec("mkdir /usr/local/vhosts/");
}
//rename PHP files from .tmp to .php
@@ -184,8 +401,12 @@ function php_install_command()
exec("cp /tmp/vhosts_php_edit.tmp /usr/local/www/packages/vhosts/vhosts_php_edit.php");
unlink_if_exists("/tmp/vhosts_php_edit.tmp");
+ exec("cp /tmp/system_advanced_create_certs.tmp /usr/local/www/packages/vhosts/system_advanced_create_certs.php");
+ unlink_if_exists("/tmp/system_advanced_create_certs.tmp");
+
//extract php5
- exec("cp /tmp/vhosts_php_edit.tmp /usr/local/www/packages/vhosts/vhosts_php_edit.php");
+ chdir('/tmp');
+ exec("tar zxvf /tmp/php5.tar.gz -C /usr/local/");
unlink_if_exists("/tmp/php5.tar.gz");
//write_config();
@@ -193,14 +414,13 @@ function php_install_command()
write_rcfile(array(
"file" => "vhosts.sh",
"start" => "/usr/local/sbin/lighttpd -f /var/etc/lighty-vhosts.conf",
- "stop" => "rm /tmp/phpmonitor.pid"
+ "stop" => "kill `cat /var/run/lighty-vhosts.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
//}
diff --git a/config/vhosts/vhosts.xml b/config/vhosts/vhosts.xml
index cbb01582..b3903470 100644
--- a/config/vhosts/vhosts.xml
+++ b/config/vhosts/vhosts.xml
@@ -37,25 +37,25 @@
/* ========================================================================== */
]]>
</copyright>
- <description>PHP Service</description>
+ <description>vHosts</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>
+ <version>0.2</version>
<title>Settings</title>
<include_file>/usr/local/pkg/vhosts.inc</include_file>
<menu>
- <name>vhosts</name>
+ <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>
+ <name>vHosts</name>
<rcfile>vhosts.sh</rcfile>
<executable>vhosts</executable>
- <description>Lighttpd web server service.</description>
+ <description>LigHTTPD web server service. Uses PHP5 with fast cgi.</description>
</service>
<tabs>
<tab>
@@ -96,6 +96,11 @@
<item>http://www.pfsense.com/packages/config/vhosts/lighty-vhosts.conf</item>
</additional_files_needed>
<additional_files_needed>
+ <prefix>/var/etc/</prefix>
+ <chmod>0755</chmod>
+ <item>http://www.pfsense.com/packages/config/vhosts/system_advanced_create_certs.tmp</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>
diff --git a/config/vhosts/vhosts_php.tmp b/config/vhosts/vhosts_php.tmp
index c77d50a3..41ccf11f 100644
--- a/config/vhosts/vhosts_php.tmp
+++ b/config/vhosts/vhosts_php.tmp
@@ -51,7 +51,7 @@ include("head.inc");
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
<?php include("fbegin.inc"); ?>
-<p class="pgtitle">vHosts Service:</p>
+<p class="pgtitle">vHosts:</p>
<div id="mainlevel">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
@@ -88,8 +88,7 @@ include("head.inc");
<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");
+ vHosts is a web server package that can host HTML, Javascript, CSS, and PHP. It uses the lighttpd web server that is already installed. It uses PHP5 in FastCGI mode and has access to PHP Data Ojbects and PDO SQLite.
<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>
@@ -99,7 +98,7 @@ include("head.inc");
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
- <td width="30%" class="listhdrr">Name</td>
+ <td width="30%" class="listhdrr">Host</td>
<td width="20%" class="listhdrr">Enabled</td>
<td width="40%" class="listhdr">Description</td>
<td width="10%" class="list">
@@ -114,37 +113,49 @@ include("head.inc");
</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++;
+ //sort array
+ if (!function_exists('sort_host')) {
+ function sort_host($a, $b){
+ return strcmp($a["host"], $b["host"]);
+ }
+ }
+ //disable for now because it throws off the edit and delete
+ //if (count($a_vhosts) > 1) {
+ // usort($a_vhosts, 'sort_host');
+ //}
+ foreach ($a_vhosts as $ent) {
+ $host = $ent['host'];
+ $port = $ent['port'];
+ if (strlen($ent['certificate']) == 0) { $http_protocol = 'http'; } else { $http_protocol = 'https'; }
+ if ($http_protocol == 'http' && $port == '80') { $port = ''; }
+ if ($http_protocol == 'https' && $port == '443') { $port = ''; }
+ if (strlen($port) > 0) { $port = ':'.$port; }
+ $vhost_url = $http_protocol.'://'.$host.$port;
+ ?>
+ <tr>
+ <td class="listr" ondblclick="document.location='vhosts_php_edit.php?id=<?=$i;?>';">
+ <a href='<?=$vhost_url;?>' target='_blank'><?=$ent['host'];?></a>&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++;
}
}
?>
diff --git a/config/vhosts/vhosts_php_edit.tmp b/config/vhosts/vhosts_php_edit.tmp
index db3235d6..3e5c477c 100644
--- a/config/vhosts/vhosts_php_edit.tmp
+++ b/config/vhosts/vhosts_php_edit.tmp
@@ -31,7 +31,6 @@
require("guiconfig.inc");
require("/usr/local/pkg/vhosts.inc");
-
$a_vhosts = &$config['installedpackages']['vhosts']['config'];
$id = $_GET['id'];
@@ -52,13 +51,18 @@ if ($_GET['act'] == "del") {
}
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['directory'] = $a_vhosts[$id]['directory'];
+ if (strlen($a_vhosts[$id]['certificate']) > 0) {
+ $pconfig['certificate'] = base64_decode($a_vhosts[$id]['certificate']);
+ }
+ if (strlen($a_vhosts[$id]['privatekey']) > 0) {
+ $pconfig['privatekey'] = base64_decode($a_vhosts[$id]['privatekey']);
+ }
$pconfig['enabled'] = $a_vhosts[$id]['enabled'];
$pconfig['description'] = $a_vhosts[$id]['description'];
-
}
if ($_POST) {
@@ -69,10 +73,23 @@ if ($_POST) {
if (!$input_errors) {
$ent = array();
- $ent['name'] = $_POST['name'];
$ent['host'] = $_POST['host'];
$ent['ipaddress'] = $_POST['ipaddress'];
$ent['port'] = $_POST['port'];
+ $ent['directory'] = $_POST['directory'];
+
+ if (strlen($_POST['certificate']) > 0) {
+ $ent['certificate'] = base64_encode($_POST['certificate']);
+ }
+ else {
+ $ent['certificate'] = '';
+ }
+ if (strlen($_POST['privatekey']) > 0) {
+ $ent['privatekey'] = base64_encode($_POST['privatekey']);
+ }
+ else {
+ $ent['privatekey'] = '';
+ }
$ent['enabled'] = $_POST['enabled'];
$ent['description'] = $_POST['description'];
@@ -104,10 +121,19 @@ function show_advanced_config() {
aodiv = document.getElementById('showadvanced');
aodiv.style.display = "block";
</script>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<script language="javascript">
+ function openwindow(url) {
+ var oWin = window.open(url,"pfSensePop","width=620,height=400,top=150,left=150");
+ if (oWin==null || typeof(oWin)=="undefined") {
+ return false;
+ } else {
+ return true;
+ }
+ }
+</script>
+<body link="#0000CC" vlink="#000CC" alink="#0000CC">
<?php include("fbegin.inc"); ?>
-<p class="pgtitle">PHP Service: Edit</p>
+<p class="pgtitle">vHosts: Edit</p>
<?php if ($input_errors) print_input_errors($input_errors); ?>
@@ -124,8 +150,8 @@ function show_advanced_config() {
</td></tr>
</table>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td class="tabcont" >
+<tr>
+<td class="tabcont" >
<!--
<table width="100%" border="0" cellpadding="6" cellspacing="0">
@@ -142,37 +168,65 @@ function show_advanced_config() {
<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 width="22%" valign="top" class="vncellreq">Host</td>
+ <td width="78%" class="vtable">
+ <input name="host" type="text" class="formfld" id="host" size="40" value="<?=htmlspecialchars($pconfig['host']);?>">
+ <br />
+ Required. If the host is intended for internal you can use the DNS forwarder to set a host name that is valid inside the local network. default: vhost01.local
</td>
- </tr>
+ </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 width="22%" valign="top" class="vncellreq">IP Address</td>
+ <td width="78%" class="vtable">
+ <input name="ipaddress" type="text" class="formfld" id="ipaddress" size="40" value="<?=htmlspecialchars($pconfig['ipaddress']);?>">
+ <br />
+ Required. Make sure the IP and Port combination does not conflict with the local system. example: 192.168.0.1
</td>
- </tr>
+ </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 width="22%" valign="top" class="vncell">Port</td>
+ <td width="78%" class="vtable">
+ <input name="port" type="text" class="formfld" id="port" size="40" value="<?=htmlspecialchars($pconfig['port']);?>">
+ <br />
+ Make sure the IP and Port combination does not conflict with the local system. default: 8001
+ </td>
+ </tr>
+
+ <tr>
+ <td width="22%" valign="top" class="vncell">Directory</td>
+ <td width="78%" class="vtable">
+ <input name="directory" type="text" class="formfld" id="directory" size="40" value="<?=htmlspecialchars($pconfig['directory']);?>">
+ <br />
+ This vHosts directory is located in /usr/local/vhosts. The default directory is the host name.
+ <br />
+ example: vhost01.local
</td>
- </tr>
+ </tr>
+<!--
+ <tr>
+ <td width="22%" valign="top" class="vncell">Certificate</td>
+ <td width="78%" class="vtable">
+ <textarea name="certificate" cols="65" rows="7" id="certificate" class="formpre"><?=htmlspecialchars($pconfig['certificate']);?></textarea>
+ <br />
+ Paste a signed certificate in X.509 PEM format here. <a href="javascript:if(openwindow('/packages/vhosts/system_advanced_create_certs.php') == false) alert('Popup blocker detected. Action aborted.');" >Create</a> certificates automatically.
+ </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>
+ <td width="22%" valign="top" class="vncell">Key</td>
+ <td width="78%" class="vtable">
+ <textarea name="privatekey" cols="65" rows="7" id="privatekey" class="formpre"><?=htmlspecialchars($pconfig['privatekey']);?></textarea>
+ <br />
+ Paste an RSA private key in PEM format here.
+ </td>
+ </tr>
+-->
<tr>
- <td width="22%" valign="top" class="vncellreq">Enabled</td>
- <td width="78%" class="vtable">
+ <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";
@@ -191,37 +245,37 @@ function show_advanced_config() {
}
echo " </select>\n";
?>
- </td>
+ </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>
+ <td width="25%" valign="top" class="vncell">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>
+ <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>
+ <br>
+ <br>
+ <br>
+ <br>
+ <br>
+ <br>
- </td>
- </tr>
+</td>
+</tr>
</table>
</div>
diff --git a/pkg_config.7.xml b/pkg_config.7.xml
index 3ac0c1c4..ee2b1f92 100755
--- a/pkg_config.7.xml
+++ b/pkg_config.7.xml
@@ -292,13 +292,13 @@
<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>
+ <descr>It is a web server package that can host HTML, Javascript, CSS, and PHP. It uses the lighttpd web server that is already installed. It uses PHP5 in FastCGI mode and has access to PHP Data Ojbects 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>
+ <version>0.2</version>
+ <status>Beta</status>
<required_version>1.2.3</required_version>
<maintainer>markjcrane@gmail.com</maintainer>
<configurationfile>vhosts.xml</configurationfile>