aboutsummaryrefslogtreecommitdiffstats
path: root/config/imspector-dev
diff options
context:
space:
mode:
authorMarcello Coutinho <marcellocoutinho@gmail.com>2012-05-08 22:13:03 -0300
committermarcelloc <marcellocoutinho@gmail.com>2012-05-08 22:13:03 -0300
commitfeace6be7c9c35a65ecaa482a430a22f7a26ed13 (patch)
tree91b999f1096358729380fd20ed75be89f92d9fb4 /config/imspector-dev
parentc8234d0da2cab0931124694f285a7a7a0e056e0e (diff)
downloadpfsense-packages-feace6be7c9c35a65ecaa482a430a22f7a26ed13.tar.gz
pfsense-packages-feace6be7c9c35a65ecaa482a430a22f7a26ed13.tar.bz2
pfsense-packages-feace6be7c9c35a65ecaa482a430a22f7a26ed13.zip
imspector-dev - new binaries for msn2011 support and new gui options
Diffstat (limited to 'config/imspector-dev')
-rw-r--r--config/imspector-dev/imspector.inc409
-rw-r--r--config/imspector-dev/imspector.xml219
-rw-r--r--config/imspector-dev/imspector_acls.xml161
-rw-r--r--config/imspector-dev/imspector_replacements.xml194
-rw-r--r--config/imspector-dev/imspector_sync.xml105
-rw-r--r--config/imspector-dev/services_imspector_logs.php298
6 files changed, 1386 insertions, 0 deletions
diff --git a/config/imspector-dev/imspector.inc b/config/imspector-dev/imspector.inc
new file mode 100644
index 00000000..254d7e49
--- /dev/null
+++ b/config/imspector-dev/imspector.inc
@@ -0,0 +1,409 @@
+<?php
+/*
+ imspector.inc
+ part of pfSense (http://www.pfsense.com/)
+ Copyright (C) 2012 Marcello Coutinho.
+ Copyright (C) 2011 Scott Ullrich <sullrich@gmail.com>.
+ Copyright (C) 2011 Bill Marquette <billm@gmail.com>.
+ Copyright (C) 2007 Ryan Wagoner <rswagoner@gmail.com>.
+ 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_once("config.inc");
+ require_once("functions.inc");
+
+ /* IMSpector */
+
+ define('IMSPECTOR_RCFILE', '/usr/local/etc/rc.d/imspector.sh');
+ define('IMSPECTOR_ETC', '/usr/local/etc/imspector');
+ define('IMSPECTOR_CONFIG', IMSPECTOR_ETC . '/imspector.conf');
+
+ function imspector_notice ($msg) { syslog(LOG_NOTICE, "imspector: {$msg}"); }
+ function imspector_warn ($msg) { syslog(LOG_WARNING, "imspector: {$msg}"); }
+
+ function ims_text_area_decode($text){
+ return preg_replace('/\r\n/', "\n",base64_decode($text));
+ }
+
+ function imspector_action ($action) {
+ if (file_exists(IMSPECTOR_RCFILE))
+ mwexec(IMSPECTOR_RCFILE.' '.$action);
+ }
+
+ function imspector_running () {
+ if((int)exec('pgrep imspector | wc -l') > 0)
+ return true;
+ return false;
+ }
+
+ function write_imspector_config($file, $text) {
+ $conf = fopen($file, 'w');
+ if(!$conf) {
+ imspector_warn("Could not open {$file} for writing.");
+ exit;
+ }
+ fwrite($conf, $text);
+ fclose($conf);
+ }
+
+ function imspector_pf_rdr($iface, $port) {
+ return "rdr pass on {$iface} inet proto tcp from any to any port = {$port} -> 127.0.0.1 port 16667\n";
+ }
+
+ function imspector_pf_rule($iface, $port) {
+ return "pass in quick on {$iface} inet proto tcp from any to any port {$port} keep state\n";
+ }
+
+ function imspector_proto_to_port ($proto)
+ {
+ switch ($proto) {
+ case 'gadu-gadu':
+ return 8074;
+ case 'jabber':
+ return 5222;
+ case 'jabber-ssl':
+ return 5223;
+ case 'msn':
+ return 1863;
+ case 'icq':
+ return 5190;
+ case 'yahoo':
+ return 5050;
+ case 'irc':
+ return 6667;
+ default:
+ return null;
+ }
+ }
+
+ function validate_form_imspector($post, $input_errors) {
+ if($post['iface_array'])
+ foreach($post['iface_array'] as $iface)
+ if($iface == 'wanx')
+ $input_errors[] = 'It is a security risk to specify WAN in the \'Interface\' field';
+ }
+
+ function deinstall_package_imspector() {
+ imspector_action('stop');
+
+ @unlink(IMSPECTOR_RCFILE);
+ @unlink(IMSPECTOR_CONFIG);
+ @unlink(IMSPECTOR_ETC . '/badwords_custom.txt');
+ @unlink(IMSPECTOR_ETC . '/acl_blacklist.txt');
+ @unlink(IMSPECTOR_ETC . '/acl_whitelist.txt');
+
+ //exec('pkg_delete imspector-0.4');
+ }
+
+ function imspector_generate_rules($type) {
+
+ $rules = "";
+ switch ($type) {
+ case 'rdr':
+ case 'nat':
+ $rules = "# IMSpector rdr anchor\n";
+ $rules .= "rdr-anchor \"imspector\"\n";
+ break;
+ case 'rule':
+ $rules = "# IMSpector \n";
+ $rules .= "anchor \"miniupnpd\"\n";
+ break;
+ }
+
+ return $rules;
+ }
+
+ function sync_package_imspector() {
+ global $config;
+ global $input_errors;
+
+ /*detect boot process*/
+ if (is_array($_POST)){
+ if (preg_match("/\w+/",$_POST['__csrf_magic']))
+ unset($boot_process);
+ else
+ $boot_process="on";
+ }
+
+ if (is_process_running('imspector') && isset($boot_process))
+ return;
+
+ /*continue sync process*/
+ config_lock();
+
+ if (is_array($config['installedpackages']['imspector']))
+ $ims_config = $config['installedpackages']['imspector']['config'][0];
+
+ if (is_array($config['installedpackages']['imspectorreplacements']))
+ $ims_replacements = $config['installedpackages']['imspectorreplacements']['config'][0];
+
+ if (is_array($config['installedpackages']['imspectoracls']))
+ $ims_acls = $config['installedpackages']['imspectoracls']['config'];
+
+ /* remove existing rules */
+ exec('/sbin/pfctl -a imspector -Fr');
+ exec('/sbin/pfctl -a imspector -Fn');
+
+ $ifaces_active = '';
+
+ if($ims_config['enable'] && $ims_config['proto_array'])
+ $proto_array = explode(',', $ims_config['proto_array']);
+
+ if($ims_config['enable'] && $ims_config['iface_array'])
+ $iface_array = explode(',', $ims_config['iface_array']);
+
+ if($iface_array && $proto_array) {
+ foreach($iface_array as $iface) {
+ $if = convert_friendly_interface_to_real_interface_name($iface);
+ /* above function returns iface if fail */
+ if($if!=$iface) {
+ $addr = find_interface_ip($if);
+ /* non enabled interfaces are displayed in list on imspector settings page */
+ /* check that the interface has an ip address before adding parameters */
+ if($addr) {
+ foreach($proto_array as $proto) {
+ if(imspector_proto_to_port($proto)) {
+ /* we can use rdr pass to auto create the filter rule */
+ $pf_rules .= imspector_pf_rdr($if,imspector_proto_to_port($proto));
+ }
+ }
+ if(!$ifaces_active)
+ $ifaces_active = "{$iface}";
+ else
+ $ifaces_active .= ", {$iface}";
+ } else {
+ imspector_warn("Interface {$iface} has no ip address, ignoring");
+ }
+ } else {
+ imspector_warn("Could not resolve real interface for {$iface}");
+ }
+ }
+
+ if($pf_rules) {
+ exec("echo \"{$pf_rules}\" | /sbin/pfctl -a imspector -f -");
+
+ conf_mount_rw();
+
+ /* generate configuration files */
+
+ $conf['plugin_dir'] = '/usr/local/lib/imspector';
+
+ foreach($proto_array as $proto)
+ $conf[$proto . '_protocol'] = 'on';
+
+ if($ims_config['log_file']) {
+ @mkdir('/var/imspector');
+ $conf['file_logging_dir'] = '/var/imspector';
+ }
+
+ if($ims_config['log_mysql']) {
+ $conf['mysql_server'] = $ims_config['mysql_server'];
+ $conf['mysql_database'] = $ims_config['mysql_database'];
+ $conf['mysql_username'] = $ims_config['mysql_username'];
+ $conf['mysql_password'] = $ims_config['mysql_password'];
+ }
+
+ if($ims_replacements['filter_badwords']) {
+ if(!empty($ims_replacements["badwords_list"])) {
+ $conf['badwords_filename'] = IMSPECTOR_ETC . '/badwords_custom.txt';
+ write_imspector_config(IMSPECTOR_ETC . '/badwords_custom.txt', ims_text_area_decode($ims_config["badwords_list"]));
+ } else
+ $conf['badwords_filename'] = IMSPECTOR_ETC . '/badwords.txt';
+ }
+
+ if($ims_replacements['block_files'])
+ $conf['block_files'] = 'on';
+
+ if($ims_replacements['block_webcams'])
+ $conf['block_webcams'] = 'on';
+
+ if($ims_replacements['block_unlisted'])
+ $conf['block_unlisted'] = 'on';
+
+ $acls="";
+ $conf['acl_filename'] = IMSPECTOR_ETC . '/acls.txt';
+ foreach ($ims_acls as $rule){
+ if ($rule['enable']){
+ $acls.= "{$rule['action']} {$rule['localid']} ".preg_replace("/\s+/"," ",base64_decode($rule['remoteid']))."\n";
+ }
+ }
+ write_imspector_config(IMSPECTOR_ETC . '/acls.txt', $acls);
+
+ // Handle Jabber SSL options
+ if(isset($ims_config["ssl_ca_cert"]) && $ims_config["ssl_ca_cert"] != "none" &&
+ isset($ims_config["ssl_server_cert"]) && $ims_config["ssl_server_cert"] != "none") {
+ $conf['ssl'] = "on";
+ if(!is_dir(IMSPECTOR_ETC . "/ssl"))
+ mkdir(IMSPECTOR_ETC . "/ssl");
+
+ $ca_cert = lookup_ca($ims_config["ssl_ca_cert"]);
+ if ($ca_cert != false) {
+ if(base64_decode($ca_cert['prv'])) {
+ file_put_contents(IMSPECTOR_ETC . "/ssl/ssl_ca_key.pem", base64_decode($ca_cert['prv']));
+ $conf['ssl_ca_key'] = IMSPECTOR_ETC . '/ssl/ssl_ca_key.pem';
+ }
+ if(base64_decode($ca_cert['crt'])) {
+ file_put_contents(IMSPECTOR_ETC . "/ssl/ssl_ca_cert.pem", base64_decode($ca_cert['crt']));
+ $conf['ssl_ca_cert'] = IMSPECTOR_ETC . "/ssl/ssl_ca_cert.pem";
+ }
+ $svr_cert = lookup_cert($ims_config["ssl_server_cert"]);
+ if ($svr_cert != false) {
+ if(base64_decode($svr_cert['prv'])) {
+ file_put_contents(IMSPECTOR_ETC . "/ssl/ssl_server_key.pem", base64_decode($svr_cert['prv']));
+ $conf['ssl_key'] = IMSPECTOR_ETC . '/ssl/ssl_server_key.pem';
+ }
+
+ }
+ $conf['ssl_cert_dir'] = IMSPECTOR_ETC . '/ssl';
+ }
+ } else {
+ // SSL Not enabled. Make sure Jabber-SSL is not processed.
+ unset($conf['jabber-ssl']);
+ unset($conf['ssl']);
+ }
+
+ if (isset($ims_replacements['responder']) && $ims_replacements['responder'] == 'on') {
+ $conf['responder_filename'] = IMSPECTOR_ETC . "/responder.db";
+ if (isset($ims_replacements['prefix_message']) && $ims_replacements['prefix_message'] != '' ) {
+ $conf['response_prefix'] = "-={$ims_replacements['prefix_message']}=-";
+ }
+ else{
+ $conf['response_prefix'] = "-=Your activities are being logged=-";
+ }
+ if (isset($ims_replacements['notice_days']) && is_numeric($ims_replacements['notice_days'])) {
+ if ($ims_replacements['notice_days'] != 0) {
+ $conf['notice_days'] = $matches[1];
+ }
+ } else {
+ $conf['notice_days'] = 1;
+ }
+
+ /*Custom recorded message response*/
+ if(isset($ims_replacements['recorded_message']) && $ims_replacements['recorded_message'] != '' ){
+ $conf['recorded_message'] = ims_text_area_decode($ims_replacements['recorded_message']);
+ }
+ else{
+ $conf['notice_response'] = "Your activities are being logged";
+ }
+
+ /*Filtered Frequency*/
+ if (isset($ims_replacements['filtered_minutes']) && is_numeric($ims_replacements['filtered_minutes'])) {
+ if ($ims_replacements['filtered_minutes'] != 0) {
+ $conf['filtered_mins'] = $ims_replacements['filtered_minutes'];
+ }
+ } else {
+ $conf['filtered_mins'] = 15;
+ }
+
+ /*Custom filtered message response*/
+ if(isset($ims_replacements['filtered_message']) && $ims_replacements['filtered_message'] != '' ){
+ $conf['filtered_response'] = ims_text_area_decode($ims_replacements['filtered_message']);
+ }
+ else{
+ $conf['filtered_response'] = "Your message has been filtered";
+ }
+ }
+
+ $conftext = '';
+ foreach($conf as $var => $key)
+ $conftext .= "{$var}={$key}\n";
+ write_imspector_config(IMSPECTOR_CONFIG, $conftext);
+
+ /* generate rc file start and stop */
+ $stop = <<<EOD
+/bin/pkill -x imspector
+
+EOD;
+ $start = $stop."\n\tldconfig -m /usr/local/lib/mysql\n";
+ $start .= "\t/usr/local/sbin/imspector -c \"".IMSPECTOR_CONFIG."\"";
+
+ write_rcfile(array(
+ 'file' => 'imspector.sh',
+ 'start' => $start,
+ 'stop' => $stop
+ )
+ );
+
+ conf_mount_ro();
+
+ /* if imspector not running start it */
+ if(!imspector_running()) {
+ imspector_notice("Starting service on interface: {$ifaces_active}");
+ imspector_action('start');
+ }
+ /* or restart imspector if settings were changed */
+ elseif($_POST['iface_array']) {
+ imspector_notice("Restarting service on interface: {$ifaces_active}");
+ imspector_action('restart');
+ }
+ }
+ }
+
+ if(!$iface_array || !$proto_array || !$pf_rules) {
+ /* no parameters user does not want imspector running */
+ /* lets stop the service and remove the rc file */
+
+ if(file_exists(IMSPECTOR_RCFILE)) {
+ if(!$ims_config['enable'])
+ imspector_notice('Stopping service: imspector disabled');
+ else
+ imspector_notice('Stopping service: no interfaces and/or protocols selected');
+
+ imspector_action('stop');
+
+ conf_mount_rw();
+ unlink(IMSPECTOR_RCFILE);
+ unlink(IMSPECTOR_CONFIG);
+ @unlink(IMSPECTOR_ETC . '/badwords_custom.txt');
+ @unlink(IMSPECTOR_ETC . '/acl_blacklist.txt');
+ @unlink(IMSPECTOR_ETC . '/acl_whitelist.txt');
+ conf_mount_ro();
+ }
+ }
+
+ config_unlock();
+ }
+
+ function imspector_get_ca_certs() {
+ global $config;
+
+ $ca_arr = array();
+ $ca_arr[] = array('refid' => 'none', 'descr' => 'none');
+ foreach ($config['ca'] as $ca) {
+ $ca_arr[] = array('refid' => $ca['refid'], 'descr' => $ca['descr']);
+ }
+ return $ca_arr;
+ }
+
+ function imspector_get_server_certs() {
+ global $config;
+ $cert_arr = array();
+ $cert_arr[] = array('refid' => 'none', 'descr' => 'none');
+
+ foreach ($config['cert'] as $cert) {
+ $cert_arr[] = array('refid' => $cert['refid'], 'descr' => $cert['descr']);
+ }
+ return $cert_arr;
+ }
+?> \ No newline at end of file
diff --git a/config/imspector-dev/imspector.xml b/config/imspector-dev/imspector.xml
new file mode 100644
index 00000000..7e62ee8e
--- /dev/null
+++ b/config/imspector-dev/imspector.xml
@@ -0,0 +1,219 @@
+<?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[
+/* ========================================================================== */
+/*
+ imspector.xml
+ part of pfSense (http://www.pfSense.com)
+ Copyright (C) 2011 Scott Ullrich <sullrich@gmail.com>
+ Copyright (C) 2011 Bill Marquette <billm@gmail.com>
+ Copyright (C) 2007 Ryan Wagoner <rswagoner@gmail.com>
+ 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>Describe your package here</description>
+ <requirements>Describe your package requirements here</requirements>
+ <faq>Currently there are no FAQ items provided.</faq>
+ <name>imspector</name>
+ <version>20111108</version>
+ <title>Services: IMSpector</title>
+ <savetext>Save</savetext>
+ <aftersaveredirect>/services_imspector_logs.php</aftersaveredirect>
+ <include_file>/usr/local/pkg/imspector.inc</include_file>
+ <menu>
+ <name>IMSpector</name>
+ <tooltiptext>Set IMSpector settings such as protocols to listen on.</tooltiptext>
+ <section>Services</section>
+ <url>/services_imspector_logs.php</url>
+ </menu>
+ <service>
+ <name>imspector</name>
+ <rcfile>imspector.sh</rcfile>
+ <executable>imspector</executable>
+ </service>
+ <tabs>
+ <tab>
+ <text>Settings</text>
+ <url>/pkg_edit.php?xml=imspector.xml&amp;id=0</url>
+ <active/>
+ </tab>
+ <tab>
+ <text>Replacements</text>
+ <url>/pkg_edit.php?xml=imspector_replacements.xml&amp;id=0</url>
+ </tab>
+ <tab>
+ <text>Access Lists</text>
+ <url>/pkg.php?xml=imspector_acls.xml</url>
+ </tab>
+ <tab>
+ <text>Log</text>
+ <url>/services_imspector_logs.php</url>
+ </tab>
+ <tab>
+ <text>Sync</text>
+ <url>/pkg_edit.php?xml=imspector_sync.xml</url>
+ </tab>
+ </tabs>
+ <additional_files_needed>
+ <prefix>/usr/local/pkg/</prefix>
+ <chmod>0755</chmod>
+ <item>http://www.pfsense.org/packages/config/imspector-dev/imspector_sync.xml</item>
+ </additional_files_needed>
+ <additional_files_needed>
+ <prefix>/usr/local/pkg/</prefix>
+ <chmod>0755</chmod>
+ <item>http://www.pfsense.org/packages/config/imspector-dev/imspector_replacements.xml</item>
+ </additional_files_needed>
+ <additional_files_needed>
+ <prefix>/usr/local/pkg/</prefix>
+ <chmod>0755</chmod>
+ <item>http://www.pfsense.org/packages/config/imspector-dev/imspector_acls.xml</item>
+ </additional_files_needed>
+ <additional_files_needed>
+ <prefix>/usr/local/pkg/</prefix>
+ <chmod>0755</chmod>
+ <item>http://www.pfsense.org/packages/config/imspector-dev/imspector.inc</item>
+ </additional_files_needed>
+ <additional_files_needed>
+ <prefix>/usr/local/www/</prefix>
+ <chmod>0755</chmod>
+ <item>http://www.pfsense.org/packages/config/imspector-dev/services_imspector_logs.php</item>
+ </additional_files_needed>
+ <fields>
+ <field>
+ <name>General Settings</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <fielddescr>Enable IMSpector</fielddescr>
+ <fieldname>enable</fieldname>
+ <type>checkbox</type>
+ </field>
+ <field>
+ <fielddescr>Interfaces</fielddescr>
+ <fieldname>iface_array</fieldname>
+ <description><![CDATA[<strong>Generally select internal interface(s) like LAN</strong><br>
+ You can use the CTRL or COMMAND key to select multiple interfaces.]]></description>
+ <type>interfaces_selection</type>
+ <size>3</size>
+ <required/>
+ <value>lan</value>
+ <multiple>true</multiple>
+ </field>
+ <field>
+ <fielddescr>Listen on protocols</fielddescr>
+ <fieldname>proto_array</fieldname>
+ <description><![CDATA[<strong>NOTE: Gtalk/Jabber-SSL requires SSL certificates.</strong><br>
+ You can use the CTRL or COMMAND key to select multiple protocols.]]></description>
+ <type>select</type>
+ <size>7</size>
+ <required/>
+ <multiple>true</multiple>
+ <options>
+ <option><name>MSN</name><value>msn</value></option>
+ <option><name>ICQ/AIM</name><value>icq</value></option>
+ <option><name>Yahoo</name><value>yahoo</value></option>
+ <option><name>IRC</name><value>irc</value></option>
+ <option><name>Jabber</name><value>jabber</value></option>
+ <option><name>Gtalk/Jabber-SSL</name><value>jabber-ssl</value></option>
+ <option><name>Gadu-Gadu</name><value>gadu-gadu</value></option>
+ </options>
+ </field>
+ <field>
+ <fielddescr>SSL CA Certificate</fielddescr>
+ <fieldname>ssl_ca_cert</fieldname>
+ <description>
+ Choose the SSL CA Certficate here.
+ </description>
+ <type>select_source</type>
+ <source><![CDATA[imspector_get_ca_certs()]]></source>
+ <source_name>descr</source_name>
+ <source_value>refid</source_value>
+ </field>
+ <field>
+ <fielddescr>SSL Certificate</fielddescr>
+ <fieldname>ssl_server_cert</fieldname>
+ <description>
+ Choose the SSL Server Certificate here.
+ </description>
+ <type>select_source</type>
+ <source><![CDATA[imspector_get_server_certs()]]></source>
+ <source_name>descr</source_name>
+ <source_value>refid</source_value>
+ </field>
+ <field>
+ <name>Logging</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <fielddescr>Enable file logging</fielddescr>
+ <fieldname>log_file</fieldname>
+ <description>Log files stored in /var/imspector.</description>
+ <type>checkbox</type>
+ </field>
+ <field>
+ <fielddescr>Enable mySQL logging</fielddescr>
+ <fieldname>log_mysql</fieldname>
+ <description>Make sure to specify your MySQL credentials below.</description>
+ <type>checkbox</type>
+ </field>
+ <field>
+ <fielddescr>mySQL server</fielddescr>
+ <fieldname>mysql_server</fieldname>
+ <type>input</type>
+ </field>
+ <field>
+ <fielddescr>mySQL database</fielddescr>
+ <fieldname>mysql_database</fieldname>
+ <type>input</type>
+ </field>
+ <field>
+ <fielddescr>mySQL username</fielddescr>
+ <fieldname>mysql_username</fieldname>
+ <type>input</type>
+ </field>
+ <field>
+ <fielddescr>mySQL password</fielddescr>
+ <fieldname>mysql_password</fieldname>
+ <type>password</type>
+ </field>
+ </fields>
+ <custom_php_validation_command>
+ validate_form_imspector($_POST, &amp;$input_errors);
+ </custom_php_validation_command>
+ <custom_php_resync_config_command>
+ sync_package_imspector();
+ </custom_php_resync_config_command>
+ <custom_php_deinstall_command>
+ deinstall_package_imspector();
+ </custom_php_deinstall_command>
+ <filter_rules_needed>imspector_generate_rules</filter_rules_needed>
+</packagegui> \ No newline at end of file
diff --git a/config/imspector-dev/imspector_acls.xml b/config/imspector-dev/imspector_acls.xml
new file mode 100644
index 00000000..02d57052
--- /dev/null
+++ b/config/imspector-dev/imspector_acls.xml
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<packagegui>
+<copyright>
+ <![CDATA[
+/* $Id$ */
+/* ========================================================================== */
+/*
+ imspector_acls.xml
+ part of pfSense (http://www.pfSense.com)
+ Copyright (C) 2012 Marcello Coutinho
+ 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>
+
+ <name>imspectoracls</name>
+ <version>20111108</version>
+ <title>Imspector acls</title>
+ <description>Imspectors Access Lists</description>
+ <savetext>Save</savetext>
+ <include_file>/usr/local/pkg/imspector.inc</include_file>
+
+ <menu>
+ <name>SSH Conditions</name>
+ <tooltiptext>Configure SSH conditional exceptions</tooltiptext>
+ <section>Services</section>
+ <url>/pkg.php?xml=sshdcond.xml</url>
+ </menu>
+ <configpath>installedpackages->package->sshdcond</configpath>
+
+ <additional_files_needed>
+ <prefix>/usr/local/pkg/</prefix>
+ <chmod>755</chmod>
+ <item>http://www.pfsense.com/packages/config/sshdcond/sshdcond.inc</item>
+ </additional_files_needed>
+ <additional_files_needed>
+ <prefix>/usr/local/pkg/</prefix>
+ <chmod>755</chmod>
+ <item>http://www.pfsense.com/packages/config/sshdcond/sshdcond_sync.xml</item>
+ </additional_files_needed>
+ <tabs>
+ <tab>
+ <text>Settings</text>
+ <url>/pkg_edit.php?xml=imspector.xml&amp;id=0</url>
+ </tab>
+ <tab>
+ <text>Replacements</text>
+ <url>/pkg_edit.php?xml=imspector_replacements.xml&amp;id=0</url>
+ </tab>
+ <tab>
+ <text>Access Lists</text>
+ <url>/pkg.php?xml=imspector_acls.xml</url>
+ <active/>
+ </tab>
+ <tab>
+ <text>Log</text>
+ <url>/services_imspector_logs.php</url>
+ </tab>
+ <tab>
+ <text>Sync</text>
+ <url>/pkg_edit.php?xml=imspector_sync.xml&amp;id=0</url>
+ </tab>
+ </tabs>
+ <adddeleteeditpagefields>
+ <columnitem>
+ <fielddescr>Status</fielddescr>
+ <fieldname>enable</fieldname>
+ </columnitem>
+ <columnitem>
+ <fielddescr>action</fielddescr>
+ <fieldname>action</fieldname>
+ </columnitem>
+ <columnitem>
+ <fielddescr>local ID</fielddescr>
+ <fieldname>localid</fieldname>
+ </columnitem>
+ </adddeleteeditpagefields>
+ <fields>
+ <field>
+ <type>listtopic</type>
+ <name>Imspector Access Lists</name>
+ <fieldname>temp</fieldname>
+ </field>
+ <field>
+ <fielddescr>Enable</fielddescr>
+ <fieldname>enable</fieldname>
+ <type>checkbox</type>
+ <description><![CDATA[Enable this access list.<br>
+ Rules are processed in order, from top to bottom.]]></description>
+ </field>
+ <field>
+ <fielddescr>Action</fielddescr>
+ <fieldname>action</fieldname>
+ <description>Select action to take on this rule</description>
+ <type>select</type>
+ <options>
+ <option><name>allow</name><value>allow</value></option>
+ <option><name>deny</name><value>deny</value></option>
+ </options>
+ <required/>
+ </field>
+ <field>
+ <fielddescr>Local ID</fielddescr>
+ <fieldname>localid</fieldname>
+ <description><![CDATA[Specify local id for this rule<br>
+ Local IDs can either be complete, such as <strong>user@company.com</strong>, partial like <strong>company.com</strong> or <strong>all</strong> to match any id.]]></description>
+ <type>input</type>
+ <size>50</size>
+ <required/>
+ </field>
+ <field>
+ <fielddescr>Remote ID</fielddescr>
+ <fieldname>remoteid</fieldname>
+ <description><![CDATA[Specify the list of remote ids(one per line) that localid can chat with.<br>
+ Remote IDs can be complete ids like <strong>user@company.com</strong>, partial <strong>company.com</strong>, <strong>all</strong> to match any id or <strong>groupchat</strong>.]]></description>
+ <type>textarea</type>
+ <rows>10</rows>
+ <cols>60</cols>
+ <encoding>base64</encoding>
+ </field>
+ </fields>
+
+ <custom_php_validation_command>
+ validate_form_imspector($_POST, &amp;$input_errors);
+ </custom_php_validation_command>
+ <custom_php_resync_config_command>
+ sync_package_imspector();
+ </custom_php_resync_config_command>
+ <custom_php_deinstall_command>
+ deinstall_package_imspector();
+ </custom_php_deinstall_command>
+ <filter_rules_needed>imspector_generate_rules</filter_rules_needed>
+</packagegui> \ No newline at end of file
diff --git a/config/imspector-dev/imspector_replacements.xml b/config/imspector-dev/imspector_replacements.xml
new file mode 100644
index 00000000..6e9cf8c7
--- /dev/null
+++ b/config/imspector-dev/imspector_replacements.xml
@@ -0,0 +1,194 @@
+<?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[
+/* ========================================================================== */
+/*
+ imspector.xml
+ part of pfSense (http://www.pfSense.com)
+ Copyright (C) 2011 Scott Ullrich <sullrich@gmail.com>
+ Copyright (C) 2011 Bill Marquette <billm@gmail.com>
+ Copyright (C) 2007 Ryan Wagoner <rswagoner@gmail.com>
+ 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>Describe your package here</description>
+ <requirements>Describe your package requirements here</requirements>
+ <faq>Currently there are no FAQ items provided.</faq>
+ <name>imspectorreplacements</name>
+ <version>20111108</version>
+ <title>Services: IMSpector</title>
+ <savetext>Save</savetext>
+ <aftersaveredirect>/services_imspector_logs.php</aftersaveredirect>
+ <include_file>/usr/local/pkg/imspector.inc</include_file>
+ <menu>
+ <name>IMSpector</name>
+ <tooltiptext>Set IMSpector settings such as protocols to listen on.</tooltiptext>
+ <section>Services</section>
+ <url>/services_imspector_logs.php</url>
+ </menu>
+ <service>
+ <name>imspector</name>
+ <rcfile>imspector.sh</rcfile>
+ <executable>imspector</executable>
+ </service>
+ <tabs>
+ <tab>
+ <text>Settings</text>
+ <url>/pkg_edit.php?xml=imspector.xml&amp;id=0</url>
+ </tab>
+ <tab>
+ <text>Replacements</text>
+ <url>/pkg_edit.php?xml=imspector_replacements.xml&amp;id=0</url>
+ <active/>
+ </tab>
+ <tab>
+ <text>Access Lists</text>
+ <url>/pkg.php?xml=imspector_acls.xml</url>
+ </tab>
+ <tab>
+ <text>Log</text>
+ <url>/services_imspector_logs.php</url>
+ </tab>
+ <tab>
+ <text>Sync</text>
+ <url>/pkg_edit.php?xml=imspector_sync.xml&amp;id=0</url>
+ </tab>
+ </tabs>
+ <fields>
+ <field>
+ <name>Response messages</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <fielddescr>Enable response messages</fielddescr>
+ <fieldname>responder</fieldname>
+ <description>
+ Inform the users (both local and remote) that the conversation they are having is being recorded. This might be needed for legal reasons.
+ Inform the sender that a file (or message) was blocked. This is useful because the sender will know a block occured, instead of the transfer simply failing.</description>
+ <type>checkbox</type>
+ </field>
+ <field>
+ <fielddescr>Notification frequency</fielddescr>
+ <fieldname>notice_days</fieldname>
+ <type>input</type>
+ <size>10</size>
+ <description>Frequency in number of days for notifying users they are being logged. Default 1 day if responses are enabled, set to 0 to disable</description>
+ </field>
+ <field>
+ <fielddescr>Filtered frequency</fielddescr>
+ <fieldname>filtered_minutes</fieldname>
+ <type>input</type>
+ <size>10</size>
+ <description>The time between sending "filtered" in minutes. Default 15 minutes if responses are enabled, set to 0 to disable</description>
+ </field>
+ <field>
+ <fielddescr>Custom message prefix</fielddescr>
+ <fieldname>prefix_message</fieldname>
+ <description>
+ Message to prepend to all IMSpector generated messages. The default is "Message from IMSpector"
+ </description>
+ <type>input</type>
+ <size>60</size>
+ </field>
+ <field>
+ <fielddescr>Custom recorded message response</fielddescr>
+ <fieldname>recorded_message</fieldname>
+ <description>
+ Message to send to users to let them know they are being recorded. The default is "Your activities are being logged"
+ </description>
+ <type>textarea</type>
+ <encoding>base64</encoding>
+ <rows>5</rows>
+ <cols>60</cols>
+ </field>
+ <field>
+ <fielddescr>Custom filtered message response</fielddescr>
+ <fieldname>filtered_message</fieldname>
+ <description>
+ Message to send to users to let them know about filtered messages.
+ </description>
+ <type>textarea</type>
+ <encoding>base64</encoding>
+ <rows>5</rows>
+ <cols>60</cols>
+ </field>
+ <field>
+ <name>Restrictions</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <fielddescr>Block file transfers</fielddescr>
+ <fieldname>block_files</fieldname>
+ <description>Block file transfers on supported protocols.</description>
+ <type>checkbox</type>
+ </field>
+ <field>
+ <fielddescr>Block web cameras</fielddescr>
+ <fieldname>block_webcams</fieldname>
+ <description>This option will block all webcam sessions. Currently IMSpector can only spot webcam sessions on Yahoo.</description>
+ <type>checkbox</type>
+ </field>
+ <field>
+ <fielddescr>Block non ACL defined</fielddescr>
+ <fieldname>block_unlisted</fieldname>
+ <description>Overide the default of allowing user's not defined the whitelist or blacklist ACLs.</description>
+ <type>checkbox</type>
+ </field>
+ <field>
+ <fielddescr>Enable bad word filtering</fielddescr>
+ <fieldname>filter_badwords</fieldname>
+ <description>Replace characters of matched bad word with *.</description>
+ <type>checkbox</type>
+ </field>
+ <field>
+ <fielddescr>Bad words list</fielddescr>
+ <fieldname>badwords_list</fieldname>
+ <description>
+ Place one word or phrase to match per line.&lt;br /&gt;
+ If left blank the default list in /usr/local/etc/imspector/badwords.txt will be used.
+ </description>
+ <type>textarea</type>
+ <encoding>base64</encoding>
+ <rows>10</rows>
+ <cols>60</cols>
+ </field>
+ </fields>
+ <custom_php_validation_command>
+ validate_form_imspector($_POST, &amp;$input_errors);
+ </custom_php_validation_command>
+ <custom_php_resync_config_command>
+ sync_package_imspector();
+ </custom_php_resync_config_command>
+ <custom_php_deinstall_command>
+ deinstall_package_imspector();
+ </custom_php_deinstall_command>
+ <filter_rules_needed>imspector_generate_rules</filter_rules_needed>
+</packagegui> \ No newline at end of file
diff --git a/config/imspector-dev/imspector_sync.xml b/config/imspector-dev/imspector_sync.xml
new file mode 100644
index 00000000..5a939af7
--- /dev/null
+++ b/config/imspector-dev/imspector_sync.xml
@@ -0,0 +1,105 @@
+<?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$ */
+/* ========================================================================== */
+/*
+ imspector_sync.xml
+ part of the imspector package for pfSense
+ Copyright (C) 2012 Marcello Coutinho
+ 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>Describe your package here</description>
+ <requirements>Describe your package requirements here</requirements>
+ <faq>Currently there are no FAQ items provided.</faq>
+ <name>imspectorsync</name>
+ <version>1.0</version>
+ <title>Services: IMSpector</title>
+ <include_file>/usr/local/pkg/imspector.inc</include_file>
+<tabs>
+ <tab>
+ <text>Settings</text>
+ <url>/pkg_edit.php?xml=imspector.xml&amp;id=0</url>
+ </tab>
+ <tab>
+ <text>Replacements</text>
+ <url>/pkg_edit.php?xml=imspector_replacements.xml&amp;id=0</url>
+ </tab>
+ <tab>
+ <text>Log</text>
+ <url>/services_imspector_logs.php</url>
+ </tab>
+ <tab>
+ <text>Sync</text>
+ <url>/pkg_edit.php?xml=imspector_sync.xml&amp;id=0</url>
+ <active/>
+ </tab>
+ </tabs>
+ <fields>
+ <field>
+ <name>XMLRPC Sync</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <fielddescr>Automatically sync imspector configuration changes</fielddescr>
+ <fieldname>synconchanges</fieldname>
+ <description>Automatically sync imspector(normal and reverse) changes to the hosts defined below.</description>
+ <type>checkbox</type>
+ </field>
+ <field>
+ <fielddescr>Remote Server</fielddescr>
+ <fieldname>none</fieldname>
+ <type>rowhelper</type>
+ <rowhelper>
+ <rowhelperfield>
+ <fielddescr>IP Address</fielddescr>
+ <fieldname>ipaddress</fieldname>
+ <description>IP Address of remote server</description>
+ <type>input</type>
+ <size>20</size>
+ </rowhelperfield>
+ <rowhelperfield>
+ <fielddescr>Password</fielddescr>
+ <fieldname>password</fieldname>
+ <description>Password for remote server.</description>
+ <type>password</type>
+ <size>20</size>
+ </rowhelperfield>
+ </rowhelper>
+ </field>
+ </fields>
+ <custom_php_validation_command>
+ </custom_php_validation_command>
+ <custom_php_resync_config_command>
+ sync_package_imspector();
+ </custom_php_resync_config_command>
+</packagegui>
diff --git a/config/imspector-dev/services_imspector_logs.php b/config/imspector-dev/services_imspector_logs.php
new file mode 100644
index 00000000..b9b6cf5f
--- /dev/null
+++ b/config/imspector-dev/services_imspector_logs.php
@@ -0,0 +1,298 @@
+<?php
+/*
+ services_imspector_logs.php
+ part of pfSense (http://www.pfsense.com/)
+
+ JavaScript Code is GPL Licensed from SmoothWall Express.
+
+ Copyright (C) 2007 Ryan Wagoner <rswagoner@gmail.com>.
+ 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");
+
+/* variables */
+$log_dir = '/var/imspector';
+$imspector_config = $config['installedpackages']['imspector']['config'][0];
+
+$border_color = '#c0c0c0';
+$default_bgcolor = '#eeeeee';
+
+$list_protocol_color = '#000000';
+$list_local_color = '#000000';
+$list_remote_color = '#000000';
+$list_convo_color = '#000000';
+
+$list_protocol_bgcolor = '#cccccc';
+$list_local_bgcolor = '#dddddd';
+$list_remote_bgcolor = '#eeeeee';
+$list_end_bgcolor = '#bbbbbb';
+
+$convo_title_color = 'black';
+$convo_local_color = 'blue';
+$convo_remote_color = 'red';
+
+$convo_title_bgcolor = '#cccccc';
+$convo_local_bgcolor = '#dddddd';
+$convo_remote_bgcolor = '#eeeeee';
+
+/* functions */
+
+function convert_dir_list ($topdir) {
+ if (!is_dir($topdir)) return;
+ if ($dh = opendir($topdir)) {
+ while (($file = readdir($dh)) !== false) {
+ if(!preg_match('/^\./', $file) == 0) continue;
+ if (is_dir("$topdir/$file")) {
+ $list .= convert_dir_list("$topdir/$file");
+ } else {
+ $list .= "$topdir/$file\n";
+ }
+ }
+ closedir($dh);
+ }
+ return $list;
+}
+
+/* ajax response */
+if ($_POST['mode'] == "render") {
+
+ /* user list */
+ print(str_replace(array($log_dir,'/'),array('','|'),convert_dir_list($log_dir)));
+ print("--END--\n");
+
+ /* log files */
+ if ($_POST['section'] != "none") {
+ $section = explode('|',$_POST['section']);
+ $protocol = $section[0];
+ $localuser = $section[1];
+ $remoteuser = $section[2];
+ $conversation = $section[3];
+
+ /* conversation title */
+ print(implode(', ', $section)."\n");
+ print("--END--\n");
+
+ /* conversation content */
+ $filename = $log_dir.'/'.implode('/', $section);
+ if($fd = fopen($filename, 'r')) {
+ print("<table width='100%' border='0' cellpadding='2' cellspacing='0'>\n");
+ while (!feof($fd)) {
+ $line = fgets($fd);
+ if(feof($fd)) continue;
+ $new_format = '([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),(.*)';
+ $old_format = '([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),(.*)';
+ preg_match("/${new_format}|${old_format}/", $line, $matches);
+ $address = $matches[1];
+ $timestamp = $matches[2];
+ $direction = $matches[3];
+ $type = $matches[4];
+ $filtered = $matches[5];
+ if(count($matches) == 8) {
+ $category = $matches[6];
+ $data = $matches[7];
+ } else {
+ $category = "";
+ $data = $matches[6];
+ }
+
+ if($direction == '0') {
+ $bgcolor = $convo_remote_bgcolor;
+ $user = "&lt;<span style='color: $convo_remote_color;'>$remoteuser</span>&gt;";
+ }
+ if($direction == '1') {
+ $bgcolor = $convo_local_bgcolor;
+ $user = "&lt;<span style='color: $convo_local_color;'>$localuser</span>&gt;";
+ }
+
+ $time = strftime("%H:%M:%S", $timestamp);
+
+ print("<tr bgcolor='$bgcolor'><td style='width: 30px; vertical-align: top;'>[$time]</td>\n
+ <td style=' width: 60px; vertical-align: top;'>$user</td>\n
+ <td style=' width: 60px; vertical-align: top;'>$category</td>\n
+ <td style='vertical-align: top;'>$data</td></tr>\n");
+ }
+ print("</table>\n");
+ fclose($fd);
+ }
+ }
+ exit;
+}
+/* defaults to this page but if no settings are present, redirect to setup page */
+if(!$imspector_config["enable"] || !$imspector_config["iface_array"] || !$imspector_config["proto_array"])
+ Header("Location: /pkg_edit.php?xml=imspector.xml&id=0");
+
+$pgtitle = "Services: IMSpector Log Viewer";
+include("head.inc");
+/* put your custom HTML head content here */
+/* using some of the $pfSenseHead function calls */
+//$pfSenseHead->addMeta("<meta http-equiv=\"refresh\" content=\"120;url={$_SERVER['SCRIPT_NAME']}\" />");
+//echo $pfSenseHead->getHTML();
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<div id="mainlevel">
+<table width="100%" border="0" cellpadding="0" cellspacing="0">
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Settings "), false, "/pkg_edit.php?xml=imspector.xml&id=0");
+ $tab_array[] = array(gettext("Replacements "), false, "/pkg_edit.php?xml=imspector_replacements.xml&id=0");
+ $tab_array[] = array(gettext("Log "), true, "/services_imspector_logs.php");
+ $tab_array[] = array(gettext("Sync "), false, "/pkg_edit.php?xml=imspector_sync.xml&id=0");
+
+ display_top_tabs($tab_array);
+?>
+</table>
+
+<?php
+$zz = <<<EOD
+<script type="text/javascript">
+var section = 'none';
+var moveit = 1;
+var the_timeout;
+
+function xmlhttpPost()
+{
+ var xmlHttpReq = false;
+ var self = this;
+
+ if (window.XMLHttpRequest)
+ self.xmlHttpReq = new XMLHttpRequest();
+ else if (window.ActiveXObject)
+ self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
+
+ self.xmlHttpReq.open('POST', 'services_imspector_logs.php', true);
+ self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
+
+ self.xmlHttpReq.onreadystatechange = function() {
+ if (self.xmlHttpReq && self.xmlHttpReq.readyState == 4)
+ updatepage(self.xmlHttpReq.responseText);
+ }
+
+ document.getElementById('im_status').style.display = "inline";
+ self.xmlHttpReq.send("mode=render&section=" + section);
+}
+
+function updatepage(str)
+{
+ /* update the list of conversations ( if we need to ) */
+ var parts = str.split("--END--\\n");
+ var lines = parts[0].split("\\n");
+
+ for (var line = 0 ; line < lines.length ; line ++) {
+ var a = lines[line].split("|");
+
+ if (!a[1] || !a[2] || !a[3]) continue;
+
+ /* create titling information if needed */
+ if (!document.getElementById(a[1])) {
+ document.getElementById('im_convos').innerHTML +=
+ "<div id='" + a[1] + "_t' style='width: 100%; background-color: $list_protocol_bgcolor; color: $list_protocol_color;'>" + a[1] + "</div>" +
+ "<div id='" + a[1] + "' style='width: 100%; background-color: $list_local_bgcolor;'></div>";
+ }
+ if (!document.getElementById(a[1] + "_" + a[2])) {
+ var imageref = "";
+ if (a[0]) imageref = "<img src='" + a[0] + "' alt='" + a[1] + "'/>";
+ document.getElementById(a[1]).innerHTML +=
+ "<div id='" + a[1] + "_" + a[2] + "_t' style='width: 100%; color: $list_local_color; padding-left: 5px;'>" + imageref + a[2] + "</div>" +
+ "<div id='" + a[1] + "_" + a[2] + "' style='width: 100%; background-color: $list_remote_bgcolor; border-bottom: solid 1px $list_end_bgcolor;'></div>";
+ }
+ if (!document.getElementById(a[1] + "_" + a[2] + "_" + a[3])) {
+ document.getElementById(a[1] + "_" + a[2]).innerHTML +=
+ "<div id='" + a[1] + "_" + a[2] + "_" + a[3] + "_t' style='width: 100%; color: $list_remote_color; padding-left: 10px;'>" + a[3] + "</div>" +
+ "<div id='" + a[1] + "_" + a[2] + "_" + a[3] + "' style='width: 100%;'></div>";
+ }
+ if (!document.getElementById(a[1] + "_" + a[2] + "_" + a[3] + "_" + a[4])) {
+ document.getElementById(a[1] + "_" + a[2] + "_" + a[3]).innerHTML +=
+ "<div id='" + a[1] + "_" + a[2] + "_" + a[3] + "_" + a[4] +
+ "' style='width: 100%; color: $list_convo_color; cursor: pointer; padding-left: 15px;' onClick=" +
+ '"' + "setsection('" + a[1] + "|" + a[2] + "|" + a[3] + "|" + a[4] + "');" + '"' + "' + >&raquo;" + a[4] + "</div>";
+ }
+ }
+
+ /* determine the title of this conversation */
+ var details = parts[1].split(",");
+ var title = details[0] + " conversation between <span style='color: $convo_local_color;'>" + details[ 1 ] +
+ "</span> and <span style='color: $convo_remote_color;'>" + details[2] + "</span>";
+ if (!details[1]) title = "&nbsp;";
+ if (!parts[2]) parts[2] = "&nbsp;";
+
+ document.getElementById('im_status').style.display = "none";
+ var bottom = parseInt(document.getElementById('im_content').scrollTop);
+ var bottom2 = parseInt(document.getElementById('im_content').style.height);
+ var absheight = parseInt( bottom + bottom2 );
+ if (absheight == document.getElementById('im_content').scrollHeight) {
+ moveit = 1;
+ } else {
+ moveit = 0;
+ }
+ document.getElementById('im_content').innerHTML = parts[2];
+ if (moveit == 1) {
+ document.getElementById('im_content').scrollTop = 0;
+ document.getElementById('im_content').scrollTop = document.getElementById('im_content').scrollHeight;
+ }
+ document.getElementById('im_content_title').innerHTML = title;
+ the_timeout = setTimeout( "xmlhttpPost();", 5000 );
+}
+
+function setsection(value)
+{
+ section = value;
+ clearTimeout(the_timeout);
+ xmlhttpPost();
+ document.getElementById('im_content').scrollTop = 0;
+ document.getElementById('im_content').scrollTop = document.getElementById('im_content').scrollHeight;
+}
+</script>
+EOD;
+print($zz);
+?>
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td class="tabcont">
+ <div style='width: 100%; text-align: right;'><span id='im_status' style='display: none;'>Updating</span>&nbsp;</div>
+ <table width="100%">
+ <tr>
+ <td width="15%" bgcolor="<?=$default_bgcolor?>" style="overflow: auto; border: solid 1px <?=$border_color?>;">
+ <div id="im_convos" style="height: 400px; overflow: auto; overflow-x: hidden;"></div>
+ </td>
+ <td width="75%" bgcolor="<?=$default_bgcolor?>" style="border: solid 1px <?=$border_color?>;">
+ <div id="im_content_title" style="height: 20px; overflow: auto; vertical-align: top;
+ color: <?=$convo_title_color?>; background-color: <?=$convo_title_bgcolor?>;"></div>
+ <div id="im_content" style="height: 380px; overflow: auto; vertical-align: bottom; overflow-x: hidden;"></div>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">xmlhttpPost();</script>
+
+</div>
+<?php include("fend.inc"); ?>
+</body>
+</html>