aboutsummaryrefslogtreecommitdiffstats
path: root/packages/dspam/www
diff options
context:
space:
mode:
Diffstat (limited to 'packages/dspam/www')
-rw-r--r--packages/dspam/www/dspam-admin-graph.php201
-rw-r--r--packages/dspam/www/dspam-admin-prefs.php249
-rw-r--r--packages/dspam/www/dspam-admin-stats.php123
-rw-r--r--packages/dspam/www/dspam-admin.php207
-rw-r--r--packages/dspam/www/dspam-analysis-graph.php137
-rw-r--r--packages/dspam/www/dspam-analysis.php147
-rw-r--r--packages/dspam/www/dspam-hfragment.php90
-rw-r--r--packages/dspam/www/dspam-history.php172
-rw-r--r--packages/dspam/www/dspam-perf.php222
-rw-r--r--packages/dspam/www/dspam-prefs.php234
-rw-r--r--packages/dspam/www/dspam-quarantine.php178
-rw-r--r--packages/dspam/www/dspam-settings-algo.php204
-rw-r--r--packages/dspam/www/dspam-settings-bmta.php202
-rw-r--r--packages/dspam/www/dspam-settings-feat.php203
-rw-r--r--packages/dspam/www/dspam-settings-header.php197
-rw-r--r--packages/dspam/www/dspam-settings-overr.php197
-rw-r--r--packages/dspam/www/dspam-settings-prefs.php197
-rw-r--r--packages/dspam/www/dspam-settings-spwd.php197
-rw-r--r--packages/dspam/www/dspam-settings-tuser.php195
-rw-r--r--packages/dspam/www/dspam-settings.php2941
-rw-r--r--packages/dspam/www/dspam-train.php284
-rw-r--r--packages/dspam/www/dspam-viewmsg.php158
-rw-r--r--packages/dspam/www/dspam.php264
-rw-r--r--packages/dspam/www/p3scan_rules.php12
-rw-r--r--packages/dspam/www/themes/metallic/dspam.css115
-rw-r--r--packages/dspam/www/wizards/dspam-lda-proxy.pngbin0 -> 20556 bytes
-rw-r--r--packages/dspam/www/wizards/dspam-pop-proxy.pngbin0 -> 18247 bytes
-rw-r--r--packages/dspam/www/wizards/dspam-smtp-relay.pngbin0 -> 30404 bytes
-rw-r--r--packages/dspam/www/wizards/dspam_wizard.xml1830
29 files changed, 9156 insertions, 0 deletions
diff --git a/packages/dspam/www/dspam-admin-graph.php b/packages/dspam/www/dspam-admin-graph.php
new file mode 100644
index 00000000..508824e2
--- /dev/null
+++ b/packages/dspam/www/dspam-admin-graph.php
@@ -0,0 +1,201 @@
+<?php
+/* $Id$ */
+/*
+ dspam-admin-graph.php
+
+ Copyright (C) 2006 Daniel S. Haischt.
+ All rights reserved.
+*/
+
+/* required because of system_groupmanager.php */
+$pgtitle = array(gettext("Services"),
+ gettext("DSPAM"),
+ gettext("System Status"),
+ gettext("Graph"));
+
+require_once 'Image/Graph.php';
+require_once 'Image/Canvas.php';
+require("guiconfig.inc");
+include("/usr/local/pkg/dspam.inc");
+
+if (! $_GET ||
+ strlen($_SERVER['QUERY_STRING']) == 0 ||
+ ! isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) {
+ return;
+}
+
+$FORM =& ReadParse($_SERVER['QUERY_STRING']);
+
+list($spam, $nonspam, $sm, $fp, $inoc, $wh, $period) = split('_', $FORM['data']);
+$spam = split(',', $spam);
+$nonspam = split(',', $nonspam);
+$sm = split(',', $sm);
+$fp = split(',', $fp);
+$inoc = split(',', $inoc);
+$wh = split(',', $wh);
+$period = split(',', $period);
+
+// create a PNG canvas and enable antialiasing (canvas implementation)
+$Canvas =& Image_Canvas::factory('png', array('width' => 725,
+ 'height' => 450,
+ 'antialias' => 'native'));
+
+// create the graph
+$Graph =& Image_Graph::factory('graph', $Canvas);
+// add a TrueType font
+$Font =& $Graph->addNew('font', 'Verdana');
+// set the font size to 8 pixels
+$Font->setSize(8);
+
+$Graph->setFont($Font);
+
+// setup the plotarea, legend and their layout
+$Graph->add(
+ Image_Graph::vertical(
+ Image_Graph::factory('title', array('', 12)),
+ Image_Graph::horizontal(
+ $Plotarea = Image_Graph::factory('plotarea'),
+ $Legend = Image_Graph::factory('legend'),
+ 80
+ ),
+ 0
+ )
+);
+
+// add grids
+$Grid =& $Plotarea->addNew('line_grid', IMAGE_GRAPH_AXIS_Y);
+$Grid->setLineColor('silver');
+
+// link the legend with the plotares
+$Legend->setPlotarea($Plotarea);
+
+// create the two datasets
+$i = 0;
+$spamds =& Image_Graph::factory('dataset');
+foreach($spam as $el){
+ $spamds->addPoint(strval($period[$i]), intval($el));
+ $i++;
+}
+
+$i = 0;
+$hamds =& Image_Graph::factory('dataset');
+foreach($nonspam as $el){
+ $hamds->addPoint(strval($period[$i]), intval($el));
+ $i++;
+}
+
+$i = 0;
+$smds =& Image_Graph::factory('dataset');
+foreach($sm as $el){
+ $smds->addPoint(strval($period[$i]), intval($el));
+ $i++;
+}
+
+$i = 0;
+$fpds =& Image_Graph::factory('dataset');
+foreach($fp as $el){
+ $fpds->addPoint(strval($period[$i]), intval($el));
+ $i++;
+}
+
+$i = 0;
+$inocds =& Image_Graph::factory('dataset');
+foreach($inoc as $el){
+ $inocds->addPoint(strval($period[$i]), intval($el));
+ $i++;
+}
+
+$i = 0;
+$whds =& Image_Graph::factory('dataset');
+foreach($wh as $el){
+ $whds->addPoint(strval($period[$i]), intval($el));
+ $i++;
+}
+
+// set the name/title of each dataset
+$spamds->setName('SPAM');
+$hamds->setName('Nonspam');
+$smds->setName('Spam Misses');
+$fpds->setName('False Positives');
+$inocds->setName('Inoculations');
+$whds->setName('Auto-Whitelisted');
+
+// put each dataset in a singel ds array
+$Datasets = array($inocds, $whds, $spamds, $hamds, $smds, $fpds);
+
+// create the plot as line chart using the dataset
+$Plot =& $Plotarea->addNew('Image_Graph_Plot_Bar', array($Datasets,'stacked'));
+
+// set a fill color
+$FillArray =& Image_Graph::factory('Image_Graph_Fill_Array');
+$FillArray->addColor('#000000');
+$FillArray->addColor('#BF00BF');
+$FillArray->addColor('#BF0000');
+$FillArray->addColor('#00BF00');
+$FillArray->addColor('#BFBF00');
+$FillArray->addColor('#FF7F00');
+
+// set a standard fill style
+$Plot->setFillStyle($FillArray);
+
+/* set axis labels */
+$XAxis =& $Plotarea->getAxis(IMAGE_GRAPH_AXIS_X);
+$XAxis->setTitle("{$FORM['x_label']}", array('size' => 8, 'angle' => 0));
+$XAxis->setFontAngle(60);
+$XAxis->setLabelOptions(array('offset' => intval($FORM['offset']),
+ 'showtext' => true,
+ 'position' => 'outside'), 1);
+
+
+$YAxis =& $Plotarea->getAxis(IMAGE_GRAPH_AXIS_Y);
+$YAxis->setTitle('Number of Messages', array('size' => 8, 'angle' => 90));
+
+// create a Y data value marker
+$Marker =& $Plot->addNew('Image_Graph_Marker_Value', IMAGE_GRAPH_VALUE_Y);
+$Marker->setFontSize(6);
+
+// and use the marker on the 1st plot
+$Plot->setMarker($Marker);
+$Plot->setDataSelector(Image_Graph::factory('Image_Graph_DataSelector_NoZeros'));
+
+// output the Graph
+$Graph->done();
+
+function &ReadParse($URI = "") {
+ if ($URI == "") {
+ return NULL;
+ }
+
+ $pairs = preg_split('/&/', $URI);
+ $FORM = array();
+
+ foreach($pairs as $pair){
+ list($name, $value) = preg_split('/\=/', $pair);
+ $pattern = '/%([a-fA-F0-9][a-fA-F0-9])/';
+
+ $name = preg_replace('/\+/', ' ', $name);
+ $name = preg_replace_callback(
+ $pattern,
+ create_function(
+ '$matches',
+ 'return pack("C", hexdec($matches[1]));'
+ ),
+ $name
+ );
+
+ $value = preg_replace('/\+/', ' ', $value);
+ $value = preg_replace_callback(
+ $pattern,
+ create_function(
+ '$matches',
+ 'return pack("C", hexdec($matches[1]));'
+ ),
+ $value
+ );
+
+ $FORM[$name] = $value;
+ } // end foreach
+
+ return $FORM;
+}
+?>
diff --git a/packages/dspam/www/dspam-admin-prefs.php b/packages/dspam/www/dspam-admin-prefs.php
new file mode 100644
index 00000000..324d961f
--- /dev/null
+++ b/packages/dspam/www/dspam-admin-prefs.php
@@ -0,0 +1,249 @@
+<?php
+/* $Id$ */
+/*
+ dspam-train.php
+
+ Copyright (C) 2006 Daniel S. Haischt.
+ All rights reserved.
+*/
+
+$pgtitle = array(gettext("Services"),
+ gettext("DSPAM"),
+ gettext("Admin Preferences"));
+
+require("guiconfig.inc");
+include("/usr/local/pkg/dspam.inc");
+
+if (isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) {
+
+ /* if this is an AJAX caller then handle via JSON */
+ if(isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+ }
+
+ /* if ajax is calling, give them an update message */
+ if(isAjax())
+ print_info_box_np($savemsg);
+
+ include("head.inc");
+ /* put your custom HTML head content here */
+ /* using some of the $pfSenseHead function calls */
+ $jscriptstr = <<<EOD
+<script type="text/javascript">
+<!--
+
+EOD;
+
+ $jscriptstr .= getJScriptFunction(0);
+ $jscriptstr .= <<<EOD
+//-->
+</script>
+EOD;
+
+ $pfSenseHead->addScript($jscriptstr);
+ echo $pfSenseHead->getHTML();
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="dspam-admin-prefs.php" method="post" name="iform" id="iform">
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<p>
+ <span class="vexpl">
+ This page lets you configure how the filter will handle your messages.
+ </span>
+</p>
+<table width="100%" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array("System Status", false, "/dspam-admin.php?user={$CURRENT_USER}");
+ $tab_array[] = array("User Statistics", false, "/dspam-admin-stats.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Administration", true, "/dspam-admin-prefs.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Settings", false, "/dspam-settings.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Control Center", false, "/dspam.php?user={$CURRENT_USER}");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td align="left" valign="top" class="listhdrr" colspan="2">Statistical SPAM Protection for...</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">Username</td>
+ <td width="78%" class="vtable">
+ <?php if(isset($HTTP_SERVER_VARS['AUTH_USER'])): ?>
+ <input type="text" name="username" id="username" value="<?= $CURRENT_USER ?>" class="formfld user"<?php if (! isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) { echo " readonly=\"readonly\""; } ?> />
+ <?php else: ?>
+ <input type="text" name="username" id="username" value="Please provide a username" class="formfld user" onFocus="this.value='';" />
+ <?php endif; ?>
+ &nbsp;
+ <?php
+ if (! isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER']))
+ $action = "onClick=\"changeuser();\"";
+ else
+ $action = "onClick=\"document.iform.submit();\"";
+ ?>
+ <input type="button" name="change_user" id="change_user" class="formbtn" value="Change" <?= $action ?> />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="listtopic" colspan="2">
+ <strong>Training</strong> &ndash; Configure how the filter learns as it processes messages
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="vncell" width="40%">
+ <p>DSPAM should train:</p>
+ <input <?= $DATA["S_TEFT"]; ?> value="TEFT" type="radio" class="formfld" title="On every new message scanned by the filter" alt="On every new message scanned by the filter" name="rad_train" id="rad_train_one" />
+ <label for="rad_train_one">&nbsp;On every new message scanned by the filter (TEFT)</label>
+ <br />
+ <input <?= $DATA["S_TOE"]; ?> value="TOE" type="radio" class="formfld" title="Only when the filter makes a mistake" alt="Only when the filter makes a mistake" name="rad_train" id="rad_train_two" />
+ <label for="rad_train_two">&nbsp;Only when the filter makes a mistake (TOE)</label>
+ <br />
+ <input <?= $DATA["S_TUM"]; ?> value="TUM" type="radio" class="formfld" title=";Only with new data or if the filter makes a mistake" alt=";Only with new data or if the filter makes a mistake" name="rad_train" id="rad_train_three" />
+ <label for="rad_train_three">&nbsp;Only with new data or if the filter makes a mistake (TUM)</label>
+ </td>
+ <td align="left" valign="top" class="vncell" width="60%">
+ <p>When I train DSPAM, I prefer:</p>
+ <input value="message" <?= $DATA["S_LOC_MESSAGE"]; ?> value="message" type="radio" class="formfld" title="To forward my spams (signature appears in message body)" alt="To forward my spams (signature appears in message body)" name="rad_train_action" id="rad_train_action_one" />
+ <label for="rad_train_action_one">&nbsp;To <u>forward</u> my spams (signature appears in message body)</label>
+ <br />
+ <input <?= $DATA["S_LOC_HEADERS"]; ?> value="headers" type="radio" class="formfld" title="To bounce my spams (signature appears in message headers)" alt="To bounce my spams (signature appears in message headers)" name="rad_train_action" id="rad_train_action_two" />
+ <label value="headers" for="rad_train_action_two">&nbsp;To <u>bounce</u> my spams (signature appears in message headers)</label>
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="middle" class="vncell" colspan="2">
+ <p>
+ Filter sensitivity <strong>during</strong> the training period:
+ </p>
+ <p align="center">
+ <nobr>
+ <span>
+ Catch SPAM (More in Quarantine)&nbsp;
+ <input value="0" type="radio" class="formfld" title="-5" alt="-5" name="rad_filter_sens" <?= $DATA["SEDATION_0"]; ?> />
+ <input value="1" type="radio" class="formfld" title="-4" alt="-4" name="rad_filter_sens" <?= $DATA["SEDATION_1"]; ?> />
+ <input value="2" type="radio" class="formfld" title="-3" alt="-3" name="rad_filter_sens" <?= $DATA["SEDATION_2"]; ?> />
+ <input value="3" type="radio" class="formfld" title="-2" alt="-2" name="rad_filter_sens" <?= $DATA["SEDATION_3"]; ?> />
+ <input value="4" type="radio" class="formfld" title="-1" alt="-1" name="rad_filter_sens" <?= $DATA["SEDATION_4"]; ?> />
+ <strong style="font-size: larger;">&raquo;</strong>
+ <input value="5" type="radio" class="formfld" title="0" alt="0" name="rad_filter_sens" <?= $DATA["SEDATION_5"]; ?> />
+ <strong style="font-size: larger;">&laquo;</strong>
+ <input value="6" type="radio" class="formfld" title="1" alt="1" name="rad_filter_sens" <?= $DATA["SEDATION_6"]; ?> />
+ <input value="7" type="radio" class="formfld" title="2" alt="2" name="rad_filter_sens" <?= $DATA["SEDATION_7"]; ?> />
+ <input value="8" type="radio" class="formfld" title="3" alt="3" name="rad_filter_sens" <?= $DATA["SEDATION_8"]; ?> />
+ <input value="9" type="radio" class="formfld" title="4" alt="4" name="rad_filter_sens" <?= $DATA["SEDATION_9"]; ?> />
+ <input value="10" type="radio" class="formfld" title="5" alt="5" name="rad_filter_sens" <?= $DATA["SEDATION_10"]; ?> />
+ &nbsp;Assume Good (Fewer in Quarantine)
+ </span>
+ </nobr>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="listtopic" colspan="2">
+ <strong>Message Handling</strong> &ndash; Configure how SPAM is handled
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="vncell" colspan="2">
+ <p>When a SPAM message is identified:</p>
+ <p>
+ <input value="quarantine" <?= $DATA["S_ACTION_QUARANTINE"]; ?> type="radio" class="formfld" title="Quarantine the message" alt="Quarantine the message" name="rad_ident_action" id="rad_ident_action_one" />
+ <label for="rad_ident_action_one">&nbsp;Quarantine the message</label>
+ <br />
+ <input value="tag" <?= $DATA["S_ACTION_TAG"]; ?> type="radio" class="formfld" title="Tag the Subject header with" alt="Tag the Subject header with" name="rad_ident_action" id="rad_ident_action_two" />
+ <label for="rad_ident_action_two">Tag the Subject header with&nbsp;</label>
+ <input size="35" type="text" class="formfld mail" title="message tag" alt="message tag" value="<?= $DATA["SPAM_SUBJECT"]; ?>" name="msgtag" />
+ <br />
+ <input value="deliver" <?= $DATA["S_ACTION_DELIVER"]; ?> type="radio" class="formfld" title="Deliver the message normally with a X-DSPAM-Result header" alt="Deliver the message normally with a X-DSPAM-Result header" name="rad_ident_action" id="rad_ident_action_three" />
+ <label for="rad_ident_action_three">&nbsp;Deliver the message normally with a X-DSPAM-Result header</label>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="listtopic" colspan="2">
+ <strong>Features</strong> &ndash; Tuning SPAM filtering
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="vncell" colspan="2">
+ <p>
+ <input <?= $DATA["C_BNR"]; ?> type="checkbox" class="formbtn" title="Enable noise reduction, which usually improves filtering accuracy" alt="Enable noise reduction, which usually improves filtering accuracy" name="chk_feature_nr" id="chk_feature_nr" />
+ <label for="chk_feature_nr">&nbsp;Enable noise reduction, which usually improves filtering accuracy</label>
+ <br />
+ <input <?= $DATA["C_WHITELIST"]; ?> type="checkbox" class="formbtn" title="Enable automatic whitelisting to record frequent correspondence" alt="Enable automatic whitelisting to record frequent correspondence" name="chk_feature_aw" id="chk_feature_aw" />
+ <label for="chk_feature_aw">&nbsp;Enable automatic whitelisting to record frequent correspondence</label>
+ <br />
+ <input <?= $DATA["C_FACTORS"]; ?> type="checkbox" class="formbtn" title="Add the factoring tokens in each email into the message's full headers" alt="Add the factoring tokens in each email into the message's full headers" name="chk_feature_at" id="chk_feature_at" />
+ <label for="chk_feature_at">&nbsp;Add the factoring tokens in each email into the message's full headers</label>
+ <!--
+ <input type="checkbox" class="formbtn" title="Add the factoring tokens in each email into the message's full headers" alt="Add the factoring tokens in each email into the message's full headers" name="chk_feature_at" id="chk_feature_at" />
+ <label for="chk_feature_at">&nbsp;Add the factoring tokens in each email into the message's full headers</label>
+ <br />
+ <input type="checkbox" class="formbtn" title="opt in of DSPAM filtering" alt="opt in of DSPAM filtering" name="chk_feature_optin" id="chk_feature_optin" />
+ <label for="chk_feature_optin">&nbsp;opt in of DSPAM filtering</label>
+ <br />
+ <input type="checkbox" class="formbtn" title="opt out of DSPAM filtering" alt="opt out of DSPAM filtering" name="chk_feature_optout" id="chk_feature_optout" />
+ <label for="chk_feature_optout">&nbsp;opt out of DSPAM filtering</label>
+ -->
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td class="list">&nbsp;</td>
+ <td class="list">
+ <input id="submitt" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<?
+} else {
+?>
+<?php
+ $input_errors[] = "Access to this particular site was denied. You need DSPAM admin access rights to be able to view it.";
+
+ include("head.inc");
+ echo $pfSenseHead->getHTML();
+?>
+<?php include("fbegin.inc");?>
+<?php if ($input_errors) print_input_errors($input_errors);?>
+<?php if ($savemsg) print_info_box($savemsg);?>
+ <body link="#000000" vlink="#000000" alink="#000000">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td valign="top" class="listtopic">Access denied for: <?=$HTTP_SERVER_VARS['AUTH_USER']?></td>
+ </tr>
+ </table>
+<?php
+} // end of access denied code
+?>
+<?php include("fend.inc"); ?>
+</body>
+</html> \ No newline at end of file
diff --git a/packages/dspam/www/dspam-admin-stats.php b/packages/dspam/www/dspam-admin-stats.php
new file mode 100644
index 00000000..82b91831
--- /dev/null
+++ b/packages/dspam/www/dspam-admin-stats.php
@@ -0,0 +1,123 @@
+<?php
+/* $Id$ */
+/*
+ dspam-train.php
+
+ Copyright (C) 2006 Daniel S. Haischt.
+ All rights reserved.
+*/
+
+$pgtitle = array(gettext("Services"),
+ gettext("DSPAM"),
+ gettext("User Statistics"));
+
+require("guiconfig.inc");
+include("/usr/local/pkg/dspam.inc");
+
+if (isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) {
+
+ /* if this is an AJAX caller then handle via JSON */
+ if(isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+ }
+
+ /* if ajax is calling, give them an update message */
+ if(isAjax())
+ print_info_box_np($savemsg);
+
+ include("head.inc");
+ /* put your custom HTML head content here */
+ /* using some of the $pfSenseHead function calls */
+ echo $pfSenseHead->getHTML();
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="dspam-admin-stats.php" method="post" name="iform" id="iform">
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<p>
+ <span class="vexpl">
+ The following table shows the number of messages processed for each user
+ along with their current preference settings.
+ </span>
+</p>
+<table width="100%" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array("System Status", false, "/dspam-admin.php?user={$CURRENT_USER}");
+ $tab_array[] = array("User Statistics", true, "/dspam-admin-stats.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Administration", false, "/dspam-admin-prefs.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Settings", false, "/dspam-settings.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Control Center", false, "/dspam.php?user={$CURRENT_USER}");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td align="left" valign="top" class="listhdrr" colspan="14">Statistical SPAM Protection for...</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">Username</td>
+ <td width="78%" class="vtable" colspan="13">
+ <strong><?= $CURRENT_USER ?></strong>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="14" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="listtopic">Name</td>
+ <td align="left" valign="top" class="listtopic">Q.Size</td>
+ <td align="left" valign="top" class="listtopic">TP</td>
+ <td align="left" valign="top" class="listtopic">TN</td>
+ <td align="left" valign="top" class="listtopic">FP</td>
+ <td align="left" valign="top" class="listtopic">FN</td>
+ <td align="left" valign="top" class="listtopic">SC</td>
+ <td align="left" valign="top" class="listtopic">IC</td>
+ <td align="left" valign="top" class="listtopic">Mode</td>
+ <td align="left" valign="top" class="listtopic">On Spam</td>
+ <td align="left" valign="top" class="listtopic">BNR</td>
+ <td align="left" valign="top" class="listtopic">Whitelist</td>
+ <td align="left" valign="top" class="listtopic">Sed</td>
+ <td align="left" valign="top" class="listtopic">Sig Loc</td>
+ </tr>
+ <?= $DATA['TABLE']; ?>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<?
+} else {
+?>
+<?php
+ $input_errors[] = "Access to this particular site was denied. You need DSPAM admin access rights to be able to view it.";
+
+ include("head.inc");
+ echo $pfSenseHead->getHTML();
+?>
+<?php include("fbegin.inc");?>
+<?php if ($input_errors) print_input_errors($input_errors);?>
+<?php if ($savemsg) print_info_box($savemsg);?>
+ <body link="#000000" vlink="#000000" alink="#000000">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td valign="top" class="listtopic">Access denied for: <?=$HTTP_SERVER_VARS['AUTH_USER']?></td>
+ </tr>
+ </table>
+<?php
+} // end of access denied code
+?>
+<?php include("fend.inc"); ?>
+</body>
+</html> \ No newline at end of file
diff --git a/packages/dspam/www/dspam-admin.php b/packages/dspam/www/dspam-admin.php
new file mode 100644
index 00000000..45b33b55
--- /dev/null
+++ b/packages/dspam/www/dspam-admin.php
@@ -0,0 +1,207 @@
+<?php
+/* $Id$ */
+/*
+ dspam-train.php
+
+ Copyright (C) 2006 Daniel S. Haischt.
+ All rights reserved.
+*/
+
+$pgtitle = array(gettext("Services"),
+ gettext("DSPAM"),
+ gettext("System Status"),
+ gettext("Overview"));
+
+require("guiconfig.inc");
+include("/usr/local/pkg/dspam.inc");
+
+if (isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) {
+
+ /* if this is an AJAX caller then handle via JSON */
+ if(isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+ }
+
+ /* if ajax is calling, give them an update message */
+ if(isAjax())
+ print_info_box_np($savemsg);
+
+ include("head.inc");
+ /* put your custom HTML head content here */
+ /* using some of the $pfSenseHead function calls */
+ echo $pfSenseHead->getHTML();
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="dspam-admin.php" method="post" name="iform" id="iform">
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<p>
+ <span class="vexpl">
+ The following graphs and tables summarize the processing done by the filter.
+ </span>
+</p>
+<table width="100%" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array("System Status", true, "/dspam-admin.php?user={$CURRENT_USER}");
+ $tab_array[] = array("User Statistics", false, "/dspam-admin-stats.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Administration", false, "/dspam-admin-prefs.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Settings", false, "/dspam-settings.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Control Center", false, "/dspam.php?user={$CURRENT_USER}");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td align="left" valign="top" class="listhdrr" colspan="2">Statistical SPAM Protection for...</td>
+ </tr>
+ <tr>
+ <td width="10%" valign="baseline" class="vncell">Username</td>
+ <td width="90%" class="vtable">
+ <strong><?= $CURRENT_USER ?></strong>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" align="left" valign="top" class="listtopic">
+ <strong>Overview</strong>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" align="center" valign="top" class="vncell">
+ <table align="center" width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td align="left" valign="top" class="listhdrr">Messages</td>
+ <td align="left" valign="top" class="listhdrr">Today</td>
+ <td align="left" valign="top" class="listhdrr">This Hour</td>
+ <td align="left" valign="top" class="list">&nbsp;</td>
+ <td align="left" valign="top" class="listhdrr">Status</td>
+ <td align="left" valign="top" class="listhdrr">Current Value</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="listr">Spam</td>
+ <td align="left" valign="top" class="listr"><?= $DATA['SPAM_TODAY']; ?></td>
+ <td align="left" valign="top" class="listr"><?= $DATA['SPAM_THIS_HOUR']; ?></td>
+ <td align="left" valign="top" class="list">&nbsp;</td>
+ <td align="left" valign="top" class="listr">Average message processing time</td>
+ <td align="left" valign="top" class="listr"><?= $DATA['AVG_PROCESSING_TIME']; ?> sec.</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="listr">Good</td>
+ <td align="left" valign="top" class="listr"><?= $DATA['NONSPAM_TODAY']; ?></td>
+ <td align="left" valign="top" class="listr"><?= $DATA['NONSPAM_THIS_HOUR']; ?></td>
+ <td align="left" valign="top" class="list">&nbsp;</td>
+ <td align="left" valign="top" class="listr">Average throughput</td>
+ <td align="left" valign="top" class="listr"><?= $DATA['AVG_MSG_PER_SECOND']; ?> messages/sec.</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="listr">Spam Misses</td>
+ <td align="left" valign="top" class="listr"><?= $DATA['SM_TODAY']; ?></td>
+ <td align="left" valign="top" class="listr"><?= $DATA['SM_THIS_HOUR']; ?></td>
+ <td align="left" valign="top" class="list">&nbsp;</td>
+ <td align="left" valign="top" class="listr">DSPAM instances</td>
+ <td align="left" valign="top" class="listr"><?= $DATA['DSPAM_PROCESSES']; ?> process(es)</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="listr">False Positives</td>
+ <td align="left" valign="top" class="listr"><?= $DATA['FP_TODAY']; ?></td>
+ <td align="left" valign="top" class="listr"><?= $DATA['FP_THIS_HOUR']; ?></td>
+ <td align="left" valign="top" class="list">&nbsp;</td>
+ <td align="left" valign="top" class="listr">System uptime</td>
+ <td align="left" valign="top" class="listr"><?= $DATA['UPTIME']; ?></td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="listr">Inoculations</td>
+ <td align="left" valign="top" class="listr"><?= $DATA['INOC_TODAY']; ?></td>
+ <td align="left" valign="top" class="listr"><?= $DATA['INOC_THIS_HOUR']; ?></td>
+ <td align="left" valign="top" class="list">&nbsp;</td>
+ <td align="left" valign="top" class="listr">Mail queue length</td>
+ <td align="left" valign="top" class="listr"><?= $DATA['MAIL_QUEUE']; ?> messages</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="listbgns"><strong>Total</strong></td>
+ <td align="left" valign="top" class="listbgns"><strong><?= $DATA['TOTAL_TODAY']; ?></strong></td>
+ <td align="left" valign="top" class="listbgns"><strong><?= $DATA['TOTAL_THIS_HOUR']; ?></strong></td>
+ <td align="left" valign="top" class="list">&nbsp;</td>
+ <td align="left" valign="top" class="list">&nbsp;</td>
+ <td align="left" valign="top" class="list">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" align="left" valign="top" class="listtopic">
+ <strong>24 Hour Activity</strong> &ndash; 125 SPAM, 601 Good, 2 Spam Misses, 0 False Positives, 2 Inoculations
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" align="center" valign="top" class="vncell">
+ <?php if(isset($_GET['test'])): ?>
+ <img src="/dspam-admin-graph.php?data=1,2,5,6,2,6,3,1,3,9,5,2,4,8,9,6,9,2,6,8,3,3,5,2_4,22,12,9,11,10,10,8,2,9,9,27,18,26,20,20,11,14,27,69,51,108,86,43_0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0_0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0_0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0_2,8,3,9,7,4,3,2,2,,4,7,6,3,4,6,2,7,4,17,5,3,10,1_10:00pm,11:00pm,12:00am,1:00am,2:00am,3:00am,4:00am,5:00am,6:00am,7:00am,8:00am,9:00am,10:00am,11:00am,12:00pm,1:00pm,2:00pm,3:00pm,4:00pm,5:00pm,6:00pm,7:00pm,8:00pm,9:00pm&x_label=Hour+of+the+day&offset=35" alt="24 Hour Activity" border="0" />
+ <?php else: ?>
+ <img src="/dspam-admin-graph.php?data=<?= $DATA['DATA_DAILY']; ?>&x_label=<?= urlencode("Hour of the day"); ?>&offset=20" alt="24 Hour Activity" border="0" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" align="left" valign="top" class="listtopic">
+ <strong>Daily Activity</strong> &ndash; 2457 SPAM, 10772 Good, 35 Spam Misses, 0 False Positives, 33 Inoculations
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" align="center" valign="top" class="vncell">
+ <?php if(isset($_GET['test'])): ?>
+ <img src="/dspam-admin-graph.php?data=105,98,54,104,85,94,93,103,115,122,109,94,77,103,116,105,112,103,97,83,87,99,97,126,107_368,339,326,395,367,166,176,325,376,382,458,305,149,134,335,396,388,368,403,220,142,534,312,595,600_0,2,0,2,1,3,0,1,4,1,0,0,0,1,2,1,2,1,2,3,4,1,1,2,0_0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0_1,1,2,1,4,1,0,3,1,0,2,0,2,1,2,1,1,5,0,1,0,0,0,2,4_129,142,76,184,139,55,51,94,107,139,168,130,70,63,123,140,118,96,108,88,46,110,133,143,109_5/29/2006,5/30/2006,5/31/2006,6/1/2006,6/2/2006,6/3/2006,6/4/2006,6/5/2006,6/6/2006,6/7/2006,6/8/2006,6/9/2006,6/10/2006,6/11/2006,6/12/2006,6/13/2006,6/14/2006,6/15/2006,6/16/2006,6/17/2006,6/18/2006,6/19/2006,6/20/2006,6/21/2006,6/22/2006&graph=period&x_label=Date&offset=45" border="0" />
+ <?php else: ?>
+ <img src="/dspam-admin-graph.php?data=<?= $DATA['DATA_WEEKLY']; ?>&graph=period&x_label=Date&offset=45" border="0" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<?
+} else {
+?>
+<?php
+ $input_errors[] = "Access to this particular site was denied. You need DSPAM admin access rights to be able to view it.";
+
+ include("head.inc");
+ echo $pfSenseHead->getHTML();
+?>
+<?php include("fbegin.inc");?>
+<?php if ($input_errors) print_input_errors($input_errors);?>
+<?php if ($savemsg) print_info_box($savemsg);?>
+ <body link="#000000" vlink="#000000" alink="#000000">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td valign="top" class="listtopic">Access denied for: <?=$HTTP_SERVER_VARS['AUTH_USER']?></td>
+ </tr>
+ </table>
+<?php
+} // end of access denied code
+?>
+<?php include("fend.inc"); ?>
+</body>
+</html> \ No newline at end of file
diff --git a/packages/dspam/www/dspam-analysis-graph.php b/packages/dspam/www/dspam-analysis-graph.php
new file mode 100644
index 00000000..67262564
--- /dev/null
+++ b/packages/dspam/www/dspam-analysis-graph.php
@@ -0,0 +1,137 @@
+<?php
+/* $Id$ */
+/*
+ dspam-analysis-graph.php
+
+ Copyright (C) 2006 Daniel S. Haischt.
+ All rights reserved.
+*/
+
+/* required because of system_groupmanager.php */
+$pgtitle = array(gettext("Services"),
+ gettext("DSPAM"),
+ gettext("Analysis"),
+ gettext("Graph"));
+
+require_once 'Image/Graph.php';
+require("guiconfig.inc");
+include("/usr/local/pkg/dspam.inc");
+
+if (! $_GET ||
+ strlen($_SERVER['QUERY_STRING']) == 0) {
+ return;
+}
+
+$FORM =& ReadParse($_SERVER['QUERY_STRING']);
+
+list($spam, $nonspam, $period) = split('_', $FORM['data']);
+$spam_day = split(',', $spam);
+$nonspam_day = split(',', $nonspam);
+$period = split(',', $period);
+
+// create the graph
+$Graph =& Image_Graph::factory('graph', array(725, 300));
+
+// add a TrueType font
+$Font =& $Graph->addNew('font', 'Verdana');
+// set the font size to 11 pixels
+$Font->setSize(8);
+
+$Graph->setFont($Font);
+
+// setup the plotarea, legend and their layout
+$Graph->add(
+ Image_Graph::vertical(
+ Image_Graph::factory('title', array('', 12)),
+ Image_Graph::vertical(
+ $Plotarea = Image_Graph::factory('plotarea'),
+ $Legend = Image_Graph::factory('legend'),
+ 88
+ ),
+ 5
+ )
+);
+
+// link the legend with the plotares
+$Legend->setPlotarea($Plotarea);
+
+// create the two datasets
+$i = 0;
+$spamds =& Image_Graph::factory('dataset');
+foreach($spam_day as $el){
+ $spamds->addPoint(strval($period[$i]), intval($el));
+ $i++;
+}
+
+$i = 0;
+$hamds =& Image_Graph::factory('dataset');
+foreach($nonspam_day as $el){
+ $hamds->addPoint(strval($period[$i]), intval($el));
+ $i++;
+}
+
+// set the name/title of each dataset
+$spamds->setName('SPAM');
+$hamds->setName('Good');
+
+// put each dataset in a singel ds array
+$Datasets = array($spamds, $hamds);
+
+// create the plot as line chart using the dataset
+$Plot =& $Plotarea->addNew('Image_Graph_Plot_Line', array($Datasets,'normal'));
+
+// set a line color
+$LineArray =& Image_Graph::factory('Image_Graph_Line_Array');
+$LineArray->addColor('red');
+$LineArray->addColor('green');
+
+// set a standard line style
+$Plot->setLineStyle($LineArray);
+
+/* set axis labels */
+$XAxis =& $Plotarea->getAxis(IMAGE_GRAPH_AXIS_X);
+$XAxis->setTitle("{$FORM['x_label']}");
+$YAxis =& $Plotarea->getAxis(IMAGE_GRAPH_AXIS_Y);
+$YAxis->setTitle('Number of Messages', 'vertical');
+
+// output the Graph
+$Graph->done();
+
+function &ReadParse($URI = "") {
+ if ($URI == "") {
+ return NULL;
+ }
+
+ $pairs = preg_split('/&/', $URI);
+ $FORM = array();
+
+ foreach($pairs as $pair){
+ list($name, $value) = preg_split('/\=/', $pair);
+ $pattern = '/%([a-fA-F0-9][a-fA-F0-9])/';
+
+ $name = preg_replace('/\+/', ' ', $name);
+ $name = preg_replace_callback(
+ $pattern,
+ create_function(
+ '$matches',
+ 'return pack("C", hexdec($matches[1]));'
+ ),
+ $name
+ );
+
+ $value = preg_replace('/\+/', ' ', $value);
+ $value = preg_replace_callback(
+ $pattern,
+ create_function(
+ '$matches',
+ 'return pack("C", hexdec($matches[1]));'
+ ),
+ $value
+ );
+
+ $FORM[$name] = $value;
+ } // end foreach
+
+ return $FORM;
+}
+?>
diff --git a/packages/dspam/www/dspam-analysis.php b/packages/dspam/www/dspam-analysis.php
new file mode 100644
index 00000000..89b48df2
--- /dev/null
+++ b/packages/dspam/www/dspam-analysis.php
@@ -0,0 +1,147 @@
+<?php
+/* $Id$ */
+/*
+ dspam-analysis.php
+
+ Copyright (C) 2006 Daniel S. Haischt.
+ All rights reserved.
+*/
+
+$pgtitle = array(gettext("Services"),
+ gettext("DSPAM"),
+ gettext("Analysis"),
+ gettext("Overview"));
+
+require("guiconfig.inc");
+include("/usr/local/pkg/dspam.inc");
+
+/* if this is an AJAX caller then handle via JSON */
+if(isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+}
+
+/* if ajax is calling, give them an update message */
+if(isAjax())
+ print_info_box_np($savemsg);
+
+include("head.inc");
+/* put your custom HTML head content here */
+/* using some of the $pfSenseHead function calls */
+
+ $jscriptstr = <<<EOD
+<script type="text/javascript">
+<!--
+
+EOD;
+
+ $jscriptstr .= getJScriptFunction(0);
+ $jscriptstr .= <<<EOD
+//-->
+</script>
+EOD;
+
+ $pfSenseHead->addScript($jscriptstr);
+echo $pfSenseHead->getHTML();
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="dspam-analysis.php" method="post" name="iform" id="iform">
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<p>
+ <span class="vexpl">
+ Graphs showing the number of messages that have been processed are shown below.
+ </span>
+</p>
+<table width="100%" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array("Info", false, "/dspam.php?{$CURRENT_USER}");
+ $tab_array[] = array("Performance", false, "/dspam-perf.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Preferences", false, "/dspam-prefs.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Alerts", false, "/pkg.php?xml=dspam_alerts.xml&user={$CURRENT_USER}");
+ $tab_array[] = array("Quarantine ({$DATA['TOTAL_QUARANTINED_MESSAGES']})", false, "/dspam-quarantine.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Analysis", true, "/dspam-analysis.php?user={$CURRENT_USER}");
+ $tab_array[] = array("History", false, "/dspam-history.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Train Filter", false, "/dspam-train.php?user={$CURRENT_USER}");
+ if (isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) {
+ $tab_array[] = array("Admin Suite", false, "/dspam-admin.php");
+ }
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td align="left" valign="top" class="listhdrr" colspan="2">Statistical SPAM Protection for...</td>
+ </tr>
+ <tr>
+ <td width="10%" valign="baseline" class="vncell">Username</td>
+ <td width="90%" class="vtable">
+ <?php if(isset($HTTP_SERVER_VARS['AUTH_USER'])): ?>
+ <input type="text" name="username" id="username" value="<?= $CURRENT_USER ?>" class="formfld user"<?php if (! isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) { echo " readonly=\"readonly\""; } ?> />
+ <?php else: ?>
+ <input type="text" name="username" id="username" value="Please provide a username" class="formfld user" onFocus="this.value='';" />
+ <?php endif; ?>
+ &nbsp;
+ <?php
+ if (! isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER']))
+ $action = "onClick=\"changeuser();\"";
+ else
+ $action = "onClick=\"document.iform.submit();\"";
+ ?>
+ <input type="button" name="change_user" id="change_user" class="formbtn" value="Change" <?= $action ?> />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="listtopic" colspan="2">
+ <strong>24 Hour Activity</strong> &ndash; <?= $DATA['TS_DAILY']; ?> SPAM, <?= $DATA['TI_DAILY']; ?> Good
+ </td>
+ </tr>
+ <tr>
+ <td align="center" valign="top" class="vncell" colspan="2">
+ <?php if(isset($_GET['test'])): ?>
+ <img src="/dspam-analysis-graph.php?data=0,0,1,0,1_1,4,0,1,0_4p,6p,7a,11a,2p&x_label=Hour+of+the+day" alt="24 Hour Activity" border="0" />
+ <?php else: ?>
+ <img src="/dspam-analysis-graph.php?data=<?= $DATA['DATA_DAILY']; ?>&x_label=<?= urlencode("Hour of the day"); ?>" alt="24 Hour Activity" border="0" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="listtopic" colspan="2">
+ <strong>14 Day Activity</strong> &ndash; <?= $DATA['TS_WEEKLY']; ?> SPAM, <?= $DATA['TI_WEEKLY']; ?> Good
+ </td>
+ </tr>
+ <tr>
+ <td align="center" valign="top" class="vncell" colspan="2">
+ <?php if(isset($_GET['test'])): ?>
+ <img src="/dspam-analysis-graph.php?data=1,2,0,2,1,2,2,1,4,0,0,2,0,2_5,2,3,5,12,20,7,9,9,8,7,12,6,1_6/9,6/10,6/11,6/12,6/13,6/14,6/15,6/16,6/17,6/18,6/19,6/20,6/21,6/22&graph=period&x_label=Date" alt="24 Hour Activity" border="0" />
+ <?php else: ?>
+ <img src="/dspam-analysis-graph.php?data=<?= $DATA['DATA_WEEKLY']; ?>&graph=period&x_label=Date" alt="24 Hour Activity" border="0" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+
+<?php include("fend.inc"); ?>
+</body>
+</html> \ No newline at end of file
diff --git a/packages/dspam/www/dspam-hfragment.php b/packages/dspam/www/dspam-hfragment.php
new file mode 100644
index 00000000..36152a00
--- /dev/null
+++ b/packages/dspam/www/dspam-hfragment.php
@@ -0,0 +1,90 @@
+<?php
+/* $Id$ */
+/*
+ dspam-train.php
+
+ Copyright (C) 2006 Daniel S. Haischt.
+ All rights reserved.
+*/
+
+$pgtitle = array(gettext("Services"),
+ gettext("DSPAM"),
+ gettext("History"),
+ gettext("Fragement"));
+
+require("guiconfig.inc");
+include("/usr/local/pkg/dspam.inc");
+
+/* if this is an AJAX caller then handle via JSON */
+if(isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+}
+
+/* if ajax is calling, give them an update message */
+if(isAjax())
+ print_info_box_np($savemsg);
+
+include("head.inc");
+/* put your custom HTML head content here */
+/* using some of the $pfSenseHead function calls */
+echo $pfSenseHead->getHTML();
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<table width="100%" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array("Info", false, "/dspam.php?{$CURRENT_USER}");
+ $tab_array[] = array("Performance", false, "/dspam-perf.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Preferences", false, "/dspam-prefs.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Alerts", false, "/pkg.php?xml=dspam_alerts.xml&user={$CURRENT_USER}");
+ $tab_array[] = array("Quarantine ({$DATA['TOTAL_QUARANTINED_MESSAGES']})", false, "/dspam-quarantine.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Analysis", false, "/dspam-analysis.php?user={$CURRENT_USER}");
+ $tab_array[] = array("History", true, "/dspam-history.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Train Filter", false, "/dspam-train.php?user={$CURRENT_USER}");
+ if (isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) {
+ $tab_array[] = array("Admin Suite", false, "/dspam-admin.php?user={$CURRENT_USER}");
+ }
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td align="left" valign="top" class="list" width="10%">
+ <br />
+ <font color=white><big><?= $DATA['SUBJECT']; ?></big><br />
+ <?= $DATA['FROM']; ?><br />
+ <small><?= $DATA['TIME']; ?> (<?= $DATA['INFO']; ?>)</small></font><br />
+ <br />
+ </td>
+ </tr>
+ <tr>
+ <td class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td align="left" valign="middle" class="list">
+ <pre>
+ <?= $DATA['MESSSAGE']; ?>
+ </pre>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+
+<?php include("fend.inc"); ?>
+</body>
+</html> \ No newline at end of file
diff --git a/packages/dspam/www/dspam-history.php b/packages/dspam/www/dspam-history.php
new file mode 100644
index 00000000..e9b77cf2
--- /dev/null
+++ b/packages/dspam/www/dspam-history.php
@@ -0,0 +1,172 @@
+<?php
+/* $Id$ */
+/*
+ dspam-train.php
+
+ Copyright (C) 2006 Daniel S. Haischt.
+ All rights reserved.
+*/
+
+$pgtitle = array(gettext("Services"),
+ gettext("DSPAM"),
+ gettext("History"),
+ gettext("Overview"));
+
+require("guiconfig.inc");
+include("/usr/local/pkg/dspam.inc");
+
+/* if this is an AJAX caller then handle via JSON */
+if(isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+}
+
+/* if ajax is calling, give them an update message */
+if(isAjax())
+ print_info_box_np($savemsg);
+
+include("head.inc");
+/* put your custom HTML head content here */
+/* using some of the $pfSenseHead function calls */
+
+ $jscriptstr = <<<EOD
+<script type="text/javascript">
+<!--
+
+EOD;
+
+ $jscriptstr .= getJScriptFunction(0);
+ $jscriptstr .= getJScriptFunction(4);
+ $jscriptstr .= <<<EOD
+//-->
+</script>
+EOD;
+
+$pfSenseHead->addScript($jscriptstr);
+$pfSenseHead->addLink("<link rel=\"stylesheet\" type=\"text/css\" href=\"/themes/" . $g['theme'] . "/dspam.css\" media=\"all\" />\n");
+echo $pfSenseHead->getHTML();
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="dspam-history.php" method="post" name="iform" id="iform">
+<input type="hidden" name="command" value="retrainChecked" />
+<input type="hidden" name="hpage" value="<?= $DATA['HPAGE']; ?>" />
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<p>
+ <span class="vexpl">
+ The messages that have been processed by the filter are shown below. The
+ most recent messages are shown first. Use the retrain options to correct
+ errors and deliver any false positives that are still in your quarantine.
+ </span>
+</p>
+<table width="100%" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array("Info", false, "/dspam.php?{$CURRENT_USER}");
+ $tab_array[] = array("Performance", false, "/dspam-perf.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Preferences", false, "/dspam-prefs.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Alerts", false, "/pkg.php?xml=dspam_alerts.xml&user={$CURRENT_USER}");
+ $tab_array[] = array("Quarantine ({$DATA['TOTAL_QUARANTINED_MESSAGES']})", false, "/dspam-quarantine.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Analysis", false, "/dspam-analysis.php?user={$CURRENT_USER}");
+ $tab_array[] = array("History", true, "/dspam-history.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Train Filter", false, "/dspam-train.php?user={$CURRENT_USER}");
+ if (isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) {
+ $tab_array[] = array("Admin Suite", false, "/dspam-admin.php");
+ }
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td align="left" valign="top" class="listhdrr" colspan="6">Statistical SPAM Protection for...</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell" colspan="2">Username</td>
+ <td width="78%" class="vtable" colspan="4">
+ <?php if(isset($HTTP_SERVER_VARS['AUTH_USER'])): ?>
+ <input type="text" name="username" id="username" value="<?= $CURRENT_USER ?>" class="formfld user"<?php if (! isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) { echo " readonly=\"readonly\""; } ?> />
+ <?php else: ?>
+ <input type="text" name="username" id="username" value="Please provide a username" class="formfld user" onFocus="this.value='';" />
+ <?php endif; ?>
+ &nbsp;
+ <?php
+ if (! isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER']))
+ $action = "onClick=\"changeuser();\"";
+ else
+ $action = "onClick=\"document.iform.submit();\"";
+ ?>
+ <input type="button" name="change_user" id="change_user" class="formbtn" value="Change" <?= $action ?> />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="6" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td align="left" valign="middle" class="qnavtdl" colspan="4">
+ <input type="submit" class="formbtn" title="Retrain Checked" value="Retrain Checked" name="retrain_checked" id="retrain_checked_top" />
+ <label for="retrain_checked_top">&nbsp;because those messages have<strong>n't</strong> been correctly classified.</label>
+ </td>
+ <td align="right" valign="middle" class="qnavtdr" colspan="2">
+ <label for="hperpage-top">Records per page:&nbsp;</label>
+ <select class="formselect" id="hperpage-top" name="hperpage" onchange="changeQPerPage(this);">
+ <option value="25"<?php if ($CONFIG['HISTORY_PER_PAGE'] == 25) echo ' selected="selected"'; ?>>25</option>
+ <option value="50"<?php if ($CONFIG['HISTORY_PER_PAGE'] == 50) echo ' selected="selected"'; ?>>50</option>
+ <option value="75"<?php if ($CONFIG['HISTORY_PER_PAGE'] == 75) echo ' selected="selected"'; ?>>75</option>
+ <option value="100"<?php if ($CONFIG['HISTORY_PER_PAGE'] == 100) echo ' selected="selected"'; ?>>100</option>
+ <option value="125"<?php if ($CONFIG['HISTORY_PER_PAGE'] == 125) echo ' selected="selected"'; ?>>125</option>
+ <option value="150"<?php if ($CONFIG['HISTORY_PER_PAGE'] == 150) echo ' selected="selected"'; ?>>150</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td class="list" height="12" colspan="6">&nbsp;</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="listtopic" width="10%">Type</td>
+ <td align="left" valign="top" class="listtopic" width="10%">Action</td>
+ <td align="left" valign="top" class="listtopic" width="10%">Day/Time</td>
+ <td align="left" valign="top" class="listtopic" width="25%">From</td>
+ <td align="left" valign="top" class="listtopic" width="25%">Subject</td>
+ <td align="left" valign="top" class="listtopic" width="20%">Additional Info</td>
+ </tr>
+ <?= $DATA['HISTORY']; ?>
+ <?= $DATA['HISTORY_FOOTER']; ?>
+ <tr>
+ <td colspan="6" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td align="left" valign="middle" class="qnavtdl" colspan="4">
+ <input type="submit" class="formbtn" title="Retrain Checked" value="Retrain Checked" name="retrain_checked" id="retrain_checked_bottom" />
+ <label for="retrain_checked_bottom">&nbsp;because those messages have<strong>n't</strong> correctly been classified.</label>
+ </td>
+ <td align="right" valign="middle" class="qnavtdr" colspan="2">
+ <label for="hperpage-bottom">Records per page:&nbsp;</label>
+ <select class="formselect" id="hperpage-bottom" name="hperpage" onchange="changeQPerPage(this);">
+ <option value="25"<?php if ($CONFIG['HISTORY_PER_PAGE'] == 25) echo ' selected="selected"'; ?>>25</option>
+ <option value="50"<?php if ($CONFIG['HISTORY_PER_PAGE'] == 50) echo ' selected="selected"'; ?>>50</option>
+ <option value="75"<?php if ($CONFIG['HISTORY_PER_PAGE'] == 75) echo ' selected="selected"'; ?>>75</option>
+ <option value="100"<?php if ($CONFIG['HISTORY_PER_PAGE'] == 100) echo ' selected="selected"'; ?>>100</option>
+ <option value="125"<?php if ($CONFIG['HISTORY_PER_PAGE'] == 125) echo ' selected="selected"'; ?>>125</option>
+ <option value="150"<?php if ($CONFIG['HISTORY_PER_PAGE'] == 150) echo ' selected="selected"'; ?>>150</option>
+ </select>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+
+<?php include("fend.inc"); ?>
+</body>
+</html> \ No newline at end of file
diff --git a/packages/dspam/www/dspam-perf.php b/packages/dspam/www/dspam-perf.php
new file mode 100644
index 00000000..bead8709
--- /dev/null
+++ b/packages/dspam/www/dspam-perf.php
@@ -0,0 +1,222 @@
+<?php
+/* $Id$ */
+/*
+ dspam-train.php
+
+ Copyright (C) 2006 Daniel S. Haischt.
+ All rights reserved.
+*/
+
+$pgtitle = array(gettext("Services"),
+ gettext("DSPAM"),
+ gettext("Performance"));
+
+require("guiconfig.inc");
+include("/usr/local/pkg/dspam.inc");
+
+/* if this is an AJAX caller then handle via JSON */
+if(isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+}
+
+/* if ajax is calling, give them an update message */
+if(isAjax())
+ print_info_box_np($savemsg);
+
+include("head.inc");
+/* put your custom HTML head content here */
+/* using some of the $pfSenseHead function calls */
+
+ $jscriptstr = <<<EOD
+<script type="text/javascript">
+<!--
+
+EOD;
+
+ $jscriptstr .= getJScriptFunction(0);
+ $jscriptstr .= <<<EOD
+//-->
+</script>
+EOD;
+
+$pfSenseHead->addScript($jscriptstr);
+echo $pfSenseHead->getHTML();
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="dspam-perf.php" method="post" name="iform" id="iform">
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<p>
+ <span class="vexpl">
+ If you receive a message in your e-mail application that was not caught by
+ the filter, please forward it to <strong><?= $DATA['SPAM_ALIAS']; ?></strong>
+ so that it can be analyzed and learned as <acronym title="">SPAM</acronym>.
+ This will improve the filter's accuracy in the future.
+ </span>
+</p>
+<table width="100%" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array("Info", false, "/dspam.php?{$CURRENT_USER}");
+ $tab_array[] = array("Performance", true, "/dspam-perf.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Preferences", false, "/dspam-prefs.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Alerts", false, "/pkg.php?xml=dspam_alerts.xml&user={$CURRENT_USER}");
+ $tab_array[] = array("Quarantine ({$DATA['TOTAL_QUARANTINED_MESSAGES']})", false, "/dspam-quarantine.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Analysis", false, "/dspam-analysis.php?user={$CURRENT_USER}");
+ $tab_array[] = array("History", false, "/dspam-history.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Train Filter", false, "/dspam-train.php?user={$CURRENT_USER}");
+ if (isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) {
+ $tab_array[] = array("Admin Suite", false, "/dspam-admin.php");
+ }
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td align="left" valign="top" class="listhdrr" colspan="2">Statistical SPAM Protection for...</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">Username</td>
+ <td width="78%" class="vtable">
+ <?php if(isset($HTTP_SERVER_VARS['AUTH_USER'])): ?>
+ <input type="text" name="username" id="username" value="<?= $CURRENT_USER ?>" class="formfld user"<?php if (! isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) { echo " readonly=\"readonly\""; } ?> />
+ <?php else: ?>
+ <input type="text" name="username" id="username" value="Please provide a username" class="formfld user" onFocus="this.value='';" />
+ <?php endif; ?>
+ &nbsp;
+ <?php
+ if (! isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER']))
+ $action = "onClick=\"changeuser();\"";
+ else
+ $action = "onClick=\"document.iform.submit();\"";
+ ?>
+ <input type="button" name="change_user" id="change_user" class="formbtn" value="Change" <?= $action ?> />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="listtopic" colspan="2">
+ <strong>Performance Statistics</strong> &ndash; <?= date("l dS of F Y h:i:s A"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" colspan="2" class="vncell">
+ <table align="center" width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <!- beginn left info pane -->
+ <td align="left" valign="top">
+ <table border="0" cellpadding="0" cellspacing="0" summary="left info pane">
+ <tr>
+ <td align="left" valign="top" class="listhdrr" colspan="2">Metric</td>
+ <td align="left" valign="top" class="listhdrr">Calculated as</td>
+ <td align="left" valign="top" class="list"></td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="listr">
+ <nobr>Overall accuracy (since last reset)</nobr>
+ </td>
+ <td align="left" valign="top" class="listr">
+ <strong><?= $DATA['OVERALL_ACCURACY']; ?>%</strong>
+ </td>
+ <td align="left" valign="top" class="listr">(SPAM messages caught + Good messages delivered) / Total number of messages</td>
+ <td align="left" valign="top" class="none">&nbsp;</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="listr">
+ <nobr>Spam identification (since last reset)</nobr>
+ </td>
+ <td align="left" valign="top" class="listr">
+ <strong><?= $DATA['SPAM_ACCURACY']; ?>%</strong>
+ </td>
+ <td align="left" valign="top" class="listr">(Spam catch rate only)</td>
+ <td align="left" valign="top" class="none">&nbsp;</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="listr">
+ <nobr>Spam ratio (of total processed)</nobr>
+ </td>
+ <td align="left" valign="top" class="listr">
+ <strong><?= $DATA['SPAM_RATIO']; ?>%</strong>
+ </td>
+ <td align="left" valign="top" class="listr">Total SPAM messages (both caught & missed) / Total number of messages</td>
+ <td align="left" valign="top" class="none">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ <!-- spacer td -->
+ <td align="left" valign="top" class="none">&nbsp;</td>
+ <!-- begin right info pane -->
+ <td align="left" valign="top">
+ <table border="0" cellpadding="0" cellspacing="0" summary="right info pane">
+ <tr id="frheader">
+ <td class="list">&nbsp;</td>
+ <td class="listhdrr">SPAM messages</td>
+ <td class="listhdrr">Good messages</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="listhdrr">Since last reset</td>
+ <td align="left" valign="top" class="listr">
+ <nobr><?= $DATA['TOTAL_SPAM_MISSED']; ?> missed</nobr><br />
+ <nobr><?= $DATA['TOTAL_SPAM_CAUGHT']; ?> caught</nobr><br />
+ <nobr><?= $DATA['SPAM_ACCURACY']; ?>% caught</nobr><br />
+ </td>
+ <td align="left" valign="top" class="listr">
+ <nobr><?= $DATA['TOTAL_NONSPAM_MISSED']; ?> missed</nobr><br />
+ <nobr><?= $DATA['TOTAL_NONSPAM_CAUGHT']; ?> delivered</nobr><br />
+ <nobr><?= $DATA['NONSPAM_ERROR_RATE']; ?>% missed</nobr><br />
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="listhdrr">Total processed by filter</td>
+ <td align="left" valign="top" class="listr">
+ <nobr><?= $DATA['TOTAL_SPAM_LEARNED']; ?> missed</nobr><br />
+ <nobr><?= $DATA['TOTAL_SPAM_SCANNED']; ?> caught</nobr><br />
+ </td>
+ <td align="left" valign="top" class="listr">
+ <nobr><?= $DATA['TOTAL_NONSPAM_LEARNED']; ?> missed</nobr><br />
+ <nobr><?= $DATA['TOTAL_NONSPAM_SCANNED']; ?> delivered</nobr><br />
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="listhdrr">From corpus</td>
+ <td align="left" valign="top" class="listr">
+ <nobr><?= $DATA['TOTAL_SPAM_CORPUSFED']; ?> feed</nobr><br />
+ </td>
+ <td align="left" valign="top" class="listr">
+ <nobr><?= $DATA['TOTAL_NONSPAM_CORPUSFED']; ?> feed</nobr><br />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" colspan="2">
+ <p>
+ <a href="/dspam-perf.php?user=<?= $CURRENT_USER ?>&command=resetStats">Reset</a>&nbsp;|&nbsp;<a href="/dspam-perf.php?user=<?= $CURRENT_USER ?>&command=tweak">Tweak -1</a>
+ </p>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+
+<?php include("fend.inc"); ?>
+</body>
+</html> \ No newline at end of file
diff --git a/packages/dspam/www/dspam-prefs.php b/packages/dspam/www/dspam-prefs.php
new file mode 100644
index 00000000..668cface
--- /dev/null
+++ b/packages/dspam/www/dspam-prefs.php
@@ -0,0 +1,234 @@
+<?php
+/* $Id$ */
+/*
+ dspam-train.php
+
+ Copyright (C) 2006 Daniel S. Haischt.
+ All rights reserved.
+*/
+
+$pgtitle = array(gettext("Services"),
+ gettext("DSPAM"),
+ gettext("Preferences"));
+
+require("guiconfig.inc");
+include("/usr/local/pkg/dspam.inc");
+
+/* if this is an AJAX caller then handle via JSON */
+if(isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+}
+
+/* if ajax is calling, give them an update message */
+if(isAjax())
+ print_info_box_np($savemsg);
+
+include("head.inc");
+/* put your custom HTML head content here */
+/* using some of the $pfSenseHead function calls */
+
+ $jscriptstr = <<<EOD
+<script type="text/javascript">
+<!--
+
+EOD;
+
+ $jscriptstr .= getJScriptFunction(0);
+ $jscriptstr .= <<<EOD
+//-->
+</script>
+EOD;
+
+$pfSenseHead->addScript($jscriptstr);
+echo $pfSenseHead->getHTML();
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="dspam-prefs.php" method="post" name="iform" id="iform">
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<p>
+ <span class="vexpl">
+ This page lets you configure how the filter will handle your messages.
+ </span>
+</p>
+<table width="100%" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array("Info", false, "/dspam.php?{$CURRENT_USER}");
+ $tab_array[] = array("Performance", false, "/dspam-perf.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Preferences", true, "/dspam-prefs.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Alerts", false, "/pkg.php?xml=dspam_alerts.xml");
+ $tab_array[] = array("Quarantine ({$DATA['TOTAL_QUARANTINED_MESSAGES']})", false, "/dspam-quarantine.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Analysis", false, "/dspam-analysis.php?user={$CURRENT_USER}");
+ $tab_array[] = array("History", false, "/dspam-history.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Train Filter", false, "/dspam-train.php?user={$CURRENT_USER}");
+ if (isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) {
+ $tab_array[] = array("Admin Suite", false, "/dspam-admin.php");
+ }
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td align="left" valign="top" class="listhdrr" colspan="2">Statistical SPAM Protection for...</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">Username</td>
+ <td width="78%" class="vtable">
+ <?php if(isset($HTTP_SERVER_VARS['AUTH_USER'])): ?>
+ <input type="text" name="username" id="username" value="<?= $CURRENT_USER; ?>" class="formfld user"<?php if (! isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) { echo " readonly=\"readonly\""; } ?> />
+ <?php else: ?>
+ <input type="text" name="username" id="username" value="Please provide a username" class="formfld user" onFocus="this.value='';" />
+ <?php endif; ?>
+ &nbsp;
+ <?php
+ if (! isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER']))
+ $action = "onClick=\"changeuser();\"";
+ else
+ $action = "onClick=\"document.iform.submit();\"";
+ ?>
+ <input type="button" name="change_user" id="change_user" class="formbtn" value="Change" <?= $action ?> />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="listtopic" colspan="2">
+ <strong>Training</strong> &ndash; Configure how the filter learns as it processes messages
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="vncell" width="40%">
+ <p>DSPAM should train:</p>
+ <input <?= $DATA["S_TEFT"]; ?> value="TEFT" type="radio" class="formfld" title="On every new message scanned by the filter" alt="On every new message scanned by the filter" name="rad_train" id="rad_train_one" />
+ <label for="rad_train_one">&nbsp;On every new message scanned by the filter (TEFT)</label>
+ <br />
+ <input <?= $DATA["S_TOE"]; ?> value="TOE" type="radio" class="formfld" title="Only when the filter makes a mistake" alt="Only when the filter makes a mistake" name="rad_train" id="rad_train_two" />
+ <label for="rad_train_two">&nbsp;Only when the filter makes a mistake (TOE)</label>
+ <br />
+ <input <?= $DATA["S_TUM"]; ?> value="TUM" type="radio" class="formfld" title=";Only with new data or if the filter makes a mistake" alt=";Only with new data or if the filter makes a mistake" name="rad_train" id="rad_train_three" />
+ <label for="rad_train_three">&nbsp;Only with new data or if the filter makes a mistake (TUM)</label>
+ </td>
+ <td align="left" valign="top" class="vncell" width="60%">
+ <p>When I train DSPAM, I prefer:</p>
+ <input value="message" <?= $DATA["S_LOC_MESSAGE"]; ?> value="message" type="radio" class="formfld" title="To forward my spams (signature appears in message body)" alt="To forward my spams (signature appears in message body)" name="rad_train_action" id="rad_train_action_one" />
+ <label for="rad_train_action_one">&nbsp;To <u>forward</u> my spams (signature appears in message body)</label>
+ <br />
+ <input <?= $DATA["S_LOC_HEADERS"]; ?> value="headers" type="radio" class="formfld" title="To bounce my spams (signature appears in message headers)" alt="To bounce my spams (signature appears in message headers)" name="rad_train_action" id="rad_train_action_two" />
+ <label value="headers" for="rad_train_action_two">&nbsp;To <u>bounce</u> my spams (signature appears in message headers)</label>
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="middle" class="vncell" colspan="2">
+ <p>
+ Filter sensitivity <strong>during</strong> the training period:
+ </p>
+ <p align="center">
+ <nobr>
+ <span>
+ Catch SPAM (More in Quarantine)&nbsp;
+ <input value="0" type="radio" class="formfld" title="-5" alt="-5" name="rad_filter_sens" <?= $DATA["SEDATION_0"]; ?> />
+ <input value="1" type="radio" class="formfld" title="-4" alt="-4" name="rad_filter_sens" <?= $DATA["SEDATION_1"]; ?> />
+ <input value="2" type="radio" class="formfld" title="-3" alt="-3" name="rad_filter_sens" <?= $DATA["SEDATION_2"]; ?> />
+ <input value="3" type="radio" class="formfld" title="-2" alt="-2" name="rad_filter_sens" <?= $DATA["SEDATION_3"]; ?> />
+ <input value="4" type="radio" class="formfld" title="-1" alt="-1" name="rad_filter_sens" <?= $DATA["SEDATION_4"]; ?> />
+ <strong style="font-size: larger;">&raquo;</strong>
+ <input value="5" type="radio" class="formfld" title="0" alt="0" name="rad_filter_sens" <?= $DATA["SEDATION_5"]; ?> />
+ <strong style="font-size: larger;">&laquo;</strong>
+ <input value="6" type="radio" class="formfld" title="1" alt="1" name="rad_filter_sens" <?= $DATA["SEDATION_6"]; ?> />
+ <input value="7" type="radio" class="formfld" title="2" alt="2" name="rad_filter_sens" <?= $DATA["SEDATION_7"]; ?> />
+ <input value="8" type="radio" class="formfld" title="3" alt="3" name="rad_filter_sens" <?= $DATA["SEDATION_8"]; ?> />
+ <input value="9" type="radio" class="formfld" title="4" alt="4" name="rad_filter_sens" <?= $DATA["SEDATION_9"]; ?> />
+ <input value="10" type="radio" class="formfld" title="5" alt="5" name="rad_filter_sens" <?= $DATA["SEDATION_10"]; ?> />
+ &nbsp;Assume Good (Fewer in Quarantine)
+ </span>
+ </nobr>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="listtopic" colspan="2">
+ <strong>Message Handling</strong> &ndash; Configure how SPAM is handled
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="vncell" colspan="2">
+ <p>When a SPAM message is identified:</p>
+ <p>
+ <input value="quarantine" <?= $DATA["S_ACTION_QUARANTINE"]; ?> type="radio" class="formfld" title="Quarantine the message" alt="Quarantine the message" name="rad_ident_action" id="rad_ident_action_one" />
+ <label for="rad_ident_action_one">&nbsp;Quarantine the message</label>
+ <br />
+ <input value="tag" <?= $DATA["S_ACTION_TAG"]; ?> type="radio" class="formfld" title="Tag the Subject header with" alt="Tag the Subject header with" name="rad_ident_action" id="rad_ident_action_two" />
+ <label for="rad_ident_action_two">Tag the Subject header with&nbsp;</label>
+ <input size="35" type="text" class="formfld mail" title="message tag" alt="message tag" value="<?= $DATA["SPAM_SUBJECT"]; ?>" name="msgtag" />
+ <br />
+ <input value="deliver" <?= $DATA["S_ACTION_DELIVER"]; ?> type="radio" class="formfld" title="Deliver the message normally with a X-DSPAM-Result header" alt="Deliver the message normally with a X-DSPAM-Result header" name="rad_ident_action" id="rad_ident_action_three" />
+ <label for="rad_ident_action_three">&nbsp;Deliver the message normally with a X-DSPAM-Result header</label>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="listtopic" colspan="2">
+ <strong>Features</strong> &ndash; Tuning SPAM filtering
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="vncell" colspan="2">
+ <p>
+ <input <?= $DATA["C_BNR"]; ?> type="checkbox" class="formbtn" title="Enable noise reduction, which usually improves filtering accuracy" alt="Enable noise reduction, which usually improves filtering accuracy" name="chk_feature_nr" id="chk_feature_nr" />
+ <label for="chk_feature_nr">&nbsp;Enable noise reduction, which usually improves filtering accuracy</label>
+ <br />
+ <input <?= $DATA["C_WHITELIST"]; ?> type="checkbox" class="formbtn" title="Enable automatic whitelisting to record frequent correspondence" alt="Enable automatic whitelisting to record frequent correspondence" name="chk_feature_aw" id="chk_feature_aw" />
+ <label for="chk_feature_aw">&nbsp;Enable automatic whitelisting to record frequent correspondence</label>
+ <br />
+ <input <?= $DATA["C_FACTORS"]; ?> type="checkbox" class="formbtn" title="Add the factoring tokens in each email into the message's full headers" alt="Add the factoring tokens in each email into the message's full headers" name="chk_feature_at" id="chk_feature_at" />
+ <label for="chk_feature_at">&nbsp;Add the factoring tokens in each email into the message's full headers</label>
+ <!--
+ <input type="checkbox" class="formbtn" title="Add the factoring tokens in each email into the message's full headers" alt="Add the factoring tokens in each email into the message's full headers" name="chk_feature_at" id="chk_feature_at" />
+ <label for="chk_feature_at">&nbsp;Add the factoring tokens in each email into the message's full headers</label>
+ <br />
+ <input type="checkbox" class="formbtn" title="opt in of DSPAM filtering" alt="opt in of DSPAM filtering" name="chk_feature_optin" id="chk_feature_optin" />
+ <label for="chk_feature_optin">&nbsp;opt in of DSPAM filtering</label>
+ <br />
+ <input type="checkbox" class="formbtn" title="opt out of DSPAM filtering" alt="opt out of DSPAM filtering" name="chk_feature_optout" id="chk_feature_optout" />
+ <label for="chk_feature_optout">&nbsp;opt out of DSPAM filtering</label>
+ -->
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td class="list">&nbsp;</td>
+ <td class="list">
+ <input id="submitt" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+
+<?php include("fend.inc"); ?>
+</body>
+</html> \ No newline at end of file
diff --git a/packages/dspam/www/dspam-quarantine.php b/packages/dspam/www/dspam-quarantine.php
new file mode 100644
index 00000000..19d8b755
--- /dev/null
+++ b/packages/dspam/www/dspam-quarantine.php
@@ -0,0 +1,178 @@
+<?php
+/* $Id$ */
+/*
+ dspam-train.php
+
+ Copyright (C) 2006 Daniel S. Haischt.
+ All rights reserved.
+*/
+
+$pgtitle = array(gettext("Services"),
+ gettext("DSPAM"),
+ gettext("Quarantine"),
+ gettext("Overview"));
+
+require("guiconfig.inc");
+include("/usr/local/pkg/dspam.inc");
+
+/* if this is an AJAX caller then handle via JSON */
+if(isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+}
+
+/* if ajax is calling, give them an update message */
+if(isAjax())
+ print_info_box_np($savemsg);
+
+include("head.inc");
+/* put your custom HTML head content here */
+/* using some of the $pfSenseHead function calls */
+
+ $jscriptstr = <<<EOD
+<script type="text/javascript">
+<!--
+
+EOD;
+
+ $jscriptstr .= getJScriptFunction(0);
+ $jscriptstr .= getJScriptFunction(1);
+ $jscriptstr .= getJScriptFunction(2);
+ $jscriptstr .= getJScriptFunction(3);
+ $jscriptstr .= getJScriptFunction(4);
+ $jscriptstr .= <<<EOD
+//-->
+</script>
+EOD;
+
+$pfSenseHead->addScript($jscriptstr);
+$pfSenseHead->addLink("<link rel=\"stylesheet\" type=\"text/css\" href=\"/themes/" . $g['theme'] . "/dspam.css\" media=\"all\" />\n");
+echo $pfSenseHead->getHTML();
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="dspam-quarantine.php" method="post" name="iform" id="iform">
+<input type="hidden" name="command" value="processQuarantine" />
+<input type="hidden" name="processAction" value="None" />
+<input type="hidden" name="qpage" value="<?= $DATA['QPAGE']; ?>" />
+<input type="hidden" name="sortby" value="<?= $DATA['SORTBY']; ?>" >
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<p>
+ <span class="vexpl">
+ The messages below have not been delivered to your normal e-mail application
+ because they are believed to be spam. Click on the Subject line to view the
+ message or choose a sort option to change how messages are sorted. Use the
+ checkboxes and <strong>Deliver Checked</strong> to deliver messages you want
+ to read, or use <strong>Delete All</strong> to empty the quarantine.
+ </span>
+</p>
+<table width="100%" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array("Info", false, "/dspam.php?{$CURRENT_USER}");
+ $tab_array[] = array("Performance", false, "/dspam-perf.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Preferences", false, "/dspam-prefs.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Alerts", false, "/pkg.php?xml=dspam_alerts.xml&user={$CURRENT_USER}");
+ $tab_array[] = array("Quarantine ({$DATA['TOTAL_QUARANTINED_MESSAGES']})", true, "/dspam-quarantine.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Analysis", false, "/dspam-analysis.php?user={$CURRENT_USER}");
+ $tab_array[] = array("History", false, "/dspam-history.php?user={$CURRENT_USER}");
+ $tab_array[] = array("Train Filter", false, "/dspam-train.php?user={$CURRENT_USER}");
+ if (isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) {
+ $tab_array[] = array("Admin Suite", false, "/dspam-admin.php");
+ }
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td align="left" valign="top" class="listhdrr" colspan="5">Statistical SPAM Protection for...</td>
+ </tr>
+ <tr>
+ <td width="10%" valign="baseline" class="vncell" colspan="2">Username</td>
+ <td width="90%" class="vtable" colspan="3">
+ <?php if(isset($HTTP_SERVER_VARS['AUTH_USER'])): ?>
+ <input type="text" name="username" id="username" value="<?= $CURRENT_USER ?>" class="formfld user"<?php if (! isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) { echo " readonly=\"readonly\""; } ?> />
+ <?php else: ?>
+ <input type="text" name="username" id="username" value="Please provide a username" class="formfld user" onFocus="this.value='';" />
+ <?php endif; ?>
+ &nbsp;
+ <?php
+ if (! isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER']))
+ $action = "onClick=\"changeuser();\"";
+ else
+ $action = "onClick=\"document.iform.submit();\"";
+ ?>
+ <input type="button" name="change_user" id="change_user" class="formbtn" value="Change" <?= $action ?> />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="5" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td align="left" valign="middle" colspan="4" class="qnavtdl">
+ <nobr>
+ <input type="button" class="formbtn" title="Deliver Checked" value="Deliver Checked" name="delichk" id="delichk" onclick="processmsg(0);" />&nbsp;
+ <input type="button" class="formbtn" title="Delete Checked" value="Delete Checked" name="delchk" id="delchk" onclick="processmsg(1);" />&nbsp;
+ <input type="button" class="formbtn" title="Delete All" value="Delete All" name="delall" id="delall" onclick="processmsg(2);" />
+ </nobr>
+ </td>
+ <td align="right" valign="middle" class="qnavtdr">
+ <label for="qperpage-top">Records per page:&nbsp;</label>
+ <select class="formselect" id="qperpage-top" name="qperpage" onchange="changeQPerPage(this);">
+ <option value="25"<?php if ($CONFIG['QUARANTINE_PER_PAGE'] == 25) echo ' selected="selected"'; ?>>25</option>
+ <option value="50"<?php if ($CONFIG['QUARANTINE_PER_PAGE'] == 50) echo ' selected="selected"'; ?>>50</option>
+ <option value="75"<?php if ($CONFIG['QUARANTINE_PER_PAGE'] == 75) echo ' selected="selected"'; ?>>75</option>
+ <option value="100"<?php if ($CONFIG['QUARANTINE_PER_PAGE'] == 100) echo ' selected="selected"'; ?>>100</option>
+ <option value="125"<?php if ($CONFIG['QUARANTINE_PER_PAGE'] == 125) echo ' selected="selected"'; ?>>125</option>
+ <option value="150"<?php if ($CONFIG['QUARANTINE_PER_PAGE'] == 150) echo ' selected="selected"'; ?>>150</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="5" class="list" height="12">&nbsp;</td>
+ </tr>
+ <?= $DATA['SORT_SELECTOR']; ?>
+ <?= $DATA['QUARANTINE']; ?>
+ <?= $DATA['QUARANTINE_FOOTER']; ?>
+ <tr>
+ <td colspan="5" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td align="left" valign="middle" colspan="4" class="qnavtdl">
+ <nobr>
+ <input type="button" class="formbtn" title="Deliver Checked" value="Deliver Checked" name="delichk" id="delichk" onclick="processmsg(0);" />&nbsp;
+ <input type="button" class="formbtn" title="Delete Checked" value="Delete Checked" name="delchk" id="delchk" onclick="processmsg(1);" />&nbsp;
+ <input type="button" class="formbtn" title="Delete All" value="Delete All" name="delall" id="delall" onclick="processmsg(2);" />
+ </nobr>
+ </td>
+ <td align="right" valign="middle" class="qnavtdr">
+ <label for="qperpage-bottom">Records per page:&nbsp;</label>
+ <select class="formselect" id="qperpage-bottom" name="qperpage" onchange="changeQPerPage(this);">
+ <option value="25"<?php if ($CONFIG['QUARANTINE_PER_PAGE'] == 25) echo ' selected="selected"'; ?>>25</option>
+ <option value="50"<?php if ($CONFIG['QUARANTINE_PER_PAGE'] == 50) echo ' selected="selected"'; ?>>50</option>
+ <option value="75"<?php if ($CONFIG['QUARANTINE_PER_PAGE'] == 75) echo ' selected="selected"'; ?>>75</option>
+ <option value="100"<?php if ($CONFIG['QUARANTINE_PER_PAGE'] == 100) echo ' selected="selected"'; ?>>100</option>
+ <option value="125"<?php if ($CONFIG['QUARANTINE_PER_PAGE'] == 125) echo ' selected="selected"'; ?>>125</option>
+ <option value="150"<?php if ($CONFIG['QUARANTINE_PER_PAGE'] == 150) echo ' selected="selected"'; ?>>150</option>
+ </select>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+
+<?php include("fend.inc"); ?>
+</body>
+</html> \ No newline at end of file
diff --git a/packages/dspam/www/dspam-settings-algo.php b/packages/dspam/www/dspam-settings-algo.php
new file mode 100644
index 00000000..58ffb247
--- /dev/null
+++ b/packages/dspam/www/dspam-settings-algo.php
@@ -0,0 +1,204 @@
+<?php
+/* $Id$ */
+/*
+ dspam-settings-algo.php
+
+ Copyright (C) 2006 Daniel S. Haischt.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+*/
+
+$pgtitle = array(gettext("Services"),
+ gettext("DSPAM"),
+ gettext("Advanced Settings"),
+ gettext("Edit Algorithm"));
+
+require("guiconfig.inc");
+include("/usr/local/pkg/dspam.inc");
+
+if (isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) {
+
+/*
+ The following code presumes, that the following XML structure exists or
+ if it does not exist, it will be created.
+
+ <algorithm>
+ <name>foo</name>
+ <descr>foo desc</descr>
+ </algorithm>
+ <algorithm>
+ <name>bar</name>
+ <descr>bar desc</descr>
+ </algorithm>
+*/
+
+if (!is_array($config['installedpackages']['dspam']['config'][0]['algorithm'])) {
+ $config['installedpackages']['dspam']['config'][0]['algorithm'] = array();
+}
+
+$t_algos = &$config['installedpackages']['dspam']['config'][0]['algorithm'];
+
+/* ID is only set if the user wants to edit an existing entry */
+$id = $_GET['id'];
+$sectionid = $_GET['sectionid'];
+if (isset($_POST['id']))
+ $id = $_POST['id'];
+if (isset($_POST['sectionid']))
+ $sectionid = $_POST['sectionid'];
+
+if (isset($id) && $t_algos[$id]) {
+ $pconfig['name'] = $t_algos[$id]['name'];
+ $pconfig['descr'] = $t_algos[$id]['descr'];
+} else {
+ $pconfig['name'] = $_GET['aname'];
+ $pconfig['descr'] = $_GET['descr'];
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "aname");
+ $reqdfieldsn = explode(",", "DSPAM Algorithm Name");
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
+
+ /* check for overlaps */
+ foreach ($t_algos as $algo) {
+ if (isset($id) && ($t_algos[$id]) && ($t_algos[$id] === $algo)) {
+ continue;
+ }
+ if ($algo['name'] == $_POST['aname']) {
+ $input_errors[] = gettext("This algorithm name already exists.");
+ break;
+ }
+ }
+
+ /* if this is an AJAX caller then handle via JSON */
+ if(isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+ }
+
+ if (!$input_errors) {
+ $algo = array();
+ $algo['name'] = $_POST['aname'];
+ $algo['descr'] = $_POST['descr'];
+
+ if (isset($id) && $t_algos[$id])
+ $t_algos[$id] = $algo;
+ else
+ $t_algos[] = $algo;
+
+ write_config();
+
+ $retval = 0;
+ config_lock();
+ $retval = dspam_configure();
+ config_unlock();
+
+ $savemsg = get_std_save_message($retval);
+
+ isset($sectionid) ? $header = "dspam-settings.php?sectionid={$sectionid}" : $header = "dspam-settings.php";
+ pfSenseHeader($header);
+ exit;
+ }
+}
+
+/* if ajax is calling, give them an update message */
+if(isAjax())
+ print_info_box_np($savemsg);
+
+include("head.inc");
+/* put your custom HTML head content here */
+/* using some of the $pfSenseHead function calls */
+echo $pfSenseHead->getHTML();
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+ <form action="dspam-settings-algo.php" method="post" name="iform" id="iform">
+ <div name="inputerrors" id="inputerrors"></div>
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("DSPAM Algorithm Name");?></td>
+ <td width="78%" class="vtable">
+ <!-- <input name="aname" type="text" class="formfld" id="aname" size="30" value="<?=htmlspecialchars($pconfig['name']);?>"> -->
+ <select name="aname" id="aname" class="formselect">
+ <option value="naive" <?php if($pconfig['name'] == "naive") echo('selected=\"selected\"');?>>naive</option>
+ <option value="graham" <?php if($pconfig['name'] == "graham") echo('selected=\"selected\"');?>>graham</option>
+ <option value="burton" <?php if($pconfig['name'] == "burton") echo('selected=\"selected\"');?>>burton</option>
+ <option value="robinson" <?php if($pconfig['name'] == "robinson") echo('selected=\"selected\"');?>>robinson</option>
+ <option value="chi-square" <?php if($pconfig['name'] == "chi-square") echo('selected=\"selected\"');?>>chi-square</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>">
+ <br> <span class="vexpl"><?=gettext("You may enter a description here
+ for your reference (not parsed).");?></span></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input id="submit" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>"> <input id="cancelbutton" class="formbtn" type="button" value="<?=gettext("Cancel");?>" onclick="history.back()">
+ <?php if (isset($id) && $t_algos[$id]): ?>
+ <input name="id" type="hidden" value="<?=$id;?>">
+ <?php endif; ?>
+ <?php if (isset($sectionid)): ?>
+ <input name="sectionid" type="hidden" value="<?=$sectionid;?>">
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+ </form>
+<?
+ } else {
+?>
+<?php
+ $input_errors[] = "Access to this particular site was denied. You need DSPAM admin access rights to be able to view it.";
+
+ include("head.inc");
+ echo $pfSenseHead->getHTML();
+?>
+<?php include("fbegin.inc");?>
+<?php if ($input_errors) print_input_errors($input_errors);?>
+<?php if ($savemsg) print_info_box($savemsg);?>
+ <body link="#000000" vlink="#000000" alink="#000000">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td valign="top" class="listtopic">Access denied for: <?=$HTTP_SERVER_VARS['AUTH_USER']?></td>
+ </tr>
+ </table>
+<?php
+ } // end of access denied code
+?>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/packages/dspam/www/dspam-settings-bmta.php b/packages/dspam/www/dspam-settings-bmta.php
new file mode 100644
index 00000000..c670085d
--- /dev/null
+++ b/packages/dspam/www/dspam-settings-bmta.php
@@ -0,0 +1,202 @@
+<?php
+/* $Id$ */
+/*
+ dspam-settings-feat.php
+
+ Copyright (C) 2006 Daniel S. Haischt.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+*/
+
+$pgtitle = array(gettext("Services"),
+ gettext("DSPAM"),
+ gettext("Advanced Settings"),
+ gettext("Edit Broken MTA Settings"));
+
+require("guiconfig.inc");
+include("/usr/local/pkg/dspam.inc");
+
+if (isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) {
+
+/*
+ The following code presumes, that the following XML structure exists or
+ if it does not exist, it will be created.
+
+ <bmta>
+ <name>foo</name>
+ <descr>foo desc</descr>
+ </bmta>
+ <bmta>
+ <name>bar</name>
+ <descr>bar desc</descr>
+ </bmta>
+*/
+
+if (!is_array($config['installedpackages']['dspam']['config'][0]['bmta'])) {
+ $config['installedpackages']['dspam']['config'][0]['bmta'] = array();
+}
+
+$t_bmtas = &$config['installedpackages']['dspam']['config'][0]['bmta'];
+
+/* ID is only set if the user wants to edit an existing entry */
+$id = $_GET['id'];
+$sectionid = $_GET['sectionid'];
+if (isset($_POST['id']))
+ $id = $_POST['id'];
+if (isset($_POST['sectionid']))
+ $sectionid = $_POST['sectionid'];
+
+if (isset($id) && $t_bmtas[$id]) {
+ $pconfig['name'] = $t_bmtas[$id]['name'];
+ $pconfig['descr'] = $t_bmtas[$id]['descr'];
+} else {
+ $pconfig['name'] = $_GET['oname'];
+ $pconfig['descr'] = $_GET['descr'];
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "oname");
+ $reqdfieldsn = explode(",", "Broken MTA Option Name");
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
+
+ /* check for overlaps */
+ foreach ($t_bmtas as $bmta) {
+ if (isset($id) && ($t_bmtas[$id]) && ($t_bmtas[$id] === $bmta)) {
+ continue;
+ }
+ if ($bmta['name'] == $_POST['oname']) {
+ $input_errors[] = gettext("This option name already exists.");
+ break;
+ }
+ }
+
+ /* if this is an AJAX caller then handle via JSON */
+ if(isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+ }
+
+ if (!$input_errors) {
+ $bmta = array();
+ $bmta['name'] = $_POST['oname'];
+ $bmta['descr'] = $_POST['descr'];
+
+ if (isset($id) && $t_bmtas[$id])
+ $t_bmtas[$id] = $bmta;
+ else
+ $t_bmtas[] = $bmta;
+
+ write_config();
+
+ $retval = 0;
+ config_lock();
+ $retval = dspam_configure();
+ config_unlock();
+
+ $savemsg = get_std_save_message($retval);
+
+ isset($sectionid) ? $header = "dspam-settings.php?sectionid={$sectionid}" : $header = "dspam-settings.php";
+ pfSenseHeader($header);
+ exit;
+ }
+}
+
+/* if ajax is calling, give them an update message */
+if(isAjax())
+ print_info_box_np($savemsg);
+
+include("head.inc");
+/* put your custom HTML head content here */
+/* using some of the $pfSenseHead function calls */
+echo $pfSenseHead->getHTML();
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+ <form action="dspam-settings-bmta.php" method="post" name="iform" id="iform">
+ <div name="inputerrors" id="inputerrors"></div>
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("DSPAM Feature Name");?></td>
+ <td width="78%" class="vtable">
+ <!-- <input name="oname" type="text" class="formfld" id="oname" size="30" value="<?=htmlspecialchars($pconfig['name']);?>"> -->
+ <select name="oname" id="oname" class="formselect">
+ <option value="returnCodes" <?php if($pconfig['name'] == "returnCodes") echo('selected=\"selected\"');?>>returnCodes</option>
+ <option value="case" <?php if($pconfig['name'] == "case") echo('selected=\"selected\"');?>>case</option>
+ <option value="lineStripping" <?php if($pconfig['name'] == "lineStripping") echo('selected=\"selected\"');?>>lineStripping</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>">
+ <br> <span class="vexpl"><?=gettext("You may enter a description here
+ for your reference (not parsed).");?></span></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input id="submit" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>"> <input id="cancelbutton" class="formbtn" type="button" value="<?=gettext("Cancel");?>" onclick="history.back()">
+ <?php if (isset($id) && $t_bmtas[$id]): ?>
+ <input name="id" type="hidden" value="<?=$id;?>">
+ <?php endif; ?>
+ <?php if (isset($sectionid)): ?>
+ <input name="sectionid" type="hidden" value="<?=$sectionid;?>">
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+</form>
+<?
+ } else {
+?>
+<?php
+ $input_errors[] = "Access to this particular site was denied. You need DSPAM admin access rights to be able to view it.";
+
+ include("head.inc");
+ echo $pfSenseHead->getHTML();
+?>
+<?php include("fbegin.inc");?>
+<?php if ($input_errors) print_input_errors($input_errors);?>
+<?php if ($savemsg) print_info_box($savemsg);?>
+ <body link="#000000" vlink="#000000" alink="#000000">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td valign="top" class="listtopic">Access denied for: <?=$HTTP_SERVER_VARS['AUTH_USER']?></td>
+ </tr>
+ </table>
+<?php
+ } // end of access denied code
+?>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/packages/dspam/www/dspam-settings-feat.php b/packages/dspam/www/dspam-settings-feat.php
new file mode 100644
index 00000000..7805fa43
--- /dev/null
+++ b/packages/dspam/www/dspam-settings-feat.php
@@ -0,0 +1,203 @@
+<?php
+/* $Id$ */
+/*
+ dspam-settings-feat.php
+
+ Copyright (C) 2006 Daniel S. Haischt.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+*/
+
+$pgtitle = array(gettext("Services"),
+ gettext("DSPAM"),
+ gettext("Advanced Settings"),
+ gettext("Edit DSPAM Feature"));
+
+require("guiconfig.inc");
+include("/usr/local/pkg/dspam.inc");
+
+if (isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) {
+
+/*
+ The following code presumes, that the following XML structure exists or
+ if it does not exist, it will be created.
+
+ <feature>
+ <name>foo</name>
+ <descr>foo desc</descr>
+ </feature>
+ <feature>
+ <name>bar</name>
+ <descr>bar desc</descr>
+ </feature>
+*/
+
+if (!is_array($config['installedpackages']['dspam']['config'][0]['feature'])) {
+ $config['installedpackages']['dspam']['config'][0]['feature'] = array();
+}
+
+$t_features = &$config['installedpackages']['dspam']['config'][0]['feature'];
+
+/* ID is only set if the user wants to edit an existing entry */
+$id = $_GET['id'];
+$sectionid = $_GET['sectionid'];
+if (isset($_POST['id']))
+ $id = $_POST['id'];
+if (isset($_POST['sectionid']))
+ $sectionid = $_POST['sectionid'];
+
+if (isset($id) && $t_features[$id]) {
+ $pconfig['name'] = $t_features[$id]['name'];
+ $pconfig['descr'] = $t_features[$id]['descr'];
+} else {
+ $pconfig['name'] = $_GET['fname'];
+ $pconfig['descr'] = $_GET['descr'];
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "fname");
+ $reqdfieldsn = explode(",", "DSPAM Feature Name");
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
+
+ /* check for overlaps */
+ foreach ($t_features as $feature) {
+ if (isset($id) && ($t_features[$id]) && ($t_features[$id] === $feature)) {
+ continue;
+ }
+ if ($feature['name'] == $_POST['fname']) {
+ $input_errors[] = gettext("This feature name already exists.");
+ break;
+ }
+ }
+
+ /* if this is an AJAX caller then handle via JSON */
+ if(isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+ }
+
+ if (!$input_errors) {
+ $feature = array();
+ $feature['name'] = $_POST['fname'];
+ $feature['descr'] = $_POST['descr'];
+
+ if (isset($id) && $t_features[$id])
+ $t_features[$id] = $feature;
+ else
+ $t_features[] = $feature;
+
+ write_config();
+
+ $retval = 0;
+ config_lock();
+ $retval = dspam_configure();
+ config_unlock();
+
+ $savemsg = get_std_save_message($retval);
+
+ isset($sectionid) ? $header = "dspam-settings.php?sectionid={$sectionid}" : $header = "dspam-settings.php";
+ pfSenseHeader($header);
+ exit;
+ }
+}
+
+/* if ajax is calling, give them an update message */
+if(isAjax())
+ print_info_box_np($savemsg);
+
+include("head.inc");
+/* put your custom HTML head content here */
+/* using some of the $pfSenseHead function calls */
+echo $pfSenseHead->getHTML();
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+ <form action="dspam-settings-feat.php" method="post" name="iform" id="iform">
+ <div name="inputerrors" id="inputerrors"></div>
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("DSPAM Feature Name");?></td>
+ <td width="78%" class="vtable">
+ <!-- <input name="fname" type="text" class="formfld" id="fname" size="30" value="<?=htmlspecialchars($pconfig['name']);?>"> -->
+ <select name="fname" id="fname" class="formselect">
+ <option value="sbph" <?php if($pconfig['name'] == "sbph") echo('selected=\"selected\"');?>>sbph</option>
+ <option value="noise" <?php if($pconfig['name'] == "noise") echo('selected=\"selected\"');?>>noise</option>
+ <option value="chained" <?php if($pconfig['name'] == "chained") echo('selected=\"selected\"');?>>chained</option>
+ <option value="whitelist" <?php if($pconfig['name'] == "whitelist") echo('selected=\"selected\"');?>>whitelist</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>">
+ <br> <span class="vexpl"><?=gettext("You may enter a description here
+ for your reference (not parsed).");?></span></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input id="submit" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>"> <input id="cancelbutton" class="formbtn" type="button" value="<?=gettext("Cancel");?>" onclick="history.back()">
+ <?php if (isset($id) && $t_features[$id]): ?>
+ <input name="id" type="hidden" value="<?=$id;?>">
+ <?php endif; ?>
+ <?php if (isset($sectionid)): ?>
+ <input name="sectionid" type="hidden" value="<?=$sectionid;?>">
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+</form>
+<?
+ } else {
+?>
+<?php
+ $input_errors[] = "Access to this particular site was denied. You need DSPAM admin access rights to be able to view it.";
+
+ include("head.inc");
+ echo $pfSenseHead->getHTML();
+?>
+<?php include("fbegin.inc");?>
+<?php if ($input_errors) print_input_errors($input_errors);?>
+<?php if ($savemsg) print_info_box($savemsg);?>
+ <body link="#000000" vlink="#000000" alink="#000000">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td valign="top" class="listtopic">Access denied for: <?=$HTTP_SERVER_VARS['AUTH_USER']?></td>
+ </tr>
+ </table>
+<?php
+ } // end of access denied code
+?>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/packages/dspam/www/dspam-settings-header.php b/packages/dspam/www/dspam-settings-header.php
new file mode 100644
index 00000000..d0a5dd9c
--- /dev/null
+++ b/packages/dspam/www/dspam-settings-header.php
@@ -0,0 +1,197 @@
+<?php
+/* $Id$ */
+/*
+ dspam-settings-tuser.php
+
+ Copyright (C) 2006 Daniel S. Haischt.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+*/
+
+$pgtitle = array(gettext("Services"),
+ gettext("DSPAM"),
+ gettext("Advanced Settings"),
+ gettext("Edit Mail Header"));
+
+require("guiconfig.inc");
+include("/usr/local/pkg/dspam.inc");
+
+if (isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) {
+
+/*
+ The following code presumes, that the following XML structure exists or
+ if it does not exist, it will be created.
+
+ <header>
+ <name>foo</name>
+ <descr>foo desc</descr>
+ </header>
+ <header>
+ <name>bar</name>
+ <descr>foo desc</descr>
+ </header>
+*/
+
+if (!is_array($config['installedpackages']['dspam']['config'][0]['header'])) {
+ $config['installedpackages']['dspam']['config'][0]['header'] = array();
+}
+
+$t_headers = &$config['installedpackages']['dspam']['config'][0]['header'];
+
+/* ID is only set if the user wants to edit an existing entry */
+$id = $_GET['id'];
+$sectionid = $_GET['sectionid'];
+if (isset($_POST['id']))
+ $id = $_POST['id'];
+if (isset($_POST['sectionid']))
+ $sectionid = $_POST['sectionid'];
+
+if (isset($id) && $t_headers[$id]) {
+ $pconfig['name'] = $t_headers[$id]['name'];
+ $pconfig['descr'] = $t_headers[$id]['descr'];
+} else {
+ $pconfig['name'] = $_GET['hname'];
+ $pconfig['descr'] = $_GET['descr'];
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "hname");
+ $reqdfieldsn = explode(",", "Header Name");
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
+
+ /* check for overlaps */
+ foreach ($t_headers as $header) {
+ if (isset($id) && ($t_headers[$id]) && ($t_headers[$id] === $header)) {
+ continue;
+ }
+ if ($header['name'] == $_POST['hname']) {
+ $input_errors[] = gettext("This header name already exists.");
+ break;
+ }
+ }
+
+ /* if this is an AJAX caller then handle via JSON */
+ if(isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+ }
+
+ if (!$input_errors) {
+ $header = array();
+ $header['name'] = $_POST['hname'];
+ $header['descr'] = $_POST['descr'];
+
+ if (isset($id) && $t_headers[$id])
+ $t_headers[$id] = $header;
+ else
+ $t_headers[] = $header;
+
+ write_config();
+
+ $retval = 0;
+ config_lock();
+ $retval = dspam_configure();
+ config_unlock();
+
+ $savemsg = get_std_save_message($retval);
+
+ isset($sectionid) ? $header = "dspam-settings.php?sectionid={$sectionid}" : $header = "dspam-settings.php";
+ pfSenseHeader($header);
+ exit;
+ }
+}
+
+/* if ajax is calling, give them an update message */
+if(isAjax())
+ print_info_box_np($savemsg);
+
+include("head.inc");
+/* put your custom HTML head content here */
+/* using some of the $pfSenseHead function calls */
+echo $pfSenseHead->getHTML();
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+ <form action="dspam-settings-header.php" method="post" name="iform" id="iform">
+ <div name="inputerrors" id="inputerrors"></div>
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Header Name");?></td>
+ <td width="78%" class="vtable">
+ <input name="hname" type="text" class="formfld unknown" id="hname" size="30" value="<?=htmlspecialchars($pconfig['name']);?>">
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>">
+ <br> <span class="vexpl"><?=gettext("You may enter a description here
+ for your reference (not parsed).");?></span></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input id="submit" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>"> <input id="cancelbutton" class="formbtn" type="button" value="<?=gettext("Cancel");?>" onclick="history.back()">
+ <?php if (isset($id) && $t_headers[$id]): ?>
+ <input name="id" type="hidden" value="<?=$id;?>">
+ <?php endif; ?>
+ <?php if (isset($sectionid)): ?>
+ <input name="sectionid" type="hidden" value="<?=$sectionid;?>">
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+</form>
+<?
+ } else {
+?>
+<?php
+ $input_errors[] = "Access to this particular site was denied. You need DSPAM admin access rights to be able to view it.";
+
+ include("head.inc");
+ echo $pfSenseHead->getHTML();
+?>
+<?php include("fbegin.inc");?>
+<?php if ($input_errors) print_input_errors($input_errors);?>
+<?php if ($savemsg) print_info_box($savemsg);?>
+ <body link="#000000" vlink="#000000" alink="#000000">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td valign="top" class="listtopic">Access denied for: <?=$HTTP_SERVER_VARS['AUTH_USER']?></td>
+ </tr>
+ </table>
+<?php
+ } // end of access denied code
+?>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/packages/dspam/www/dspam-settings-overr.php b/packages/dspam/www/dspam-settings-overr.php
new file mode 100644
index 00000000..d938b313
--- /dev/null
+++ b/packages/dspam/www/dspam-settings-overr.php
@@ -0,0 +1,197 @@
+<?php
+/* $Id$ */
+/*
+ dspam-settings-overr.php
+
+ Copyright (C) 2006 Daniel S. Haischt.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+*/
+
+$pgtitle = array(gettext("Services"),
+ gettext("DSPAM"),
+ gettext("Advanced Settings"),
+ gettext("Edit Override Value"));
+
+require("guiconfig.inc");
+include("/usr/local/pkg/dspam.inc");
+
+if (isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) {
+
+/*
+ The following code presumes, that the following XML structure exists or
+ if it does not exist, it will be created.
+
+ <override>
+ <value>foo</value>
+ <descr>foo desc</descr>
+ </override>
+ <override>
+ <value>bar</value>
+ <descr>bar desc</descr>
+ </override>
+*/
+
+if (!is_array($config['installedpackages']['dspam']['config'][0]['override'])) {
+ $config['installedpackages']['dspam']['config'][0]['override'] = array();
+}
+
+$t_overr = &$config['installedpackages']['dspam']['config'][0]['override'];
+
+/* ID is only set if the user wants to edit an existing entry */
+$id = $_GET['id'];
+$sectionid = $_GET['sectionid'];
+if (isset($_POST['id']))
+ $id = $_POST['id'];
+if (isset($_POST['sectionid']))
+ $sectionid = $_POST['sectionid'];
+
+if (isset($id) && $t_overr[$id]) {
+ $pconfig['value'] = $t_overr[$id]['value'];
+ $pconfig['descr'] = $t_overr[$id]['descr'];
+} else {
+ $pconfig['value'] = $_GET['ovalue'];
+ $pconfig['descr'] = $_GET['descr'];
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "ovalue");
+ $reqdfieldsn = explode(",", "DSPAM Override Value");
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
+
+ /* check for overlaps */
+ foreach ($t_overr as $over) {
+ if (isset($id) && ($t_overr[$id]) && ($t_overr[$id] === $over)) {
+ continue;
+ }
+ if ($over['value'] == $_POST['ovalue']) {
+ $input_errors[] = gettext("This override value exists.");
+ break;
+ }
+ }
+
+ /* if this is an AJAX caller then handle via JSON */
+ if(isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+ }
+
+ if (!$input_errors) {
+ $over = array();
+ $over['value'] = $_POST['ovalue'];
+ $over['descr'] = $_POST['descr'];
+
+ if (isset($id) && $t_overr[$id])
+ $t_overr[$id] = $over;
+ else
+ $t_overr[] = $over;
+
+ write_config();
+
+ $retval = 0;
+ config_lock();
+ $retval = dspam_configure();
+ config_unlock();
+
+ $savemsg = get_std_save_message($retval);
+
+ isset($sectionid) ? $header = "dspam-settings.php?sectionid={$sectionid}" : $header = "dspam-settings.php";
+ pfSenseHeader($header);
+ exit;
+ }
+}
+
+/* if ajax is calling, give them an update message */
+if(isAjax())
+ print_info_box_np($savemsg);
+
+include("head.inc");
+/* put your custom HTML head content here */
+/* using some of the $pfSenseHead function calls */
+echo $pfSenseHead->getHTML();
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+ <form action="dspam-settings-overr.php" method="post" name="iform" id="iform">
+ <div name="inputerrors" id="inputerrors"></div>
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("DSPAM Override Value");?></td>
+ <td width="78%" class="vtable">
+ <input name="ovalue" type="text" class="formfld unknown" id="ovalue" size="30" value="<?=htmlspecialchars($pconfig['value']);?>">
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>">
+ <br> <span class="vexpl"><?=gettext("You may enter a description here
+ for your reference (not parsed).");?></span></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input id="submit" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>"> <input id="cancelbutton" class="formbtn" type="button" value="<?=gettext("Cancel");?>" onclick="history.back()">
+ <?php if (isset($id) && $t_overr[$id]): ?>
+ <input name="id" type="hidden" value="<?=$id;?>">
+ <?php endif; ?>
+ <?php if (isset($sectionid)): ?>
+ <input name="sectionid" type="hidden" value="<?=$sectionid;?>">
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+</form>
+<?
+ } else {
+?>
+<?php
+ $input_errors[] = "Access to this particular site was denied. You need DSPAM admin access rights to be able to view it.";
+
+ include("head.inc");
+ echo $pfSenseHead->getHTML();
+?>
+<?php include("fbegin.inc");?>
+<?php if ($input_errors) print_input_errors($input_errors);?>
+<?php if ($savemsg) print_info_box($savemsg);?>
+ <body link="#000000" vlink="#000000" alink="#000000">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td valign="top" class="listtopic">Access denied for: <?=$HTTP_SERVER_VARS['AUTH_USER']?></td>
+ </tr>
+ </table>
+<?php
+ } // end of access denied code
+?>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/packages/dspam/www/dspam-settings-prefs.php b/packages/dspam/www/dspam-settings-prefs.php
new file mode 100644
index 00000000..c30cb7bd
--- /dev/null
+++ b/packages/dspam/www/dspam-settings-prefs.php
@@ -0,0 +1,197 @@
+<?php
+/* $Id$ */
+/*
+ dspam-settings-prefs.php
+
+ Copyright (C) 2006 Daniel S. Haischt.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+*/
+
+$pgtitle = array(gettext("Services"),
+ gettext("DSPAM"),
+ gettext("Advanced Settings"),
+ gettext("Edit DSPAM Preferences"));
+
+require("guiconfig.inc");
+include("/usr/local/pkg/dspam.inc");
+
+if (isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) {
+
+/*
+ The following code presumes, that the following XML structure exists or
+ if it does not exist, it will be created.
+
+ <preference>
+ <name>foo</name>
+ <descr>foo desc</descr>
+ </preference>
+ <preference>
+ <name>bar</name>
+ <descr>bar desc</descr>
+ </preference>
+*/
+
+if (!is_array($config['installedpackages']['dspam']['config'][0]['preference'])) {
+ $config['installedpackages']['dspam']['config'][0]['preference'] = array();
+}
+
+$t_prefs = &$config['installedpackages']['dspam']['config'][0]['preference'];
+
+/* ID is only set if the user wants to edit an existing entry */
+$id = $_GET['id'];
+$sectionid = $_GET['sectionid'];
+if (isset($_POST['id']))
+ $id = $_POST['id'];
+if (isset($_POST['sectionid']))
+ $sectionid = $_POST['sectionid'];
+
+if (isset($id) && $t_prefs[$id]) {
+ $pconfig['value'] = $t_prefs[$id]['value'];
+ $pconfig['descr'] = $t_prefs[$id]['descr'];
+} else {
+ $pconfig['value'] = $_GET['pvalue'];
+ $pconfig['descr'] = $_GET['descr'];
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "pvalue");
+ $reqdfieldsn = explode(",", "DSPAM Algorithm Name");
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
+
+ /* check for overlaps */
+ foreach ($t_prefs as $pref) {
+ if (isset($id) && ($t_prefs[$id]) && ($t_prefs[$id] === $pref)) {
+ continue;
+ }
+ if ($pref['value'] == $_POST['pvalue']) {
+ $input_errors[] = gettext("This preference value already exists.");
+ break;
+ }
+ }
+
+ /* if this is an AJAX caller then handle via JSON */
+ if(isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+ }
+
+ if (!$input_errors) {
+ $pref = array();
+ $pref['value'] = $_POST['pvalue'];
+ $pref['descr'] = $_POST['descr'];
+
+ if (isset($id) && $t_prefs[$id])
+ $t_prefs[$id] = $pref;
+ else
+ $t_prefs[] = $pref;
+
+ write_config();
+
+ $retval = 0;
+ config_lock();
+ $retval = dspam_configure();
+ config_unlock();
+
+ $savemsg = get_std_save_message($retval);
+
+ isset($sectionid) ? $header = "dspam-settings.php?sectionid={$sectionid}" : $header = "dspam-settings.php";
+ pfSenseHeader($header);
+ exit;
+ }
+}
+
+/* if ajax is calling, give them an update message */
+if(isAjax())
+ print_info_box_np($savemsg);
+
+include("head.inc");
+/* put your custom HTML head content here */
+/* using some of the $pfSenseHead function calls */
+echo $pfSenseHead->getHTML();
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+ <form action="dspam-settings-prefs.php" method="post" name="iform" id="iform">
+ <div name="inputerrors" id="inputerrors"></div>
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("DSPAM Algorithm Name");?></td>
+ <td width="78%" class="vtable">
+ <input name="pvalue" type="text" class="formfld unknown" id="pvalue" size="30" value="<?=htmlspecialchars($pconfig['value']);?>">
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>">
+ <br> <span class="vexpl"><?=gettext("You may enter a description here
+ for your reference (not parsed).");?></span></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input id="submit" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>"> <input id="cancelbutton" class="formbtn" type="button" value="<?=gettext("Cancel");?>" onclick="history.back()">
+ <?php if (isset($id) && $t_prefs[$id]): ?>
+ <input name="id" type="hidden" value="<?=$id;?>">
+ <?php endif; ?>
+ <?php if (isset($sectionid)): ?>
+ <input name="sectionid" type="hidden" value="<?=$sectionid;?>">
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+</form>
+<?
+ } else {
+?>
+<?php
+ $input_errors[] = "Access to this particular site was denied. You need DSPAM admin access rights to be able to view it.";
+
+ include("head.inc");
+ echo $pfSenseHead->getHTML();
+?>
+<?php include("fbegin.inc");?>
+<?php if ($input_errors) print_input_errors($input_errors);?>
+<?php if ($savemsg) print_info_box($savemsg);?>
+ <body link="#000000" vlink="#000000" alink="#000000">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td valign="top" class="listtopic">Access denied for: <?=$HTTP_SERVER_VARS['AUTH_USER']?></td>
+ </tr>
+ </table>
+<?php
+ } // end of access denied code
+?>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/packages/dspam/www/dspam-settings-spwd.php b/packages/dspam/www/dspam-settings-spwd.php
new file mode 100644
index 00000000..7912b0f6
--- /dev/null
+++ b/packages/dspam/www/dspam-settings-spwd.php
@@ -0,0 +1,197 @@
+<?php
+/* $Id$ */
+/*
+ dspam-settings-overr.php
+
+ Copyright (C) 2006 Daniel S. Haischt.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+*/
+
+$pgtitle = array(gettext("Services"),
+ gettext("DSPAM"),
+ gettext("Advanced Settings"),
+ gettext("Edit Server Password"));
+
+require("guiconfig.inc");
+include("/usr/local/pkg/dspam.inc");
+
+if (isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) {
+
+/*
+ The following code presumes, that the following XML structure exists or
+ if it does not exist, it will be created.
+
+ <server-pwd>
+ <value>foo</value>
+ <descr>foo desc</descr>
+ </server-pwd>
+ <server-pwd>
+ <value>bar</value>
+ <descr>bar desc</descr>
+ </server-pwd>
+*/
+
+if (!is_array($config['installedpackages']['dspam']['config'][0]['server-pwd'])) {
+ $config['installedpackages']['dspam']['config'][0]['server-pwd'] = array();
+}
+
+$t_spwds = &$config['installedpackages']['dspam']['config'][0]['server-pwd'];
+
+/* ID is only set if the user wants to edit an existing entry */
+$id = $_GET['id'];
+$sectionid = $_GET['sectionid'];
+if (isset($_POST['id']))
+ $id = $_POST['id'];
+if (isset($_POST['sectionid']))
+ $sectionid = $_POST['sectionid'];
+
+if (isset($id) && $t_spwds[$id]) {
+ $pconfig['value'] = $t_spwds[$id]['value'];
+ $pconfig['descr'] = $t_spwds[$id]['descr'];
+} else {
+ $pconfig['value'] = $_GET['pwdvalue'];
+ $pconfig['descr'] = $_GET['descr'];
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "pwdvalue");
+ $reqdfieldsn = explode(",", "Server Password Value");
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
+
+ /* check for overlaps */
+ foreach ($t_spwds as $spwd) {
+ if (isset($id) && ($t_spwds[$id]) && ($t_spwds[$id] === $spwd)) {
+ continue;
+ }
+ if ($spwd['value'] == $_POST['pwdvalue']) {
+ $input_errors[] = gettext("This password value already exists.");
+ break;
+ }
+ }
+
+ /* if this is an AJAX caller then handle via JSON */
+ if(isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+ }
+
+ if (!$input_errors) {
+ $pwd = array();
+ $pwd['value'] = $_POST['pwdvalue'];
+ $pwd['descr'] = $_POST['descr'];
+
+ if (isset($id) && $t_spwds[$id])
+ $t_spwds[$id] = $pwd;
+ else
+ $t_spwds[] = $pwd;
+
+ write_config();
+
+ $retval = 0;
+ config_lock();
+ $retval = dspam_configure();
+ config_unlock();
+
+ $savemsg = get_std_save_message($retval);
+
+ isset($sectionid) ? $header = "dspam-settings.php?sectionid={$sectionid}" : $header = "dspam-settings.php";
+ pfSenseHeader($header);
+ exit;
+ }
+}
+
+/* if ajax is calling, give them an update message */
+if(isAjax())
+ print_info_box_np($savemsg);
+
+include("head.inc");
+/* put your custom HTML head content here */
+/* using some of the $pfSenseHead function calls */
+echo $pfSenseHead->getHTML();
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+ <form action="dspam-settings-spwd.php" method="post" name="iform" id="iform">
+ <div name="inputerrors" id="inputerrors"></div>
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Server Password Value");?></td>
+ <td width="78%" class="vtable">
+ <input name="pwdvalue" type="text" class="formfld unknown" id="pwdvalue" size="30" value="<?=htmlspecialchars($pconfig['value']);?>">
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>">
+ <br> <span class="vexpl"><?=gettext("You may enter a description here
+ for your reference (not parsed).");?></span></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input id="submit" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>"> <input id="cancelbutton" class="formbtn" type="button" value="<?=gettext("Cancel");?>" onclick="history.back()">
+ <?php if (isset($id) && $t_spwds[$id]): ?>
+ <input name="id" type="hidden" value="<?=$id;?>">
+ <?php endif; ?>
+ <?php if (isset($sectionid)): ?>
+ <input name="sectionid" type="hidden" value="<?=$sectionid;?>">
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+</form>
+<?
+ } else {
+?>
+<?php
+ $input_errors[] = "Access to this particular site was denied. You need DSPAM admin access rights to be able to view it.";
+
+ include("head.inc");
+ echo $pfSenseHead->getHTML();
+?>
+<?php include("fbegin.inc");?>
+<?php if ($input_errors) print_input_errors($input_errors);?>
+<?php if ($savemsg) print_info_box($savemsg);?>
+ <body link="#000000" vlink="#000000" alink="#000000">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td valign="top" class="listtopic">Access denied for: <?=$HTTP_SERVER_VARS['AUTH_USER']?></td>
+ </tr>
+ </table>
+<?php
+ } // end of access denied code
+?>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/packages/dspam/www/dspam-settings-tuser.php b/packages/dspam/www/dspam-settings-tuser.php
new file mode 100644
index 00000000..57e9ec71
--- /dev/null
+++ b/packages/dspam/www/dspam-settings-tuser.php
@@ -0,0 +1,195 @@
+<?php
+/* $Id$ */
+/*
+ dspam-settings-tuser.php
+
+ Copyright (C) 2006 Daniel S. Haischt.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+*/
+
+$pgtitle = array(gettext("Services"),
+ gettext("DSPAM"),
+ gettext("Advanced Settings"),
+ gettext("Edit UNIX user"));
+
+require("guiconfig.inc");
+include("/usr/local/pkg/dspam.inc");
+
+if (isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) {
+
+/*
+ The following code presumes, that the following XML structure exists or
+ if it does not exist, it will be created.
+
+ <tuser>
+ <name>foo</name>
+ </tuser>
+ <tuser>
+ <name>bar</name>
+ </tuser>
+*/
+
+if (!is_array($config['installedpackages']['dspam']['config'][0]['tuser'])) {
+ $config['installedpackages']['dspam']['config'][0]['tuser'] = array();
+}
+
+$t_users = &$config['installedpackages']['dspam']['config'][0]['tuser'];
+
+/* ID is only set if the user wants to edit an existing entry */
+$id = $_GET['id'];
+$sectionid = $_GET['sectionid'];
+if (isset($_POST['id']))
+ $id = $_POST['id'];
+if (isset($_POST['sectionid']))
+ $sectionid = $_POST['sectionid'];
+
+if (isset($id) && $t_users[$id]) {
+ $pconfig['name'] = $t_users[$id]['name'];
+ $pconfig['descr'] = $t_users[$id]['descr'];
+} else {
+ $pconfig['name'] = $_GET['uuname'];
+ $pconfig['descr'] = $_GET['descr'];
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "uuname");
+ $reqdfieldsn = explode(",", "Unix username");
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
+
+ /* check for overlaps */
+ foreach ($t_users as $user) {
+ if (isset($id) && ($t_users[$id]) && ($t_users[$id] === $user)) {
+ continue;
+ }
+ if ($user['name'] == $_POST['uuname']) {
+ $input_errors[] = gettext("This username already exists.");
+ break;
+ }
+ }
+
+ /* if this is an AJAX caller then handle via JSON */
+ if(isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+ }
+
+ if (!$input_errors) {
+ $user = array();
+ $user['name'] = $_POST['uuname'];
+ $user['descr'] = $_POST['descr'];
+
+ if (isset($id) && $t_users[$id])
+ $t_users[$id] = $user;
+ else
+ $t_users[] = $user;
+
+ write_config();
+
+ $retval = 0;
+ config_lock();
+ $retval = dspam_configure();
+ config_unlock();
+
+ $savemsg = get_std_save_message($retval);
+
+ isset($sectionid) ? $header = "dspam-settings.php?sectionid={$sectionid}" : $header = "dspam-settings.php";
+ pfSenseHeader($header);
+ exit;
+ }
+}
+
+/* if ajax is calling, give them an update message */
+if(isAjax())
+ print_info_box_np($savemsg);
+
+include("head.inc");
+/* put your custom HTML head content here */
+/* using some of the $pfSenseHead function calls */
+echo $pfSenseHead->getHTML();
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+ <form action="dspam-settings-tuser.php" method="post" name="iform" id="iform">
+ <div name="inputerrors" id="inputerrors"></div>
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("UNIX username");?></td>
+ <td width="78%" class="vtable">
+ <input name="uuname" type="text" class="formfld unknown" id="uuname" size="30" value="<?=htmlspecialchars($pconfig['name']);?>">
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>">
+ <br> <span class="vexpl"><?=gettext("You may enter a description here
+ for your reference (not parsed).");?></span></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input id="submit" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>"> <input id="cancelbutton" class="formbtn" type="button" value="<?=gettext("Cancel");?>" onclick="history.back()">
+ <?php if (isset($id) && $t_users[$id]): ?>
+ <input name="id" type="hidden" value="<?=$id;?>">
+ <?php endif; ?>
+ <?php if (isset($sectionid)): ?>
+ <input name="sectionid" type="hidden" value="<?=$sectionid;?>">
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+</form>
+<?
+ } else {
+?>
+<?php
+ $input_errors[] = "Access to this particular site was denied. You need DSPAM admin access rights to be able to view it.";
+
+ include("head.inc");
+ echo $pfSenseHead->getHTML();
+?>
+<?php include("fbegin.inc");?>
+<?php if ($input_errors) print_input_errors($input_errors);?>
+<?php if ($savemsg) print_info_box($savemsg);?>
+ <body link="#000000" vlink="#000000" alink="#000000">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td valign="top" class="listtopic">Access denied for: <?=$HTTP_SERVER_VARS['AUTH_USER']?></td>
+ </tr>
+ </table>
+<?php
+ } // end of access denied code
+?>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/packages/dspam/www/dspam-settings.php b/packages/dspam/www/dspam-settings.php
new file mode 100644
index 00000000..db7a4914
--- /dev/null
+++ b/packages/dspam/www/dspam-settings.php
@@ -0,0 +1,2941 @@
+<?php
+/* $Id$ */
+/*
+ dspam-settings.php
+ Copyright (C) 2006 Daniel S. Haischt
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+*/
+ $pgtitle = array(gettext("Services"),
+ gettext("DSPAM"),
+ gettext("Advanced Settings"),
+ gettext("Overview"));
+
+ require("guiconfig.inc");
+ include("/usr/local/pkg/dspam.inc");
+
+ if (isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) {
+
+ $pconfig['sectionid'] = $_GET['sectionid'];
+
+ $pconfig['sdriver'] = $config['installedpackages']['dspam']['config'][0]['storage-driver'];
+ /* ============================================================================================= */
+ /* == MySQL == */
+ /* ============================================================================================= */
+ $pconfig['msqlserver'] = $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-server'];
+ $pconfig['msqlport'] = $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-port'];
+ $pconfig['msqluser'] = $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-user'];
+ $pconfig['msqlpwd'] = $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-password'];
+ $pconfig['msqldb'] = $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-database'];
+ $pconfig['msqlcomp'] = $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-compress'];
+ $pconfig['msqlsuqt'] = $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-squote'];
+ $pconfig['msqlccache'] = $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-ccache'];
+ $pconfig['msqluid'] = $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-uid'];
+ /* ============================================================================================= */
+ /* == SQLite == */
+ /* ============================================================================================= */
+ $pconfig['slitepr'] = $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['sqlite-pragma'];
+ /* ============================================================================================= */
+ /* == PostgreSQL == */
+ /* ============================================================================================= */
+ $pconfig['pgserver'] = $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-server'];
+ $pconfig['pgport'] = $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-port'];
+ $pconfig['pguser'] = $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-user'];
+ $pconfig['pgpwd'] = $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-password'];
+ $pconfig['pgdb'] = $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-database'];
+ $pconfig['pgccache'] = $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-ccache'];
+ $pconfig['pguid'] = $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-uid'];
+ /* ============================================================================================= */
+ /* == Oracle == */
+ /* ============================================================================================= */
+ $pconfig['oraserver'] = $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['ora-server'];
+ $pconfig['orauser'] = $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['ora-user'];
+ $pconfig['orapwd'] = $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['ora-password'];
+ $pconfig['orasch'] = $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['ora-schema'];
+ /* ============================================================================================= */
+ /* == Hash == */
+ /* ============================================================================================= */
+ $pconfig['hsrmax'] = $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-rec-max'];
+ $pconfig['hsatex'] = $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-auto-ex'];
+ $pconfig['hsmxex'] = $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-max-ext'];
+ $pconfig['hsexsz'] = $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-ext-size'];
+ $pconfig['hsmxse'] = $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-max-seek'];
+ $pconfig['hsccus'] = $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-co-user'];
+ $pconfig['hscoca'] = $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-co-cache'];
+ /* ============================================================================================= */
+ /* == Delivery Settings == */
+ /* ============================================================================================= */
+ $pconfig['dagent'] = $config['installedpackages']['dspam']['config'][0]['tdelivery-agent'];
+ $pconfig['dsthinc'] = $config['installedpackages']['dspam']['config'][0]['thin-client'];
+ $pconfig['tcpipdel'] = $config['installedpackages']['dspam']['config'][0]['tcpip-delivery'];
+ $pconfig['dhost'] = $config['installedpackages']['dspam']['config'][0]['tcpip-delivery-host'];
+ $pconfig['dport'] = $config['installedpackages']['dspam']['config'][0]['tcpip-delivery-port'];
+ $pconfig['dident'] = $config['installedpackages']['dspam']['config'][0]['tcpip-delivery-ident'];
+ $pconfig['delproto'] = $config['installedpackages']['dspam']['config'][0]['tcpip-delivery-proto'];
+ $pconfig['onfail'] = $config['installedpackages']['dspam']['config'][0]['delivery-onfail'];
+ /* ============================================================================================= */
+ /* == DSPAM Debugging Options == */
+ /* ============================================================================================= */
+ $pconfig['enabledbg'] = $config['installedpackages']['dspam']['config'][0]['debug-enable'];
+ $pconfig['debug'] = $config['installedpackages']['dspam']['config'][0]['debug-whom'];
+ $pconfig['dopt'] = $config['installedpackages']['dspam']['config'][0]['debug-options'];
+ /* ============================================================================================= */
+ /* == DSPAM Engine Settings == */
+ /* ============================================================================================= */
+ $pconfig['tmode'] = $config['installedpackages']['dspam']['config'][0]['training-mode'];
+ $pconfig['testct'] = $config['installedpackages']['dspam']['config'][0]['test-cond-training'];
+ $pconfig['pvalue'] = $config['installedpackages']['dspam']['config'][0]['pvalue'];
+ $pconfig['ipdrive'] = $config['installedpackages']['dspam']['config'][0]['improbability-drive'];
+ /* ============================================================================================= */
+ /* == LDAP Settings == */
+ /* ============================================================================================= */
+ $pconfig['enableldap'] = $config['installedpackages']['dspam']['config'][0]['ldap-enable'];
+ $pconfig['ldapmode'] = $config['installedpackages']['dspam']['config'][0]['ldap-mode'];
+ $pconfig['ldaphost'] = $config['installedpackages']['dspam']['config'][0]['ldap-host'];
+ $pconfig['ldapfilter'] = $config['installedpackages']['dspam']['config'][0]['ldap-filter'];
+ $pconfig['ldapbase'] = $config['installedpackages']['dspam']['config'][0]['ldap-base'];
+ /* ============================================================================================= */
+ /* == Miscellaneous Settings == */
+ /* ============================================================================================= */
+ $pconfig['foatt'] = $config['installedpackages']['dspam']['config'][0]['failover-attempts'];
+ $pconfig['enablesbl'] = $config['installedpackages']['dspam']['config'][0]['sbl-enable'];
+ $pconfig['sblhost'] = $config['installedpackages']['dspam']['config'][0]['sbl-host'];
+ $pconfig['enablerbl'] = $config['installedpackages']['dspam']['config'][0]['rbl-inoculate'];
+ $pconfig['enablenoti'] = $config['installedpackages']['dspam']['config'][0]['notification-email'];
+ $pconfig['dspamdomain'] = $config['installedpackages']['dspam']['config'][0]['dspam-domain'];
+ $pconfig['dspamcontact'] = $config['installedpackages']['dspam']['config'][0]['dspam-contact'];
+ /* ============================================================================================= */
+ /* == Maintainance Settings == */
+ /* ============================================================================================= */
+ $pconfig['psig'] = $config['installedpackages']['dspam']['config'][0]['purge-signatures'];
+ $pconfig['pneut'] = $config['installedpackages']['dspam']['config'][0]['purge-neutral'];
+ $pconfig['punu'] = $config['installedpackages']['dspam']['config'][0]['purge-unused'];
+ $pconfig['phapa'] = $config['installedpackages']['dspam']['config'][0]['purge-hapaxes'];
+ $pconfig['pones'] = $config['installedpackages']['dspam']['config'][0]['purge-hits-1s'];
+ $pconfig['ponei'] = $config['installedpackages']['dspam']['config'][0]['purge-hits-1i'];
+ /* ============================================================================================= */
+ /* == System Settings == */
+ /* ============================================================================================= */
+ $pconfig['locmx'] = $config['installedpackages']['dspam']['config'][0]['local-mx'];
+ $pconfig['enablesysl'] = $config['installedpackages']['dspam']['config'][0]['system-log'];
+ $pconfig['enableusel'] = $config['installedpackages']['dspam']['config'][0]['user-log'];
+ $pconfig['optinout'] = $config['installedpackages']['dspam']['config'][0]['filter-opt'];
+ $pconfig['enableptoh'] = $config['installedpackages']['dspam']['config'][0]['parse-to-headers'];
+ $pconfig['enablecmop'] = $config['installedpackages']['dspam']['config'][0]['change-mode-on-parse'];
+ $pconfig['enablecuop'] = $config['installedpackages']['dspam']['config'][0]['change-user-on-parse'];
+ $pconfig['enablebmta'] = $config['installedpackages']['dspam']['config'][0]['broken-mta-settings'];
+ $pconfig['maxmsgs'] = $config['installedpackages']['dspam']['config'][0]['max-message-size'];
+ $pconfig['procbias'] = $config['installedpackages']['dspam']['config'][0]['processor-bias'];
+ /* ============================================================================================= */
+ /* == ClamAV Engine Settings == */
+ /* ============================================================================================= */
+ $pconfig['enableclam'] = $config['installedpackages']['dspam']['config'][0]['clamav-enable'];
+ $pconfig['clamport'] = $config['installedpackages']['dspam']['config'][0]['clamav-port'];
+ $pconfig['clamhost'] = $config['installedpackages']['dspam']['config'][0]['clamav-host'];
+ $pconfig['clamresp'] = $config['installedpackages']['dspam']['config'][0]['clamav-response'];
+ /* ============================================================================================= */
+ /* == DSPAM Daemon Settings (Server) == */
+ /* ============================================================================================= */
+ $pconfig['dsport'] = $config['installedpackages']['dspam']['config'][0]['dspam-server-port'];
+ $pconfig['dsqsize'] = $config['installedpackages']['dspam']['config'][0]['dspam-server-queue-size'];
+ $pconfig['dspid'] = $config['installedpackages']['dspam']['config'][0]['dspam-server-pid'];
+ $pconfig['dssmode'] = $config['installedpackages']['dspam']['config'][0]['dspam-server-mode'];
+ $pconfig['serverparam'] = $config['installedpackages']['dspam']['config'][0]['dspam-server-params'];
+ $pconfig['serverid'] = $config['installedpackages']['dspam']['config'][0]['dspam-server-id'];
+ $pconfig['serversock'] = $config['installedpackages']['dspam']['config'][0]['dspam-server-socket'];
+ /* ============================================================================================= */
+ /* == DSPAM Daemon Settings (Client) == */
+ /* ============================================================================================= */
+ $pconfig['enabledsclient'] = $config['installedpackages']['dspam']['config'][0]['dspam-client-enable'];
+ $pconfig['dsclhost'] = $config['installedpackages']['dspam']['config'][0]['dspam-client-host'];
+ $pconfig['dsclport'] = $config['installedpackages']['dspam']['config'][0]['dspam-client-port'];
+ $pconfig['dsclident'] = $config['installedpackages']['dspam']['config'][0]['dspam-client-id'];
+
+ if (!is_array($config['installedpackages']['dspam']['config'][0]['tuser'])) {
+ $config['installedpackages']['dspam']['config'][0]['tuser'] = array();
+ }
+ if (!is_array($config['installedpackages']['dspam']['config'][0]['algorithm'])) {
+ $config['installedpackages']['dspam']['config'][0]['algorithm'] = array();
+ }
+ if (!is_array($config['installedpackages']['dspam']['config'][0]['feature'])) {
+ $config['installedpackages']['dspam']['config'][0]['feature'] = array();
+ }
+ if (!is_array($config['installedpackages']['dspam']['config'][0]['preference'])) {
+ $config['installedpackages']['dspam']['config'][0]['preference'] = array();
+ }
+ if (!is_array($config['installedpackages']['dspam']['config'][0]['override'])) {
+ $config['installedpackages']['dspam']['config'][0]['override'] = array();
+ }
+ if (!is_array($config['installedpackages']['dspam']['config'][0]['header'])) {
+ $config['installedpackages']['dspam']['config'][0]['header'] = array();
+ }
+ if (!is_array($config['installedpackages']['dspam']['config'][0]['bmta'])) {
+ $config['installedpackages']['dspam']['config'][0]['bmta'] = array();
+ }
+
+ $t_users = &$config['installedpackages']['dspam']['config'][0]['tuser'];
+ $t_features = &$config['installedpackages']['dspam']['config'][0]['feature'];
+ $t_algos = &$config['installedpackages']['dspam']['config'][0]['algorithm'];
+ $t_prefs = &$config['installedpackages']['dspam']['config'][0]['preference'];
+ $t_overr = &$config['installedpackages']['dspam']['config'][0]['override'];
+ $t_headers = &$config['installedpackages']['dspam']['config'][0]['header'];
+ $t_bmtas = &$config['installedpackages']['dspam']['config'][0]['bmta'];
+ $t_spwds = &$config['installedpackages']['dspam']['config'][0]['server-pwd'];
+
+if ($_POST) {
+
+ /* hash */
+ $error_bucket = array();
+ /* simple error list */
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ if($_POST['sdriver'] == "mysql") {
+ if (! $_POST['msqlserver'] <> "") {
+ $error_bucket[] = array("error" => "You must specify a valid MySQL server name value.",
+ "field" => "msqlserver");
+ } else {
+ if (strpos($_POST['msqlserver'], '/') === false) {
+ foreach (explode(' ', $_POST['msqlserver']) as $ts) {
+ if (!is_domain($ts)) {
+ $error_bucket[] = array("error" => "A MySQL server name may only contain the characters a-z, 0-9, '-' and '.'.",
+ "field" => "msqlserver");
+ break;
+ }
+ }
+ }
+ }
+ /* if we are going to use a TCP/IP base MySQL connection, a port value is required */
+ if (! is_port($_POST['msqlport']) && strpos($_POST['msqlserver'], '/') === false) {
+ $error_bucket[] = array("error" => "You must specify a valid MySQL port value.",
+ "field" => "msqlport");
+ }
+ if (! $_POST['msqluser'] <> "") {
+ $error_bucket[] = array("error" => "You must specify a valid MySQL username value.",
+ "field" => "msqluser");
+ }
+ if (! $_POST['msqlpwd'] <> "") {
+ $error_bucket[] = array("error" => "You must specify a valid MySQL password value.",
+ "field" => "msqlpwd");
+ }
+ if (! $_POST['msqldb'] <> "") {
+ $error_bucket[] = array("error" => "You must specify a valid MySQL database value.",
+ "field" => "msqldb");
+ }
+ if ($_POST['msqlccache'] && !is_numericint($_POST['msqlccache'])) {
+ $error_bucket[] = array("error" => "You must specify a valid integer value as a connection cache value.",
+ "field" => "msqlccache");
+ }
+ } else if($_POST['sdriver'] == "sqlite") {
+ /* NOP */
+ } else if($_POST['sdriver'] == "bdb") {
+ /* NOP */
+ } else if($_POST['sdriver'] == "pgsql") {
+ if (! $_POST['pgserver'] <> "") {
+ $error_bucket[] = array("error" => "You must specify a valid PostgreSQL server name value.",
+ "field" => "pgserver");
+ } else {
+ foreach (explode(' ', $_POST['pgserver']) as $ts) {
+ if (!is_domain($ts)) {
+ $error_bucket[] = array("error" => "A PostgreSQL server name may only contain the characters a-z, 0-9, '-' and '.'.",
+ "field" => "pgserver");
+ break;
+ }
+ }
+ }
+ if (! is_port($_POST['pgport'])) {
+ $error_bucket[] = array("error" => "You must specify a valid PostgreSQL port value.",
+ "field" => "pgport");
+ }
+ if (! $_POST['pguser'] <> "") {
+ $error_bucket[] = array("error" => "You must specify a valid PostgreSQL username value.",
+ "field" => "pguser");
+ }
+ if (! $_POST['pgpwd'] <> "") {
+ $error_bucket[] = array("error" => "You must specify a valid PostgreSQL password value.",
+ "field" => "pgpwd");
+ }
+ if (! $_POST['pgdb'] <> "") {
+ $error_bucket[] = array("error" => "You must specify a valid PostgreSQL database value.",
+ "field" => "pgdb");
+ }
+ if ($_POST['pgccache'] && !is_numericint($_POST['pgccache'])) {
+ $error_bucket[] = array("error" => "You must specify a valid integer value as a connection cache value.",
+ "field" => "pgccache");
+ }
+ } else if($_POST['sdriver'] == "oracle") {
+ if (! $_POST['oraserver'] <> "") {
+ $error_bucket[] = array("error" => "You must specify a valid Oracle server connection string.",
+ "field" => "oraserver");
+ }
+ if (! $_POST['orauser'] <> "") {
+ $error_bucket[] = array("error" => "You must specify a valid Oracle username value.",
+ "field" => "orauser");
+ }
+ if (! $_POST['orapwd'] <> "") {
+ $error_bucket[] = array("error" => "You must specify a valid Oracle password value.",
+ "field" => "orapwd");
+ }
+ if (! $_POST['orasch'] <> "") {
+ $error_bucket[] = array("error" => "You must specify a valid Oracle schema value.",
+ "field" => "orasch");
+ }
+ } else if($_POST['sdriver'] == "hash") {
+ if ($_POST['hsrmax'] && !is_numericint($_POST['hsrmax'])) {
+ $error_bucket[] = array("error" => "You must specify a valid integer value as a number for the initial records to be created.",
+ "field" => "hsrmax");
+ }
+ if ($_POST['hsmxex'] && !is_numericint($_POST['hsmxex'])) {
+ $error_bucket[] = array("error" => "You must specify a valid integer value as a number for the maximum extends.",
+ "field" => "hsmxex");
+ }
+ if ($_POST['hsexsz'] && !is_numericint($_POST['hsexsz'])) {
+ $error_bucket[] = array("error" => "You must specify a valid integer value as a number for the record size.",
+ "field" => "hsexsz");
+ }
+ if ($_POST['hsmxse'] && !is_numericint($_POST['hsmxse'])) {
+ $error_bucket[] = array("error" => "You must specify a valid integer value as a number for the maximum number of records to seek.",
+ "field" => "hsmxse");
+ }
+ if ($_POST['hscoca'] && !is_numericint($_POST['hscoca'])) {
+ $error_bucket[] = array("error" => "You must specify a valid integer value as a number for hash connection cache.",
+ "field" => "hscoca");
+ }
+ }
+
+ if ($_POST['tcpipdel'] == "yes") {
+ if (! $_POST['dhost'] <> "") {
+ $error_bucket[] = array("error" => "You must specify a valid server name value for the DSPAM deliver host.",
+ "field" => "dhost");
+ } else {
+ foreach (explode(' ', $_POST['dhost']) as $ts) {
+ if (!is_domain($ts)) {
+ $error_bucket[] = array("error" => "A DSPAM delivery host name may only contain the characters a-z, 0-9, '-' and '.'.",
+ "field" => "dhost");
+ break;
+ }
+ }
+ }
+ if (! is_port($_POST['dport'])) {
+ $error_bucket[] = array("error" => "You must specify a valid port value for the DSPAM delivery host.",
+ "field" => "dport");
+ }
+ if (! $_POST['dident'] <> "") {
+ $error_bucket[] = array("error" => "You must specify a valid identification string for the DSPAM delivery host.",
+ "field" => "dident");
+ }
+ }
+
+ if ($_POST['enabledbg'] == "yes") {
+ if (! $_POST['debug'] <> "") {
+ $error_bucket[] = array("error" => "You must specify a non-zero value for the debug parameter.",
+ "field" => "debug");
+ }
+ if (! $_POST['dopt'] <> "") {
+ $error_bucket[] = array("error" => "You must specify a non-zero value for the debug options.",
+ "field" => "dopt");
+ }
+ }
+
+ if ($_POST['enableldap'] == "yes") {
+ if (! $_POST['ldaphost'] <> "") {
+ $error_bucket[] = array("error" => "You must specify a valid server name value for the LDAP host.",
+ "field" => "ldaphost");
+ } else {
+ foreach (explode(' ', $_POST['ldaphost']) as $ts) {
+ if (!is_domain($ts)) {
+ $error_bucket[] = array("error" => "A LDAP host name may only contain the characters a-z, 0-9, '-' and '.'.",
+ "field" => "ldaphost");
+ break;
+ }
+ }
+ }
+ if (! $_POST['ldapfilter'] <> "") {
+ $error_bucket[] = array("error" => "You must specify a non-zero value for the LDAP filter option or you may not be able to get any query result.",
+ "field" => "ldapfilter");
+ }
+ if (! $_POST['ldapbase'] <> "") {
+ $error_bucket[] = array("error" => "You must specify a non-zero value for the LDAP base option or you may not be able to get any query result.",
+ "field" => "ldapbase");
+ }
+ }
+
+ /* misc settings */
+ if ($_POST['foatt'] && !is_numericint($_POST['foatt'])) {
+ $error_bucket[] = array("error" => "You must specify a integer based value for the number of failover attempts.",
+ "field" => "foatt");
+ }
+ if ($_POST['enablesbl'] == "yes") {
+ if (! $_POST['sblhost'] <> "") {
+ $error_bucket[] = array("error" => "You must specify a valid server name value for the SBL host.",
+ "field" => "sblhost");
+ } else {
+ foreach (explode(' ', $_POST['sblhost']) as $ts) {
+ if (!is_domain($ts)) {
+ $error_bucket[] = array("error" => "A SBL host name may only contain the characters a-z, 0-9, '-' and '.'.",
+ "field" => "sblhost");
+ break;
+ }
+ }
+ }
+ }
+ if(isset($_POST['enablenoti'])) {
+ if($_POST['dspamcontact'] == "") {
+ $error_bucket[] = array("error" => "It is necessary to provide a support contact, if you want DSPAM to send notification messages.",
+ "field" => "dspamcontact");
+ }
+ if(empty($_POST['whichdomain'])) {
+ if ($_POST['dspamdomain'] == "") {
+ $error_bucket[] = array("error" => "You must specify a valid domain name that should be used while sending DSPAM related mail messages.",
+ "field" => "dspamdomain");
+ } else {
+ if (!is_domain($_POST['dspamdomain'])) {
+ $error_bucket[] = array("error" => "You must specify a valid domain name that should be used while sending DSPAM related mail messages.",
+ "field" => "dspamdomain");
+ }
+ }
+ }
+ }
+
+ /* Maintanance Settings */
+ if (! $_POST['psig'] || $_POST['psig'] == "") {
+ $error_bucket[] = array("error" => "You must specify a value for the number of signatures to be purged.",
+ "field" => "psig");
+ } else if (! $_POST['psig'] == "off") {
+ if (!is_numericint($_POST['psig'])) {
+ $error_bucket[] = array("error" => "You must specify a valide integer value for the number of signatures to be purged.",
+ "field" => "psig");
+ }
+ }
+ if (! $_POST['pneut'] || $_POST['pneut'] == "") {
+ $error_bucket[] = array("error" => "You must specify a value for the number of neutrals to be purged.",
+ "field" => "pneut");
+ } else if (! $_POST['pneut'] == "off") {
+ if (!is_numericint($_POST['pneut'])) {
+ $error_bucket[] = array("error" => "You must specify a valide integer value for the number of neutrals to be purged.",
+ "field" => "pneut");
+ }
+ }
+ if (! $_POST['punu'] || $_POST['punu'] == "") {
+ $error_bucket[] = array("error" => "You must specify a value for the number of unused tokens to be purged.",
+ "field" => "punu");
+ } else if (! $_POST['punu'] == "off") {
+ if (!is_numericint($_POST['punu'])) {
+ $error_bucket[] = array("error" => "You must specify a valide integer value for the number of unused tokens to be purged.",
+ "field" => "punu");
+ }
+ }
+ if (! $_POST['phapa'] || $_POST['phapa'] == "") {
+ $input_errors[] = "You must specify a value for the number of hapaxes to be purged.";
+ $input_error_fields[] = "phapa";
+ } else if (! $_POST['phapa'] == "off") {
+ if (!is_numericint($_POST['phapa'])) {
+ $error_bucket[] = array("error" => "You must specify a valide integer value for the number of hapaxes to be purged.",
+ "field" => "phapa");
+ }
+ }
+ if (! $_POST['pones'] || $_POST['pones'] == "") {
+ $error_bucket[] = array("error" => "You must specify a value for the number of tokens with only 1 spam hit to be purged.",
+ "field" => "pones");
+ } else if (! $_POST['pones'] == "off") {
+ if (!is_numericint($_POST['pones'])) {
+ $error_bucket[] = array("error" => "You must specify a valide integer value for the number of tokens with only 1 spam hit to be purged.",
+ "field" => "pones");
+ }
+ }
+ if (! $_POST['ponei'] || $_POST['ponei'] == "") {
+ $error_bucket[] = array("error" => "You must specify a value for the number of tokens with only 1 innocent hit to be purged.",
+ "field" => "ponei");
+ } else if (! $_POST['ponei'] == "off") {
+ if (!is_numericint($_POST['ponei'])) {
+ $error_bucket[] = array("error" => "You must specify a valide integer value for the number of tokens with only 1 innocent hit to be purged.",
+ "field" => "ponei");
+ }
+ }
+
+ /* System Settings */
+ if (! is_ipaddr($_POST['locmx'])) {
+ $error_bucket[] = array("error" => "You must specify a valid IP address for the local MX parameter.",
+ "field" => "locmx");
+ }
+ if ($_POST['maxmsgs'] && !is_numericint($_POST['maxmsgs'])) {
+ $error_bucket[] = array("error" => "You must specify a integer based value for the maximum message size.",
+ "field" => "maxmsgs");
+ }
+
+ /* ClamAV Settings */
+ if ($_POST['enableclam'] == "yes") {
+ if (! is_port($_POST['clamport'])) {
+ $error_bucket[] = array("error" => "You must specify a valid port value for the ClamAV host.",
+ "field" => "clamport");
+ }
+ if (! $_POST['clamhost'] <> "") {
+ $error_bucket[] = array("error" => "You must specify a valid server name value for the ClamAV host.",
+ "field" => "clamhost");
+ } else {
+ foreach (explode(' ', $_POST['clamhost']) as $ts) {
+ if (!is_domain($ts)) {
+ $error_bucket[] = array("error" => "A ClamAV host name may only contain the characters a-z, 0-9, '-' and '.'.",
+ "field" => "clamhost");
+ break;
+ }
+ }
+ }
+ }
+
+ /* */
+ /* DSPAM Daemon Settings (Server) */
+ /* */
+
+ /* at least the DSPAM thin client (dspamc)
+ * should force the user to configure the
+ * DSPAM daemon.
+ */
+ if (isset($_POST['dsthinc'])) {
+ if (! is_port($_POST['dsport'])) {
+ $error_bucket[] = array("error" => "You must specify a valid port value for the DSPAM host.",
+ "field" => "dsport");
+ }
+ if ($_POST['dsqsize'] && !is_numericint($_POST['dsqsize'])) {
+ $error_bucket[] = array("error" => "You must specify a valid integer value as a number for the server queue size.",
+ "field" => "dsqsize");
+ }
+ if (! $_POST['dspid'] <> "") {
+ $error_bucket[] = array("error" => "You must specify a valid value as PID file for the DSPAM server.",
+ "field" => "dspid");
+ }
+ if ($_POST['dssmode'] == "standard") {
+ if (! $_POST['serverparam'] <> "") {
+ $error_bucket[] = array("error" => "You must specify some valid parameters to be passed to the LMTP server.",
+ "field" => "serverparam");
+ }
+ if (! $_POST['serverid'] <> "") {
+ $error_bucket[] = array("error" => "You must specify a valid identification string to be passed to the LMTP server.",
+ "field" => "serverid");
+ }
+ if ($_POST['serversock'] && $_POST['serversock'] <> "") {
+ if (strpos($_POST['serversock'], '/') === false) {
+ $error_bucket[] = array("error" => "You must specify a valid value for the location of a Unix domain socket.",
+ "field" => "serversock");
+ }
+ }
+ }
+ }
+
+ /* DSPAM Daemon Settings (Client) */
+ if ($_POST['enabledsclient'] == "yes") {
+ if (! $_POST['dsclhost'] <> "") {
+ $error_bucket[] = array("error" => "You must specify a valid server name value for the DSPAM client host.",
+ "field" => "dsclhost");
+ } else {
+ foreach (explode(' ', $_POST['dsclhost']) as $ts) {
+ if (!is_domain($ts)) {
+ $error_bucket[] = array("error" => "A DSPAM client host name may only contain the characters a-z, 0-9, '-' and '.'.",
+ "field" => "dsclhost");
+ break;
+ }
+ }
+ }
+ if (! is_port($_POST['dsclport'])) {
+ $error_bucket[] = array("error" => "You must specify a valid port value for the DSPAM client host.",
+ "field" => "dsclport");
+ }
+ if (! $_POST['dsclident'] <> "") {
+ $error_bucket[] = array("error" => "You must specify a valid value as identification string for the DSPAM client.",
+ "field" => "dsclident");
+ }
+ }
+
+ if (is_array($error_bucket))
+ foreach($error_bucket as $elem)
+ $input_errors[] =& $elem["error"];
+
+ /* if this is an AJAX caller then handle via JSON */
+ if(isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+ }
+
+ if (!$input_errors) {
+ $config['installedpackages']['dspam']['config'][0]['storage-driver'] = $_POST['sdriver'];
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings']);
+
+ if($_POST['sdriver'] == "mysql") {
+ /* ====================================================================== */
+ /* == String and integer values == */
+ /* ====================================================================== */
+ $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-server'] = $_POST['msqlserver'];
+ $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-port'] = $_POST['msqlport'];
+ $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-user'] = $_POST['msqluser'];
+ $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-password'] = $_POST['msqlpwd'];
+ $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-database'] = $_POST['msqldb'];
+ $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-ccache'] = $_POST['msqlccache'];
+ /* ====================================================================== */
+ /* == Boolean values == */
+ /* ====================================================================== */
+ if($_POST['msqlcomp'] == "yes")
+ $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-compress'] = $_POST['msqlcomp'];
+ else
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-compress']);
+ if($_POST['msqlsuqt'] == "yes")
+ $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-squote'] = $_POST['msqlsuqt'];
+ else
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-squote']);
+ if($_POST['msqluid'] == "yes")
+ $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-uid'] = $_POST['msqluid'];
+ else
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-uid']);
+ } else if($_POST['sdriver'] == "sqlite") {
+ /* ====================================================================== */
+ /* == String and integer values == */
+ /* ====================================================================== */
+ if ($_POST['slitepr'])
+ $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['sqlite-pragma'] = $_POST['slitepr'];
+ } else if($_POST['sdriver'] == "bdb") {
+ /* NOP */
+ } else if($_POST['sdriver'] == "pgsql") {
+ /* ====================================================================== */
+ /* == String and integer values == */
+ /* ====================================================================== */
+ $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-server'] = $_POST['pgserver'];
+ $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-port'] = $_POST['pgport'];
+ $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-user'] = $_POST['pguser'];
+ $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-password'] = $_POST['pgpwd'];
+ $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-database'] = $_POST['pgdb'];
+ $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-ccache'] = $_POST['pgccache'];
+ /* ====================================================================== */
+ /* == Boolean values == */
+ /* ====================================================================== */
+ if($_POST['pguid'] == "yes")
+ $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-uid'] = $_POST['pguid'];
+ else
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-uid']);
+ } else if($_POST['sdriver'] == "oracle") {
+ /* ====================================================================== */
+ /* == String and integer values == */
+ /* ====================================================================== */
+ $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['ora-server'] = $_POST['oraserver'];
+ $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['ora-user'] = $_POST['orauser'];
+ $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['ora-password'] = $_POST['orapwd'];
+ $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['ora-schema'] = $_POST['orasch'];
+ } else if($_POST['sdriver'] == "hash") {
+ /* ====================================================================== */
+ /* == String and integer values == */
+ /* ====================================================================== */
+ $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-rec-max'] = $_POST['hsrmax'];
+ $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-max-ext'] = $_POST['hsmxex'];
+ $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-ext-size'] = $_POST['hsexsz'];
+ $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-max-seek'] = $_POST['hsmxse'];
+ $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-co-user'] = $_POST['hsccus'];
+ $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-co-cache'] = $_POST['hscoca'];
+ /* ====================================================================== */
+ /* == Boolean values == */
+ /* ====================================================================== */
+ if($_POST['hsatex'] == "yes")
+ $config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-auto-ex'] = $_POST['hsatex'];
+ else
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-auto-ex']);
+ }
+
+ $config['installedpackages']['dspam']['config'][0]['tdelivery-agent'] = $_POST['dagent'];
+ $config['installedpackages']['dspam']['config'][0]['thin-client'] = $_POST['dsthinc'];
+
+ if($_POST['tcpipdel'] == "yes") {
+ $config['installedpackages']['dspam']['config'][0]['tcpip-delivery'] = $_POST['tcpipdel'];
+ $config['installedpackages']['dspam']['config'][0]['tcpip-delivery-host'] = $_POST['dhost'];
+ $config['installedpackages']['dspam']['config'][0]['tcpip-delivery-port'] = $_POST['dport'];
+ $config['installedpackages']['dspam']['config'][0]['tcpip-delivery-ident'] = $_POST['dident'];
+ $config['installedpackages']['dspam']['config'][0]['tcpip-delivery-proto'] = $_POST['delproto'];
+ } else {
+ unset($config['installedpackages']['dspam']['config'][0]['tcpip-delivery']);
+ unset($config['installedpackages']['dspam']['config'][0]['tcpip-delivery-host']);
+ unset($config['installedpackages']['dspam']['config'][0]['tcpip-delivery-port']);
+ unset($config['installedpackages']['dspam']['config'][0]['tcpip-delivery-ident']);
+ unset($config['installedpackages']['dspam']['config'][0]['tcpip-delivery-proto']);
+ }
+
+ $config['installedpackages']['dspam']['config'][0]['delivery-onfail'] = $_POST['onfail'];
+
+ if($_POST['enabledbg'] == "yes") {
+ $config['installedpackages']['dspam']['config'][0]['debug-enable'] = $_POST['enabledbg'];
+ $config['installedpackages']['dspam']['config'][0]['debug-whom'] = $_POST['debug'];
+ $config['installedpackages']['dspam']['config'][0]['debug-options'] = $_POST['dopt'];
+ } else {
+ unset($config['installedpackages']['dspam']['config'][0]['debug-enable']);
+ unset($config['installedpackages']['dspam']['config'][0]['debug-whom']);
+ unset($config['installedpackages']['dspam']['config'][0]['debug-options']);
+ }
+
+ /* DSPAM engine settings */
+ $config['installedpackages']['dspam']['config'][0]['training-mode'] = $_POST['tmode'];
+ if($_POST['testct'] == "yes") {
+ $config['installedpackages']['dspam']['config'][0]['test-cond-training'] = $_POST['testct'];
+ } else {
+ unset($config['installedpackages']['dspam']['config'][0]['test-cond-training']);
+ }
+ $config['installedpackages']['dspam']['config'][0]['pvalue'] = $_POST['pvalue'];
+ if($_POST['ipdrive'] == "yes") {
+ $config['installedpackages']['dspam']['config'][0]['improbability-drive'] = $_POST['ipdrive'];
+ } else {
+ unset($config['installedpackages']['dspam']['config'][0]['improbability-drive']);
+ }
+
+ /* LDAP related settings */
+ if($_POST['enableldap'] == "yes") {
+ $config['installedpackages']['dspam']['config'][0]['ldap-enable'] = $_POST['enableldap'];
+ $config['installedpackages']['dspam']['config'][0]['ldap-mode'] = $_POST['ldapmode'];
+ $config['installedpackages']['dspam']['config'][0]['ldap-host'] = $_POST['ldaphost'];
+ $config['installedpackages']['dspam']['config'][0]['ldap-filter'] = $_POST['ldapfilter'];
+ $config['installedpackages']['dspam']['config'][0]['ldap-base'] = $_POST['ldapbase'];
+ } else {
+ unset($config['installedpackages']['dspam']['config'][0]['ldap-enable']);
+ unset($config['installedpackages']['dspam']['config'][0]['ldap-mode']);
+ unset($config['installedpackages']['dspam']['config'][0]['ldap-host']);
+ unset($config['installedpackages']['dspam']['config'][0]['ldap-filter']);
+ unset($config['installedpackages']['dspam']['config'][0]['ldap-base']);
+ }
+
+ /* misc settings */
+ $config['installedpackages']['dspam']['config'][0]['failover-attempts'] = $_POST['foatt'];
+ if($_POST['enablesbl'] == "yes") {
+ $config['installedpackages']['dspam']['config'][0]['sbl-enable'] = $_POST['enablesbl'];
+ $config['installedpackages']['dspam']['config'][0]['sbl-host'] = $_POST['sblhost'];
+ } else {
+ unset($config['installedpackages']['dspam']['config'][0]['sbl-enable']);
+ unset($config['installedpackages']['dspam']['config'][0]['sbl-host']);
+ }
+ if($_POST['enablerbl'] == "yes") {
+ $config['installedpackages']['dspam']['config'][0]['rbl-inoculate'] = $_POST['enablerbl'];
+ } else {
+ unset($config['installedpackages']['dspam']['config'][0]['rbl-inoculate']);
+ }
+ if($_POST['enablenoti'] == "yes") {
+ $config['installedpackages']['dspam']['config'][0]['notification-email'] = $_POST['enablenoti'];
+ $config['installedpackages']['dspam']['config'][0]['dspam-contact'] = $_POST['dspamcontact'];
+ } else {
+ unset($config['installedpackages']['dspam']['config'][0]['notification-email']);
+ unset($config['installedpackages']['dspam']['config'][0]['dspam-domain']);
+ unset($config['installedpackages']['dspam']['config'][0]['dspam-contact']);
+ }
+ if($_POST['whichdomain'] == "yes") {
+ unset($config['installedpackages']['dspam']['config'][0]['dspam-domain']);
+ } else {
+ $config['installedpackages']['dspam']['config'][0]['dspam-domain'] = $_POST['dspamdomain'];
+ }
+
+ /* Maintainance Settings */
+ $config['installedpackages']['dspam']['config'][0]['purge-signatures'] = $_POST['psig'];
+ $config['installedpackages']['dspam']['config'][0]['purge-neutral'] = $_POST['pneut'];
+ $config['installedpackages']['dspam']['config'][0]['purge-unused'] = $_POST['punu'];
+ $config['installedpackages']['dspam']['config'][0]['purge-hapaxes'] = $_POST['phapa'];
+ $config['installedpackages']['dspam']['config'][0]['purge-hits-1s'] = $_POST['pones'];
+ $config['installedpackages']['dspam']['config'][0]['purge-hits-1i'] = $_POST['ponei'];
+
+ /* System Settings */
+ $config['installedpackages']['dspam']['config'][0]['local-mx'] = $_POST['locmx'];
+ $config['installedpackages']['dspam']['config'][0]['local-mx'] = $_POST['locmx'];
+ if($_POST['enablesysl'] == "yes") {
+ $config['installedpackages']['dspam']['config'][0]['system-log'] = $_POST['enablesysl'];
+ } else {
+ unset($config['installedpackages']['dspam']['config'][0]['system-log']);
+ }
+ if($_POST['enableusel'] == "yes") {
+ $config['installedpackages']['dspam']['config'][0]['user-log'] = $_POST['enableusel'];
+ } else {
+ unset($config['installedpackages']['dspam']['config'][0]['user-log']);
+ }
+ $config['installedpackages']['dspam']['config'][0]['filter-opt'] = $_POST['optinout'];
+ if($_POST['enableptoh'] == "yes") {
+ $config['installedpackages']['dspam']['config'][0]['parse-to-headers'] = $_POST['enableptoh'];
+ } else {
+ unset($config['installedpackages']['dspam']['config'][0]['parse-to-headers']);
+ }
+ if($_POST['enablecmop'] == "yes") {
+ $config['installedpackages']['dspam']['config'][0]['change-mode-on-parse'] = $_POST['enablecmop'];
+ } else {
+ unset($config['installedpackages']['dspam']['config'][0]['change-mode-on-parse']);
+ }
+ if($_POST['enablecuop'] == "yes") {
+ $config['installedpackages']['dspam']['config'][0]['change-user-on-parse'] = $_POST['enablecuop'];
+ } else {
+ unset($config['installedpackages']['dspam']['config'][0]['change-user-on-parse']);
+ }
+ if($_POST['enablecuop'] == "yes") {
+ $config['installedpackages']['dspam']['config'][0]['change-user-on-parse'] = $_POST['enablecuop'];
+ } else {
+ unset($config['installedpackages']['dspam']['config'][0]['change-user-on-parse']);
+ }
+ if($_POST['enablebmta'] == "yes") {
+ $config['installedpackages']['dspam']['config'][0]['broken-mta-settings'] = $_POST['enablebmta'];
+ } else {
+ unset($config['installedpackages']['dspam']['config'][0]['broken-mta-settings']);
+ }
+ $config['installedpackages']['dspam']['config'][0]['max-message-size'] = $_POST['maxmsgs'];
+ if($_POST['procbias'] == "yes") {
+ $config['installedpackages']['dspam']['config'][0]['processor-bias'] = $_POST['procbias'];
+ } else {
+ unset($config['installedpackages']['dspam']['config'][0]['processor-bias']);
+ }
+
+ /* ClamAV related settings */
+ if($_POST['enableclam'] == "yes") {
+ $config['installedpackages']['dspam']['config'][0]['clamav-enable'] = $_POST['enableclam'];
+ $config['installedpackages']['dspam']['config'][0]['clamav-port'] = $_POST['clamport'];
+ $config['installedpackages']['dspam']['config'][0]['clamav-host'] = $_POST['clamhost'];
+ $config['installedpackages']['dspam']['config'][0]['clamav-response'] = $_POST['clamresp'];
+ } else {
+ unset($config['installedpackages']['dspam']['config'][0]['clamav-enable']);
+ unset($config['installedpackages']['dspam']['config'][0]['clamav-port']);
+ unset($config['installedpackages']['dspam']['config'][0]['clamav-host']);
+ unset($config['installedpackages']['dspam']['config'][0]['clamav-response']);
+ }
+
+ /* DSPAM daemon settings */
+ $config['installedpackages']['dspam']['config'][0]['dspam-server-port'] = $_POST['dsport'];
+ $config['installedpackages']['dspam']['config'][0]['dspam-server-queue-size'] = $_POST['dsqsize'];
+ $config['installedpackages']['dspam']['config'][0]['dspam-server-pid'] = $_POST['dspid'];
+ $config['installedpackages']['dspam']['config'][0]['dspam-server-mode'] = $_POST['dssmode'];
+ $config['installedpackages']['dspam']['config'][0]['dspam-server-params'] = $_POST['serverparam'];
+ $config['installedpackages']['dspam']['config'][0]['dspam-server-id'] = $_POST['serverid'];
+ $config['installedpackages']['dspam']['config'][0]['dspam-server-socket'] = $_POST['serversock'];
+
+ /* DSPAM client settings */
+ if($_POST['enabledsclient'] == "yes") {
+ $config['installedpackages']['dspam']['config'][0]['dspam-client-enable'] = $_POST['enabledsclient'];
+ $config['installedpackages']['dspam']['config'][0]['dspam-client-host'] = $_POST['dsclhost'];
+ $config['installedpackages']['dspam']['config'][0]['dspam-client-port'] = $_POST['dsclport'];
+ $config['installedpackages']['dspam']['config'][0]['dspam-client-id'] = $_POST['dsclident'];
+ } else {
+ unset($config['installedpackages']['dspam']['config'][0]['dspam-client-enable']);
+ unset($config['installedpackages']['dspam']['config'][0]['dspam-client-host']);
+ unset($config['installedpackages']['dspam']['config'][0]['dspam-client-port']);
+ unset($config['installedpackages']['dspam']['config'][0]['dspam-client-id']);
+ }
+
+ write_config();
+
+ $retval = 0;
+ conf_mount_rw();
+ config_lock();
+ $retval = dspam_configure();
+ config_unlock();
+ $savemsg = get_std_save_message($retval);
+ conf_mount_ro();
+ }
+}
+
+/* did the user send a request to delete an item? */
+if ($_GET['act'] == "del") {
+ if ($_GET['what'] == "tuser" && $t_users[$_GET['id']]) {
+ unset($t_users[$_GET['id']]);
+ write_config();
+ pfSenseHeader("dspam-settings.php");
+ exit;
+ } else if ($_GET['what'] == "feat" && $t_features[$_GET['id']]) {
+ unset($t_features[$_GET['id']]);
+ write_config();
+ pfSenseHeader("dspam-settings.php");
+ exit;
+ } else if ($_GET['what'] == "algo" && $t_algos[$_GET['id']]) {
+ unset($t_algos[$_GET['id']]);
+ write_config();
+ pfSenseHeader("dspam-settings.php");
+ exit;
+ } else if ($_GET['what'] == "pref" && $t_prefs[$_GET['id']]) {
+ unset($t_prefs[$_GET['id']]);
+ write_config();
+ pfSenseHeader("dspam-settings.php");
+ exit;
+ } else if ($_GET['what'] == "overr" && $t_overr[$_GET['id']]) {
+ unset($t_overr[$_GET['id']]);
+ write_config();
+ pfSenseHeader("dspam-settings.php");
+ exit;
+ } else if ($_GET['what'] == "header" && $t_headers[$_GET['id']]) {
+ unset($t_headers[$_GET['id']]);
+ write_config();
+ pfSenseHeader("dspam-settings.php");
+ exit;
+ } else if ($_GET['what'] == "bmta" && $t_bmtas[$_GET['id']]) {
+ unset($t_bmtas[$_GET['id']]);
+ write_config();
+ pfSenseHeader("dspam-settings.php");
+ exit;
+ } else if ($_GET['what'] == "spwd" && $t_spwds[$_GET['id']]) {
+ unset($t_spwds[$_GET['id']]);
+ write_config();
+ pfSenseHeader("dspam-settings.php");
+ exit;
+ }
+}
+
+ /* if ajax is calling, give them an update message */
+ if(isAjax())
+ print_info_box_np($savemsg);
+
+ include("head.inc");
+ /* put your custom HTML head content here */
+ /* using some of the $pfSenseHead function calls */
+ $jscriptstr = <<<EOD
+<script type="text/javascript">
+<!--
+
+EOD;
+
+ $jscriptstr .= getJScriptFunction(5);
+ if (empty($_POST))
+ $jscriptstr .= getJScriptFunction(6);
+ $jscriptstr .= <<<EOD
+//-->
+</script>
+EOD;
+
+ $pfSenseHead->addScript($jscriptstr);
+ echo $pfSenseHead->getHTML();?>
+
+<body link="#000000" vlink="#000000" alink="#000000" <?php if (empty($_POST)) { echo "onLoad='checkDisabledState(document.iform);'"; } ?>>
+ <?php include("fbegin.inc"); ?>
+ <form action="dspam-settings.php" method="post" name="iform" id="iform">
+ <input type="hidden" name="sectionid" id="sectionid" value="<?=$pconfig['sectionid'];?>" />
+ <?php if ($input_errors) print_input_errors($input_errors); ?>
+ <?php if ($savemsg) print_info_box($savemsg); ?>
+ <p>
+ <span class="vexpl">
+ <span class="red">
+ <strong>Note: </strong>
+ </span>
+ the options on this page are intended for use by advanced users only.
+ Any setting found on this page is directly going into <code>dspam.conf</code>.
+ Make sure you do not mess with settings, you do not understand.
+ </span>
+ </p>
+ <p>
+ <span class="vexpl">If you submit this page, the DSPAM daemon process will be restarted.</span>
+ </p>
+ <br />
+ <table width="99%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td>
+ <?php
+ $tab_array = array();
+ $tab_array[] = array("System Status", false, "/dspam-admin.php");
+ $tab_array[] = array("User Statistics", false, "/dspam-admin-stats.php");
+ $tab_array[] = array("Administration", false, "/dspam-admin-prefs.php");
+ $tab_array[] = array("Settings", true, "/dspam-settings.php");
+ $tab_array[] = array("Control Center", false, "/dspam-perf.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table id="maintable" name="maintable" class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td>
+ <p><strong>Settings</strong></p>
+ <ul style="font-size:0.95em; font-family:Verdana,Arial,sans-serif">
+ <li><a href="#db" class="redlnk">Database Settings<?php if ($pconfig['sectionid'] == "db") echo '<span class="red">&nbsp;&raquo;last modified&laquo;</span>'; ?></a></li>
+ <li><a href="#del" class="redlnk">Delivery Settings<?php if ($pconfig['sectionid'] == "del") echo '<span class="red">&nbsp;&raquo;last modified&laquo;</span>'; ?></a></li>
+ <li><a href="#priv" class="redlnk">DSPAM Privileges<?php if ($pconfig['sectionid'] == "priv") echo '<span class="red">&nbsp;&raquo;last modified&laquo;</span>'; ?></a></li>
+ <li><a href="#dbg" class="redlnk">DSPAM Debugging Options<?php if ($pconfig['sectionid'] == "dbg") echo '<span class="red">&nbsp;&raquo;last modified&laquo;</span>'; ?></a></li>
+ <li><a href="#eng" class="redlnk">DSPAM Engine Settings<?php if ($pconfig['sectionid'] == "eng") echo '<span class="red">&nbsp;&raquo;last modified&laquo;</span>'; ?></a></li>
+ <li><a href="#ldap" class="redlnk">LDAP Settings<?php if ($pconfig['sectionid'] == "ldap") echo '<span class="red">&nbsp;&raquo;last modified&laquo;</span>'; ?></a></li>
+ <li><a href="#misc" class="redlnk">Miscellaneous Settings<?php if ($pconfig['sectionid'] == "misc") echo '<span class="red">&nbsp;&raquo;last modified&laquo;</span>'; ?></a></li>
+ <li><a href="#main" class="redlnk">Maintainance Settings<?php if ($pconfig['sectionid'] == "main") echo '<span class="red">&nbsp;&raquo;last modified&laquo;</span>'; ?></a></li>
+ <li><a href="#sys" class="redlnk">System Settings<?php if ($pconfig['sectionid'] == "sys") echo '<span class="red">&nbsp;&raquo;last modified&laquo;</span>'; ?></a></li>
+ <li><a href="#clam" class="redlnk">ClamAV Engine Settings<?php if ($pconfig['sectionid'] == "clam") echo '<span class="red">&nbsp;&raquo;last modified&laquo;</span>'; ?></a></li>
+ <li><a href="#srv" class="redlnk">DSPAM Daemon Settings (Server)<?php if ($pconfig['sectionid'] == "srv") echo '<span class="red">&nbsp;&raquo;last modified&laquo;</span>'; ?></a></li>
+ <li><a href="#cli" class="redlnk">DSPAM Daemon Settings (Client)<?php if ($pconfig['sectionid'] == "cli") echo '<span class="red">&nbsp;&raquo;last modified&laquo;</span>'; ?></a></li>
+ </ul>
+ <br />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <table id="sortabletable0" name="sortabletable0" width="100%" border="0" cellpadding="10" cellspacing="0">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><a name="db" style="visibility: hidden;">&nbsp;</a>Database Settings</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Storage Driver</td>
+ <td width="78%" class="vtable">
+ <select name="sdriver" onChange="toggleDBSettings();" class="formselect">
+ <option value="mysql" <?php if($pconfig['sdriver'] == "mysql") echo('selected="selected"');?>>mysql</option>
+ <option value="sqlite" <?php if($pconfig['sdriver'] == "sqlite") echo('selected="selected"');?>>sqlite</option>
+ <option value="bdb" <?php if($pconfig['sdriver'] == "bdb") echo('selected="selected"');?>>bdb</option>
+ <option value="pgsql" <?php if($pconfig['sdriver'] == "pgsql") echo('selected="selected"');?>>pgsql</option>
+ <option value="oracle" <?php if($pconfig['sdriver'] == "oracle") echo('selected="selected"');?>>oracle</option>
+ <option value="hash" <?php if($pconfig['sdriver'] == "hash") echo('selected="selected"');?>>hash</option>
+ </select>
+ <strong>Specifies the storage driver backend (library) to use.</strong>
+ <p>
+ <span class="vexpl">
+ IMPORTANT: Switching storage drivers requires more than merely changing this option.
+ If you do not wish to lose all of your data, you will need to migrate it to the new
+ backend before making this change.
+ </span>
+ </p>
+ </td>
+ </tr>
+ <?php if ($pconfig['sdriver'] == "mysql"): ?>
+ <tbody id="DBmysql" style="display: table-row-group;">
+ <?php else: ?>
+ <tbody id="DBmysql" style="display: none;">
+ <?php endif; ?>
+ <tr>
+ <td width="22%" valign="top" class="vncell">MySQL Server</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("msqlserver", "formfld host"); ?> name="msqlserver" id="msqlserver" value="<?=htmlspecialchars($pconfig['msqlserver']);?>" />
+ <strong>
+ Either a reference to a Unix domain socket or a reference to a specific host.
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">MySQL Port</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("msqlport", "formfld unknown"); ?> name="msqlport" id="msqlport" value="<?=htmlspecialchars($pconfig['msqlport']);?>" />
+ <strong>
+ Use this variable if you are going to a MySQL server instance using TCP/IP instead of a socket connection.
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">MySQL User</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("msqluser", "formfld user"); ?> name="msqluser" id="msqluser" value="<?=htmlspecialchars($pconfig['msqluser']);?>" <?php if ($_POST && $input_error_fields && in_array("msqluser", $input_error_fields)) echo 'style="background-color: red;" onFocus="this.style.backgroundColor = \'white\';" onBlur="this.style.backgroundColor = \'red\';"'; ?>/>
+ <strong>
+ Username, that will be used to connect to a MySQL server instance.
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">MySQL Password</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("msqlpwd", "formfld pwd"); ?> name="msqlpwd" id="msqlpwd" value="<?=htmlspecialchars($pconfig['msqlpwd']);?>" <?php if ($_POST && $input_error_fields && in_array("msqlpwd", $input_error_fields)) echo 'style="background-color: red;" onFocus="this.style.backgroundColor = \'white\';" onBlur="this.style.backgroundColor = \'red\';"'; ?>/>
+ <strong>
+ Password, that will be used to connect to a MySQL server instance.
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">MySQL Database</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("msqldb", "formfld unknown"); ?> name="msqldb" id="msqldb" value="<?=htmlspecialchars($pconfig['msqldb']);?>" <?php if ($_POST && $input_error_fields && in_array("msqldb", $input_error_fields)) echo 'style="background-color: red;" onFocus="this.style.backgroundColor = \'white\';" onBlur="this.style.backgroundColor = \'red\';"'; ?>/>
+ <strong>
+ Database name, that contains DSPAM data.
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">MySQL Compress</td>
+ <td width="78%" class="vtable">
+ <input type="checkbox" class="formfld" name="msqlcomp" id="msqlcomp" value="yes" <?php if (isset($pconfig['msqlcomp'])) echo 'checked="checked"'; ?> />
+ <strong>
+ Indicates whether communication data between DSPAM and MySQL should be compressed.
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">MySQL Supress Quote</td>
+ <td width="78%" class="vtable">
+ <input type="checkbox" class="formfld" name="msqlsuqt" id="msqlsuqt" value="yes" <?php if (isset($pconfig['msqlsuqt'])) echo 'checked="checked"'; ?> />
+ <strong>
+ Use this if you have the 4.1 quote bug (see doc/mysql.txt).
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <p>
+ <span class="vexpl">
+ If you're running DSPAM in client/server (daemon) mode, uncomment the
+ setting below to override the default connection cache size (the number
+ of connections the server pools between all clients). The connection cache
+ represents the maximum number of database connections *available* and should
+ be set based on the maximum number of concurrent connections you're likely
+ to have. Each connection may be used by only one thread at a time, so all
+ other threads _will block_ until another connection becomes available.
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">MySQL Connection Cache</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("msqlccache", "formfld unknown"); ?> name="msqlccache" id="msqlccache" value="<?=htmlspecialchars($pconfig['msqlccache']);?>" <?php if ($_POST && $input_error_fields && in_array("msqlccache", $input_error_fields)) echo 'style="background-color: red;" onFocus="this.style.backgroundColor = \'white\';" onBlur="this.style.backgroundColor = \'red\';"'; ?>/>
+ <strong>
+ Conection cache default set to 10.
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <p>
+ <span class="vexpl">
+ MySQL supports the insertion of the user id into the DSPAM
+ signature. This allows you to create one single spam or fp alias
+ (pointing to some arbitrary user), and the uid in the signature will
+ switch to the correct user. Result: you need only one spam alias
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">MySQL UID In Signature</td>
+ <td width="78%" class="vtable">
+ <input type="checkbox" class="formfld" name="msqluid" id="msqluid" value="yes" <?php if (isset($pconfig['msqluid'])) echo 'checked="checked"'; ?> />
+ <strong>
+ Insert user id into the DSPAM signature.
+ </strong>
+ </td>
+ </tr>
+ </tbody>
+ <?php if ($pconfig['sdriver'] == "sqlite"): ?>
+ <tbody id="DBsqlite" style="display: table-row-group;">
+ <?php else: ?>
+ <tbody id="DBsqlite" style="display: none;">
+ <?php endif; ?>
+ <tr>
+ <td width="22%" valign="top" class="vncell">SQLite Pragma</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("slitepr", "formfld unknown"); ?> name="slitepr" id="slitepr" value="<?=htmlspecialchars($pconfig['slitepr']);?>" />
+ <strong>
+ A particular SQLite pragma command to be used.
+ </strong>
+ <p>
+ <span class="vexpl">
+ See: <a href="http://sqlite.org/pragma.html" target="_blank">http://sqlite.org/pragma.html</a>
+ </span>
+ </p>
+ </td>
+ </tr>
+ </tbody>
+ <?php if ($pconfig['sdriver'] == "bdb"): ?>
+ <tbody id="DBbdb" style="display: table-row-group;">
+ <?php else: ?>
+ <tbody id="DBbdb" style="display: none;">
+ <?php endif; ?>
+ <tr>
+ <td width="22%" valign="top" class="vncell">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <strong>
+ Nothing to be configured here !
+ </strong>
+ </td>
+ </tr>
+ </tbody>
+ <?php if ($pconfig['sdriver'] == "pgsql"): ?>
+ <tbody id="DBpgsql" style="display: table-row-group;">
+ <?php else: ?>
+ <tbody id="DBpgsql" style="display: none;">
+ <?php endif; ?>
+ <tr>
+ <td width="22%" valign="top" class="vncell">PostgreSQL Server</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("pgserver", "formfld host"); ?> name="pgserver" id="pgserver" value="<?=htmlspecialchars($pconfig['pgserver']);?>" />
+ <strong>
+ A reference to a specific host that is running a PostgreSQL instance.
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">PostgreSQL Port</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("pgport", "formfld unknown"); ?> name="pgport" id="pgport" value="<?=htmlspecialchars($pconfig['pgport']);?>" />
+ <strong>
+ A number that represents the port a specific PostgreSQL instance is listening to.
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">PostgreSQL User</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("pguser", "formfld user"); ?> name="pguser" id="pguser" value="<?=htmlspecialchars($pconfig['pguser']);?>" />
+ <strong>
+ Username, that will be used to connect to a PostgreSQL server instance.
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">PostgreSQL Password</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("pgpwd", "formfld pwd"); ?> name="pgpwd" id="pgpwd" value="<?=htmlspecialchars($pconfig['pgpwd']);?>"/>
+ <strong>
+ Password, that will be used to connect to a PostgreSQL server instance.
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">PostgreSQL Database</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("pgdb", "formfld unknown"); ?> name="pgdb" id="pgdb" value="<?=htmlspecialchars($pconfig['pgdb']);?>" />
+ <strong>
+ Database name, that contains DSPAM data.
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <p>
+ <span class="vexpl">
+ If you're running DSPAM in client/server (daemon) mode, uncomment the
+ setting below to override the default connection cache size (the number
+ of connections the server pools between all clients). The connection cache
+ represents the maximum number of database connections *available* and should
+ be set based on the maximum number of concurrent connections you're likely
+ to have. Each connection may be used by only one thread at a time, so all
+ other threads _will block_ until another connection becomes available.
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">PostgreSQL Connection Cache</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("pgccache", "formfld unknown"); ?> name="pgccache" id="pgccache" value="<?=htmlspecialchars($pconfig['pgccache']);?>" />
+ <strong>
+ Conection cache default set to 3.
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <p>
+ <span class="vexpl">
+ PostgreSQL supports the insertion of the user id into the DSPAM
+ signature. This allows you to create one single spam or fp alias
+ (pointing to some arbitrary user), and the uid in the signature will
+ switch to the correct user. Result: you need only one spam alias
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">PostgreSQL UID In Signature</td>
+ <td width="78%" class="vtable">
+ <input type="checkbox" class="formfld" name="pguid" id="pguid" value="yes" <?php if (isset($pconfig['pguid'])) echo 'checked="checked"'; ?> />
+ <strong>
+ Insert user id into the DSPAM signature.
+ </strong>
+ </td>
+ </tr>
+ </tbody>
+ <?php if ($pconfig['sdriver'] == "oracle"): ?>
+ <tbody id="DBoracle" style="display: table-row-group;">
+ <?php else: ?>
+ <tbody id="DBoracle" style="display: none;">
+ <?php endif; ?>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Attention !</td>
+ <td width="78%" class="vtable">
+ <strong style="color: red;">
+ This feature is currently unsupported !
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Oracle Server</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("oraserver", "formfld host"); ?> name="oraserver" id="oraserver" value="<?=htmlspecialchars($pconfig['oraserver']);?>" />
+ <strong>
+ A reference to a specific host that is running an Oracle database instance.
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Oracle User</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("orauser", "formfld user"); ?> name="orauser" id="orauser" value="<?=htmlspecialchars($pconfig['orauser']);?>" />
+ <strong>
+ Username, that will be used to connect to a Oracle database server instance.
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Oracle Password</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("orapwd", "formfld pwd"); ?> name="orapwd" id="orapwd" value="<?=htmlspecialchars($pconfig['orapwd']);?>" />
+ <strong>
+ Password, that will be used to connect to a Oracle database server instance.
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Oracle Schema</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("orasch", "formfld unknown"); ?> name="orasch" id="orasch" value="<?=htmlspecialchars($pconfig['orasch']);?>" />
+ <strong>
+ Schema name, that contains DSPAM data.
+ </strong>
+ </td>
+ </tr>
+ </tbody>
+ <?php if ($pconfig['sdriver'] == "hash"): ?>
+ <tbody id="DBhash" style="display: table-row-group;">
+ <?php else: ?>
+ <tbody id="DBhash" style="display: none;">
+ <?php endif; ?>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Hash Rec Max</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("hsrmax", "formfld unknown"); ?> name="hsrmax" id="hsrmax" value="<?=htmlspecialchars($pconfig['hsrmax']);?>" />
+ <strong>
+ Default number of records to create in the initial segment when building hash files.
+ </strong>
+ <p>
+ <span class="vexpl">
+ 100,000 yields files 1.6MB in size, but can fill up fast, so be sure to increase this
+ (to a million or more) if you're not using autoextend.
+ </span>
+ </p>
+ <p>
+ <span class="vexpl">
+ Primes List:
+ <pre>
+53, 97, 193, 389, 769, 1543, 3079, 6151, 12289, 24593, 49157, 98317, 196613,
+393241, 786433, 1572869, 3145739, 6291469, 12582917, 25165843, 50331653,
+100663319, 201326611, 402653189, 805306457, 1610612741, 3221225473,
+4294967291
+ </pre>
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Hash Auto Extend</td>
+ <td width="78%" class="vtable">
+ <input type="checkbox" class="formfld" name="hsatex" id="hsatex" value="yes" <?php if (isset($pconfig['hsatex'])) echo 'checked="checked"'; ?> />
+ <strong>
+ Autoextend hash databases when they fill up. This allows them to continue
+ to train by adding extents (extensions) to the file.
+ </strong>
+ <p>
+ <span class="vexpl">
+ Note: There will be a small delay during the growth process,
+ as everything needs to be closed and remapped.
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Hash Max Extents</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("hsmxex", "formfld unknown"); ?> name="hsmxex" id="hsmxex" value="<?=htmlspecialchars($pconfig['hsmxex']);?>" />
+ <strong>
+ The maximum number of extents that may be created in a single hash file.
+ </strong>
+ <p>
+ <span class="vexpl">
+ Note: Set this to zero for unlimited.
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Hash Extent Size</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("hsexsz", "formfld unknown"); ?> name="hsexsz" id="hsexsz" value="<?=htmlspecialchars($pconfig['hsexsz']);?>" />
+ <strong>
+ The record size for newly created extents.
+ </strong>
+ <p>
+ <span class="vexpl">
+ Note: Creating this too small could result in many extents
+ being created. Creating this too large could result in
+ excessive disk space usage.
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Hash Max Seek</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("hsmxse", "formfld unknown"); ?> name="hsmxse" id="hsmxse" value="<?=htmlspecialchars($pconfig['hsmxse']);?>" />
+ <strong>
+ The maximum number of records to seek to insert a new record
+ before failing or adding a new extent.
+ </strong>
+ <p>
+ <span class="vexpl">
+ Note: Setting this too high will exhaustively scan each segment
+ and kill performance. Typically, a low value is acceptable as
+ even older extents will continue to fill over time.
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Hash Concurrent User</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("hsccus", "formfld unknown"); ?> name="hsccus" id="hsccus" value="<?=htmlspecialchars($pconfig['hsccus']);?>" />
+ <strong>
+ If you are using a single, stateful hash database in daemon mode,
+ specifying a concurrent user will cause the user to be permanently
+ mapped into memory and shared via rwlocks.
+ </strong>
+ <p>
+ <span class="vexpl">
+ Note: Leave this field blank, if you do not want to use this option.
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Hash Connection Cache</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("hscoca", "formfld unknown"); ?> name="hscoca" id="hscoca" value="<?=htmlspecialchars($pconfig['hscoca']);?>" />
+ <strong>
+ If running in daemon mode, this is the max # of concurrent
+ connections that will be supported.
+ </strong>
+ <p>
+ <span class="vexpl">
+ Note: If you are using HashConcurrentUser, this option is ignored,
+ as all connections are read write locked instead of mutex locked.
+ </span>
+ </p>
+ </td>
+ </tr>
+ </tbody>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <!-- <input name="Submit" type="submit" class="formbtn" value="Save" onclick="enable_change(true)" /> -->
+ <input id="submitt" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="document.iform.sectionid.value = 'db';" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><a name="del" style="visibility: hidden;">&nbsp;</a>Delivery Settings</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Trusted Delivery Agent</td>
+ <td width="78%" class="vtable">
+ <select name="dagent" class="formselect">
+ <option value="procmail" <?php if($pconfig['dagent'] == "procmail") echo('selected="selected"');?>>procmail</option>
+ <option value="mail" <?php if($pconfig['dagent'] == "mail") echo('selected="selected"');?>>mail</option>
+ <option value="mail.local" <?php if($pconfig['dagent'] == "mail.local") echo('selected="selected"');?>>mail.local</option>
+ <option value="deliver" <?php if($pconfig['dagent'] == "deliver") echo('selected="selected"');?>>deliver</option>
+ <option value="maildrop" <?php if($pconfig['dagent'] == "maildrop") echo('selected="selected"');?>>maildrop</option>
+ <option value="exim" <?php if($pconfig['dagent'] == "exim") echo('selected="selected"');?>>exim</option>
+ </select>
+ <strong>Specifies the local delivery agent DSPAM should call when delivering mail as a trusted user.</strong>
+ <p>
+ <span class="vexpl">
+ Note: Use %u to specify the user DSPAM is processing mail for. It is generally a good idea to
+ allow the MTA to specify the pass-through arguments at run-time, but they may also be specified
+ here.
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">DSPAM Thin Client</td>
+ <td width="78%" class="vtable">
+ <input type="checkbox" name="dsthinc" id="dsthinc" value="yes" <?php if (isset($pconfig['dsthinc'])) echo 'checked="checked"'; ?> />
+ <strong>Use <code>dspamc</code> instead of the <code>dspam</code> binary.</strong>
+ <p>
+ <span class="vexpl">
+ Note: This requires to enable the dspam daemon as well (section: <i>DSPAM Daemon Settings (Server)</i>).
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">TCP/IP Based Delivery</td>
+ <td width="78%" class="vtable">
+ <input type="checkbox" name="tcpipdel" id="tcpipdel" value="yes" <?php if (isset($pconfig['tcpipdel'])) echo 'checked="checked"'; ?> onClick="enable_change(false, 5);" />
+ <strong>Use TCP/IP based delivery.</strong>
+ <p>
+ <span class="vexpl">
+ Note: This option needs to be ticked if you are going to deliver via LMTP or SMTP.
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Deliver Host</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("dhost", "formfld host"); ?> name="dhost" id="dhost" value="<?=htmlspecialchars($pconfig['dhost']);?>" <?php if (! isset($pconfig['tcpipdel'])) echo 'disabled="disabled"'; ?> />
+ <strong>Alternatively, you may wish to use SMTP or LMTP delivery to deliver your message to the mail server.</strong>
+ <p>
+ <span class="vexpl">
+ Note: You will need to configure with <code>--enable-daemon</code> to use host delivery,
+ however you do not need to operate in daemon mode. Specify an IP address or UNIX path to a
+ domain socket below as a host.
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Deliver Port</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("dport", "formfld unknown"); ?> name="dport" id="dport" value="<?=htmlspecialchars($pconfig['dport']);?>" <?php if (! isset($pconfig['tcpipdel'])) echo 'disabled="disabled"'; ?> />
+ <strong>Port number of a particular host.</strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Deliver Ident</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("dident", "formfld unknown"); ?> name="dident" id="dident" value="<?=htmlspecialchars($pconfig['dident']);?>" <?php if (! isset($pconfig['tcpipdel'])) echo 'disabled="disabled"'; ?> />
+ <strong>A particular identification string</strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">TCP/IP Delivery Protocol</td>
+ <td width="78%" class="vtable">
+ <select name="delproto" class="formselect" <?php if (! isset($pconfig['tcpipdel'])) echo 'disabled="disabled"'; ?>>
+ <option value="smtp" <?php if($pconfig['delproto'] == "smtp") echo('selected="selected"');?>>smtp</option>
+ <option value="lmtp" <?php if($pconfig['delproto'] == "lmtp") echo('selected="selected"');?>>lmtp</option>
+ </select>
+ <strong>A particular protocol typ. Either <acronym title="Simple Mail Transfer Protocol">SMTP</acronym>
+ or <acronym title="Local Mail Transfer Protocol">LMTP</acronym>.</strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">On Fail</td>
+ <td width="78%" class="vtable">
+ <select name="onfail" class="formselect">
+ <option value="error" <?php if($pconfig['onfail'] == "error") echo('selected="selected"');?>>error</option>
+ <option value="unlearn" <?php if($pconfig['onfail'] == "unlearn") echo('selected="selected"');?>>unlearn</option>
+ </select>
+ <strong>What to do if local delivery or quarantine should fail.</strong>
+ <p>
+ <span class="vexpl">
+ Note: If set to &quot;unlearn&quot;, DSPAM will unlearn the message prior to exiting with an un
+ successful return code. The default option, &quot;error&quot; will not unlearn the message but
+ return the appropriate error code. The unlearn option is use-ful on some systems where local
+ delivery failures will cause the message to be requeued for delivery, and could result in the
+ message being processed multiple times. During a very large failure, however, this could cause
+ a significant load increase.
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <!-- <input name="Submit" type="submit" class="formbtn" value="Save" onclick="enable_change(true)" /> -->
+ <input id="submitt" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="document.iform.sectionid.value = 'del';" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><a name="priv" style="visibility: hidden;">&nbsp;</a>DSPAM Privileges</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Trusted Users</td>
+ <td width="78%" class="vtable">
+ <strong>Unix users which are allowed to perform certain actions.</strong>
+ <p>
+ <span class="vexpl">
+ Note: Only the users specified below will be allowed to perform
+ administrative functions in DSPAM such as setting the active user and
+ accessing tools. All other users attempting to run DSPAM will be restricted;
+ their uids will be forced to match the active username and they will not be
+ able to specify delivery agent privileges or use tools.
+ </span>
+ </p>
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td width="55%" class="listhdrr"><?=gettext("UNIX username");?></td>
+ <td width="35%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="10%" class="list"></td>
+ </tr>
+ <?php if(is_array($t_users)): ?>
+ <?php $i = 0; foreach ($t_users as $user): ?>
+ <?php if($user['name'] <> ""): ?>
+
+ <tr>
+ <td class="listlr" ondblclick="document.location='dspam-settings-tuser.php?id=<?=$i;?>&sectionid=priv';">
+ <?=htmlspecialchars($user['name']);?>
+ </td>
+ <td class="listbg" ondblclick="document.location='dspam-settings-tuser.php?id=<?=$i;?>&sectionid=priv';">
+ <font color="#FFFFFF"><?=htmlspecialchars($user['descr']);?>&nbsp;</font>
+ </td>
+ <td valign="middle" nowrap class="list">
+ <table border="0" cellspacing="0" cellpadding="1">
+ <tr>
+ <td valign="middle"><a href="dspam-settings-tuser.php?id=<?=$i;?>&sectionid=priv"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0"></a></td>
+ <td valign="middle"><a href="dspam-settings.php?act=del&what=tuser&id=<?=$i;?>&sectionid=priv" onclick="return confirm('<?=gettext("Do you really want to delete this mapping?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0"></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <?php endif; ?>
+ <?php $i++; endforeach; ?>
+ <?php endif; ?>
+ <tr>
+ <td class="list" colspan="3"></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1">
+ <tr>
+ <td valign="middle"><a href="dspam-settings-tuser.php?sectionid=priv"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0"></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <!-- <input name="Submit" type="submit" class="formbtn" value="Save" onclick="enable_change(true)" /> -->
+ <input id="submitt" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="document.iform.sectionid.value = 'priv';" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td valign="top" class="listtopic"><a name="dbg" style="visibility: hidden;">&nbsp;</a>DSPAM Debugging Options</td>
+ <td align="right" valign="top" class="listtopic">
+ <input type="checkbox" name="enabledbg" id="enabledbg" value="yes" <?php if (isset($pconfig['enabledbg'])) echo 'checked="checked"'; ?> onClick="enable_change(false, 0);" />
+ <strong>Enable</strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Debug</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("debug", "formfld unknown"); ?> name="debug" id="debug" value="<?=htmlspecialchars($pconfig['debug']);?>" <?php if (! isset($pconfig['enabledbg'])) echo 'disabled="disabled"'; ?> />
+ <strong>Enables debugging for some or all users.</strong>
+ <p>
+ <span class="vexpl">
+ IMPORTANT: DSPAM must be compiled with debug support in order to use this option.
+ DSPAM should never be running in production with debug active unless you are
+ troubleshooting problems.
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Debug Options</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("dopt", "formfld unknown"); ?> name="dopt" id="dopt" value="<?=htmlspecialchars($pconfig['dopt']);?>" <?php if (! isset($pconfig['enabledbg'])) echo 'disabled="disabled"'; ?> />
+ <strong>One or more of: process, classify, spam, fp, inoculation, corpus</strong>
+ <p>
+ <span class="vexpl">
+ <pre>
+process standard message processing
+classify message classification using --classify
+spam error correction of missed spam
+fp error correction of false positives
+inoculation message inoculations (source=inoculation)
+corpus corpusfed messages (source=corpus)
+ </pre>
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <!-- <input name="Submit" type="submit" class="formbtn" value="Save" onclick="enable_change(true)" /> -->
+ <input id="submitt" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="document.iform.sectionid.value = 'dbg';" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><a name="eng" style="visibility: hidden;">&nbsp;</a>DSPAM Engine Settings</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Training Mode</td>
+ <td width="78%" class="vtable">
+ <select name="tmode" class="formselect">
+ <option value="toe" <?php if($pconfig['tmode'] == "toe") echo('selected="selected"');?>>toe</option>
+ <option value="tum" <?php if($pconfig['tmode'] == "tum") echo('selected="selected"');?>>tum</option>
+ <option value="teft" <?php if($pconfig['tmode'] == "teft") echo('selected="selected"');?>>teft</option>
+ <option value="notrain" <?php if($pconfig['tmode'] == "notrain") echo('selected="selected"');?>>notrain</option>
+ </select>
+ <strong>
+ The default training mode to use for all operations, when one has not been
+ specified on the commandline or in the user's preferences.
+ </strong>
+ <p>
+ <span class="vexpl">
+ Acceptable values are: toe, tum, teft, notrain
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Test Conditional Training</td>
+ <td width="78%" class="vtable">
+ <input name="testct" type="checkbox" id="testct" value="yes" <?php if (isset($pconfig['testct'])) echo 'checked="checked"'; ?> />
+ <strong>
+ By default, dspam will retrain certain errors
+ until the condition is no longer met.
+ </strong>
+ <p>
+ <span class="vexpl">
+ Note: This usually accelerates learning. Some people argue that this can increase
+ the risk of errors, however.
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Features</td>
+ <td width="78%" class="vtable">
+ <strong>
+ Specify features to activate by default; can also be specified
+ on the commandline. See the documentation for a list of available features.
+ If _any_ features are specified on the commandline, these are ignored.
+ </strong>
+ <p>
+ <span class="vexpl">
+ Note: For standard "CRM114" Markovian weighting, use sbph
+ </span>
+ </p>
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td width="55%" class="listhdrr"><?=gettext("DSPAM Feature");?></td>
+ <td width="35%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="10%" class="list"></td>
+ </tr>
+ <?php if(is_array($t_features)): ?>
+ <?php $i = 0; foreach ($t_features as $feature): ?>
+ <?php if($feature['name'] <> ""): ?>
+
+ <tr>
+ <td class="listlr" ondblclick="document.location='dspam-settings-feat.php?id=<?=$i;?>&sectionid=eng';">
+ <?=htmlspecialchars($feature['name']);?>
+ </td>
+ <td class="listbg" ondblclick="document.location='dspam-settings-feat.php?id=<?=$i;?>&sectionid=eng';">
+ <font color="#FFFFFF"><?=htmlspecialchars($feature['descr']);?>&nbsp;</font>
+ </td>
+ <td valign="middle" nowrap class="list">
+ <table border="0" cellspacing="0" cellpadding="1">
+ <tr>
+ <td valign="middle"><a href="dspam-settings-feat.php?id=<?=$i;?>&sectionid=eng"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0"></a></td>
+ <td valign="middle"><a href="dspam-settings.php?act=del&what=feat&id=<?=$i;?>&sectionid=eng" onclick="return confirm('<?=gettext("Do you really want to delete this mapping?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0"></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <?php endif; ?>
+ <?php $i++; endforeach; ?>
+ <?php endif; ?>
+ <tr>
+ <td class="list" colspan="3"></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1">
+ <tr>
+ <td valign="middle"><a href="dspam-settings-feat.php?sectionid=eng"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0"></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Algorithms</td>
+ <td width="78%" class="vtable">
+ <strong>
+ Specify the statistical algorithms to use, overriding any
+ defaults configured in the build.
+ </strong>
+ <p>
+ <span class="vexpl">
+ The options are:
+ <pre>
+naive Naive-Bayesian (All Tokens)
+graham Graham-Bayesian ("A Plan for Spam")
+burton Burton-Bayesian (SpamProbe)
+robinson Robinson's Geometric Mean Test (Obsolete)
+chi-square Fisher-Robinson's Chi-Square Algorithm
+ </pre>
+ </span>
+ </p>
+ <p>
+ <span class="vexpl">
+ You may have multiple algorithms active simultaneously, but it is strongly
+ recommended that you group Bayesian algorithms with other Bayesian
+ algorithms, and any use of Chi-Square remain exclusive.
+ </p>
+ <p>
+ <span class="vexpl">
+ NOTE: For standard &quot;CRM114&quot; Markovian weighting, use &lsquo;naive&rsquo;, or consider
+ using &lsquo;burton&rsquo; for slightly better accuracy.
+ </span>
+ </p>
+ <p>
+ <span class="vexpl">
+ Don't mess with this unless you know what you're doing
+ </span>
+ </p>
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td width="55%" class="listhdrr"><?=gettext("DSPAM Algorithm");?></td>
+ <td width="35%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="10%" class="list"></td>
+ </tr>
+ <?php if(is_array($t_algos)): ?>
+ <?php $i = 0; foreach ($t_algos as $algo): ?>
+ <?php if($algo['name'] <> ""): ?>
+
+ <tr>
+ <td class="listlr" ondblclick="document.location='dspam-settings-algo.php?id=<?=$i;?>&sectionid=eng';">
+ <?=htmlspecialchars($algo['name']);?>
+ </td>
+ <td class="listbg" ondblclick="document.location='dspam-settings-algo.php?id=<?=$i;?>&sectionid=eng';">
+ <font color="#FFFFFF"><?=htmlspecialchars($algo['descr']);?>&nbsp;</font>
+ </td>
+ <td valign="middle" nowrap class="list">
+ <table border="0" cellspacing="0" cellpadding="1">
+ <tr>
+ <td valign="middle"><a href="dspam-settings-algo.php?id=<?=$i;?>&sectionid=eng"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0"></a></td>
+ <td valign="middle"><a href="dspam-settings.php?act=del&what=algo&id=<?=$i;?>&sectionid=eng" onclick="return confirm('<?=gettext("Do you really want to delete this mapping?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0"></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <?php endif; ?>
+ <?php $i++; endforeach; ?>
+ <?php endif; ?>
+ <tr>
+ <td class="list" colspan="3"></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1">
+ <tr>
+ <td valign="middle"><a href="dspam-settings-algo.php?sectionid=eng"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0"></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">PValue</td>
+ <td width="78%" class="vtable">
+ <select name="pvalue" class="formselect">
+ <option value="graham" <?php if($pconfig['pvalue'] == "toe") echo('selected="selected"');?>>graham</option>
+ <option value="robinson" <?php if($pconfig['pvalue'] == "toe") echo('selected="selected"');?>>robinson</option>
+ <option value="markov" <?php if($pconfig['pvalue'] == "toe") echo('selected="selected"');?>>markov</option>
+ </select>
+ <strong>
+ Specify the technique used for calculating PValues, overriding any defaults
+ configured in the build.
+ </strong>
+ <p>
+ <span class="vexpl">
+ These options are:
+ <pre>
+graham Graham's Technique (&quot;A Plan for Spam&quot;)
+robinson Robinson's Technique
+markov Markovian Weighted Technique
+ </pre>
+ </span>
+ </p>
+ <p>
+ <span class="vexpl">
+ Unlike algorithms, you may only have one of these defined. Use of the
+ chi-square algorithm automatically changes this to robinson.
+ </span>
+ </p>
+ <p>
+ <span class="vexpl">
+ Don't mess with this unless you know what you're doing.
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Improbability Drive</td>
+ <td width="78%" class="vtable">
+ <input name="ipdrive" type="checkbox" id="ipdrive" value="yes" <?php if (isset($pconfig['ipdrive'])) echo 'checked="checked"'; ?> />
+ <strong>
+ Calculate odds-ratios for ham/spam, and add to X-DSPAM-Improbability headers
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Preferences</td>
+ <td width="78%" class="vtable">
+ <strong>
+ Specify any preferences to set by default, unless otherwise
+ overridden by the user (see next section) or a default.prefs file.
+ </strong>
+ <p>
+ <span class="vexpl">
+ Note: If user or default.prefs are found, the user's
+ preferences will override any defaults.
+ </span>
+ </p>
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td width="55%" class="listhdrr"><?=gettext("DSPAM Preference Value");?></td>
+ <td width="35%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="10%" class="list"></td>
+ </tr>
+ <?php if(is_array($t_prefs)): ?>
+ <?php $i = 0; foreach ($t_prefs as $pref): ?>
+ <?php if($pref['value'] <> ""): ?>
+
+ <tr>
+ <td class="listlr" ondblclick="document.location='dspam-settings-prefs.php?id=<?=$i;?>&sectionid=eng';">
+ <?=htmlspecialchars($pref['value']);?>
+ </td>
+ <td class="listbg" ondblclick="document.location='dspam-settings-prefs.php?id=<?=$i;?>&sectionid=eng';">
+ <font color="#FFFFFF"><?=htmlspecialchars($pref['descr']);?>&nbsp;</font>
+ </td>
+ <td valign="middle" nowrap class="list">
+ <table border="0" cellspacing="0" cellpadding="1">
+ <tr>
+ <td valign="middle"><a href="dspam-settings-prefs.php?id=<?=$i;?>&sectionid=eng"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0"></a></td>
+ <td valign="middle"><a href="dspam-settings.php?act=del&what=pref&id=<?=$i;?>&sectionid=eng" onclick="return confirm('<?=gettext("Do you really want to delete this mapping?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0"></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <?php endif; ?>
+ <?php $i++; endforeach; ?>
+ <?php endif; ?>
+ <tr>
+ <td class="list" colspan="3"></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1">
+ <tr>
+ <td valign="middle"><a href="dspam-settings-prefs.php?sectionid=eng"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0"></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Overrides</td>
+ <td width="78%" class="vtable">
+ <strong>
+ Specifies the user preferences which may override
+ configuration and commandline defaults.
+ </strong>
+ <p>
+ <span class="vexpl">
+ Note: Any other preferences supplied by an untrusted user will be ignored.
+ </span>
+ </p>
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td width="55%" class="listhdrr"><?=gettext("DSPAM Override Value");?></td>
+ <td width="35%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="10%" class="list"></td>
+ </tr>
+ <?php if(is_array($t_overr)): ?>
+ <?php $i = 0; foreach ($t_overr as $over): ?>
+ <?php if($over['value'] <> ""): ?>
+
+ <tr>
+ <td class="listlr" ondblclick="document.location='dspam-settings-overr.php?id=<?=$i;?>&sectionid=eng';">
+ <?=htmlspecialchars($over['value']);?>
+ </td>
+ <td class="listbg" ondblclick="document.location='dspam-settings-overr.php?id=<?=$i;?>&sectionid=eng';">
+ <font color="#FFFFFF"><?=htmlspecialchars($over['descr']);?>&nbsp;</font>
+ </td>
+ <td valign="middle" nowrap class="list">
+ <table border="0" cellspacing="0" cellpadding="1">
+ <tr>
+ <td valign="middle"><a href="dspam-settings-overr.php?id=<?=$i;?>&sectionid=eng"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0"></a></td>
+ <td valign="middle"><a href="dspam-settings.php?act=del&what=overr&id=<?=$i;?>&sectionid=eng" onclick="return confirm('<?=gettext("Do you really want to delete this mapping?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0"></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <?php endif; ?>
+ <?php $i++; endforeach; ?>
+ <?php endif; ?>
+ <tr>
+ <td class="list" colspan="3"></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1">
+ <tr>
+ <td valign="middle"><a href="dspam-settings-overr.php?sectionid=eng"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0"></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <!-- <input name="Submit" type="submit" class="formbtn" value="Save" onclick="enable_change(true)" /> -->
+ <input id="submitt" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="document.iform.sectionid.value = 'eng';" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td valign="top" class="listtopic"><a name="ldap" style="visibility: hidden;">&nbsp;</a>LDAP Settings</td>
+ <td align="right" valign="top" class="listtopic">
+ <input name="enableldap" type="checkbox" id="enableldap" value="yes" <?php if (isset($pconfig['enableldap'])) echo 'checked="checked"'; ?> onClick="enable_change(false, 1);" />
+ <strong>Enable</strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">LDAP Mode</td>
+ <td width="78%" class="vtable">
+ <select name="ldapmode" class="formselect" <?php if (! isset($pconfig['enableldap'])) echo 'disabled="disabled"'; ?>>
+ <option value="verify" selected="selected">verify</option>
+ </select>
+ <strong>
+ Perform various LDAP functions depending on LDAPMode variable.
+ </strong>
+ <p>
+ <span class="vexpl">
+ Note: Presently, the only mode supported is 'verify', which will verify the
+ existence of an unknown user in LDAP prior to creating them as a new user in
+ the system. This is useful on some systems acting as gateway machines.
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">LDAP Host</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("hldaphost", "formfld host"); ?> name="ldaphost" id="ldaphost" value="<?=htmlspecialchars($pconfig['ldaphost']);?>" <?php if (! isset($pconfig['enableldap'])) echo 'disabled="disabled"'; ?> />
+ <strong>
+ Hostname of the LDAP directory server.
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">LDAP Filter</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("ldapfilter", "formfld unknown"); ?> name="ldapfilter" id="ldapfilter" value="<?=htmlspecialchars($pconfig['ldapfilter']);?>" <?php if (! isset($pconfig['enableldap'])) echo 'disabled="disabled"'; ?> />
+ <strong>
+ A specific query filter, that should be used while querying the LDAP server.
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">LDAP Base</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("ldapbase", "formfld unknown"); ?> name="ldapbase" id="ldapbase" value="<?=htmlspecialchars($pconfig['ldapbase']);?>" <?php if (! isset($pconfig['enableldap'])) echo 'disabled="disabled"'; ?> />
+ <strong>
+ A particular distinguish name from where to start LDAP queries.
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <!-- <input name="Submit" type="submit" class="formbtn" value="Save" onclick="enable_change(true)" /> -->
+ <input id="submitt" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="document.iform.sectionid.value = 'ldap';" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><a name="misc" style="visibility: hidden;">&nbsp;</a>Miscellaneous Settings</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Failover Attempts</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30"<?= checkForErrorClass("foatt", "formfld unknown"); ?> name="foatt" id="foatt" value="<?=htmlspecialchars($pconfig['foatt']);?>" />
+ <strong>
+ A particular number of attempts.
+ </strong>
+ <p>
+ <span class="vexpl">
+ If the storage fails, the agent will follow each profile's failover up to
+ a maximum number of failover attempts. This should be set to a maximum of
+ the number of profiles you have, otherwise the agent could loop and try
+ the same profile multiple times (unless this is your desired behavior).
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Ignore Headers</td>
+ <td width="78%" class="vtable">
+ <p>
+ <span class="vexpl">
+ If DSPAM is behind other tools which may add a header to
+ incoming emails, it may be beneficial to ignore these headers - especially
+ if they are coming from another spam filter. If you are _not_ using one of
+ these tools, however, leaving the appropriate headers commented out will
+ allow DSPAM to use them as telltale signs of forged email.
+ </span>
+ </p>
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td width="55%" class="listhdrr"><?=gettext("Header Name");?></td>
+ <td width="35%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="10%" class="list"></td>
+ </tr>
+ <?php if(is_array($t_headers)): ?>
+ <?php $i = 0; foreach ($t_headers as $header): ?>
+ <?php if($header['name'] <> ""): ?>
+
+ <tr>
+ <td class="listlr" ondblclick="document.location='dspam-settings-header.php?id=<?=$i;?>&sectionid=misc';">
+ <?=htmlspecialchars($header['name']);?>
+ </td>
+ <td class="listbg" ondblclick="document.location='dspam-settings-header.php?id=<?=$i;?>&sectionid=misc';">
+ <font color="#FFFFFF"><?=htmlspecialchars($header['descr']);?>&nbsp;</font>
+ </td>
+ <td valign="middle" nowrap class="list">
+ <table border="0" cellspacing="0" cellpadding="1">
+ <tr>
+ <td valign="middle"><a href="dspam-settings-header.php?id=<?=$i;?>&sectionid=misc"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0"></a></td>
+ <td valign="middle"><a href="dspam-settings.php?act=del&what=header&id=<?=$i;?>&sectionid=misc" onclick="return confirm('<?=gettext("Do you really want to delete this mapping?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0"></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <?php endif; ?>
+ <?php $i++; endforeach; ?>
+ <?php endif; ?>
+ <tr>
+ <td class="list" colspan="3"></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1">
+ <tr>
+ <td valign="middle"><a href="dspam-settings-header.php?sectionid=misc"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0"></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">SBL Lookup</td>
+ <td width="78%" class="vtable">
+ <p>
+ <input type="checkbox" name="enablesbl" id="enablesbl" value="yes" <?php if (isset($pconfig['enablesbl'])) echo 'checked="checked"'; ?> onClick="enable_change(false, 2);" />
+ <strong>
+ Enable checks against a particular <acronym title="Streamlined Blackhole List">SBL</acronym> host.
+ </strong>
+ </p>
+ <p>
+ <input type="text" size="30" c<?= checkForErrorClass("sblhost", "formfld host"); ?> name="sblhost" id="sblhost" value="<?=htmlspecialchars($pconfig['sblhost']);?>" <?php if (! isset($pconfig['enablesbl'])) echo 'disabled="disabled"'; ?> />
+ <strong>
+ A particular SBL hostname.
+ </strong>
+ </p>
+ <p>
+ <span class="vexpl">
+ Perform lookups on streamlined blackhole list servers (see
+ <a href="http://www.nuclearelephant.com/projects/sbl/" target="_blank">http://www.nuclearelephant.com/projects/sbl/</a>).
+ The streamlined blacklist
+ server is machine-automated, unsupervised blacklisting system designed to
+ provide real-time and highly accurate blacklisting based on network spread.
+ When performing a lookup, DSPAM will automatically learn the inbound message
+ as spam if the source IP is listed. Until an official public RABL server is
+ available, this feature is only useful if you are running your own
+ streamlined blackhole list server for internal reporting among multiple mail
+ servers. Provide the name of the lookup zone below to use.
+ </span>
+ </p>
+ <p>
+ <span class="vexpl">
+ This function performs standard reverse-octet.domain lookups, and while it
+ will function with many RBLs, it's strongly discouraged to use those
+ maintained by humans as they're often inaccurate and could hurt filter
+ learning and accuracy.
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">RBL Inoculate</td>
+ <td width="78%" class="vtable">
+ <input name="enablerbl" type="checkbox" id="enablerbl" value="yes" <?php if (isset($pconfig['enablerbl'])) echo 'checked="checked"'; ?> />
+ <strong>
+ Enable <acronym title="Realtime Blackhole List">RBL</acronym> inoculation support.
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Enable Notification</td>
+ <td width="78%" class="vtable">
+ <input name="enablenoti" type="checkbox" id="enablenoti" value="yes" <?php if (isset($pconfig['enablenoti'])) echo 'checked="checked"'; ?> onClick="enable_change(false, 2);" />
+ <strong>
+ Enable the sending of notification emails to users (first message, quarantine full, etc.)
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">DSPAM Support Contact</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("dspamcontact", "formfld mail"); ?> name="dspamcontact" id="dspamcontact" value="<?=htmlspecialchars($pconfig['dspamcontact']);?>" <?php if (empty($pconfig['enablenoti'])) echo 'disabled="disabled"'; ?> />
+ <strong>
+ The username of the person who provides DSPAM support for this DSPAM installation
+ </strong>
+ &nbsp;(This is the left most part of an email address before the @ sign).
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Email Domain Name</td>
+ <td width="78%" class="vtable">
+ <input name="whichdomain" type="checkbox" id="whichdomain" value="yes" <?php if (empty($pconfig['dspamdomain'])) echo 'checked="checked"'; if (empty($pconfig['enablenoti'])) echo 'disabled="disabled"'; ?> onClick="toggleDSPAMDomain(false, this);" />
+ <strong>
+ Use global domain settings while trying to send an email message.
+ </strong>
+ </td>
+ </tr>
+ <?php if (isset($pconfig['dspamdomain'])): ?>
+ <tbody id="emailnotitb" style="display: table-row-group;">
+ <?php else: ?>
+ <tbody id="emailnotitb" style="display: none;">
+ <?php endif; ?>
+ <tr>
+ <td width="22%" valign="top" class="vncell">DSPAM Domain Name</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("dspamdomain", "formfld url"); ?> name="dspamdomain" id="dspamdomain" value="<?=htmlspecialchars($pconfig['dspamdomain']);?>" />
+ <strong>
+ Use this domain name while trying to send an email message.
+ </strong>
+ </td>
+ </tr>
+ </tbody>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <!-- <input name="Submit" type="submit" class="formbtn" value="Save" onclick="enable_change(true)" /> -->
+ <input id="submitt" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="document.iform.sectionid.value = 'misc';" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><a name="main" style="visibility: hidden;">&nbsp;</a>Maintainance Settings</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <p>
+ <span class="vexpl">
+ Set dspam_clean purge default options, if not
+ otherwise specified on the commandline. You may set some of
+ the below values to <code>off</code>, for instance if you are
+ using a SQL-based database backend for DSPAM. Please consult your
+ DSPAM manual for any details.
+ </span>
+ </p>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Purge Signatures</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("psig", "formfld unknown"); ?> name="psig" id="psig" value="<?=htmlspecialchars($pconfig['psig']);?>" />
+ <strong>
+ Purge stale signatures
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Purge Neutral</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("pneut", "formfld unknown"); ?> name="pneut" id="pneut" value="<?=htmlspecialchars($pconfig['pneut']);?>" />
+ <strong>
+ Purge tokens with neutralish probabilities
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Purge Unused</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("punu", "formfld unknown"); ?> name="punu" id="punu" value="<?=htmlspecialchars($pconfig['punu']);?>" />
+ <strong>
+ Purge unused tokens
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Purge Hapaxes</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("phapa", "formfld unknown"); ?> name="phapa" id="phapa" value="<?=htmlspecialchars($pconfig['phapa']);?>" />
+ <strong>
+ Purge tokens with less than 5 hits (hapaxes)
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Purge Hits 1S</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("pones", "formfld unknown"); ?> name="pones" id="pones" value="<?=htmlspecialchars($pconfig['pones']);?>" />
+ <strong>
+ Purge tokens with only 1 spam hit
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Purge Hits 1I</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("ponei", "formfld unknown"); ?> name="ponei" id="ponei" value="<?=htmlspecialchars($pconfig['ponei']);?>" />
+ <strong>
+ Purge tokens with only 1 innocent hit
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <!-- <input name="Submit" type="submit" class="formbtn" value="Save" onclick="enable_change(true)" /> -->
+ <input id="submitt" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="document.iform.sectionid.value = 'main';" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><a name="sys" style="visibility: hidden;">&nbsp;</a>System Settings</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Local MX</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("locmx", "formfld host"); ?> name="locmx" id="locmx" value="<?=htmlspecialchars($pconfig['locmx']);?>" />
+ <strong>
+ Local Mail Exchangers: Used for source address tracking, tells DSPAM which
+ mail exchangers are local and therefore should be ignored in the Received:
+ header when tracking the source of an email. Note: you should use the address
+ of the host as appears between brackets [ ] in the Received header.
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <span class="vexpl">
+ Disabling logging for users will make usage graphs unavailable to
+ them. Disabling system logging will make admin graphs unavailable.
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Enable System Log</td>
+ <td width="78%" class="vtable">
+ <input name="enablesysl" type="checkbox" id="enablesysl" value="yes" <?php if (isset($pconfig['enablesysl'])) echo 'checked="checked"'; ?> />
+ <strong>
+ Enable system logging.
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Enable User Log</td>
+ <td width="78%" class="vtable">
+ <input name="enableusel" type="checkbox" id="enableusel" value="yes" <?php if (isset($pconfig['enableusel'])) echo 'checked="checked"'; ?> />
+ <strong>
+ Enable user logging.
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Opt Settings</td>
+ <td width="78%" class="vtable">
+ <select name="optinout" class="formselect">
+ <option value="out" <?php if($pconfig['optinout'] == "out") echo('selected="selected"');?>>out</option>
+ <option value="in" <?php if($pconfig['optinout'] == "in") echo('selected="selected"');?>>in</option>
+ </select>
+ <p>
+ <span class="vexpl">
+ Opt: in or out; determines DSPAM's default filtering behavior. If this value
+ is set to in, users must opt-in to filtering by dropping a .dspam file in
+ <code>/var/dspam/opt-in/user.dspam</code> (or if you have homedirs configured, a .dspam
+ folder in their home directory). The default is opt-out, which means all
+ users will be filtered unless a <code>.nodspam</code> file is dropped in
+ <code>/var/dspam/opt-out/user.nodspam</code>
+ <span class="vexpl">
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <span class="vexpl">
+ In lieu of setting up individual aliases for each user,
+ DSPAM can be configured to automatically parse the To: address for spam and
+ false positive forwards. From there, it can be configured to either set the
+ DSPAM user based on the username specified in the header and/or change the
+ training class and source accordingly. The options below can be used to
+ customize most common types of header parsing behavior to avoid the need for
+ multiple aliases, or if using LMTP, aliases entirely..
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Parse To Headers</td>
+ <td width="78%" class="vtable">
+ <input name="enableptoh" type="checkbox" id="enableptoh" value="yes" <?php if (isset($pconfig['enableptoh'])) echo 'checked="checked"'; ?> />
+ <strong>
+ Parse the <i>To:</i> headers of an incoming message.
+ </strong>
+ <p>
+ <span class="vexpl">
+ This must be set to &lsquo;on&rsquo; to use either of the following features.
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Change Mode On Parse</td>
+ <td width="78%" class="vtable">
+ <input name="enablecmop" type="checkbox" id="enablecmop" value="yes" <?php if (isset($pconfig['enablecmop'])) echo 'checked="checked"'; ?> />
+ <strong>
+ Automatically change the class (to spam or innocent).
+ </strong>
+ <p>
+ <span class="vexpl">
+ This depends on whether spam- or notspam- was specified, and change
+ the source to &lsquo;error&rsquo;. This is convenient if you're not
+ using aliases at all, but are delivering via LMTP.
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Change User On Parse</td>
+ <td width="78%" class="vtable">
+ <input name="enablecuop" type="checkbox" id="enablecuop" value="yes" <?php if (isset($pconfig['enablecuop'])) echo 'checked="checked"'; ?> />
+ <strong>
+ Automatically change the username to match that specified in the <i>To:</i> header.
+ </strong>
+ <p>
+ <span class="vexpl">
+ For example, <code>spam-bob@domain.tld</code> will set the username
+ to bob, ignoring any --user passed in. This may not always be desirable if
+ you are using virtual email addresses as usernames. Options:
+ on or user take the portion before the @ sign only
+ full take everything after the initial {spam,notspam}-.
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Broken MTA Settings</td>
+ <td width="78%" class="vtable">
+ <input name="enablebmta" type="checkbox" id="enablebmta" value="yes" <?php if (isset($pconfig['enablebmta'])) echo 'checked="checked"'; ?> />
+ <strong>
+ Enable broken MTA settings.
+ </strong>
+ <p>
+ <span class="vexpl">
+ Broken MTA Options: Some MTAs don't support the proper functionality
+ necessary. In these cases you can activate certain features in DSPAM to
+ compensate. &lsquo;returnCodes&rsquo; causes DSPAM to return an exit code of 99 if
+ the message is spam, 0 if not, or a negative code if an error has occured.
+ Specifying &lsquo;case&rsquo; causes DSPAM to force the input usernames to lowercase.
+ Spceifying &lsquo;lineStripping&rsquo; causes DSPAM to strip &circ;M's from messages passed
+ </span>
+ </p>
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td width="55%" class="listhdrr"><?=gettext("Broken MTA Option");?></td>
+ <td width="35%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="10%" class="list"></td>
+ </tr>
+ <?php if(is_array($t_bmtas)): ?>
+ <?php $i = 0; foreach ($t_bmtas as $bmta): ?>
+ <?php if($bmta['name'] <> ""): ?>
+
+ <tr>
+ <td class="listlr" ondblclick="document.location='dspam-settings-bmta.php?id=<?=$i;?>&sectionid=sys';">
+ <?=htmlspecialchars($bmta['name']);?>
+ </td>
+ <td class="listbg" ondblclick="document.location='dspam-settings-bmta.php?id=<?=$i;?>&sectionid=sys';">
+ <font color="#FFFFFF"><?=htmlspecialchars($bmta['descr']);?>&nbsp;</font>
+ </td>
+ <td valign="middle" nowrap class="list">
+ <table border="0" cellspacing="0" cellpadding="1">
+ <tr>
+ <td valign="middle"><a href="dspam-settings-bmta.php?id=<?=$i;?>&sectionid=sys"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0"></a></td>
+ <td valign="middle"><a href="dspam-settings.php?act=del&what=bmta&id=<?=$i;?>&sectionid=sys" onclick="return confirm('<?=gettext("Do you really want to delete this mapping?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0"></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <?php endif; ?>
+ <?php $i++; endforeach; ?>
+ <?php endif; ?>
+ <tr>
+ <td class="list" colspan="3"></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1">
+ <tr>
+ <td valign="middle"><a href="dspam-settings-bmta.php?sectionid=sys"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0"></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Max Message Size</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("maxmsgs", "formfld unknown"); ?> name="maxmsgs" id="maxmsgs" value="<?=htmlspecialchars($pconfig['maxmsgs']);?>" />
+ <strong>
+ You may specify a maximum message size for DSPAM to process.
+ </strong>
+ <p>
+ <span class="vexpl">
+ If the message is larger than the maximum size, it will be delivered
+ without processing. Value is in bytes.
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Processor Bias</td>
+ <td width="78%" class="vtable">
+ <input type="checkbox" name="procbias" id="procbias" value="yes" <?php if (isset($pconfig['procbias'])) echo 'checked="checked"'; ?> />
+ <strong>
+ Bias causes the filter to lean more toward &lsquo;innocent&rsquo;, and
+ usually greatly reduces false positives. It is the default behavior of
+ most Bayesian filters (including dspam).
+ </strong>
+ <p>
+ <span class="vexpl">
+ Note: You probably DONT want this if you're using Markovian Weighting,
+ unless you are paranoid about false positives.
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <!-- <input name="Submit" type="submit" class="formbtn" value="Save" onclick="enable_change(true)" /> -->
+ <input id="submitt" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="document.iform.sectionid.value = 'sys';" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td valign="top" class="listtopic"><a name="clam" style="visibility: hidden;">&nbsp;</a>ClamAV Engine Settings</td>
+ <td align="right" valign="top" class="listtopic">
+ <input name="enableclam" type="checkbox" id="enableclam" value="yes" <?php if (isset($pconfig['enableclam'])) echo 'checked="checked"'; ?> onClick="enable_change(false, 3);" />
+ <strong>Enable</strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <p>
+ <span class="vexpl">
+ If you are running clamd, DSPAM can perform stream-based
+ virus checking using TCP. Uncomment the values below to enable virus
+ checking.
+ </span>
+ </p>
+ <p>
+ <span class="vexpl">
+ ClamAVResponse:
+ <dl>
+ <dt>reject</dt>
+ <dd>(reject or drop the message with a permanent failure)</dd>
+ <dt>accept</dt>
+ <dd>(accept the message and quietly drop the message)</dd>
+ <dt>spam</dt>
+ <dd>(treat as spam and quarantine/tag/whatever)</dd>
+ </dl>
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">ClamAV Port</td>
+ <td width="78%" class="vtable">
+ <p>
+ <input type="text" size="30" <?= checkForErrorClass("clamport", "formfld unknown"); ?> name="clamport" id="clamport" value="<?=htmlspecialchars($pconfig['clamport']);?>" <?php if (! isset($pconfig['enableclam'])) echo 'disabled="disabled"'; ?> />
+ <strong>
+ A number that specifies the port the ClamAV daemon is listening to.
+ </strong>
+ </p>
+ <p>
+ <span class="vexpl">
+ If the message is larger than the maximum size, it will be delivered
+ without processing. Value is in bytes.
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">ClamAV Host</td>
+ <td width="78%" class="vtable">
+ <input type="text" size="30" <?= checkForErrorClass("clamhost", "formfld host"); ?> name="clamhost" id="clamhost" value="<?=htmlspecialchars($pconfig['clamhost']);?>" <?php if (! isset($pconfig['enableclam'])) echo 'disabled="disabled"'; ?> />
+ <strong>
+ An IP address that points to the host the ClamAV daemon is running on.
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">ClamAV Response</td>
+ <td width="78%" class="vtable">
+ <select name="clamresp" class="formselect" <?php if (! isset($pconfig['enableclam'])) echo 'disabled="disabled"'; ?>>
+ <option value="reject" <?php if($pconfig['clamresp'] == "reject") echo('selected="selected"');?>>reject</option>
+ <option value="accept" <?php if($pconfig['clamresp'] == "accept") echo('selected="selected"');?>>accept</option>
+ <option value="spam" <?php if($pconfig['clamresp'] == "spam") echo('selected="selected"');?>>spam</option>
+ </select>
+ <strong>
+ The action that should take place, if ClamAV reports a positive.
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <!-- <input name="Submit" type="submit" class="formbtn" value="Save" onclick="enable_change(true)" /> -->
+ <input id="submitt" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="document.iform.sectionid.value = 'clam';" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><a name="srv" style="visibility: hidden;">&nbsp;</a>DSPAM Daemon Settings (Server)</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <span class="vexpl">
+ If you are running DSPAM as a daemonized server using
+ <code>--daemon</code>, the following parameters will override the default. Use the
+ ServerPass option to set up accounts for each client machine. The DSPAM
+ server will process and deliver the message based on the parameters
+ specified. If you want the client machine to perform delivery, use
+ the <code>--stdout</code> option in conjunction with a local setup.
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Server Port</td>
+ <td width="78%" class="vtable">
+ <p>
+ <input type="text" size="30" <?= checkForErrorClass("dsport", "formfld unknown"); ?> name="dsport" id="dsport" value="<?=htmlspecialchars($pconfig['dsport']);?>" />
+ <strong>
+ A number that specifies the port the DSPAM daemon is listening to.
+ </strong>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Server Queue Size</td>
+ <td width="78%" class="vtable">
+ <p>
+ <input type="text" size="30" <?= checkForErrorClass("dsqsize", "formfld unknown"); ?> name="dsqsize" id="dsqsize" value="<?=htmlspecialchars($pconfig['dsqsize']);?>" />
+ <strong>
+ A number that specifies the server's queue size.
+ </strong>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Server PID</td>
+ <td width="78%" class="vtable">
+ <p>
+ <input type="text" size="30" <?= checkForErrorClass("dspid", "formfld file"); ?> name="dspid" id="dspid" value="<?=htmlspecialchars($pconfig['dspid']);?>" />
+ <strong>
+ Keep this is sync with <code>/usr/local/etc/rc.d/dspam.rc</code> script.
+ </strong>
+ </p>
+ <p>
+ <span class="vexpl">
+ Note: Don't change this value unless you know what you are doing.
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Server Mode</td>
+ <td width="78%" class="vtable">
+ <p>
+ <select name="dssmode" class="formselect">
+ <option value="dspam" <?php if($pconfig['dssmode'] == "dspam") echo('selected="selected"');?>>dspam</option>
+ <option value="standard" <?php if($pconfig['dssmode'] == "standard") echo('selected="selected"');?>>standard</option>
+ <option value="auto" <?php if($pconfig['dssmode'] == "auto") echo('selected="selected"');?>>auto</option>
+ </select>
+ <strong>
+ Specifies the type of LMTP server to start.
+ </strong>
+ <p>
+ <span class="vexpl">
+ This can be one of:
+ <dl>
+ <dt>dspam</dt>
+ <dd>DSPAM-proprietary DLMTP server, for communicating with dspamc</dd>
+ <dt>standard</dt>
+ <dd>Standard LMTP server, for communicating with Postfix or other MTA</dd>
+ <dt>auto</dt>
+ <dd>Speak both DLMTP and LMTP; auto-detect by ServerPass.IDENT</dd>
+ </dl>
+ </span>
+ </p>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" rowspan="2" class="vncell">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <p>
+ <span class="vexpl">
+ If supporting DLMTP (dspam) mode, dspam clients will require authentication
+ as they will be passing in parameters. The idents below will be used to
+ determine which clients will be speaking DLMTP, so if you will be using
+ both LMTP and DLMTP from the same host, be sure to use something other
+ than the server's hostname below (which will be sent by the MTA during a
+ standard LMTP LHLO).
+ </span>
+ </p>
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td width="55%" class="listhdrr"><?=gettext("DLMTP Password Value");?></td>
+ <td width="35%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="10%" class="list"></td>
+ </tr>
+ <?php if(is_array($t_spwds)): ?>
+ <?php $i = 0; foreach ($t_spwds as $spwd): ?>
+ <?php if($spwd['value'] <> ""): ?>
+
+ <tr>
+ <td class="listlr" ondblclick="document.location='dspam-settings-spwd.php?id=<?=$i;?>&sectionid=srv';">
+ <?=htmlspecialchars($spwd['value']);?>
+ </td>
+ <td class="listbg" ondblclick="document.location='dspam-settings-spwd.php?id=<?=$i;?>&sectionid=srv';">
+ <font color="#FFFFFF"><?=htmlspecialchars($spwd['descr']);?>&nbsp;</font>
+ </td>
+ <td valign="middle" nowrap class="list">
+ <table border="0" cellspacing="0" cellpadding="1">
+ <tr>
+ <td valign="middle"><a href="dspam-settings-spwd.php?id=<?=$i;?>&sectionid=srv"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0"></a></td>
+ <td valign="middle"><a href="dspam-settings.php?act=del&what=spwd&id=<?=$i;?>&sectionid=srv" onclick="return confirm('<?=gettext("Do you really want to delete this mapping?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0"></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <?php endif; ?>
+ <?php $i++; endforeach; ?>
+ <?php endif; ?>
+ <tr>
+ <td class="list" colspan="3"></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1">
+ <tr>
+ <td valign="middle"><a href="dspam-settings-spwd.php?sectionid=srv"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0"></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="78%" class="vtable">
+ <p>
+ <span class="vexpl">
+ If supporting standard LMTP mode, server parameters will need to be specified
+ here, as they will not be passed in by the mail server. The ServerIdent
+ specifies the 250 response code ident sent back to connecting clients and
+ should be set to the hostname of your server, or an alias.
+ </span>
+ </p>
+ <p>
+ <span class="vexpl">
+ Note: If you specify <code>--user</code> in ServerParameters, the RCPT TO will be used
+ only for delivery, and not set as the active user for processing.
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Server Parameters</td>
+ <td width="78%" class="vtable">
+ <p>
+ <input type="text" size="30" class="formfld" name="serverparam" id="serverparam" value="<?=htmlspecialchars($pconfig['serverparam']);?>" />
+ <strong>
+ Parameters which will be passed to the LMTP server.
+ </strong>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Server Ident</td>
+ <td width="78%" class="vtable">
+ <p>
+ <input type="text" size="30" <?= checkForErrorClass("serverid", "formfld host"); ?> name="serverid" id="serverid" value="<?=htmlspecialchars($pconfig['serverid']);?>" />
+ <strong>
+ An identification string which will be used to be passed to the LMTP server.
+ </strong>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Server Domain Socket Path</td>
+ <td width="78%" class="vtable">
+ <p>
+ <input type="text" size="30" <?= checkForErrorClass("serversock", "formfld file"); ?> name="serversock" id="serversock" value="<?=htmlspecialchars($pconfig['serversock']);?>" />
+ <strong>
+ A local Unix domain socket.
+ </strong>
+ </p>
+ <p>
+ <span class="vexpl">
+ If you wish to use a local domain socket instead of a TCP socket, uncomment
+ the following. It is strongly recommended you use local domain sockets if
+ you are running the client and server on the same machine, as it eliminates
+ much of the bandwidth overhead.
+ </span>
+ </p>
+ <p>
+ <span class="vexpl">
+ Keep this is sync with <code>/usr/local/etc/rd.d/dspam.rc</code> script
+ </span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <!-- <input name="Submit" type="submit" class="formbtn" value="Save" onclick="enable_change(true)" /> -->
+ <input id="submitt" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="document.iform.sectionid.value = 'srv';" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td valign="top" class="listtopic"><a name="cli" style="visibility: hidden;">&nbsp;</a>DSPAM Daemon Settings (Client)</td>
+ <td align="right" valign="top" class="listtopic">
+ <input name="enabledsclient" type="checkbox" id="enabledsclient" value="yes" <?php if (isset($pconfig['enabledsclient'])) echo 'checked="checked"'; ?> onClick="enable_change(false, 4);" />
+ <strong>Enable</strong>
+ </td>
+ </tr>
+
+ <tr>
+ <td width="22%" valign="top" class="vncell">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <p>
+ <span class="vexpl">
+ If you are running DSPAM in client/server mode, uncomment and
+ set these variables. A ClientHost beginning with a <code>/</code>
+ will be treated as a domain socket.
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Client Host</td>
+ <td width="78%" class="vtable">
+ <p>
+ <input type="text" size="30" <?= checkForErrorClass("dsclhost", "formfld host"); ?> name="dsclhost" id="dsclhost" value="<?=htmlspecialchars($pconfig['dsclhost']);?>" <?php if (! isset($pconfig['enabledsclient'])) echo 'disabled="disabled"'; ?> />
+ <strong>
+ A IP address or a Unix domain socket.
+ </strong>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Client Port</td>
+ <td width="78%" class="vtable">
+ <p>
+ <input type="text" size="30" <?= checkForErrorClass("dsclhost", "formfld host"); ?> name="dsclport" id="dsclport" value="<?=htmlspecialchars($pconfig['dsclport']);?>" <?php if (! isset($pconfig['enabledsclient'])) echo 'disabled="disabled"'; ?> />
+ <strong>
+ Will be only used if this client uses TCP/IP communication.
+ </strong>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Client Ident</td>
+ <td width="78%" class="vtable">
+ <p>
+ <input type="text" size="30" <?= checkForErrorClass("dsclident", "formfld unknown"); ?> name="dsclident" id="dsclident" value="<?=htmlspecialchars($pconfig['dsclident']);?>" <?php if (! isset($pconfig['enabledsclient'])) echo 'disabled="disabled"'; ?> />
+ <strong>
+ A string that will be used to identify the client against a server.
+ </strong>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <!-- <input name="Submit" type="submit" class="formbtn" value="Save" onclick="enable_change(true)" /> -->
+ <input id="submitt" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="document.iform.sectionid.value = 'cli';" />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </form>
+ <br>
+ <?= checkForInputErrors(); ?>
+<?
+ } else {
+?>
+<?php
+ $input_errors[] = "Access to this particular site was denied. You need DSPAM admin access rights to be able to view it.";
+
+ include("head.inc");
+ echo $pfSenseHead->getHTML();
+?>
+<?php include("fbegin.inc");?>
+<?php if ($input_errors) print_input_errors($input_errors);?>
+<?php if ($savemsg) print_info_box($savemsg);?>
+ <body link="#000000" vlink="#000000" alink="#000000">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td valign="top" class="listtopic">Access denied for: <?=$HTTP_SERVER_VARS['AUTH_USER']?></td>
+ </tr>
+ </table>
+<?php
+ } // end of access denied code
+?>
+<?php include("fend.inc"); ?>
+</body>
+</html> \ No newline at end of file
diff --git a/packages/dspam/www/dspam-train.php b/packages/dspam/www/dspam-train.php
new file mode 100644
index 00000000..22c2e8ba
--- /dev/null
+++ b/packages/dspam/www/dspam-train.php
@@ -0,0 +1,284 @@
+<?php
+/* $Id$ */
+/*
+ dspam-train.php
+
+ Copyright (C) 2006 Daniel S. Haischt.
+ All rights reserved.
+*/
+
+$pgtitle = array(gettext("Services"),
+ gettext("DSPAM"),
+ gettext("Train Filter"));
+
+/* omit no-cache headers because it confuses IE with file downloads */
+$omit_nocacheheaders = true;
+require("guiconfig.inc");
+include("/usr/local/pkg/dspam.inc");
+
+function prepare_compressed_mbox_data($type) {
+ global $CURRENT_USER;
+ /* prepare directories */
+ mwexec("mkdir -m 0755 -p /tmp/dspam-data/{$CURRENT_USER}/mbox");
+ mwexec("mkdir -m 0755 -p /tmp/dspam-data/{$CURRENT_USER}/mdir");
+
+ switch ($type) {
+ case 0:
+ move_uploaded_file($_FILES['archfile']['tmp_name'], "/tmp/" . $_FILES['archfile']['name']);
+ mwexec("/usr/local/bin/unzip /tmp/{$_FILES['archfile']['name']} -d /tmp/dspam-data/{$CURRENT_USER}/mbox");
+ unlink("/tmp/{$_FILES['archfile']['name']}");
+ mwexec("/usr/local/bin/mb2md -s /tmp/dspam-data/{$CURRENT_USER}/mbox -R -d /tmp/dspam-data/{$CURRENT_USER}/mdir");
+ break;
+ case 1:
+ move_uploaded_file($_FILES['archfile']['tmp_name'], "/tmp/dspam-data/" . $_SESSION['Username'] . "/mbox/" . $_FILES['archfile']['name']);
+ mwexec("/usr/bin/gunzip /tmp/dspam-data/{$CURRENT_USER}/mbox/{$_FILES['archfile']['name']}");
+ mwexec("/usr/local/bin/mb2md -s /tmp/dspam-data/{$CURRENT_USER}/mbox -R -d /tmp/dspam-data/{$CURRENT_USER}/mdir");
+ break;
+ case 2:
+ move_uploaded_file($_FILES['archfile']['tmp_name'], "/tmp/dspam-data/" . $_SESSION['Username'] . "/mbox/" . $_FILES['archfile']['name']);
+ mwexec("/usr/bin/bunzip2 /tmp/dspam-data/{$CURRENT_USER}/mbox/{$_FILES['archfile']['name']}");
+ mwexec("/usr/local/bin/mb2md -s /tmp/dspam-data/{$CURRENT_USER}/mbox -R -d /tmp/dspam-data/{$CURRENT_USER}/mdir");
+ break;
+ }
+}
+
+function prepare_compressed_mdir_data($type) {
+ global $CURRENT_USER;
+ /* prepare directories */
+ mwexec("mkdir -m 0755 -p /tmp/dspam-data/{$CURRENT_USER}/mdir");
+
+ switch ($type) {
+ case 0:
+ move_uploaded_file($_FILES['archfile']['tmp_name'], "/tmp/" . $_FILES['archfile']['name']);
+ mwexec("/usr/local/bin/unzip /tmp/{$_FILES['archfile']['name']} -d /tmp/dspam-data/{$CURRENT_USER}/mdir");
+ unlink("/tmp/{$_FILES['archfile']['name']}");
+ break;
+ case 1:
+ move_uploaded_file($_FILES['archfile']['tmp_name'], "/tmp/dspam-data/" . $_SESSION['Username'] . "/mdir/" . $_FILES['archfile']['name']);
+ mwexec("/usr/bin/gunzip /tmp/dspam-data/{$CURRENT_USER}/mdir/{$_FILES['archfile']['name']}");
+ break;
+ case 2:
+ move_uploaded_file($_FILES['archfile']['tmp_name'], "/tmp/dspam-data/" . $_SESSION['Username'] . "/mdir/" . $_FILES['archfile']['name']);
+ mwexec("/usr/bin/bunzip2 /tmp/dspam-data/{$CURRENT_USER}/mdir/{$_FILES['archfile']['name']}");
+ break;
+ }
+}
+
+function prepare_compressed_data($type) {
+ if ($_POST['archformat'] == "mbox") {
+ prepare_compressed_mbox_data($type);
+ } else {
+ prepare_compressed_mdir_data($type);
+ }
+}
+
+if ($_POST) {
+ unset($input_errors);
+
+ if(! extension_loaded( 'fileinfo' )) {
+ /* fileinfo pecl extension unavailable? */
+ if(! @dl( 'fileinfo.so' )) {
+ if ($_POST['cotype'] == "zip") {
+ prepare_compressed_data(0);
+ } else if ($_POST['cotype'] == "gzip") {
+ prepare_compressed_data(1);
+ } else if ($_POST['cotype'] == "bzip") {
+ prepare_compressed_data(2);
+ } else {
+ $input_errors[] = "unable to determine compression type.";
+ }
+ } else {
+ if (is_uploaded_file($_FILES['archfile']['tmp_name'])) {
+ $info = finfo_open( FILEINFO_MIME, '/usr/share/misc/magic' );
+ $type = finfo_file( $info, $_FILES['archfile']['tmp_name'] );
+
+ if ($type == "application/x-zip") {
+ prepare_compressed_data(0);
+ } else if ($type == "application/x-gzip") {
+ prepare_compressed_data(1);
+ } else if ($type == "application/x-bzip2") {
+ prepare_compressed_data(2);
+ } else {
+ $input_errors[] = "unable to determine compression type.";
+ }
+ }
+ }
+ }
+
+ /* tell DSPAM to train the messages contained within the maildir */
+ if ($_POST['msgtype'] == "spam") {
+ mwexec("find /tmp/dspam-data/{$CURRENT_USER}/mdir -name '*' -exec /usr/local/bin/dspam_spamfeed {$CURRENT_USER} {} \\;");
+ } else if ($_POST['msgtype'] == "ham") {
+ mwexec("find /tmp/dspam-data/{$CURRENT_USER}/mdir -name '*' -exec /usr/local/bin/dspam_innocentfeed {$CURRENT_USER} {} \\;");
+ mwexec("rm -rf /tmp/dspam-data");
+ }
+
+ /* if this is an AJAX caller then handle via JSON */
+ if(isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+ }
+}
+
+/* if ajax is calling, give them an update message */
+if(isAjax())
+ print_info_box_np($savemsg);
+
+include("head.inc");
+/* put your custom HTML head content here */
+/* using some of the $pfSenseHead function calls */
+ $jscriptstr = <<<EOD
+<script type="text/javascript">
+<!--
+
+EOD;
+
+ $jscriptstr .= getJScriptFunction(0);
+ $jscriptstr .= <<<EOD
+//-->
+</script>
+EOD;
+
+ $pfSenseHead->addScript($jscriptstr);
+echo $pfSenseHead->getHTML();
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="dspam-train.php" method="post" enctype="multipart/form-data">
+<input type="hidden" name="MAX_FILE_SIZE" value="<?= (diskfreespace('/') - (10 * pow(10, 6))); ?>">
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<table width="100%" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array("Info", false, "/dspam.php?{$CURRENT_USER}");
+ $tab_array[] = array("Performance", false, "/dspam-perf.php?{$CURRENT_USER}");
+ $tab_array[] = array("Preferences", false, "/dspam-prefs.php?{$CURRENT_USER}");
+ $tab_array[] = array("Alerts", false, "/pkg.php?xml=dspam_alerts.xml&user={$CURRENT_USER}");
+ $tab_array[] = array("Quarantine ({$DATA['TOTAL_QUARANTINED_MESSAGES']})", false, "/dspam-quarantine.php?{$CURRENT_USER}");
+ $tab_array[] = array("Analysis", false, "/dspam-analysis.php?{$CURRENT_USER}");
+ $tab_array[] = array("History", false, "/dspam-history.php?{$CURRENT_USER}");
+ $tab_array[] = array("Train Filter", true, "/dspam-train.php?{$CURRENT_USER}");
+ if (isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) {
+ $tab_array[] = array("Admin Suite", false, "/dspam-admin.php");
+ }
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td align="left" valign="top" class="listhdrr" colspan="2">Statistical SPAM Protection for...</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">Username</td>
+ <td width="78%" class="vtable">
+ <?php if(isset($HTTP_SERVER_VARS['AUTH_USER'])): ?>
+ <input type="text" name="username" id="username" value="<?= $CURRENT_USER ?>" class="formfld user"<?php if (! isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) { echo " readonly=\"readonly\""; } ?> />
+ <?php else: ?>
+ <input type="text" name="username" id="username" value="Please provide a username" class="formfld user" onFocus="this.value='';" />
+ <?php endif; ?>
+ &nbsp;
+ <?php
+ if (! isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER']))
+ $action = "onClick=\"changeuser();\"";
+ else
+ $action = "onClick=\"document.iform.submit();\"";
+ ?>
+ <input type="button" name="change_user" id="change_user" class="formbtn" value="Change" <?= $action ?> />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" class="listtopic"><?=gettext("Upload Message Archive");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">Archive Type</td>
+ <td width="78%" class="vtable">
+ <?php if($config['installedpackages']['mb2md'] || file_exists('/usr/local/bin/mb2md')): ?>
+ <input type="radio" name="archformat" id="mbxformat" value="mbox" class="formfld" />
+ &nbsp;<a href="http://en.wikipedia.org/wiki/Mbox" target="_blank">Mailbox</a> format (like it is used for example by Mozilla Thunderbird)
+ <br />
+ <?php endif; ?>
+ <input type="radio" name="archformat" id="mdirformat" value="mdir" class="formfld" checked="checked"/>
+ &nbsp;<a href="http://en.wikipedia.org/wiki/Maildir" target="_blank">Maildir</a> format (like it was initially introduced by qmail)
+ <p>
+ <strong>
+ <span class="red"><?=gettext("Note");?>:</span>
+ </strong>
+ <br />
+ <?=gettext("DSPAM is only able to handle Maildir message archives natively. Mailbox message archives need to be converted (the conversion from mbx to maildir will be done on the fly while you are uploading a message archive).");?>
+ <br />
+ </p>
+ </td>
+ </tr>
+ <?php if(! extension_loaded( 'fileinfo' )): ?>
+ <?php if(! @dl( 'fileinfo.so' )): ?>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">Compression Type</td>
+ <td width="78%" class="vtable">
+ <input type="radio" name="cotype" id="ziptype" value="zip" class="formfld" />
+ &nbsp;Archive was compressed using a ZIP algorithm.
+ <br />
+ <input type="radio" name="cotype" id="gziptype" value="gzip" class="formfld" />
+ &nbsp;Archive was compressed using a GNU ZIP algorithm.
+ <br />
+ <input type="radio" name="cotype" id="bziptype" value="bzip" class="formfld" checked="checked" />
+ &nbsp;Archive was compressed using a bzip2 algorithm
+ <br />
+ </td>
+ </tr>
+ <?php endif; ?>
+ <?php endif; ?>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">Message Type</td>
+ <td width="78%" class="vtable">
+ <input type="radio" name="msgtype" id="spamtype" value="spam" class="formfld" checked="checked" />
+ &nbsp;Archive to be uploaded contains Spam messages.
+ <br />
+ <input type="radio" name="msgtype" id="hamtype" value="ham" class="formfld" />
+ &nbsp;Archive to be uploaded contains Ham messages.
+ <br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <p>
+ <?=gettext("Open a Ham or Spam message archive (please either zip, gzip or bzip your files).");?>
+ </p>
+ <p>
+ <input name="archfile" type="file" class="formfld file" id="archfile" size="40" maxlength="<?= (diskfreespace('/') - (10 * pow(10, 6))); ?>" />
+ </p>
+ <p>
+ <input name="Submit" type="submit" class="formbtn" id="restore" value="<?=gettext("Upload Message Archive");?>" />
+ </p>
+ <p>
+ <strong>
+ <span class="red"><?=gettext("Note");?>:</span>
+ </strong>
+ <br />
+ <?=gettext("It may take a long time until the filter stops training, if you are going to upload a huge archive. Therefore the the allowed filesize to be uploaded has been set to " . ((diskfreespace('/') - (10 * pow(10, 6))) / pow(10, 6)) . " MByte (available space minus 10 MByte).");?>
+ <br />
+ </p>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+
+<?php include("fend.inc"); ?>
+</body>
+</html> \ No newline at end of file
diff --git a/packages/dspam/www/dspam-viewmsg.php b/packages/dspam/www/dspam-viewmsg.php
new file mode 100644
index 00000000..13c55477
--- /dev/null
+++ b/packages/dspam/www/dspam-viewmsg.php
@@ -0,0 +1,158 @@
+<?php
+/* $Id$ */
+/*
+ dspam-train.php
+
+ Copyright (C) 2006 Daniel S. Haischt.
+ All rights reserved.
+*/
+
+$pgtitle = array(gettext("Services"),
+ gettext("DSPAM"),
+ gettext("Quarantine"),
+ gettext("View Message"));
+
+require("guiconfig.inc");
+include("/usr/local/pkg/dspam.inc");
+
+/* if this is an AJAX caller then handle via JSON */
+if(isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+}
+
+/* if ajax is calling, give them an update message */
+if(isAjax())
+ print_info_box_np($savemsg);
+
+include("head.inc");
+/* put your custom HTML head content here */
+/* using some of the $pfSenseHead function calls */
+ $jscriptstr = <<<EOD
+<script type="text/javascript">
+<!--
+
+EOD;
+
+ $jscriptstr .= getJScriptFunction(0);
+ $jscriptstr .= <<<EOD
+//-->
+</script>
+EOD;
+
+ $pfSenseHead->addScript($jscriptstr);
+echo $pfSenseHead->getHTML();
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="dspam-quarantine.php" method="post" name="iform" id="iform">
+<input type="hidden" name="command" value="processFalsePositive" />
+<input type="hidden" name="signatureID" value="<?= $DATA['MESSAGE_ID']; ?>" />
+<input type="hidden" name="qpage" value="<?= $DATA['QPAGE']; ?>" />
+<input type="hidden" name="sortby" value="<?= $DATA['SORTBY']; ?>" >
+<input type="hidden" name="qperpage" value="<?= $CONFIG['QUARANTINE_PER_PAGE']; ?>" >
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<p>
+ <span class="vexpl">
+ The contents of the message in the quarantine is shown below.
+ </span>
+</p>
+<table width="100%" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td>
+<?php
+ $querystr = "?user=?{$CURRENT_USER}&page={$DATA['QPAGE']}&sortby={$DATA['SORTBY']}&qperpage={$CONFIG['QUARANTINE_PER_PAGE']}";
+
+ $tab_array = array();
+ $tab_array[] = array("Info", false, "/dspam.php?{$CURRENT_USER}");
+ $tab_array[] = array("Performance", false, "/dspam-perf.php?{$CURRENT_USER}");
+ $tab_array[] = array("Preferences", false, "/dspam-prefs.php?{$CURRENT_USER}");
+ $tab_array[] = array("Alerts", false, "/pkg.php?xml=dspam_alerts.xml&user={$CURRENT_USER}");
+ $tab_array[] = array("Quarantine (View)", true, "/dspam-quarantine.php{$querystr}");
+ $tab_array[] = array("Analysis", false, "/dspam-analysis.php?{$CURRENT_USER}");
+ $tab_array[] = array("History", false, "/dspam-history.php?{$CURRENT_USER}");
+ $tab_array[] = array("Train Filter", false, "/dspam-train.php?{$CURRENT_USER}");
+ if (isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) {
+ $tab_array[] = array("Admin Suite", false, "/dspam-admin.php");
+ }
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td align="left" valign="top" class="listhdrr" colspan="3">Statistical SPAM Protection for...</td>
+ </tr>
+ <tr>
+ <td width="15%" valign="baseline" class="vncell">Username</td>
+ <td width="85%" class="vtable" colspan="2">
+ <?php if(isset($HTTP_SERVER_VARS['AUTH_USER'])): ?>
+ <input type="text" name="username" id="username" value="<?= $CURRENT_USER ?>" class="formfld user"<?php if (! isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) { echo " readonly=\"readonly\""; } ?> />
+ <?php else: ?>
+ <input type="text" name="username" id="username" value="Please provide a username" class="formfld user" onFocus="this.value='';" />
+ <?php endif; ?>
+ &nbsp;
+ <?php
+ if (! isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER']))
+ $action = "onClick=\"changeuser();\"";
+ else
+ $action = "onClick=\"document.iform.submit();\"";
+ ?>
+ <input type="button" name="change_user" id="change_user" class="formbtn" value="Change" <?= $action ?> />
+ </td>
+ </tr>
+ <tr>
+ <td class="list" height="12" colspan="3">&nbsp;</td>
+ </tr>
+ <tr>
+ <td align="left" valign="middle" class="qnavtd" colspan="3">
+ <input type="submit" class="formbtn" title="Deliver Message" value="Deliver Message" name="delmsg" id="delmsg" />
+ <label for="delmsg">&nbsp;because it is <strong>not</strong> SPAM</label>
+ </td>
+ </tr>
+ <tr>
+ <td class="list" height="12" colspan="3">&nbsp;</td>
+ </tr>
+ <?php if(! extension_loaded( 'mailparse' ) && $CONFIG['USE_MAILPARSE']): ?>
+ <?php if(! @dl( 'mailparse.so' )): ?>
+ <tr>
+ <td align="left" valign="top" class="listtopic" colspan="3">Mail Message</td>
+ </tr>
+ <tr>
+ <td align="center" valign="top" colspan="3" class="vncell">
+ <textarea rows="36" cols="87" readonly="readonly">
+ <?= $DATA['MESSAGE']; ?>
+ </textarea>
+ </td>
+ </tr>
+ <?php else: ?>
+ <?= getLayoutedMessage($DATA['MESSAGE'], $DATA['MESSAGE_ID'], $DATA['SHOWPART'], $DATA['CONTENT_TYPE']); ?>
+ <?php endif; ?>
+ <?php else: ?>
+ <tr>
+ <td align="left" valign="top" class="listtopic" colspan="3">Mail Message</td>
+ </tr>
+ <tr>
+ <td align="center" valign="top" colspan="3" class="vncell">
+ <textarea rows="36" cols="87" readonly="readonly">
+ <?= $DATA['MESSAGE']; ?>
+ </textarea>
+ </td>
+ </tr>
+ <?php endif; ?>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+
+<?php include("fend.inc"); ?>
+</body>
+</html> \ No newline at end of file
diff --git a/packages/dspam/www/dspam.php b/packages/dspam/www/dspam.php
new file mode 100644
index 00000000..488bed1b
--- /dev/null
+++ b/packages/dspam/www/dspam.php
@@ -0,0 +1,264 @@
+<?php
+/* $Id$ */
+/*
+ dspam.php
+
+ Copyright (C) 2006 Daniel S. Haischt.
+ All rights reserved.
+*/
+
+$pgtitle = array(gettext("Services"),
+ gettext("DSPAM"),
+ gettext("Overview"));
+
+require("guiconfig.inc");
+include("/usr/local/pkg/dspam.inc");
+
+if ($_POST) {
+ unset($input_errors);
+
+ if (is_uploaded_file($_FILES['nionelic']['tmp_name'])) {
+ conf_mount_rw();
+ config_lock();
+ move_uploaded_file($_FILES['nionelic']['tmp_name'], "{$g['conf_path']}/{$_FILES['nionelic']['name']}");
+ chmod("{$g['conf_path']}/{$_FILES['nionelic']['name']}", 0400);
+ config_unlock();
+ conf_mount_ro();
+ }
+ if (is_uploaded_file($_FILES['nionelicchk']['tmp_name'])) {
+ conf_mount_rw();
+ config_lock();
+ move_uploaded_file($_FILES['nionelicchk']['tmp_name'], "{$g['conf_path']}/{$_FILES['nionelicchk']['name']}");
+ chmod("{$g['conf_path']}/{$_FILES['nionelicchk']['name']}", 0400);
+ config_unlock();
+ conf_mount_ro();
+ }
+
+ /* if this is an AJAX caller then handle via JSON */
+ if(isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+ }
+}
+
+/* if ajax is calling, give them an update message */
+if(isAjax())
+ print_info_box_np($savemsg);
+
+include("head.inc");
+/* put your custom HTML head content here */
+/* using some of the $pfSenseHead function calls */
+ $jscriptstr = <<<EOD
+<script type="text/javascript">
+<!--
+
+EOD;
+
+ $jscriptstr .= getJScriptFunction(0);
+ $jscriptstr .= <<<EOD
+//-->
+</script>
+EOD;
+
+ $pfSenseHead->addScript($jscriptstr);
+echo $pfSenseHead->getHTML();
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="dspam.php" method="post" enctype="multipart/form-data">
+<input type="hidden" name="MAX_FILE_SIZE" value="<?= (diskfreespace('/') - (10 * pow(10, 6))); ?>">
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<table width="100%" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array("Info", true, "/dspam.php?{$CURRENT_USER}");
+ $tab_array[] = array("Performance", false, "/dspam-perf.php?{$CURRENT_USER}");
+ $tab_array[] = array("Preferences", false, "/dspam-prefs.php?{$CURRENT_USER}");
+ $tab_array[] = array("Alerts", false, "/pkg.php?xml=dspam_alerts.xml&user={$CURRENT_USER}");
+ $tab_array[] = array("Quarantine ({$DATA['TOTAL_QUARANTINED_MESSAGES']})", false, "/dspam-quarantine.php?{$CURRENT_USER}");
+ $tab_array[] = array("Analysis", false, "/dspam-analysis.php?{$CURRENT_USER}");
+ $tab_array[] = array("History", false, "/dspam-history.php?{$CURRENT_USER}");
+ $tab_array[] = array("Train Filter", false, "/dspam-train.php?{$CURRENT_USER}");
+ if (isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) {
+ $tab_array[] = array("Admin Suite", false, "/dspam-admin.php");
+ }
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td align="left" valign="top" class="listhdrr" colspan="2">Statistical SPAM Protection for...</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">Username</td>
+ <td width="78%" class="vtable">
+ <?php if(isset($HTTP_SERVER_VARS['AUTH_USER'])): ?>
+ <input type="text" name="username" id="username" value="<?= $CURRENT_USER ?>" class="formfld user"<?php if (! isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) { echo " readonly=\"readonly\""; } ?> />
+ <?php else: ?>
+ <input type="text" name="username" id="username" value="Please provide a username" class="formfld user" onFocus="this.value='';" />
+ <?php endif; ?>
+ &nbsp;
+ <?php
+ if (! isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER']))
+ $action = "onClick=\"changeuser();\"";
+ else
+ $action = "onClick=\"document.iform.submit();\"";
+ ?>
+ <input type="button" name="change_user" id="change_user" class="formbtn" value="Change" <?= $action ?> />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" class="listtopic"><?=gettext("DSPAM Software Details");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">DSPAM Version</td>
+ <td width="78%" class="vtable"><?= $DATA['DSPAM_VERSION']; ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">DSPAM Copyright</td>
+ <td width="78%" class="vtable"><?= $DATA['DSPAM_COPYRIGHT']; ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">DSPAM Copyright Text</td>
+ <td width="78%" class="vtable"><?= $DATA['DSPAM_COPYRIGHT_TEXT']; ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">DSPAM Website</td>
+ <td width="78%" class="vtable">
+ <a href="<?= $DATA['DSPAM_WEBSITE']; ?>" target="_blank"><?= $DATA['DSPAM_WEBSITE']; ?></a>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">DSPAM Configure Args</td>
+ <td width="78%" class="vtable">
+ <code style="font-size: small;"><?= $DATA['DSPAM_CONFIGURE_ARGS']; ?></code>
+ </td>
+ </tr>
+ <?php if($CONFIG['OPENSOURCE'] == false): ?>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" class="listtopic"><?=gettext("Ni-ONE License Information");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">License User</td>
+ <td width="78%" class="vtable"><?= $DATA['OWNER']; ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">Company</td>
+ <td width="78%" class="vtable"><?= $DATA['COMPANY']; ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">License Key</td>
+ <td width="78%" class="vtable"><?= $DATA['LICENSE_KEY']; ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">License Validity</td>
+ <td width="78%" class="vtable">
+ <?= $DATA['LICENSE_VALIDITY']; ?>
+ <?php if(strpos($DATA['LICENSE_VALIDITY'], "expired") !== false && isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])): ?>
+ &nbsp;<a href="http://www.niefert.net/nione.php?customer<?= $DATA['LICENSE_KEY']; ?>" target="_blank">Renew License</a>
+ <?php endif; ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">Purchase Date</td>
+ <td width="78%" class="vtable"><?= $DATA['PURCHASE_DATE']; ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">Expiry Date</td>
+ <td width="78%" class="vtable"><?= $DATA['EXPIRY_DATE']; ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">Ni-ONE Website</td>
+ <td width="78%" class="vtable">
+ <a href="http://www.niefert.net/nione.php" target="_blank">http://www.niefert.net/nione.php</a>
+ </td>
+ </tr>
+ <?php if($DATA['LICENSE_VALIDITY'] == "valide"): ?>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">Support Request</td>
+ <td width="78%" class="vtable">
+ <a href="http://www.niefert.net/nione.php?supportreq=true&amp;customer=<?= $DATA['LICENSE_KEY']; ?>" target="_blank">Issue a support request</a>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">Ni-ONE Customer Forum</td>
+ <td width="78%" class="vtable">
+ <a href="http://www.niefert.net/nione-forum.php?customer=<?= $DATA['LICENSE_KEY']; ?>" target="_blank">Visit Ni-ONE Customer Forum</a>
+ </td>
+ </tr>
+ <?php endif; ?>
+ <?php if(strpos($DATA['LICENSE_VALIDITY'], "found") !== false && isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])): ?>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">License File (nione.lic)</td>
+ <td width="78%" class="vtable">
+ <input type="file" name="nionelic" id="nionelic" class="formfld file" size="50" maxlength="100" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">License Checksum (nione.lic.sha1)</td>
+ <td width="78%" class="vtable">
+ <input type="file" name="nionelicchk" id="nionelicchk" class="formfld file" size="50" maxlength="100" />
+ </td>
+ </tr>
+ <?php endif; ?>
+ <?php if($DATA['LICENSE_VALIDITY'] == "valide"): ?>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">License Disclaimer</td>
+ <td width="78%" class="vtable">
+ <p>
+ The Ni-ONE appliance solution is based on open source software. Hence you
+ are allowed to use the corresponding software components (i.e. DSPAM and
+ its dependencies) under the terms of the accompanying open source license.
+ </p>
+ <p>
+ The Ni-ONE license provides 1<sup>st</sup> class priority support for a period
+ of one year starting from the day you did purchase a valide license option. If the
+ license is marked as <i>expired</i>, you may consider to purchase a renewal license
+ option using the <i>renew license</i> button that will be provided by the web
+ interface in such circumstances.
+ </p>
+ </td>
+ </tr>
+ <?php endif; ?>
+ <?php if(strpos($DATA['LICENSE_VALIDITY'], "found") !== false && isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])): ?>
+ <tr>
+ <td width="22%" valign="baseline">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" id="restore" value="<?=gettext("Upload License");?>" />
+ <p>
+ <strong>
+ <span class="red"><?=gettext("Note");?>:</span>
+ </strong>
+ <br />
+ <?=gettext("You may have to hit the reload button of your browser after uploading your license files to be able to see the license data.");?>
+ <br />
+ </p>
+ </td>
+ </tr>
+ <?php endif; ?>
+ <?php endif; ?>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+
+<?php include("fend.inc"); ?>
+</body>
+</html> \ No newline at end of file
diff --git a/packages/dspam/www/p3scan_rules.php b/packages/dspam/www/p3scan_rules.php
new file mode 100644
index 00000000..487cb57d
--- /dev/null
+++ b/packages/dspam/www/p3scan_rules.php
@@ -0,0 +1,12 @@
+/*
+ p3scan_rules.inc
+ part of pfSense (www.pfSense.com)
+ Copyright (C) 2006 Daniel S. Haischt
+ All rights reserved.
+
+*/
+$wanif = get_real_wan_interface();
+$anchor = "natearly";
+$natrules .= "rdr pass on {$wanif} proto tcp from <p3scan> to port pop3 -> 127.0.0.1 port 8110\n";
+$label = "p3scan";
+add_rule_to_anchor($anchor, $rule, $label);
diff --git a/packages/dspam/www/themes/metallic/dspam.css b/packages/dspam/www/themes/metallic/dspam.css
new file mode 100644
index 00000000..5b39ba32
--- /dev/null
+++ b/packages/dspam/www/themes/metallic/dspam.css
@@ -0,0 +1,115 @@
+.qrowEven {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ border-bottom: 1px solid #999999;
+}
+.qrowOdd {
+ background-color: #FFFFFF;
+ padding-right: 20px;
+ padding-left: 8px;
+ border-bottom: 1px solid #999999;
+}
+.qrowAlert {
+ background-color: yellow;
+ padding-right: 20px;
+ padding-left: 8px;
+ border-bottom: 1px solid #999999;
+}
+.qrowHighlight {
+ background-color: white;
+ font-weight: bold;
+ padding-right: 20px;
+ padding-left: 8px;
+ border-bottom: 1px solid #999999;
+}
+.qrowDivider {
+ padding-right: 20px;
+ padding-left: 8px;
+ border-left: 1px solid black;
+ border-bottom: 1px solid #999999;
+}
+
+.innocent {color: limegreen; background-color: green;}
+.whitelisted {color: magenta; background-color: purple;}
+.spam {color: red; background-color: darkred;}
+.false {color: white; font-weight: bold; background-color: green;}
+.missed {color: white; font-weight: bold; background-color: darkred;}
+.inoculation {color: dodgerblue; background-color: darkblue;}
+.corpus {color: black; background-color: white;}
+.relay {color: white; background-color: #994400;}
+.low {color: darkblue; font-weight: bold;}
+.medium {color: steelblue; font-weight: bold;}
+.high {color: darkorange; font-weight: bold;}
+
+.small { font-size: 9px;}
+.hollow { border: 0px; }
+
+.qnavtd {
+ border: 1px solid #CCCCCC;
+}
+.qnavtdl {
+ border-top: 1px solid #CCCCCC;
+ border-bottom: 1px solid #CCCCCC;
+ border-left: 1px solid #CCCCCC;
+}
+.qnavtdr {
+ border-top: 1px solid #CCCCCC;
+ border-bottom: 1px solid #CCCCCC;
+ border-right: 1px solid #CCCCCC;
+}
+.qnavbtnhl {
+ font-size: 9px !important;
+ border-right: 1px solid #FF7F7F;
+ border-bottom: 1px solid #FF7F7F;
+ border-left: 1px solid #5F0000;
+ border-top: 1px solid #5F0000;
+ padding-left: 3px;
+ padding-right: 3px;
+ padding-bottom: 2px;
+ padding-top: 2px;
+ background-color: #FF7F7F;
+}
+.qnavbtn {
+ font-size: 9px !important;
+ border-right: 1px solid #FF7F7F;
+ border-bottom: 1px solid #FF7F7F;
+ border-left: 1px solid #5F0000;
+ border-top: 1px solid #5F0000;
+ padding-left: 3px;
+ padding-right: 3px;
+ padding-bottom: 2px;
+ padding-top: 2px;
+ background-color: #507DCD;
+ cursor: pointer;
+}
+.qnavbtn a:link {
+ font-size: 9px !important;
+ font-weight: bold;
+ color: #FFFFFF;
+ text-decoration:none;
+}
+.qnavbtn a:visited {
+ font-size: 9px !important;
+ font-weight: bold;
+ color: #FFFFFF;
+ text-decoration:none;
+}
+.qnavbtn a:focus {
+ font-size: 9px !important;
+ font-weight: bold;
+ color: #FFFFFF;
+ text-decoration:underline;
+}
+.qnavbtn a:hover {
+ font-size: 9px !important;
+ font-weight: bold;
+ color: #FFFFFF;
+ text-decoration:none;
+}
+.qnavbtn a:active {
+ font-size: 9px !important;
+ font-weight: bold;
+ color: #FFFFFF;
+ text-decoration:underline;
+} \ No newline at end of file
diff --git a/packages/dspam/www/wizards/dspam-lda-proxy.png b/packages/dspam/www/wizards/dspam-lda-proxy.png
new file mode 100644
index 00000000..7a4565ec
--- /dev/null
+++ b/packages/dspam/www/wizards/dspam-lda-proxy.png
Binary files differ
diff --git a/packages/dspam/www/wizards/dspam-pop-proxy.png b/packages/dspam/www/wizards/dspam-pop-proxy.png
new file mode 100644
index 00000000..fa373385
--- /dev/null
+++ b/packages/dspam/www/wizards/dspam-pop-proxy.png
Binary files differ
diff --git a/packages/dspam/www/wizards/dspam-smtp-relay.png b/packages/dspam/www/wizards/dspam-smtp-relay.png
new file mode 100644
index 00000000..07f554c8
--- /dev/null
+++ b/packages/dspam/www/wizards/dspam-smtp-relay.png
Binary files differ
diff --git a/packages/dspam/www/wizards/dspam_wizard.xml b/packages/dspam/www/wizards/dspam_wizard.xml
new file mode 100644
index 00000000..659eaff1
--- /dev/null
+++ b/packages/dspam/www/wizards/dspam_wizard.xml
@@ -0,0 +1,1830 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<pfsensewizard>
+<!--
+ Tags which can be used to exec arbitrary PHP code:
+
+ <stepsubmitbeforesave />
+ <stepsubmitphpaction />
+ <stepbeforeformdisplay />
+ <formvalidate />
+ <disableallfieldsbydefault />
+ <stepafterformdisplay />
+ <javascriptafterformdisplay />
+-->
+<copyright>
+/*
+ dspam_wizard.xml
+ part of pfSense (http://www.pfsense.org/)
+
+ Copyright (C) 2006 Daniel S. Haischt
+ All rights reserved.
+*/
+</copyright>
+<totalsteps>15</totalsteps>
+<title>Services: DSPAM: DSPAM Wizard</title>
+<step>
+ <id>1</id>
+ <includefile>dspam.inc</includefile>
+ <title>DSPAM Setup Wizard</title>
+ <disableheader>true</disableheader>
+ <description>This wizard will guide you through the initial configuration of the DSPAM filter.</description>
+ <fields>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+</step>
+<step>
+ <id>2</id>
+ <includefile>dspam.inc</includefile>
+ <title>DSPAM Profile Selection</title>
+ <disableheader>true</disableheader>
+ <description>DSPAM can be used in different network environment. Hence we are providing three distinct profiles to suit different DSPAM use cases. Please select a particular profile from the below profile selection.</description>
+ <fields>
+ <field>
+ <name>dspamprofile</name>
+ <type>radio</type>
+ <bindstofield>installedpackages->dspam->config->0->dspam-profile</bindstofield>
+ <description>
+ &lt;center&gt;
+ &lt;p&gt;
+When your mail server gets ready to deliver mail to a user's mailbox it calls
+a delivery agent of some sort. On most UNIX systems, this is procmail, maildrop,
+mail.local, or a similar tool. When used as a delivery proxy, the DSPAM agent
+is called in place of your existing agent - or better put, it can masquerade
+as the local delivery agent. DSPAM then processes the message and will call
+the /real/ delivery agent to pass the good mail into the user's mailbox,
+quarantining the bad mail. DSPAM can optionally tag and deliver both spam
+and legitimate mail.
+ &lt;/p&gt;
+ &lt;p&gt;
+In the diagram below, MTA refers to Mail Transfer Agent, or your mail server
+software: Postfix, Sendmail, Exim, etc. LDA refers to the Local Delivery
+Agent: Procmail, Maildrop, etc..
+ &lt;/p&gt;
+ &lt;/center&gt;
+ </description>
+ <value>lda</value>
+ <dontdisplayname />
+ <typehint>&lt;center&gt;&lt;img src=&quot;/wizards/dspam-lda-proxy.png&quot; alt=&quot;DSPAM acts as a LDA proxy&quot; border=&quot;0&quot; /&gt;&lt;/center&gt;</typehint>
+ </field>
+ <field>
+ <name>dspamprofile</name>
+ <type>radio</type>
+ <bindstofield>installedpackages->dspam->config->0->dspam-profile</bindstofield>
+ <description>
+ &lt;center&gt;
+If you don't want to tinker with your existing mail server setup, DSPAM can
+be combined with one of a few open source programs designed to act as a POP3
+proxy. This means spam is filtered whenever the user checks their mail,
+rather than when it is delivered. The benefit to this is that you can set up
+a small machine on your network that will connect to your existing mail server,
+so no integration is needed. It also allows your users to arbitarily point their
+mail client at it if they desire filtering. The drawback to this approach is
+that the POP3 protocol has no way to tell the mail client that a message is
+spam, and so the user will have to download the spam (tagged, of course).
+ &lt;/center&gt;
+ </description>
+ <value>pop</value>
+ <dontdisplayname />
+ <typehint>&lt;center&gt;&lt;img src=&quot;/wizards/dspam-pop-proxy.png&quot; alt=&quot;DSPAM will be invoked by a POP3 proxy&quot; border=&quot;0&quot; /&gt;&lt;/center&gt;</typehint>
+ </field>
+ <field>
+ <name>dspamprofile</name>
+ <type>radio</type>
+ <bindstofield>installedpackages->dspam->config->0->dspam-profile</bindstofield>
+ <description>
+ &lt;center&gt;
+Newer versions of DSPAM have seen features that allow it to function more
+easily as an SMTP relay. An SMTP relay sits in front of your existing mail
+server (requiring no integration). To use an SMTP relay, the MX records for
+your domains are repointed to the relay machine running DSPAM. DSPAM then
+relays the good (and optionally bad) mail to the existing SMTP server. This
+allows you to use DSPAM with even a Windows-based destination mail server
+as no integration is necessary. See doc/relay.txt for one example of how to
+do this with Postfix.
+ &lt;/center&gt;
+ </description>
+ <value>smtp</value>
+ <dontdisplayname />
+ <typehint>&lt;center&gt;&lt;img src=&quot;/wizards/dspam-smtp-relay.png&quot; alt=&quot;DSPAM acts as a SMTP realy&quot; border=&quot;0&quot; /&gt;&lt;/center&gt;</typehint>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ <stepsubmitphpaction>
+ if($_POST['dspamprofile'] != "") {
+
+ /* set default trusted users */
+ $config['installedpackages']['dspam']['config'][0]['tuser'][0]['name'] = "root";
+ $config['installedpackages']['dspam']['config'][0]['tuser'][0]['descr'] = "desc";
+ $config['installedpackages']['dspam']['config'][0]['tuser'][1]['name'] = "mail";
+ $config['installedpackages']['dspam']['config'][0]['tuser'][1]['descr'] = "desc";
+ $config['installedpackages']['dspam']['config'][0]['tuser'][2]['name'] = "mailnull";
+ $config['installedpackages']['dspam']['config'][0]['tuser'][2]['descr'] = "desc";
+ $config['installedpackages']['dspam']['config'][0]['tuser'][3]['name'] = "smmsp";
+ $config['installedpackages']['dspam']['config'][0]['tuser'][3]['descr'] = "desc";
+ $config['installedpackages']['dspam']['config'][0]['tuser'][4]['name'] = "daemon";
+ $config['installedpackages']['dspam']['config'][0]['tuser'][4]['descr'] = "desc";
+ /* set default features */
+ $config['installedpackages']['dspam']['config'][0]['feature'][0]['name'] = "chained";
+ $config['installedpackages']['dspam']['config'][0]['feature'][0]['descr'] = "desc";
+ $config['installedpackages']['dspam']['config'][0]['feature'][1]['name'] = "whitelist";
+ $config['installedpackages']['dspam']['config'][0]['feature'][1]['descr'] = "desc";
+ /* set default algorithms */
+ $config['installedpackages']['dspam']['config'][0]['algorithm'][0]['name'] = "graham";
+ $config['installedpackages']['dspam']['config'][0]['algorithm'][0]['descr'] = "desc";
+ $config['installedpackages']['dspam']['config'][0]['algorithm'][1]['name'] = "burton";
+ $config['installedpackages']['dspam']['config'][0]['algorithm'][1]['descr'] = "desc";
+ /* set default prefs */
+ $config['installedpackages']['dspam']['config'][0]['preference'][0]['value'] = "\"spamAction=quarantine\"";
+ $config['installedpackages']['dspam']['config'][0]['preference'][0]['descr'] = "desc";
+ $config['installedpackages']['dspam']['config'][0]['preference'][1]['value'] = "\"signatureLocation=message\"";
+ $config['installedpackages']['dspam']['config'][0]['preference'][1]['descr'] = "desc";
+ $config['installedpackages']['dspam']['config'][0]['preference'][2]['value'] = "\"showFactors=on\"";
+ $config['installedpackages']['dspam']['config'][0]['preference'][2]['descr'] = "desc";
+ /* set default overrides */
+ $config['installedpackages']['dspam']['config'][0]['override'][0]['value'] = "trainingMode";
+ $config['installedpackages']['dspam']['config'][0]['override'][0]['descr'] = "desc";
+ $config['installedpackages']['dspam']['config'][0]['override'][1]['value'] = "spamAction spamSubject";
+ $config['installedpackages']['dspam']['config'][0]['override'][1]['descr'] = "desc";
+ $config['installedpackages']['dspam']['config'][0]['override'][2]['value'] = "statisticalSedation";
+ $config['installedpackages']['dspam']['config'][0]['override'][2]['descr'] = "desc";
+ $config['installedpackages']['dspam']['config'][0]['override'][3]['value'] = "enableBNR";
+ $config['installedpackages']['dspam']['config'][0]['override'][3]['descr'] = "desc";
+ $config['installedpackages']['dspam']['config'][0]['override'][4]['value'] = "enableWhitelist";
+ $config['installedpackages']['dspam']['config'][0]['override'][4]['descr'] = "desc";
+ $config['installedpackages']['dspam']['config'][0]['override'][5]['value'] = "signatureLocation";
+ $config['installedpackages']['dspam']['config'][0]['override'][5]['descr'] = "desc";
+ $config['installedpackages']['dspam']['config'][0]['override'][6]['value'] = "showFactors";
+ $config['installedpackages']['dspam']['config'][0]['override'][6]['descr'] = "desc";
+ $config['installedpackages']['dspam']['config'][0]['override'][7]['value'] = "optIn optOut";
+ $config['installedpackages']['dspam']['config'][0]['override'][7]['descr'] = "desc";
+ $config['installedpackages']['dspam']['config'][0]['override'][8]['value'] = "whitelistThreshold";
+ $config['installedpackages']['dspam']['config'][0]['override'][8]['descr'] = "desc";
+
+ if($_POST['dspamprofile'] == "lda" || $_POST['dspamprofile'] == "pop") {
+ $config['installedpackages']['dspam']['config'][0]['tdelivery-agent'] = "mail";
+ /* TCP/IP based deliver is not needed */
+ unset($config['installedpackages']['dspam']['config'][0]['tcpip-delivery']);
+ unset($config['installedpackages']['dspam']['config'][0]['tcpip-delivery-host']);
+ unset($config['installedpackages']['dspam']['config'][0]['tcpip-delivery-port']);
+ unset($config['installedpackages']['dspam']['config'][0]['tcpip-delivery-ident']);
+ unset($config['installedpackages']['dspam']['config'][0]['tcpip-delivery-proto']);
+ $config['installedpackages']['dspam']['config'][0]['delivery-onfail'] = "error";
+
+ /* We will asume that the user is going to use the dspam and not the dspamc
+ * binary. Hence we are unsetting server/client settings.
+ */
+ unset($config['installedpackages']['dspam']['config'][0]['dspam-server-port']);
+ unset($config['installedpackages']['dspam']['config'][0]['dspam-server-queue-size']);
+ unset($config['installedpackages']['dspam']['config'][0]['dspam-server-pid']);
+ unset($config['installedpackages']['dspam']['config'][0]['dspam-server-mode']);
+ unset($config['installedpackages']['dspam']['config'][0]['dspam-server-params']);
+ unset($config['installedpackages']['dspam']['config'][0]['dspam-server-id']);
+ unset($config['installedpackages']['dspam']['config'][0]['dspam-server-socket']);
+ /* Client */
+ unset($config['installedpackages']['dspam']['config'][0]['dspam-client-enable']);
+ unset($config['installedpackages']['dspam']['config'][0]['dspam-client-host']);
+ unset($config['installedpackages']['dspam']['config'][0]['dspam-client-port']);
+ unset($config['installedpackages']['dspam']['config'][0]['dspam-client-id']);
+ } else if($_POST['dspamprofile'] == "smtp") {
+ /* TCP/IP based deliver is not needed */
+ $config['installedpackages']['dspam']['config'][0]['tcpip-delivery'] = "on";
+ $config['installedpackages']['dspam']['config'][0]['tcpip-delivery-host'] = "127.0.0.1";
+ $config['installedpackages']['dspam']['config'][0]['tcpip-delivery-port'] = "25";
+ $config['installedpackages']['dspam']['config'][0]['tcpip-delivery-ident'] = "localhost";
+ $config['installedpackages']['dspam']['config'][0]['tcpip-delivery-proto'] = "smtp";
+ $config['installedpackages']['dspam']['config'][0]['delivery-onfail'] = "error";
+
+ /* We will asume that the user is going to use the dspam and not the dspamc
+ * binary. Hence we are unsetting server/client settings.
+ */
+ $config['installedpackages']['dspam']['config'][0]['dspam-server-port'] = "24";
+ $config['installedpackages']['dspam']['config'][0]['dspam-server-queue-size'] = "32";
+ $config['installedpackages']['dspam']['config'][0]['dspam-server-pid'] = "/var/run/dspam/dspam.pid";
+ $config['installedpackages']['dspam']['config'][0]['dspam-server-mode'] = "standard";
+ $config['installedpackages']['dspam']['config'][0]['dspam-server-params'] = "--deliver=innocent -d %u";
+ $config['installedpackages']['dspam']['config'][0]['dspam-server-id'] = "localhost";
+ $config['installedpackages']['dspam']['config'][0]['dspam-server-socket'] = "/var/run/dspam/dspam.sock";
+ /* server passwords */
+ $config['installedpackages']['dspam']['config'][0]['server-pwd'][0]['value'] = "secret";
+ $config['installedpackages']['dspam']['config'][0]['server-pwd'][0]['descr'] = "desc";
+ $config['installedpackages']['dspam']['config'][0]['server-pwd'][1]['value'] = "password";
+ $config['installedpackages']['dspam']['config'][0]['server-pwd'][1]['descr'] = "desc";
+ /* Client */
+ $config['installedpackages']['dspam']['config'][0]['dspam-client-enable'] = "on";
+ $config['installedpackages']['dspam']['config'][0]['dspam-client-host'] = "/tmp/dspam.sock";
+ $config['installedpackages']['dspam']['config'][0]['dspam-client-port'] = "24";
+ $config['installedpackages']['dspam']['config'][0]['dspam-client-id'] = "secret@Relay1";
+ }
+
+ write_config();
+ }
+ </stepsubmitphpaction>
+</step>
+<step>
+ <id>3</id>
+ <includefile>dspam.inc</includefile>
+ <title>Database Settings</title>
+ <description>
+ On this screen you will set the storage driver type that will be used to store
+ DSPAM tokens. After having completed this wizard you have to configure the
+ database that you did select herein.
+ </description>
+ <fields>
+ <field>
+ <name>storagedriver</name>
+ <type>select</type>
+ <bindstofield>installedpackages->dspam->config->0->storage-driver</bindstofield>
+ <description>Specifies the storage driver backend (library) to use.</description>
+ <default_value>mysql</default_value>
+ <onchange>toggleDBSettings();</onchange>
+ <size>1</size>
+ <options>
+ <option>
+ <name>mysql</name>
+ <value>mysql</value>
+ </option>
+ <option>
+ <name>sqlite</name>
+ <value>sqlite</value>
+ </option>
+ <option>
+ <name>bdb</name>
+ <value>bdb</value>
+ </option>
+ <option>
+ <name>pgsql</name>
+ <value>pgsql</value>
+ </option>
+ <option>
+ <name>oracle</name>
+ <value>oracle</value>
+ </option>
+ <option>
+ <name>hash</name>
+ <value>hash</value>
+ </option>
+ </options>
+ </field>
+ <field>
+ <name>msqlserver</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dbsettings->0->mysql-server</bindstofield>
+ <description>Either a reference to a Unix domain socket or a reference to a specific host.</description>
+ <default_value>/tmp/mysql.sock</default_value>
+ <validate>^[a-z0-9.|/]+$</validate>
+ <message>Server name field is invalid</message>
+ <required />
+ </field>
+ <field>
+ <name>msqlport</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dbsettings->0->mysql-port</bindstofield>
+ <description>Use this variable if you are going to a MySQL server instance using TCP/IP instead of a socket connection.</description>
+ <default_value>3306</default_value>
+ <validate>^[0-9]+$</validate>
+ <message>Port field is invalid</message>
+ <required />
+ </field>
+ <field>
+ <name>msqluser</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dbsettings->0->mysql-user</bindstofield>
+ <description>Username, that will be used to connect to a MySQL server instance.</description>
+ <default_value>dspam</default_value>
+ <required />
+ </field>
+ <field>
+ <name>msqlpwd</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dbsettings->0->mysql-password</bindstofield>
+ <description>Password, that will be used to connect to a MySQL server instance.</description>
+ <default_value>dspam</default_value>
+ <required />
+ </field>
+ <field>
+ <name>msqldb</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dbsettings->0->mysql-database</bindstofield>
+ <description>Database name, that contains DSPAM data.</description>
+ <default_value>dspam</default_value>
+ <required />
+ </field>
+ <field>
+ <name>msqlcomp</name>
+ <type>checkbox</type>
+ <bindstofield>installedpackages->dspam->config->0->dbsettings->0->mysql-compress</bindstofield>
+ <description>Indicates whether communication data between DSPAM and MySQL should be compressed.</description>
+ <default_value>on</default_value>
+ </field>
+ <field>
+ <name>msqlsuqt</name>
+ <type>checkbox</type>
+ <bindstofield>installedpackages->dspam->config->0->dbsettings->0->mysql-squote</bindstofield>
+ <description>Use this if you have the 4.1 quote bug (see doc/mysql.txt).</description>
+ </field>
+ <field>
+ <name>msqlccache</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dbsettings->0->mysql-ccache</bindstofield>
+ <description>Conection cache default set to 10.</description>
+ <default_value>10</default_value>
+ <validate>^[0-9]+$</validate>
+ <message>Connection cache field is invalid</message>
+ <required />
+ </field>
+ <field>
+ <name>msqluid</name>
+ <type>checkbox</type>
+ <bindstofield>installedpackages->dspam->config->0->dbsettings->0->mysql-uid</bindstofield>
+ <description>Insert user id into the DSPAM signature.</description>
+ <default_value>on</default_value>
+ </field>
+ <field>
+ <name>slitepr</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dbsettings->0->sqlite-pragma</bindstofield>
+ <description>A particular SQLite pragma command to be used.</description>
+ </field>
+ <field>
+ <name>pgserver</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dbsettings->0->pgsql-server</bindstofield>
+ <description>A reference to a specific host that is running a PostgreSQL instance.</description>
+ <default_value>127.0.0.1</default_value>
+ <validate>^[a-z0-9.|-]+$</validate>
+ <message>Server name field is invalid</message>
+ <required />
+ </field>
+ <field>
+ <name>pgport</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dbsettings->0->pgsql-port</bindstofield>
+ <description>A number that represents the port a specific PostgreSQL instance is listening to.</description>
+ <default_value>5432</default_value>
+ <validate>^[0-9]+$</validate>
+ <message>Port field is invalid</message>
+ <required />
+ </field>
+ <field>
+ <name>pguser</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dbsettings->0->pgsql-user</bindstofield>
+ <description>Username, that will be used to connect to a PostgreSQL server instance.</description>
+ <default_value>dspam</default_value>
+ <required />
+ </field>
+ <field>
+ <name>pgpwd</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dbsettings->0->pgsql-password</bindstofield>
+ <description>Password, that will be used to connect to a PostgreSQL server instance.</description>
+ <default_value>dspam</default_value>
+ <required />
+ </field>
+ <field>
+ <name>pgdb</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dbsettings->0->pgsql-database</bindstofield>
+ <description>Database name, that contains DSPAM data.</description>
+ <default_value>dspam</default_value>
+ <required />
+ </field>
+ <field>
+ <name>pgccache</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dbsettings->0->pgsql-ccache</bindstofield>
+ <description>Conection cache default set to 3.</description>
+ <default_value>3</default_value>
+ <validate>^[0-9]+$</validate>
+ <message>Connection cache field is invalid</message>
+ <required />
+ </field>
+ <field>
+ <name>pguid</name>
+ <type>checkbox</type>
+ <bindstofield>installedpackages->dspam->config->0->dbsettings->0->pgsql-uid</bindstofield>
+ <description>Insert user id into the DSPAM signature.</description>
+ <default_value>on</default_value>
+ </field>
+ <field>
+ <name>oraserver</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dbsettings->0->ora-server</bindstofield>
+ <description>A reference to a specific host that is running an Oracle database instance.</description>
+ <size>50</size>
+ <default_value>&quot;(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))(CONNECT_DATA=(SID=PROD)))&quot;</default_value>
+ <required />
+ </field>
+ <field>
+ <name>orauser</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dbsettings->0->ora-user</bindstofield>
+ <description>Username, that will be used to connect to a Oracle database server instance.</description>
+ <default_value>dspam</default_value>
+ <required />
+ </field>
+ <field>
+ <name>orapwd</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dbsettings->0->ora-password</bindstofield>
+ <description>Password, that will be used to connect to a Oracle database server instance.</description>
+ <default_value>dspam</default_value>
+ <required />
+ </field>
+ <field>
+ <name>orasch</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dbsettings->0->ora-schema</bindstofield>
+ <description>Schema name, that contains DSPAM data.</description>
+ <default_value>dspam</default_value>
+ <required />
+ </field>
+ <field>
+ <name>hsrmax</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dbsettings->0->hash-rec-max</bindstofield>
+ <description>Default number of records to create in the initial segment when building hash files.</description>
+ <default_value>98317</default_value>
+ <validate>^[0-9]+$</validate>
+ <message>Default number of record field is invalid</message>
+ <required />
+ </field>
+ <field>
+ <name>hsatex</name>
+ <type>checkbox</type>
+ <bindstofield>installedpackages->dspam->config->0->dbsettings->0->hash-auto-ex</bindstofield>
+ <description>Autoextend hash databases when they fill up. This allows them to continue to train by adding extents (extensions) to the file.</description>
+ <default_value>on</default_value>
+ <required />
+ </field>
+ <field>
+ <name>hsmxex</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dbsettings->0->hash-max-ext</bindstofield>
+ <description>The maximum number of extents that may be created in a single hash file.</description>
+ <default_value>0</default_value>
+ <validate>^[0-9]+$</validate>
+ <message>Default number of record field is invalid</message>
+ <required />
+ </field>
+ <field>
+ <name>hsexsz</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dbsettings->0->hash-ext-size</bindstofield>
+ <description>The record size for newly created extents.</description>
+ <default_value>49157</default_value>
+ <validate>^[0-9]+$</validate>
+ <message>Default number of record field is invalid</message>
+ <required />
+ </field>
+ <field>
+ <name>hsmxse</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dbsettings->0->hash-max-seek</bindstofield>
+ <description>The maximum number of records to seek to insert a new record before failing or adding a new extent.</description>
+ <default_value>100</default_value>
+ <validate>^[0-9]+$</validate>
+ <message>Default number of record field is invalid</message>
+ <required />
+ </field>
+ <field>
+ <name>hsccus</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dbsettings->0->hash-co-user</bindstofield>
+ <description>If you are using a single, stateful hash database in daemon mode, specifying a concurrent user will cause the user to be permanently mapped into memory and shared via rwlocks.</description>
+ <default_value>user</default_value>
+ <required />
+ </field>
+ <field>
+ <name>hscoca</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dbsettings->0->hash-co-cache</bindstofield>
+ <description>If running in daemon mode, this is the max # of concurrent connections that will be supported.</description>
+ <default_value>10</default_value>
+ <validate>^[0-9]+$</validate>
+ <message>Default number of record field is invalid</message>
+ <required />
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ <stepsubmitphpaction>
+ if ($_POST['storagedriver'] == "mysql") {
+ /* ============================================================================================= */
+ /* == SQLite == */
+ /* ============================================================================================= */
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['sqlite-pragma']);
+ /* ============================================================================================= */
+ /* == PostgreSQL == */
+ /* ============================================================================================= */
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-server']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-port']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-user']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-password']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-database']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-ccache']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-uid']);
+ /* ============================================================================================= */
+ /* == Oracle == */
+ /* ============================================================================================= */
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['ora-server']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['ora-user']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['ora-password']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['ora-schema']);
+ /* ============================================================================================= */
+ /* == Hash == */
+ /* ============================================================================================= */
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-rec-max']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-auto-ex']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-max-ext']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-ext-size']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-max-seek']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-co-user']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-co-cache']);
+ } else if ($_POST['storagedriver'] == "sqlite") {
+ /* ============================================================================================= */
+ /* == MySQL == */
+ /* ============================================================================================= */
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-server']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-port']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-user']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-password']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-database']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-compress']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-squote']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-ccache']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-uid']);
+ /* ============================================================================================= */
+ /* == PostgreSQL == */
+ /* ============================================================================================= */
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-server']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-port']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-user']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-password']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-database']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-ccache']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-uid']);
+ /* ============================================================================================= */
+ /* == Oracle == */
+ /* ============================================================================================= */
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['ora-server']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['ora-user']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['ora-password']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['ora-schema']);
+ /* ============================================================================================= */
+ /* == Hash == */
+ /* ============================================================================================= */
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-rec-max']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-auto-ex']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-max-ext']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-ext-size']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-max-seek']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-co-user']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-co-cache']);
+ } else if ($_POST['storagedriver'] == "bdb") {
+ /* NOP */
+ } else if ($_POST['storagedriver'] == "pgsql") {
+ /* ============================================================================================= */
+ /* == MySQL == */
+ /* ============================================================================================= */
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-server']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-port']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-user']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-password']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-database']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-compress']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-squote']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-ccache']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-uid']);
+ /* ============================================================================================= */
+ /* == SQLite == */
+ /* ============================================================================================= */
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['sqlite-pragma']);
+ /* ============================================================================================= */
+ /* == Oracle == */
+ /* ============================================================================================= */
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['ora-server']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['ora-user']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['ora-password']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['ora-schema']);
+ /* ============================================================================================= */
+ /* == Hash == */
+ /* ============================================================================================= */
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-rec-max']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-auto-ex']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-max-ext']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-ext-size']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-max-seek']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-co-user']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-co-cache']);
+ } else if ($_POST['storagedriver'] == "oracle") {
+ /* ============================================================================================= */
+ /* == MySQL == */
+ /* ============================================================================================= */
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-server']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-port']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-user']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-password']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-database']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-compress']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-squote']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-ccache']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-uid']);
+ /* ============================================================================================= */
+ /* == SQLite == */
+ /* ============================================================================================= */
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['sqlite-pragma']);
+ /* ============================================================================================= */
+ /* == PostgreSQL == */
+ /* ============================================================================================= */
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-server']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-port']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-user']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-password']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-database']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-ccache']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-uid']);
+ /* ============================================================================================= */
+ /* == Hash == */
+ /* ============================================================================================= */
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-rec-max']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-auto-ex']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-max-ext']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-ext-size']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-max-seek']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-co-user']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['hash-co-cache']);
+ } else if ($_POST['storagedriver'] == "hash") {
+ /* ============================================================================================= */
+ /* == MySQL == */
+ /* ============================================================================================= */
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-server']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-port']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-user']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-password']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-database']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-compress']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-squote']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-ccache']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['mysql-uid']);
+ /* ============================================================================================= */
+ /* == SQLite == */
+ /* ============================================================================================= */
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['sqlite-pragma']);
+ /* ============================================================================================= */
+ /* == PostgreSQL == */
+ /* ============================================================================================= */
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-server']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-port']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-user']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-password']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-database']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-ccache']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['pgsql-uid']);
+ /* ============================================================================================= */
+ /* == Oracle == */
+ /* ============================================================================================= */
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['ora-server']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['ora-user']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['ora-password']);
+ unset($config['installedpackages']['dspam']['config'][0]['dbsettings'][0]['ora-schema']);
+ }
+ </stepsubmitphpaction>
+ <javascriptafterformdisplay>
+ function toggleDBSettings(idx) {
+ if (idx)
+ idx = idx;
+ else
+ idx = document.iform.storagedriver.selectedIndex;
+
+ switch (idx) {
+ case 0: /* mysql */
+ /* mysql specifics */
+ trNode = document.iform.msqlserver.parentNode.parentNode;
+ trNode.style.display = "table-row";
+ trNode = document.iform.msqlport.parentNode.parentNode;
+ trNode.style.display = "table-row";
+ trNode = document.iform.msqluser.parentNode.parentNode;
+ trNode.style.display = "table-row";
+ trNode = document.iform.msqlpwd.parentNode.parentNode;
+ trNode.style.display = "table-row";
+ trNode = document.iform.msqldb.parentNode.parentNode;
+ trNode.style.display = "table-row";
+ trNode = document.iform.msqlcomp.parentNode.parentNode;
+ trNode.style.display = "table-row";
+ trNode = document.iform.msqlsuqt.parentNode.parentNode;
+ trNode.style.display = "table-row";
+ trNode = document.iform.msqlccache.parentNode.parentNode;
+ trNode.style.display = "table-row";
+ trNode = document.iform.msqluid.parentNode.parentNode;
+ trNode.style.display = "table-row";
+ /* sqlite specifics */
+ trNode = document.iform.slitepr.parentNode.parentNode;
+ trNode.style.display = "none";
+ /* pgsql specifics */
+ trNode = document.iform.pgserver.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.pgport.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.pguser.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.pgpwd.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.pgdb.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.pgccache.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.pguid.parentNode.parentNode;
+ trNode.style.display = "none";
+ /* oracle specifics */
+ trNode = document.iform.oraserver.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.orauser.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.orapwd.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.orasch.parentNode.parentNode;
+ trNode.style.display = "none";
+ /* hash specifics */
+ trNode = document.iform.hsrmax.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.hsatex.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.hsmxex.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.hsexsz.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.hsmxse.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.hsccus.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.hscoca.parentNode.parentNode;
+ trNode.style.display = "none";
+ break;
+ case 1: /* sqlite */
+ /* mysql specifics */
+ trNode = document.iform.msqlserver.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqlport.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqluser.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqlpwd.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqldb.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqlcomp.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqlsuqt.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqlccache.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqluid.parentNode.parentNode;
+ trNode.style.display = "none";
+ /* sqlite specifics */
+ trNode = document.iform.slitepr.parentNode.parentNode;
+ trNode.style.display = "table-row";
+ /* pgsql specifics */
+ trNode = document.iform.pgserver.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.pgport.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.pguser.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.pgpwd.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.pgdb.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.pgccache.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.pguid.parentNode.parentNode;
+ trNode.style.display = "none";
+ /* oracle specifics */
+ trNode = document.iform.oraserver.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.orauser.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.orapwd.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.orasch.parentNode.parentNode;
+ trNode.style.display = "none";
+ /* hash specifics */
+ trNode = document.iform.hsrmax.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.hsatex.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.hsmxex.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.hsexsz.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.hsmxse.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.hsccus.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.hscoca.parentNode.parentNode;
+ trNode.style.display = "none";
+ break;
+ case 2: /* bdb */
+ /* mysql specifics */
+ trNode = document.iform.msqlserver.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqlport.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqluser.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqlpwd.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqldb.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqlcomp.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqlsuqt.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqlccache.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqluid.parentNode.parentNode;
+ trNode.style.display = "none";
+ /* sqlite specifics */
+ trNode = document.iform.slitepr.parentNode.parentNode;
+ trNode.style.display = "none";
+ /* pgsql specifics */
+ trNode = document.iform.pgserver.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.pgport.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.pguser.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.pgpwd.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.pgdb.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.pgccache.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.pguid.parentNode.parentNode;
+ trNode.style.display = "none";
+ /* oracle specifics */
+ trNode = document.iform.oraserver.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.orauser.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.orapwd.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.orasch.parentNode.parentNode;
+ trNode.style.display = "none";
+ /* hash specifics */
+ trNode = document.iform.hsrmax.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.hsatex.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.hsmxex.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.hsexsz.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.hsmxse.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.hsccus.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.hscoca.parentNode.parentNode;
+ trNode.style.display = "none";
+ break;
+ case 3: /* pgsql */
+ /* mysql specifics */
+ trNode = document.iform.msqlserver.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqlport.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqluser.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqlpwd.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqldb.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqlcomp.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqlsuqt.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqlccache.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqluid.parentNode.parentNode;
+ trNode.style.display = "none";
+ /* sqlite specifics */
+ trNode = document.iform.slitepr.parentNode.parentNode;
+ trNode.style.display = "none";
+ /* pgsql specifics */
+ trNode = document.iform.pgserver.parentNode.parentNode;
+ trNode.style.display = "table-row";
+ trNode = document.iform.pgport.parentNode.parentNode;
+ trNode.style.display = "table-row";
+ trNode = document.iform.pguser.parentNode.parentNode;
+ trNode.style.display = "table-row";
+ trNode = document.iform.pgpwd.parentNode.parentNode;
+ trNode.style.display = "table-row";
+ trNode = document.iform.pgdb.parentNode.parentNode;
+ trNode.style.display = "table-row";
+ trNode = document.iform.pgccache.parentNode.parentNode;
+ trNode.style.display = "table-row";
+ trNode = document.iform.pguid.parentNode.parentNode;
+ trNode.style.display = "table-row";
+ /* oracle specifics */
+ trNode = document.iform.oraserver.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.orauser.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.orapwd.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.orasch.parentNode.parentNode;
+ trNode.style.display = "none";
+ /* hash specifics */
+ trNode = document.iform.hsrmax.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.hsatex.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.hsmxex.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.hsexsz.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.hsmxse.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.hsccus.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.hscoca.parentNode.parentNode;
+ trNode.style.display = "none";
+ break;
+ case 4: /* oracle */
+ /* mysql specifics */
+ trNode = document.iform.msqlserver.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqlport.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqluser.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqlpwd.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqldb.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqlcomp.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqlsuqt.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqlccache.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqluid.parentNode.parentNode;
+ trNode.style.display = "none";
+ /* sqlite specifics */
+ trNode = document.iform.slitepr.parentNode.parentNode;
+ trNode.style.display = "none";
+ /* pgsql specifics */
+ trNode = document.iform.pgserver.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.pgport.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.pguser.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.pgpwd.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.pgdb.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.pgccache.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.pguid.parentNode.parentNode;
+ trNode.style.display = "none";
+ /* oracle specifics */
+ trNode = document.iform.oraserver.parentNode.parentNode;
+ trNode.style.display = "table-row";
+ trNode = document.iform.orauser.parentNode.parentNode;
+ trNode.style.display = "table-row";
+ trNode = document.iform.orapwd.parentNode.parentNode;
+ trNode.style.display = "table-row";
+ trNode = document.iform.orasch.parentNode.parentNode;
+ trNode.style.display = "table-row";
+ /* hash specifics */
+ trNode = document.iform.hsrmax.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.hsatex.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.hsmxex.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.hsexsz.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.hsmxse.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.hsccus.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.hscoca.parentNode.parentNode;
+ trNode.style.display = "none";
+ break;
+ case 5: /* hash */
+ /* mysql specifics */
+ trNode = document.iform.msqlserver.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqlport.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqluser.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqlpwd.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqldb.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqlcomp.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqlsuqt.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqlccache.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.msqluid.parentNode.parentNode;
+ trNode.style.display = "none";
+ /* sqlite specifics */
+ trNode = document.iform.slitepr.parentNode.parentNode;
+ trNode.style.display = "none";
+ /* pgsql specifics */
+ trNode = document.iform.pgserver.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.pgport.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.pguser.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.pgpwd.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.pgdb.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.pgccache.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.pguid.parentNode.parentNode;
+ trNode.style.display = "none";
+ /* oracle specifics */
+ trNode = document.iform.oraserver.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.orauser.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.orapwd.parentNode.parentNode;
+ trNode.style.display = "none";
+ trNode = document.iform.orasch.parentNode.parentNode;
+ trNode.style.display = "none";
+ /* hash specifics */
+ trNode = document.iform.hsrmax.parentNode.parentNode;
+ trNode.style.display = "table-row";
+ trNode = document.iform.hsatex.parentNode.parentNode;
+ trNode.style.display = "table-row";
+ trNode = document.iform.hsmxex.parentNode.parentNode;
+ trNode.style.display = "table-row";
+ trNode = document.iform.hsexsz.parentNode.parentNode;
+ trNode.style.display = "table-row";
+ trNode = document.iform.hsmxse.parentNode.parentNode;
+ trNode.style.display = "table-row";
+ trNode = document.iform.hsccus.parentNode.parentNode;
+ trNode.style.display = "table-row";
+ trNode = document.iform.hscoca.parentNode.parentNode;
+ trNode.style.display = "table-row";
+ break;
+ }
+ }
+
+ toggleDBSettings(0);
+ </javascriptafterformdisplay>
+</step>
+<step>
+ <id>4</id>
+ <includefile>dspam.inc</includefile>
+ <title>Delivery Settings</title>
+ <description>
+ On this page you will specify how DSPAM should deliver email messages to
+ their final destination. This could be either a local delivery method or
+ a TCP/IP based delivery method.
+ </description>
+ <fields>
+ <field>
+ <name>dagent</name>
+ <description>Specifies the local delivery agent DSPAM should call when delivering mail as a trusted user.</description>
+ <type>select</type>
+ <options>
+ <option>
+ <name>procmail</name>
+ <value>procmail</value>
+ </option>
+ <option>
+ <name>mail</name>
+ <value>mail</value>
+ </option>
+ <option>
+ <name>mail.local</name>
+ <value>mail.local</value>
+ </option>
+ <option>
+ <name>deliver</name>
+ <value>deliver</value>
+ </option>
+ <option>
+ <name>maildrop</name>
+ <value>maildrop</value>
+ </option>
+ <option>
+ <name>exim</name>
+ <value>exim</value>
+ </option>
+ </options>
+ <bindstofield>installedpackages->dspam->config->0->tdelivery-agent</bindstofield>
+ </field>
+ <field>
+ <donotdisable>true</donotdisable>
+ <name>dspamc</name>
+ <description>Use &lt;code&gt;dspamc&lt;/code&gt; instead of &lt;code&gt;dspam&lt;/code&gt; to locally deliver mails from the MTA to the user's mailbox (this pulls in DSPAM client/server settings).</description>
+ <type>checkbox</type>
+ </field>
+ <field>
+ <donotdisable>true</donotdisable>
+ <name>tcpipdel</name>
+ <description>Use TCP/IP based delivery. This option needs to be ticked if you are going to deliver via LMTP or SMTP.</description>
+ <type>checkbox</type>
+ <bindstofield>installedpackages->dspam->config->0->tcpip-delivery</bindstofield>
+ <enablefields>dhost,dport,dident,delproto</enablefields>
+ </field>
+ <field>
+ <name>dhost</name>
+ <type>input</type>
+ <donotdisable>false</donotdisable>
+ <bindstofield>installedpackages->dspam->config->0->tcpip-delivery-host</bindstofield>
+ <description>Alternatively, you may wish to use SMTP or LMTP delivery to deliver your message to the mail server.</description>
+ <validate>^[a-z0-9.|-]+$</validate>
+ <message>Host name field is invalid</message>
+ </field>
+ <field>
+ <name>dport</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->tcpip-delivery-port</bindstofield>
+ <description>Port number of a particular host.</description>
+ <validate>^[0-9]+$</validate>
+ <message>Port field is invalid</message>
+ </field>
+ <field>
+ <name>dident</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->tcpip-delivery-ident</bindstofield>
+ <description>A particular identification string.</description>
+ </field>
+ <field>
+ <name>delproto</name>
+ <description>A particular protocol typ. Either SMTP or LMTP.</description>
+ <type>select</type>
+ <options>
+ <option>
+ <name>ltmp</name>
+ <value>lmtp</value>
+ </option>
+ <option>
+ <name>smtp</name>
+ <value>smtp</value>
+ </option>
+ </options>
+ <bindstofield>installedpackages->dspam->config->0->tcpip-delivery-proto</bindstofield>
+ </field>
+ <field>
+ <name>onfail</name>
+ <description>What to do if local delivery or quarantine should fail.</description>
+ <type>select</type>
+ <options>
+ <option>
+ <name>error</name>
+ <value>error</value>
+ </option>
+ <option>
+ <name>unlearn</name>
+ <value>unlearn</value>
+ </option>
+ </options>
+ <bindstofield>installedpackages->dspam->config->0->delivery-onfail</bindstofield>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ <stepsubmitphpaction>
+ if($_POST['dspamc'] != "") {
+ /* DSPAM server settings */
+ $config['installedpackages']['dspam']['config'][0]['dspam-server-port'] = "24";
+ $config['installedpackages']['dspam']['config'][0]['dspam-server-queue-size'] = "32";
+ $config['installedpackages']['dspam']['config'][0]['dspam-server-pid'] = "/var/run/dspam/dspam.pid";
+ $config['installedpackages']['dspam']['config'][0]['dspam-server-mode'] = "auto";
+ $config['installedpackages']['dspam']['config'][0]['dspam-server-params'] = "--deliver=innocent -d %u";
+ $config['installedpackages']['dspam']['config'][0]['dspam-server-id'] = "abysseleven.abyssworld.de";
+ $config['installedpackages']['dspam']['config'][0]['dspam-server-socket'] = "/var/run/dspam/dspam.sock";
+
+ /* server passwords */
+ $config['installedpackages']['dspam']['config'][0]['server-pwd'][0]['value'] = "secret";
+ $config['installedpackages']['dspam']['config'][0]['server-pwd'][0]['descr'] = "desc";
+ $config['installedpackages']['dspam']['config'][0]['server-pwd'][1]['value'] = "password";
+ $config['installedpackages']['dspam']['config'][0]['server-pwd'][1]['descr'] = "desc";
+
+ /* DSPAM client settings */
+ $config['installedpackages']['dspam']['config'][0]['dspam-client-enable'] = "on";
+ $config['installedpackages']['dspam']['config'][0]['dspam-client-host'] = "/tmp/dspam.sock";
+ $config['installedpackages']['dspam']['config'][0]['dspam-client-port'] = "24";
+ $config['installedpackages']['dspam']['config'][0]['dspam-client-id'] = "secret@Relay1";
+ write_config();
+ }
+ </stepsubmitphpaction>
+</step>
+<step>
+ <id>5</id>
+ <includefile>dspam.inc</includefile>
+ <title> DSPAM Debugging Options</title>
+ <description>
+ Usually the DSPAM binary that ships with pfSense does not contain debugging symbols.
+ Hence it makes little sense to enable debugging options. If you are quite certain that
+ your DSPAM distribution comes with debugging enabled you may tweak the below debugging
+ options.
+ </description>
+ <fields>
+ <field>
+ <donotdisable>true</donotdisable>
+ <name>enabledbg</name>
+ <description>Enable debugging.</description>
+ <type>checkbox</type>
+ <bindstofield>installedpackages->dspam->config->0->debug-enable</bindstofield>
+ <enablefields>debug,dopt</enablefields>
+ </field>
+ <field>
+ <name>debug</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->debug-whom</bindstofield>
+ <description>Enables debugging for some or all users.</description>
+ </field>
+ <field>
+ <name>dopt</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->debug-options</bindstofield>
+ <description>One or more of: process, classify, spam, fp, inoculation, corpus</description>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+</step>
+<step>
+ <id>6</id>
+ <includefile>dspam.inc</includefile>
+ <title>DSPAM Engine Settings</title>
+ <description>
+ On this page you will find some specific options required to operate the DSPAM engine. Please
+ consult your &lt;code&gt;dspam.conf&lt;/code&gt; for a detailed explanation of each option.
+ If you are unsure about the meaning of a particular option, please use the default values.
+ </description>
+ <fields>
+ <field>
+ <name>tmode</name>
+ <description>
+ The default training mode to use for all operations, when one has not
+ been specified on the commandline or in the user's preferences (default: teft).
+ </description>
+ <type>select</type>
+ <default_value>teft</default_value>
+ <options>
+ <option>
+ <name>toe</name>
+ <value>toe</value>
+ </option>
+ <option>
+ <name>tum</name>
+ <value>tum</value>
+ </option>
+ <option>
+ <name>teft</name>
+ <value>teft</value>
+ </option>
+ <option>
+ <name>notrain</name>
+ <value>notrain</value>
+ </option>
+ </options>
+ <bindstofield>installedpackages->dspam->config->0->training-mode</bindstofield>
+ </field>
+ <field>
+ <donotdisable>true</donotdisable>
+ <name>testct</name>
+ <default_value>on</default_value>
+ <description>
+ By default, dspam will retrain certain errors until the condition is
+ no longer met (default: enabled).
+ </description>
+ <type>checkbox</type>
+ <bindstofield>installedpackages->dspam->config->0->test-cond-training</bindstofield>
+ </field>
+ <field>
+ <name>pvalue</name>
+ <description>
+ Specify the technique used for calculating PValues, overriding any
+ defaults configured in the build (default: graham).
+ </description>
+ <type>select</type>
+ <default_value>teft</default_value>
+ <options>
+ <option>
+ <name>graham</name>
+ <value>graham</value>
+ </option>
+ <option>
+ <name>robinson</name>
+ <value>robinso</value>
+ </option>
+ <option>
+ <name>markov</name>
+ <value>markov</value>
+ </option>
+ </options>
+ <bindstofield>installedpackages->dspam->config->0->pvalue</bindstofield>
+ </field>
+ <field>
+ <donotdisable>true</donotdisable>
+ <name>ipdrive</name>
+ <default_value>on</default_value>
+ <description>
+ Calculate odds-ratios for ham/spam, and add to X-DSPAM-Improbability
+ headers (default: disabled).
+ </description>
+ <type>checkbox</type>
+ <bindstofield>installedpackages->dspam->config->0->improbability-drive</bindstofield>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+</step>
+<step>
+ <id>7</id>
+ <includefile>dspam.inc</includefile>
+ <title>LDAP Settings</title>
+ <description>
+ DSPAM comes with the ability to verify users agains user records stored within a LDAP directory.
+ If using this option, it would be for example possible to verify mail users against Windows
+ user entries stored within an Active Directory. Please consider this feature as somewhat experimental.
+ </description>
+ <fields>
+ <field>
+ <donotdisable>true</donotdisable>
+ <name>enableldap</name>
+ <description>Enable checks against a LDAP directory.</description>
+ <type>checkbox</type>
+ <bindstofield>installedpackages->dspam->config->0->ldap-enable</bindstofield>
+ <enablefields>ldapmode,ldaphost,ldapfilter,ldapbase</enablefields>
+ </field>
+ <field>
+ <name>ldapmode</name>
+ <description>
+ Perform various LDAP functions depending on LDAPMode variable.
+ </description>
+ <type>select</type>
+ <default_value>verify</default_value>
+ <options>
+ <option>
+ <name>verify</name>
+ <value>verify</value>
+ </option>
+ </options>
+ <bindstofield>installedpackages->dspam->config->0->ldap-mode</bindstofield>
+ </field>
+ <field>
+ <name>ldaphost</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->ldap-host</bindstofield>
+ <description>Hostname of the LDAP directory server.</description>
+ </field>
+ <field>
+ <name>ldapfilter</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->ldap-filter</bindstofield>
+ <description>A specific query filter, that should be used while querying the LDAP server.</description>
+ </field>
+ <field>
+ <name>ldapbase</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->ldap-base</bindstofield>
+ <description>A particular distinguish name from where to start LDAP queries.</description>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+</step>
+<step>
+ <id>8</id>
+ <includefile>dspam.inc</includefile>
+ <title>Miscellaneous Settings</title>
+ <description>
+ On this page we will give you an opertunity to fine-tune the DSPAM engine. As mentioned earlier,
+ if you are unsure about the meaning of a particular option, use its default value.
+ </description>
+ <fields>
+ <field>
+ <name>foatt</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->failover-attempts</bindstofield>
+ <description>A particular number of attempts (default: 1).</description>
+ </field>
+ <field>
+ <donotdisable>true</donotdisable>
+ <name>enablesbl</name>
+ <description>Enable checks against a particular SBL host (default: disabled).</description>
+ <type>checkbox</type>
+ <bindstofield>installedpackages->dspam->config->0->sbl-enable</bindstofield>
+ <enablefields>sblhost</enablefields>
+ </field>
+ <field>
+ <name>sblhost</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->sbl-host</bindstofield>
+ <description>A particular SBL hostname (default: none).</description>
+ <size>30</size>
+ </field>
+ <field>
+ <donotdisable>true</donotdisable>
+ <name>enablerbl</name>
+ <description>Enable RBL inoculation support (default: disabled).</description>
+ <type>checkbox</type>
+ <bindstofield>installedpackages->dspam->config->0->rbl-inoculate</bindstofield>
+ </field>
+ <field>
+ <donotdisable>true</donotdisable>
+ <name>enablenoti</name>
+ <description>Enable the sending of notification emails to users (first message, quarantine full, etc. default: disabled).</description>
+ <type>checkbox</type>
+ <bindstofield>installedpackages->dspam->config->0->notification-email</bindstofield>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+</step>
+<step>
+ <id>9</id>
+ <includefile>dspam.inc</includefile>
+ <title>Maintainance Settings</title>
+ <description>
+ DSPAM stores token data etc. in some kind of a database (e.g. a RDBMS or flat files).
+ Over time, this token data may consume lots of space. Hence it makes sense to run
+ certain routines to clean up unused data.
+ </description>
+ <fields>
+ <field>
+ <name>psig</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->purge-signatures</bindstofield>
+ <description>Purge stale signatures (default: 14).</description>
+ </field>
+ <field>
+ <name>pneut</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->purge-neutral</bindstofield>
+ <description>Purge tokens with neutralish probabilities (default: 90).</description>
+ </field>
+ <field>
+ <name>punu</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->purge-unused</bindstofield>
+ <description>Purge unused tokens (default: 90).</description>
+ </field>
+ <field>
+ <name>phapa</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->purge-hapaxes</bindstofield>
+ <description> Purge tokens with less than 5 hits (hapaxes - default: 30).</description>
+ </field>
+ <field>
+ <name>pones</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->purge-hits-1s</bindstofield>
+ <description>Purge tokens with only 1 spam hit (default: 15).</description>
+ </field>
+ <field>
+ <name>ponei</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->purge-hits-1i</bindstofield>
+ <description> Purge tokens with only 1 innocent hit (default: 15).</description>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+</step>
+<step>
+ <id>10</id>
+ <includefile>dspam.inc</includefile>
+ <title>System Settings</title>
+ <description>
+ This page contains additional settings related to the DSPAM system such as logging,
+ message processing behaviour et cetera.
+ </description>
+ <fields>
+ <field>
+ <name>locmx</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->local-mx</bindstofield>
+ <description>
+ Local Mail Exchangers: Used for source address tracking, tells DSPAM
+ which mail exchangers are local and therefore should be ignored in the
+ Received: header when tracking the source of an email. Note: you should
+ use the address of the host as appears between brackets [ ] in the
+ Received header (default: 127.0.0.1).
+ </description>
+ </field>
+ <field>
+ <donotdisable>true</donotdisable>
+ <name>enablesysl</name>
+ <description>Enable system logging (default: enabled).</description>
+ <type>checkbox</type>
+ <bindstofield>installedpackages->dspam->config->0->system-log</bindstofield>
+ </field>
+ <field>
+ <donotdisable>true</donotdisable>
+ <name>enableusel</name>
+ <description>Enable per user logging (default: enabled).</description>
+ <type>checkbox</type>
+ <bindstofield>installedpackages->dspam->config->0->user-log</bindstofield>
+ </field>
+ <field>
+ <name>optinout</name>
+ <description>
+ Opt: in or out; determines DSPAM's default filtering behavior (default: out).
+ </description>
+ <type>select</type>
+ <default_value>out</default_value>
+ <options>
+ <option>
+ <name>out</name>
+ <value>out</value>
+ </option>
+ <option>
+ <name>in</name>
+ <value>in</value>
+ </option>
+ </options>
+ <bindstofield>installedpackages->dspam->config->0->filter-opt</bindstofield>
+ </field>
+ <field>
+ <donotdisable>true</donotdisable>
+ <name>enableptoh</name>
+ <description>Parse the To: headers of an incoming message. (default: disabled).</description>
+ <type>checkbox</type>
+ <bindstofield>installedpackages->dspam->config->0->parse-to-headers</bindstofield>
+ </field>
+ <field>
+ <donotdisable>true</donotdisable>
+ <name>enablecmop</name>
+ <description>Automatically change the class (to spam or innocent - default: disabled).</description>
+ <type>checkbox</type>
+ <bindstofield>installedpackages->dspam->config->0->change-mode-on-parse</bindstofield>
+ </field>
+ <field>
+ <donotdisable>true</donotdisable>
+ <name>enablecuop</name>
+ <description>Automatically change the username to match that specified in the To: header (default: enabled).</description>
+ <type>checkbox</type>
+ <bindstofield>installedpackages->dspam->config->0->change-user-on-parse</bindstofield>
+ </field>
+ <field>
+ <name>maxmsgs</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->max-message-size</bindstofield>
+ <description>
+ You may specify a maximum message size in bytes for DSPAM to process. (default: 307200).
+ </description>
+ </field>
+ <field>
+ <donotdisable>true</donotdisable>
+ <name>procbias</name>
+ <description>
+ Bias causes the filter to lean more toward &quot;innocent&quot;, and usually
+ greatly reduces false positives. It is the default behavior of most
+ Bayesian filters, including dspam (default: enabled).
+ </description>
+ <type>checkbox</type>
+ <bindstofield>installedpackages->dspam->config->0->processor-bias</bindstofield>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+</step>
+<step>
+ <id>11</id>
+ <includefile>dspam.inc</includefile>
+ <title>ClamAV Engine Settings</title>
+ <description>
+ DSPAM comes with an additional feature which allows to scan mail messages
+ for malicious code (i.e. virii). If you require messages not only to be
+ classified as Spam/Ham but additionally to be scanned for virii, enable
+ to appropriate option below.
+ </description>
+ <fields>
+ <field>
+ <donotdisable>true</donotdisable>
+ <name>enableclam</name>
+ <description>Enable ClamAV Engine (default: disabled).</description>
+ <type>checkbox</type>
+ <bindstofield>installedpackages->dspam->config->0->clamav-enable</bindstofield>
+ <enablefields>clamport,clamhost,clamresp</enablefields>
+ </field>
+ <field>
+ <name>clamport</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->clamav-port</bindstofield>
+ <description>A number that specifies the port the ClamAV daemon is listening to (default: none).</description>
+ </field>
+ <field>
+ <name>clamhost</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->clamav-host</bindstofield>
+ <description>An IP address that points to the host the ClamAV daemon is running on (default: none).</description>
+ </field>
+ <field>
+ <name>clamresp</name>
+ <description>The action that should take place, if ClamAV reports a positive (default: none).</description>
+ <type>select</type>
+ <default_value>accept</default_value>
+ <options>
+ <option>
+ <name>reject</name>
+ <value>reject</value>
+ </option>
+ <option>
+ <name>accept</name>
+ <value>accept</value>
+ </option>
+ <option>
+ <name>spam</name>
+ <value>spam</value>
+ </option>
+ </options>
+ <bindstofield>installedpackages->dspam->config->0->clamav-response</bindstofield>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+</step>
+<step>
+ <id>12</id>
+ <includefile>dspam.inc</includefile>
+ <title>DSPAM Daemon Settings (Server)</title>
+ <description>
+ DSPAM can be either invoked per message (i.e. a thread per message) or it
+ can be run as a daemon in the background. The latter option enables DSPAM
+ to maintain database connection pools which may increase overall performance.
+ Based on the profile, that you did choose initially, some of the below options
+ may be already set.
+ </description>
+ <fields>
+ <field>
+ <name>dsport</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dspam-server-port</bindstofield>
+ <description>A number that specifies the port the DSPAM daemon is listening to (default: none).</description>
+ </field>
+ <field>
+ <name>dsqsize</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dspam-server-queue-size</bindstofield>
+ <description>A number that specifies the server's queue size (default: none).</description>
+ </field>
+ <field>
+ <name>dspid</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dspam-server-pid</bindstofield>
+ <description> Keep this is sync with &lt;code&gt;/usr/local/etc/rc.d/dspam.rc&lt;/code&gt; script (default: none).</description>
+ <size>40</size>
+ </field>
+ <field>
+ <name>dssmode</name>
+ <description>Specifies the type of LMTP server to start. (default: none).</description>
+ <type>select</type>
+ <default_value>auto</default_value>
+ <options>
+ <option>
+ <name>dspam</name>
+ <value>dspam</value>
+ </option>
+ <option>
+ <name>standard</name>
+ <value>standard</value>
+ </option>
+ <option>
+ <name>auto</name>
+ <value>auto</value>
+ </option>
+ </options>
+ <bindstofield>installedpackages->dspam->config->0->dspam-server-mode</bindstofield>
+ </field>
+ <field>
+ <name>serverparam</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dspam-server-params</bindstofield>
+ <description>Parameters which will be passed to the LMTP server (default: none).</description>
+ </field>
+ <field>
+ <name>serverid</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dspam-server-id</bindstofield>
+ <description>An identification string which will be used to be passed to the LMTP server (default: none).</description>
+ </field>
+ <field>
+ <name>serversock</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dspam-server-socket</bindstofield>
+ <description>A local Unix domain socket (default: none).</description>
+ <size>40</size>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+</step>
+<step>
+ <id>13</id>
+ <includefile>dspam.inc</includefile>
+ <title>DSPAM Daemon Settings (Client)</title>
+ <description>
+ If you did configure DSPAM to run in dspam mode, it is required to configure
+ client settings because DSPAM needs for example to authenticate against its
+ server counterpart.
+ </description>
+ <fields>
+ <field>
+ <donotdisable>true</donotdisable>
+ <name>enabledsclient</name>
+ <description>Run DSPAM in client mode (default: disabled).</description>
+ <type>checkbox</type>
+ <bindstofield>installedpackages->dspam->config->0->dspam-client-enable</bindstofield>
+ <enablefields>dsclhost,dsclport,dsclident</enablefields>
+ </field>
+ <field>
+ <name>dsclhost</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dspam-client-host</bindstofield>
+ <description>An IP address or a Unix domain socket (default: none).</description>
+ </field>
+ <field>
+ <name>dsclport</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dspam-client-port</bindstofield>
+ <description>Will be only used if this client uses TCP/IP communication (default: none).</description>
+ </field>
+ <field>
+ <name>dsclident</name>
+ <type>input</type>
+ <bindstofield>installedpackages->dspam->config->0->dspam-client-id</bindstofield>
+ <description>A string that will be used to identify the client against a server. (default: none).</description>
+ <size>40</size>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+</step>
+<step>
+ <id>14</id>
+ <includefile>dspam.inc</includefile>
+ <title>Reload configuration</title>
+ <disableheader>true</disableheader>
+ <description>Click 'Reload' to reload the DSPAM daemon with new changes.</description>
+ <fields>
+ <field>
+ <name>Reload</name>
+ <type>submit</type>
+ </field>
+ </fields>
+</step>
+<step>
+ <id>15</id>
+ <includefile>dspam.inc</includefile>
+ <title>Reload in progress</title>
+ <description>
+ A reload is now in progress. Please wait. &lt;p&gt; The system will
+ automatically try to access DSPAM settings in 120 page seconds. &lt;p&gt;
+ You can click on the icon above to access the site more quickly.
+ </description>
+ <javascriptafterformdisplay>
+ window.setTimeout('window.location.href = "/dspam-settings.php"', 120000);
+ </javascriptafterformdisplay>
+ <stepafterformdisplay>
+ dspam_configure();
+ mwexec("/usr/local/etc/rc.d/spamd.sh stop");
+ mwexec("/usr/local/etc/rc.d/spamd.sh start");
+ </stepafterformdisplay>
+</step>
+</pfsensewizard>