From 3eab27426aa39497d87a9fb768fd860f924e10be Mon Sep 17 00:00:00 2001 From: Daniel Stefan Haischt Date: Sat, 15 Jul 2006 22:16:04 +0000 Subject: - initial version of the DSPAM package --- packages/dspam/www/dspam-admin-graph.php | 201 ++ packages/dspam/www/dspam-admin-prefs.php | 249 ++ packages/dspam/www/dspam-admin-stats.php | 123 + packages/dspam/www/dspam-admin.php | 207 ++ packages/dspam/www/dspam-analysis-graph.php | 137 ++ packages/dspam/www/dspam-analysis.php | 147 ++ packages/dspam/www/dspam-hfragment.php | 90 + packages/dspam/www/dspam-history.php | 172 ++ packages/dspam/www/dspam-perf.php | 222 ++ packages/dspam/www/dspam-prefs.php | 234 ++ packages/dspam/www/dspam-quarantine.php | 178 ++ packages/dspam/www/dspam-settings-algo.php | 204 ++ packages/dspam/www/dspam-settings-bmta.php | 202 ++ packages/dspam/www/dspam-settings-feat.php | 203 ++ packages/dspam/www/dspam-settings-header.php | 197 ++ packages/dspam/www/dspam-settings-overr.php | 197 ++ packages/dspam/www/dspam-settings-prefs.php | 197 ++ packages/dspam/www/dspam-settings-spwd.php | 197 ++ packages/dspam/www/dspam-settings-tuser.php | 195 ++ packages/dspam/www/dspam-settings.php | 2941 +++++++++++++++++++++++ packages/dspam/www/dspam-train.php | 284 +++ packages/dspam/www/dspam-viewmsg.php | 158 ++ packages/dspam/www/dspam.php | 264 ++ packages/dspam/www/p3scan_rules.php | 12 + packages/dspam/www/themes/metallic/dspam.css | 115 + packages/dspam/www/wizards/dspam-lda-proxy.png | Bin 0 -> 20556 bytes packages/dspam/www/wizards/dspam-pop-proxy.png | Bin 0 -> 18247 bytes packages/dspam/www/wizards/dspam-smtp-relay.png | Bin 0 -> 30404 bytes packages/dspam/www/wizards/dspam_wizard.xml | 1830 ++++++++++++++ 29 files changed, 9156 insertions(+) create mode 100644 packages/dspam/www/dspam-admin-graph.php create mode 100644 packages/dspam/www/dspam-admin-prefs.php create mode 100644 packages/dspam/www/dspam-admin-stats.php create mode 100644 packages/dspam/www/dspam-admin.php create mode 100644 packages/dspam/www/dspam-analysis-graph.php create mode 100644 packages/dspam/www/dspam-analysis.php create mode 100644 packages/dspam/www/dspam-hfragment.php create mode 100644 packages/dspam/www/dspam-history.php create mode 100644 packages/dspam/www/dspam-perf.php create mode 100644 packages/dspam/www/dspam-prefs.php create mode 100644 packages/dspam/www/dspam-quarantine.php create mode 100644 packages/dspam/www/dspam-settings-algo.php create mode 100644 packages/dspam/www/dspam-settings-bmta.php create mode 100644 packages/dspam/www/dspam-settings-feat.php create mode 100644 packages/dspam/www/dspam-settings-header.php create mode 100644 packages/dspam/www/dspam-settings-overr.php create mode 100644 packages/dspam/www/dspam-settings-prefs.php create mode 100644 packages/dspam/www/dspam-settings-spwd.php create mode 100644 packages/dspam/www/dspam-settings-tuser.php create mode 100644 packages/dspam/www/dspam-settings.php create mode 100644 packages/dspam/www/dspam-train.php create mode 100644 packages/dspam/www/dspam-viewmsg.php create mode 100644 packages/dspam/www/dspam.php create mode 100644 packages/dspam/www/p3scan_rules.php create mode 100644 packages/dspam/www/themes/metallic/dspam.css create mode 100644 packages/dspam/www/wizards/dspam-lda-proxy.png create mode 100644 packages/dspam/www/wizards/dspam-pop-proxy.png create mode 100644 packages/dspam/www/wizards/dspam-smtp-relay.png create mode 100644 packages/dspam/www/wizards/dspam_wizard.xml (limited to 'packages/dspam/www') 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 @@ + 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 @@ + + + +EOD; + + $pfSenseHead->addScript($jscriptstr); + echo $pfSenseHead->getHTML(); + +?> + + + +
+ + +

+ + This page lets you configure how the filter will handle your messages. + +

+ + + + + + + +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Statistical SPAM Protection for...
Username + + /> + + + +   + + /> +
 
+ Training – Configure how the filter learns as it processes messages +
+

DSPAM should train:

+ 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" /> + +
+ 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" /> + +
+ 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" /> + +
+

When I train DSPAM, I prefer:

+ 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" /> + +
+ 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" /> + +
+

+ Filter sensitivity during the training period: +

+

+ + + Catch SPAM (More in Quarantine)  + /> + /> + /> + /> + /> + » + /> + « + /> + /> + /> + /> + /> +  Assume Good (Fewer in Quarantine) + + +

+
 
+ Message Handling – Configure how SPAM is handled +
+

When a SPAM message is identified:

+

+ type="radio" class="formfld" title="Quarantine the message" alt="Quarantine the message" name="rad_ident_action" id="rad_ident_action_one" /> + +
+ 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" /> + + " name="msgtag" /> +
+ 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" /> + +

+
 
+ Features – Tuning SPAM filtering +
+

+ 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" /> + +
+ 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" /> + +
+ 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" /> + + +

+
 
  + " /> +
+
+
+
+ +getHTML(); +?> + + + + + + + + +
Access denied for:
+ + + + \ 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 @@ +getHTML(); + +?> + + + +
+ + +

+ + The following table shows the number of messages processed for each user + along with their current preference settings. + +

+ + + + + + + +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Statistical SPAM Protection for...
Username + +
 
NameQ.SizeTPTNFPFNSCICModeOn SpamBNRWhitelistSedSig Loc
+
+
+
+ +getHTML(); +?> + + + + + + + + +
Access denied for:
+ + + + \ 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 @@ +getHTML(); + +?> + + + +
+ + +

+ + The following graphs and tables summarize the processing done by the filter. + +

+ + + + + + + +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Statistical SPAM Protection for...
Username + +
 
+ Overview +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MessagesTodayThis Hour StatusCurrent Value
Spam Average message processing time sec.
Good Average throughput messages/sec.
Spam Misses DSPAM instances process(es)
False Positives System uptime
Inoculations Mail queue length messages
Total   
+
 
+ 24 Hour Activity – 125 SPAM, 601 Good, 2 Spam Misses, 0 False Positives, 2 Inoculations +
+ + 24 Hour Activity + + &offset=20" alt="24 Hour Activity" border="0" /> + +
 
+ Daily Activity – 2457 SPAM, 10772 Good, 35 Spam Misses, 0 False Positives, 33 Inoculations +
+ + + + + +
+
+
+
+ +getHTML(); +?> + + + + + + + + +
Access denied for:
+ + + + \ 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 @@ +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 @@ + + + +EOD; + + $pfSenseHead->addScript($jscriptstr); +echo $pfSenseHead->getHTML(); + +?> + + + +
+ + +

+ + Graphs showing the number of messages that have been processed are shown below. + +

+ + + + + + + +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Statistical SPAM Protection for...
Username + + /> + + + +   + + /> +
 
+ 24 Hour Activity SPAM, Good +
+ + 24 Hour Activity + + " alt="24 Hour Activity" border="0" /> + +
 
+ 14 Day Activity SPAM, Good +
+ + 24 Hour Activity + + 24 Hour Activity + +
+
+
+
+ + + + \ 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 @@ +getHTML(); + +?> + + + + + + + + + + + + +
+ +
+
+ + + + + + + + + + +
+
+
+
+ ()

+
+
 
+
+            
+            
+
+
+
+ + + + \ 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 @@ + + + +EOD; + +$pfSenseHead->addScript($jscriptstr); +$pfSenseHead->addLink("\n"); +echo $pfSenseHead->getHTML(); + +?> + + + +
+ + + + +

+ + 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. + +

+ + + + + + + +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Statistical SPAM Protection for...
Username + + /> + + + +   + + /> +
 
+ + + + + +
 
TypeActionDay/TimeFromSubjectAdditional Info
 
+ + + + + +
+
+
+
+ + + + \ 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 @@ + + + +EOD; + +$pfSenseHead->addScript($jscriptstr); +echo $pfSenseHead->getHTML(); + +?> + + + +
+ + +

+ + If you receive a message in your e-mail application that was not caught by + the filter, please forward it to + so that it can be analyzed and learned as SPAM. + This will improve the filter's accuracy in the future. + +

+ + + + + + + +
+ +
+
+ + + + + + + + + + + + + + + + + + + + +
Statistical SPAM Protection for...
Username + + /> + + + +   + + /> +
 
+ Performance Statistics +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
MetricCalculated as
+ Overall accuracy (since last reset) + + % + (SPAM messages caught + Good messages delivered) / Total number of messages 
+ Spam identification (since last reset) + + % + (Spam catch rate only) 
+ Spam ratio (of total processed) + + % + Total SPAM messages (both caught & missed) / Total number of messages 
+
  + + + + + + + + + + + + + + + + + + + + + +
 SPAM messagesGood messages
Since last reset + missed
+ caught
+ % caught
+
+ missed
+ delivered
+ % missed
+
Total processed by filter + missed
+ caught
+
+ missed
+ delivered
+
From corpus + feed
+
+ feed
+
+
+
+

+ Reset | Tweak -1 +

+
+
+
+
+ + + + \ 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 @@ + + + +EOD; + +$pfSenseHead->addScript($jscriptstr); +echo $pfSenseHead->getHTML(); + +?> + + + +
+ + +

+ + This page lets you configure how the filter will handle your messages. + +

+ + + + + + + +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Statistical SPAM Protection for...
Username + + /> + + + +   + + /> +
 
+ Training – Configure how the filter learns as it processes messages +
+

DSPAM should train:

+ 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" /> + +
+ 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" /> + +
+ 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" /> + +
+

When I train DSPAM, I prefer:

+ 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" /> + +
+ 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" /> + +
+

+ Filter sensitivity during the training period: +

+

+ + + Catch SPAM (More in Quarantine)  + /> + /> + /> + /> + /> + » + /> + « + /> + /> + /> + /> + /> +  Assume Good (Fewer in Quarantine) + + +

+
 
+ Message Handling – Configure how SPAM is handled +
+

When a SPAM message is identified:

+

+ type="radio" class="formfld" title="Quarantine the message" alt="Quarantine the message" name="rad_ident_action" id="rad_ident_action_one" /> + +
+ 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" /> + + " name="msgtag" /> +
+ 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" /> + +

+
 
+ Features – Tuning SPAM filtering +
+

+ 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" /> + +
+ 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" /> + +
+ 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" /> + + +

+
 
  + " /> +
+
+
+
+ + + + \ 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 @@ + + + +EOD; + +$pfSenseHead->addScript($jscriptstr); +$pfSenseHead->addLink("\n"); +echo $pfSenseHead->getHTML(); + +?> + + + +
+ + + + + + +

+ + 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 Deliver Checked to deliver messages you want + to read, or use Delete All to empty the quarantine. + +

+ + + + + + + +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Statistical SPAM Protection for...
Username + + /> + + + +   + + /> +
 
+ +   +   + + + + + +
 
 
+ +   +   + + + + + +
+
+
+
+ + + + \ 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 @@ + + foo + foo desc + + + bar + bar desc + +*/ + +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(); + +?> + + + + +
+
+ + + + + + + + + + + + + +
+ + +
+ +
  + "> " onclick="history.back()"> + + + + + + +
+
+ +getHTML(); +?> + + + + + + + + +
Access denied for:
+ + + + 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 @@ + + foo + foo desc + + + bar + bar desc + +*/ + +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(); + +?> + + + + +
+
+ + + + + + + + + + + + + +
+ + +
+ +
  + "> " onclick="history.back()"> + + + + + + +
+
+ +getHTML(); +?> + + + + + + + + +
Access denied for:
+ + + + 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 @@ + + foo + foo desc + + + bar + bar desc + +*/ + +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(); + +?> + + + + +
+
+ + + + + + + + + + + + + +
+ + +
+ +
  + "> " onclick="history.back()"> + + + + + + +
+
+ +getHTML(); +?> + + + + + + + + +
Access denied for:
+ + + + 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 @@ + + foo + foo desc + +
+ bar + foo desc +
+*/ + +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(); + +?> + + + + +
+
+ + + + + + + + + + + + + +
+ +
+ +
  + "> " onclick="history.back()"> + + + + + + +
+
+ +getHTML(); +?> + + + + + + + + +
Access denied for:
+ + + + 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 @@ + + foo + foo desc + + + bar + bar desc + +*/ + +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(); + +?> + + + + +
+
+ + + + + + + + + + + + + +
+ +
+ +
  + "> " onclick="history.back()"> + + + + + + +
+
+ +getHTML(); +?> + + + + + + + + +
Access denied for:
+ + + + 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 @@ + + foo + foo desc + + + bar + bar desc + +*/ + +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(); + +?> + + + + +
+
+ + + + + + + + + + + + + +
+ +
+ +
  + "> " onclick="history.back()"> + + + + + + +
+
+ +getHTML(); +?> + + + + + + + + +
Access denied for:
+ + + + 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 @@ + + foo + foo desc + + + bar + bar desc + +*/ + +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(); + +?> + + + + +
+
+ + + + + + + + + + + + + +
+ +
+ +
  + "> " onclick="history.back()"> + + + + + + +
+
+ +getHTML(); +?> + + + + + + + + +
Access denied for:
+ + + + 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 @@ + + foo + + + bar + +*/ + +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(); + +?> + + + + +
+
+ + + + + + + + + + + + + +
+ +
+ +
  + "> " onclick="history.back()"> + + + + + + +
+
+ +getHTML(); +?> + + + + + + + + +
Access denied for:
+ + + + 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 @@ + "") { + $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; + + $pfSenseHead->addScript($jscriptstr); + echo $pfSenseHead->getHTML();?> + +> + +
+ + + +

+ + + Note: + + the options on this page are intended for use by advanced users only. + Any setting found on this page is directly going into dspam.conf. + Make sure you do not mess with settings, you do not understand. + +

+

+ If you submit this page, the DSPAM daemon process will be restarted. +

+
+ + + + + + + +
+ +
+
+ + + + + + + +
+

Settings

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Database Settings
Storage Driver + + Specifies the storage driver backend (library) to use. +

+ + 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. + +

+
  + + " onclick="document.iform.sectionid.value = 'db';" /> +
 
 Delivery Settings
Trusted Delivery Agent + + Specifies the local delivery agent DSPAM should call when delivering mail as a trusted user. +

+ + 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. + +

+
DSPAM Thin Client + /> + Use dspamc instead of the dspam binary. +

+ + Note: This requires to enable the dspam daemon as well (section: DSPAM Daemon Settings (Server)). + +

+
TCP/IP Based Delivery + onClick="enable_change(false, 5);" /> + Use TCP/IP based delivery. +

+ + Note: This option needs to be ticked if you are going to deliver via LMTP or SMTP. + +

+
Deliver Host + name="dhost" id="dhost" value="" /> + Alternatively, you may wish to use SMTP or LMTP delivery to deliver your message to the mail server. +

+ + Note: You will need to configure with --enable-daemon 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. + +

+
Deliver Port + name="dport" id="dport" value="" /> + Port number of a particular host. +
Deliver Ident + name="dident" id="dident" value="" /> + A particular identification string +
TCP/IP Delivery Protocol + + A particular protocol typ. Either SMTP + or LMTP. +
On Fail + + What to do if local delivery or quarantine should fail. +

+ + Note: If set to "unlearn", DSPAM will unlearn the message prior to exiting with an un + successful return code. The default option, "error" 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. + +

+
  + + " onclick="document.iform.sectionid.value = 'del';" /> +
 
 DSPAM Privileges
Trusted Users + Unix users which are allowed to perform certain actions. +

+ + 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. + +

+ + + + + + + + + ""): ?> + + + + + + + + + + + + + + +
+ + +   + + + + + + +
')">
+
+ + + + +
+
+
  + + " onclick="document.iform.sectionid.value = 'priv';" /> +
 
 DSPAM Debugging Options + onClick="enable_change(false, 0);" /> + Enable +
Debug + name="debug" id="debug" value="" /> + Enables debugging for some or all users. +

+ + 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. + +

+
Debug Options + name="dopt" id="dopt" value="" /> + One or more of: process, classify, spam, fp, inoculation, corpus +

+ +

+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)
+                        
+ +

+
  + + " onclick="document.iform.sectionid.value = 'dbg';" /> +
 
 DSPAM Engine Settings
Training Mode + + + The default training mode to use for all operations, when one has not been + specified on the commandline or in the user's preferences. + +

+ + Acceptable values are: toe, tum, teft, notrain + +

+
Test Conditional Training + /> + + By default, dspam will retrain certain errors + until the condition is no longer met. + +

+ + Note: This usually accelerates learning. Some people argue that this can increase + the risk of errors, however. + +

+
Features + + 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. + +

+ + Note: For standard "CRM114" Markovian weighting, use sbph + +

+ + + + + + + + + ""): ?> + + + + + + + + + + + + + + +
+ + +   + + + + + + +
')">
+
+ + + + +
+
+
Algorithms + + Specify the statistical algorithms to use, overriding any + defaults configured in the build. + +

+ + The options are: +

+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
+                        
+ +

+

+ + 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. +

+

+ + NOTE: For standard "CRM114" Markovian weighting, use ‘naive’, or consider + using ‘burton’ for slightly better accuracy. + +

+

+ + Don't mess with this unless you know what you're doing + +

+ + + + + + + + + ""): ?> + + + + + + + + + + + + + + +
+ + +   + + + + + + +
')">
+
+ + + + +
+
+
PValue + + + Specify the technique used for calculating PValues, overriding any defaults + configured in the build. + +

+ + These options are: +

+graham      Graham's Technique ("A Plan for Spam")
+robinson    Robinson's Technique
+markov      Markovian Weighted Technique
+                        
+ +

+

+ + Unlike algorithms, you may only have one of these defined. Use of the + chi-square algorithm automatically changes this to robinson. + +

+

+ + Don't mess with this unless you know what you're doing. + +

+
Improbability Drive + /> + + Calculate odds-ratios for ham/spam, and add to X-DSPAM-Improbability headers + +
Preferences + + Specify any preferences to set by default, unless otherwise + overridden by the user (see next section) or a default.prefs file. + +

+ + Note: If user or default.prefs are found, the user's + preferences will override any defaults. + +

+ + + + + + + + + ""): ?> + + + + + + + + + + + + + + +
+ + +   + + + + + + +
')">
+
+ + + + +
+
+
Overrides + + Specifies the user preferences which may override + configuration and commandline defaults. + +

+ + Note: Any other preferences supplied by an untrusted user will be ignored. + +

+ + + + + + + + + ""): ?> + + + + + + + + + + + + + + +
+ + +   + + + + + + +
')">
+
+ + + + +
+
+
  + + " onclick="document.iform.sectionid.value = 'eng';" /> +
 
 LDAP Settings + onClick="enable_change(false, 1);" /> + Enable +
LDAP Mode + + + Perform various LDAP functions depending on LDAPMode variable. + +

+ + 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. + +

+
LDAP Host + name="ldaphost" id="ldaphost" value="" /> + + Hostname of the LDAP directory server. + +
LDAP Filter + name="ldapfilter" id="ldapfilter" value="" /> + + A specific query filter, that should be used while querying the LDAP server. + +
LDAP Base + name="ldapbase" id="ldapbase" value="" /> + + A particular distinguish name from where to start LDAP queries. + +
  + + " onclick="document.iform.sectionid.value = 'ldap';" /> +
 
 Miscellaneous Settings
Failover Attempts + name="foatt" id="foatt" value="" /> + + A particular number of attempts. + +

+ + 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). + +

+
Ignore Headers +

+ + 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. + +

+ + + + + + + + + ""): ?> + + + + + + + + + + + + + + +
+ + +   + + + + + + +
')">
+
+ + + + +
+
+
SBL Lookup +

+ onClick="enable_change(false, 2);" /> + + Enable checks against a particular SBL host. + +

+

+ name="sblhost" id="sblhost" value="" /> + + A particular SBL hostname. + +

+

+ + Perform lookups on streamlined blackhole list servers (see + http://www.nuclearelephant.com/projects/sbl/). + 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. + +

+

+ + 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. + +

+
RBL Inoculate + /> + + Enable RBL inoculation support. + +
Enable Notification + onClick="enable_change(false, 2);" /> + + Enable the sending of notification emails to users (first message, quarantine full, etc.) + +
DSPAM Support Contact + name="dspamcontact" id="dspamcontact" value="" /> + + The username of the person who provides DSPAM support for this DSPAM installation + +  (This is the left most part of an email address before the @ sign). +
Email Domain Name + onClick="toggleDSPAMDomain(false, this);" /> + + Use global domain settings while trying to send an email message. + +
  + + " onclick="document.iform.sectionid.value = 'misc';" /> +
 
 Maintainance Settings
  +

+ + Set dspam_clean purge default options, if not + otherwise specified on the commandline. You may set some of + the below values to off, for instance if you are + using a SQL-based database backend for DSPAM. Please consult your + DSPAM manual for any details. + +

+
Purge Signatures + name="psig" id="psig" value="" /> + + Purge stale signatures + +
Purge Neutral + name="pneut" id="pneut" value="" /> + + Purge tokens with neutralish probabilities + +
Purge Unused + name="punu" id="punu" value="" /> + + Purge unused tokens + +
Purge Hapaxes + name="phapa" id="phapa" value="" /> + + Purge tokens with less than 5 hits (hapaxes) + +
Purge Hits 1S + name="pones" id="pones" value="" /> + + Purge tokens with only 1 spam hit + +
Purge Hits 1I + name="ponei" id="ponei" value="" /> + + Purge tokens with only 1 innocent hit + +
  + + " onclick="document.iform.sectionid.value = 'main';" /> +
 
 System Settings
Local MX + name="locmx" id="locmx" value="" /> + + 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. + +
  + + Disabling logging for users will make usage graphs unavailable to + them. Disabling system logging will make admin graphs unavailable. + +
Enable System Log + /> + + Enable system logging. + +
Enable User Log + /> + + Enable user logging. + +
Opt Settings + +

+ + 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 + /var/dspam/opt-in/user.dspam (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 .nodspam file is dropped in + /var/dspam/opt-out/user.nodspam + +

+
  + + 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.. + +
Parse To Headers + /> + + Parse the To: headers of an incoming message. + +

+ + This must be set to ‘on’ to use either of the following features. + +

+
Change Mode On Parse + /> + + Automatically change the class (to spam or innocent). + +

+ + This depends on whether spam- or notspam- was specified, and change + the source to ‘error’. This is convenient if you're not + using aliases at all, but are delivering via LMTP. + +

+
Change User On Parse + /> + + Automatically change the username to match that specified in the To: header. + +

+ + For example, spam-bob@domain.tld 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}-. + +

+
Broken MTA Settings + /> + + Enable broken MTA settings. + +

+ + Broken MTA Options: Some MTAs don't support the proper functionality + necessary. In these cases you can activate certain features in DSPAM to + compensate. ‘returnCodes’ 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 ‘case’ causes DSPAM to force the input usernames to lowercase. + Spceifying ‘lineStripping’ causes DSPAM to strip ˆM's from messages passed + +

+ + + + + + + + + ""): ?> + + + + + + + + + + + + + + +
+ + +   + + + + + + +
')">
+
+ + + + +
+
+
Max Message Size + name="maxmsgs" id="maxmsgs" value="" /> + + You may specify a maximum message size for DSPAM to process. + +

+ + If the message is larger than the maximum size, it will be delivered + without processing. Value is in bytes. + +

+
Processor Bias + /> + + Bias causes the filter to lean more toward ‘innocent’, and + usually greatly reduces false positives. It is the default behavior of + most Bayesian filters (including dspam). + +

+ + Note: You probably DONT want this if you're using Markovian Weighting, + unless you are paranoid about false positives. + +

+
  + + " onclick="document.iform.sectionid.value = 'sys';" /> +
 
 ClamAV Engine Settings + onClick="enable_change(false, 3);" /> + Enable +
  +

+ + If you are running clamd, DSPAM can perform stream-based + virus checking using TCP. Uncomment the values below to enable virus + checking. + +

+

+ + ClamAVResponse: +

+
reject
+
(reject or drop the message with a permanent failure)
+
accept
+
(accept the message and quietly drop the message)
+
spam
+
(treat as spam and quarantine/tag/whatever)
+
+ +

+
ClamAV Port +

+ name="clamport" id="clamport" value="" /> + + A number that specifies the port the ClamAV daemon is listening to. + +

+

+ + If the message is larger than the maximum size, it will be delivered + without processing. Value is in bytes. + +

+
ClamAV Host + name="clamhost" id="clamhost" value="" /> + + An IP address that points to the host the ClamAV daemon is running on. + +
ClamAV Response + + + The action that should take place, if ClamAV reports a positive. + +
  + + " onclick="document.iform.sectionid.value = 'clam';" /> +
 
 DSPAM Daemon Settings (Server)
  + + If you are running DSPAM as a daemonized server using + --daemon, 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 --stdout option in conjunction with a local setup. + +
Server Port +

+ name="dsport" id="dsport" value="" /> + + A number that specifies the port the DSPAM daemon is listening to. + +

+
Server Queue Size +

+ name="dsqsize" id="dsqsize" value="" /> + + A number that specifies the server's queue size. + +

+
Server PID +

+ name="dspid" id="dspid" value="" /> + + Keep this is sync with /usr/local/etc/rc.d/dspam.rc script. + +

+

+ + Note: Don't change this value unless you know what you are doing. + +

+
Server Mode +

+ + + Specifies the type of LMTP server to start. + +

+ + This can be one of: +

+
dspam
+
DSPAM-proprietary DLMTP server, for communicating with dspamc
+
standard
+
Standard LMTP server, for communicating with Postfix or other MTA
+
auto
+
Speak both DLMTP and LMTP; auto-detect by ServerPass.IDENT
+
+ +

+

+
  +

+ + 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). + +

+ + + + + + + + + ""): ?> + + + + + + + + + + + + + + +
+ + +   + + + + + + +
')">
+
+ + + + +
+
+
+

+ + 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. + +

+

+ + Note: If you specify --user in ServerParameters, the RCPT TO will be used + only for delivery, and not set as the active user for processing. + +

+
Server Parameters +

+ + + Parameters which will be passed to the LMTP server. + +

+
Server Ident +

+ name="serverid" id="serverid" value="" /> + + An identification string which will be used to be passed to the LMTP server. + +

+
Server Domain Socket Path +

+ name="serversock" id="serversock" value="" /> + + A local Unix domain socket. + +

+

+ + 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. + +

+

+ + Keep this is sync with /usr/local/etc/rd.d/dspam.rc script + +

+
  + + " onclick="document.iform.sectionid.value = 'srv';" /> +
 
 DSPAM Daemon Settings (Client) + onClick="enable_change(false, 4);" /> + Enable +
  +

+ + If you are running DSPAM in client/server mode, uncomment and + set these variables. A ClientHost beginning with a / + will be treated as a domain socket. + +

Client Host +

+ name="dsclhost" id="dsclhost" value="" /> + + A IP address or a Unix domain socket. + +

+
Client Port +

+ name="dsclport" id="dsclport" value="" /> + + Will be only used if this client uses TCP/IP communication. + +

+
Client Ident +

+ name="dsclident" id="dsclident" value="" /> + + A string that will be used to identify the client against a server. + +

+
  + + " onclick="document.iform.sectionid.value = 'cli';" /> +
+
+
+
+
+
+ + +getHTML(); +?> + + + + + + + + +
Access denied for:
+ + + + \ 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 @@ + + + +EOD; + + $pfSenseHead->addScript($jscriptstr); +echo $pfSenseHead->getHTML(); + +?> + + + +
+ + + + + + + + + + +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Statistical SPAM Protection for...
Username + + /> + + + +   + + /> +
 
Archive Type + + +  Mailbox format (like it is used for example by Mozilla Thunderbird) +
+ + +  Maildir format (like it was initially introduced by qmail) +

+ + : + +
+ +
+

+
Compression Type + +  Archive was compressed using a ZIP algorithm. +
+ +  Archive was compressed using a GNU ZIP algorithm. +
+ +  Archive was compressed using a bzip2 algorithm +
+
Message Type + +  Archive to be uploaded contains Spam messages. +
+ +  Archive to be uploaded contains Ham messages. +
+
  +

+ +

+

+ +

+

+ " /> +

+

+ + : + +
+ +
+

+
+
+
+
+ + + + \ 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 @@ + + + +EOD; + + $pfSenseHead->addScript($jscriptstr); +echo $pfSenseHead->getHTML(); + +?> + + + +
+ + + + + + + +

+ + The contents of the message in the quarantine is shown below. + +

+ + + + + + + +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Statistical SPAM Protection for...
Username + + /> + + + +   + + /> +
 
+ + +
 
Mail Message
+ +
Mail Message
+ +
+
+
+
+ + + + \ 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 @@ + + + +EOD; + + $pfSenseHead->addScript($jscriptstr); +echo $pfSenseHead->getHTML(); + +?> + + + +
+ + + + + + + + + + +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Statistical SPAM Protection for...
Username + + /> + + + +   + + /> +
 
DSPAM Version
DSPAM Copyright
DSPAM Copyright Text
DSPAM Website + +
DSPAM Configure Args + +
 
License User
Company
License Key
License Validity + + +  Renew License + +
Purchase Date
Expiry Date
Ni-ONE Website + http://www.niefert.net/nione.php +
Support Request + Issue a support request +
Ni-ONE Customer Forum + Visit Ni-ONE Customer Forum +
License File (nione.lic) + +
License Checksum (nione.lic.sha1) + +
License Disclaimer +

+ 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. +

+

+ The Ni-ONE license provides 1st 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 expired, you may consider to purchase a renewal license + option using the renew license button that will be provided by the web + interface in such circumstances. +

+
  + " /> +

+ + : + +
+ +
+

+
+
+
+
+ + + + \ 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 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 Binary files /dev/null and b/packages/dspam/www/wizards/dspam-lda-proxy.png 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 Binary files /dev/null and b/packages/dspam/www/wizards/dspam-pop-proxy.png 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 Binary files /dev/null and b/packages/dspam/www/wizards/dspam-smtp-relay.png 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 @@ + + + + +/* + dspam_wizard.xml + part of pfSense (http://www.pfsense.org/) + + Copyright (C) 2006 Daniel S. Haischt + All rights reserved. +*/ + +15 +Services: DSPAM: DSPAM Wizard + + 1 + dspam.inc + DSPAM Setup Wizard + true + This wizard will guide you through the initial configuration of the DSPAM filter. + + + Next + submit + + + + + 2 + dspam.inc + DSPAM Profile Selection + true + 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. + + + dspamprofile + radio + installedpackages->dspam->config->0->dspam-profile + + <center> + <p> +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. + </p> + <p> +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.. + </p> + </center> + + lda + + <center><img src="/wizards/dspam-lda-proxy.png" alt="DSPAM acts as a LDA proxy" border="0" /></center> + + + dspamprofile + radio + installedpackages->dspam->config->0->dspam-profile + + <center> +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). + </center> + + pop + + <center><img src="/wizards/dspam-pop-proxy.png" alt="DSPAM will be invoked by a POP3 proxy" border="0" /></center> + + + dspamprofile + radio + installedpackages->dspam->config->0->dspam-profile + + <center> +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. + </center> + + smtp + + <center><img src="/wizards/dspam-smtp-relay.png" alt="DSPAM acts as a SMTP realy" border="0" /></center> + + + Next + submit + + + + 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(); + } + + + + 3 + dspam.inc + Database Settings + + 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. + + + + storagedriver + select + installedpackages->dspam->config->0->storage-driver + Specifies the storage driver backend (library) to use. + mysql + toggleDBSettings(); + 1 + + + + + + + + + + + msqlserver + input + installedpackages->dspam->config->0->dbsettings->0->mysql-server + Either a reference to a Unix domain socket or a reference to a specific host. + /tmp/mysql.sock + ^[a-z0-9.|/]+$ + Server name field is invalid + + + + msqlport + input + installedpackages->dspam->config->0->dbsettings->0->mysql-port + Use this variable if you are going to a MySQL server instance using TCP/IP instead of a socket connection. + 3306 + ^[0-9]+$ + Port field is invalid + + + + msqluser + input + installedpackages->dspam->config->0->dbsettings->0->mysql-user + Username, that will be used to connect to a MySQL server instance. + dspam + + + + msqlpwd + input + installedpackages->dspam->config->0->dbsettings->0->mysql-password + Password, that will be used to connect to a MySQL server instance. + dspam + + + + msqldb + input + installedpackages->dspam->config->0->dbsettings->0->mysql-database + Database name, that contains DSPAM data. + dspam + + + + msqlcomp + checkbox + installedpackages->dspam->config->0->dbsettings->0->mysql-compress + Indicates whether communication data between DSPAM and MySQL should be compressed. + on + + + msqlsuqt + checkbox + installedpackages->dspam->config->0->dbsettings->0->mysql-squote + Use this if you have the 4.1 quote bug (see doc/mysql.txt). + + + msqlccache + input + installedpackages->dspam->config->0->dbsettings->0->mysql-ccache + Conection cache default set to 10. + 10 + ^[0-9]+$ + Connection cache field is invalid + + + + msqluid + checkbox + installedpackages->dspam->config->0->dbsettings->0->mysql-uid + Insert user id into the DSPAM signature. + on + + + slitepr + input + installedpackages->dspam->config->0->dbsettings->0->sqlite-pragma + A particular SQLite pragma command to be used. + + + pgserver + input + installedpackages->dspam->config->0->dbsettings->0->pgsql-server + A reference to a specific host that is running a PostgreSQL instance. + 127.0.0.1 + ^[a-z0-9.|-]+$ + Server name field is invalid + + + + pgport + input + installedpackages->dspam->config->0->dbsettings->0->pgsql-port + A number that represents the port a specific PostgreSQL instance is listening to. + 5432 + ^[0-9]+$ + Port field is invalid + + + + pguser + input + installedpackages->dspam->config->0->dbsettings->0->pgsql-user + Username, that will be used to connect to a PostgreSQL server instance. + dspam + + + + pgpwd + input + installedpackages->dspam->config->0->dbsettings->0->pgsql-password + Password, that will be used to connect to a PostgreSQL server instance. + dspam + + + + pgdb + input + installedpackages->dspam->config->0->dbsettings->0->pgsql-database + Database name, that contains DSPAM data. + dspam + + + + pgccache + input + installedpackages->dspam->config->0->dbsettings->0->pgsql-ccache + Conection cache default set to 3. + 3 + ^[0-9]+$ + Connection cache field is invalid + + + + pguid + checkbox + installedpackages->dspam->config->0->dbsettings->0->pgsql-uid + Insert user id into the DSPAM signature. + on + + + oraserver + input + installedpackages->dspam->config->0->dbsettings->0->ora-server + A reference to a specific host that is running an Oracle database instance. + 50 + "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))(CONNECT_DATA=(SID=PROD)))" + + + + orauser + input + installedpackages->dspam->config->0->dbsettings->0->ora-user + Username, that will be used to connect to a Oracle database server instance. + dspam + + + + orapwd + input + installedpackages->dspam->config->0->dbsettings->0->ora-password + Password, that will be used to connect to a Oracle database server instance. + dspam + + + + orasch + input + installedpackages->dspam->config->0->dbsettings->0->ora-schema + Schema name, that contains DSPAM data. + dspam + + + + hsrmax + input + installedpackages->dspam->config->0->dbsettings->0->hash-rec-max + Default number of records to create in the initial segment when building hash files. + 98317 + ^[0-9]+$ + Default number of record field is invalid + + + + hsatex + checkbox + installedpackages->dspam->config->0->dbsettings->0->hash-auto-ex + Autoextend hash databases when they fill up. This allows them to continue to train by adding extents (extensions) to the file. + on + + + + hsmxex + input + installedpackages->dspam->config->0->dbsettings->0->hash-max-ext + The maximum number of extents that may be created in a single hash file. + 0 + ^[0-9]+$ + Default number of record field is invalid + + + + hsexsz + input + installedpackages->dspam->config->0->dbsettings->0->hash-ext-size + The record size for newly created extents. + 49157 + ^[0-9]+$ + Default number of record field is invalid + + + + hsmxse + input + installedpackages->dspam->config->0->dbsettings->0->hash-max-seek + The maximum number of records to seek to insert a new record before failing or adding a new extent. + 100 + ^[0-9]+$ + Default number of record field is invalid + + + + hsccus + input + installedpackages->dspam->config->0->dbsettings->0->hash-co-user + 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. + user + + + + hscoca + input + installedpackages->dspam->config->0->dbsettings->0->hash-co-cache + If running in daemon mode, this is the max # of concurrent connections that will be supported. + 10 + ^[0-9]+$ + Default number of record field is invalid + + + + Next + submit + + + + 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']); + } + + + 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); + + + + 4 + dspam.inc + Delivery Settings + + 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. + + + + dagent + Specifies the local delivery agent DSPAM should call when delivering mail as a trusted user. + select + + + + + + + + + installedpackages->dspam->config->0->tdelivery-agent + + + true + dspamc + Use <code>dspamc</code> instead of <code>dspam</code> to locally deliver mails from the MTA to the user's mailbox (this pulls in DSPAM client/server settings). + checkbox + + + true + tcpipdel + Use TCP/IP based delivery. This option needs to be ticked if you are going to deliver via LMTP or SMTP. + checkbox + installedpackages->dspam->config->0->tcpip-delivery + dhost,dport,dident,delproto + + + dhost + input + false + installedpackages->dspam->config->0->tcpip-delivery-host + Alternatively, you may wish to use SMTP or LMTP delivery to deliver your message to the mail server. + ^[a-z0-9.|-]+$ + Host name field is invalid + + + dport + input + installedpackages->dspam->config->0->tcpip-delivery-port + Port number of a particular host. + ^[0-9]+$ + Port field is invalid + + + dident + input + installedpackages->dspam->config->0->tcpip-delivery-ident + A particular identification string. + + + delproto + A particular protocol typ. Either SMTP or LMTP. + select + + + + + installedpackages->dspam->config->0->tcpip-delivery-proto + + + onfail + What to do if local delivery or quarantine should fail. + select + + + + + installedpackages->dspam->config->0->delivery-onfail + + + Next + submit + + + + 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(); + } + + + + 5 + dspam.inc + DSPAM Debugging Options + + 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. + + + + true + enabledbg + Enable debugging. + checkbox + installedpackages->dspam->config->0->debug-enable + debug,dopt + + + debug + input + installedpackages->dspam->config->0->debug-whom + Enables debugging for some or all users. + + + dopt + input + installedpackages->dspam->config->0->debug-options + One or more of: process, classify, spam, fp, inoculation, corpus + + + Next + submit + + + + + 6 + dspam.inc + DSPAM Engine Settings + + On this page you will find some specific options required to operate the DSPAM engine. Please + consult your <code>dspam.conf</code> for a detailed explanation of each option. + If you are unsure about the meaning of a particular option, please use the default values. + + + + tmode + + 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). + + select + teft + + + + + + + installedpackages->dspam->config->0->training-mode + + + true + testct + on + + By default, dspam will retrain certain errors until the condition is + no longer met (default: enabled). + + checkbox + installedpackages->dspam->config->0->test-cond-training + + + pvalue + + Specify the technique used for calculating PValues, overriding any + defaults configured in the build (default: graham). + + select + teft + + + + + + installedpackages->dspam->config->0->pvalue + + + true + ipdrive + on + + Calculate odds-ratios for ham/spam, and add to X-DSPAM-Improbability + headers (default: disabled). + + checkbox + installedpackages->dspam->config->0->improbability-drive + + + Next + submit + + + + + 7 + dspam.inc + LDAP Settings + + 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. + + + + true + enableldap + Enable checks against a LDAP directory. + checkbox + installedpackages->dspam->config->0->ldap-enable + ldapmode,ldaphost,ldapfilter,ldapbase + + + ldapmode + + Perform various LDAP functions depending on LDAPMode variable. + + select + verify + + + + installedpackages->dspam->config->0->ldap-mode + + + ldaphost + input + installedpackages->dspam->config->0->ldap-host + Hostname of the LDAP directory server. + + + ldapfilter + input + installedpackages->dspam->config->0->ldap-filter + A specific query filter, that should be used while querying the LDAP server. + + + ldapbase + input + installedpackages->dspam->config->0->ldap-base + A particular distinguish name from where to start LDAP queries. + + + Next + submit + + + + + 8 + dspam.inc + Miscellaneous Settings + + 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. + + + + foatt + input + installedpackages->dspam->config->0->failover-attempts + A particular number of attempts (default: 1). + + + true + enablesbl + Enable checks against a particular SBL host (default: disabled). + checkbox + installedpackages->dspam->config->0->sbl-enable + sblhost + + + sblhost + input + installedpackages->dspam->config->0->sbl-host + A particular SBL hostname (default: none). + 30 + + + true + enablerbl + Enable RBL inoculation support (default: disabled). + checkbox + installedpackages->dspam->config->0->rbl-inoculate + + + true + enablenoti + Enable the sending of notification emails to users (first message, quarantine full, etc. default: disabled). + checkbox + installedpackages->dspam->config->0->notification-email + + + Next + submit + + + + + 9 + dspam.inc + Maintainance Settings + + 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. + + + + psig + input + installedpackages->dspam->config->0->purge-signatures + Purge stale signatures (default: 14). + + + pneut + input + installedpackages->dspam->config->0->purge-neutral + Purge tokens with neutralish probabilities (default: 90). + + + punu + input + installedpackages->dspam->config->0->purge-unused + Purge unused tokens (default: 90). + + + phapa + input + installedpackages->dspam->config->0->purge-hapaxes + Purge tokens with less than 5 hits (hapaxes - default: 30). + + + pones + input + installedpackages->dspam->config->0->purge-hits-1s + Purge tokens with only 1 spam hit (default: 15). + + + ponei + input + installedpackages->dspam->config->0->purge-hits-1i + Purge tokens with only 1 innocent hit (default: 15). + + + Next + submit + + + + + 10 + dspam.inc + System Settings + + This page contains additional settings related to the DSPAM system such as logging, + message processing behaviour et cetera. + + + + locmx + input + installedpackages->dspam->config->0->local-mx + + 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). + + + + true + enablesysl + Enable system logging (default: enabled). + checkbox + installedpackages->dspam->config->0->system-log + + + true + enableusel + Enable per user logging (default: enabled). + checkbox + installedpackages->dspam->config->0->user-log + + + optinout + + Opt: in or out; determines DSPAM's default filtering behavior (default: out). + + select + out + + + + + installedpackages->dspam->config->0->filter-opt + + + true + enableptoh + Parse the To: headers of an incoming message. (default: disabled). + checkbox + installedpackages->dspam->config->0->parse-to-headers + + + true + enablecmop + Automatically change the class (to spam or innocent - default: disabled). + checkbox + installedpackages->dspam->config->0->change-mode-on-parse + + + true + enablecuop + Automatically change the username to match that specified in the To: header (default: enabled). + checkbox + installedpackages->dspam->config->0->change-user-on-parse + + + maxmsgs + input + installedpackages->dspam->config->0->max-message-size + + You may specify a maximum message size in bytes for DSPAM to process. (default: 307200). + + + + true + procbias + + Bias causes the filter to lean more toward "innocent", and usually + greatly reduces false positives. It is the default behavior of most + Bayesian filters, including dspam (default: enabled). + + checkbox + installedpackages->dspam->config->0->processor-bias + + + Next + submit + + + + + 11 + dspam.inc + ClamAV Engine Settings + + 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. + + + + true + enableclam + Enable ClamAV Engine (default: disabled). + checkbox + installedpackages->dspam->config->0->clamav-enable + clamport,clamhost,clamresp + + + clamport + input + installedpackages->dspam->config->0->clamav-port + A number that specifies the port the ClamAV daemon is listening to (default: none). + + + clamhost + input + installedpackages->dspam->config->0->clamav-host + An IP address that points to the host the ClamAV daemon is running on (default: none). + + + clamresp + The action that should take place, if ClamAV reports a positive (default: none). + select + accept + + + + + + installedpackages->dspam->config->0->clamav-response + + + Next + submit + + + + + 12 + dspam.inc + DSPAM Daemon Settings (Server) + + 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. + + + + dsport + input + installedpackages->dspam->config->0->dspam-server-port + A number that specifies the port the DSPAM daemon is listening to (default: none). + + + dsqsize + input + installedpackages->dspam->config->0->dspam-server-queue-size + A number that specifies the server's queue size (default: none). + + + dspid + input + installedpackages->dspam->config->0->dspam-server-pid + Keep this is sync with <code>/usr/local/etc/rc.d/dspam.rc</code> script (default: none). + 40 + + + dssmode + Specifies the type of LMTP server to start. (default: none). + select + auto + + + + + + installedpackages->dspam->config->0->dspam-server-mode + + + serverparam + input + installedpackages->dspam->config->0->dspam-server-params + Parameters which will be passed to the LMTP server (default: none). + + + serverid + input + installedpackages->dspam->config->0->dspam-server-id + An identification string which will be used to be passed to the LMTP server (default: none). + + + serversock + input + installedpackages->dspam->config->0->dspam-server-socket + A local Unix domain socket (default: none). + 40 + + + Next + submit + + + + + 13 + dspam.inc + DSPAM Daemon Settings (Client) + + 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. + + + + true + enabledsclient + Run DSPAM in client mode (default: disabled). + checkbox + installedpackages->dspam->config->0->dspam-client-enable + dsclhost,dsclport,dsclident + + + dsclhost + input + installedpackages->dspam->config->0->dspam-client-host + An IP address or a Unix domain socket (default: none). + + + dsclport + input + installedpackages->dspam->config->0->dspam-client-port + Will be only used if this client uses TCP/IP communication (default: none). + + + dsclident + input + installedpackages->dspam->config->0->dspam-client-id + A string that will be used to identify the client against a server. (default: none). + 40 + + + Next + submit + + + + + 14 + dspam.inc + Reload configuration + true + Click 'Reload' to reload the DSPAM daemon with new changes. + + + Reload + submit + + + + + 15 + dspam.inc + Reload in progress + + A reload is now in progress. Please wait. <p> The system will + automatically try to access DSPAM settings in 120 page seconds. <p> + You can click on the icon above to access the site more quickly. + + + window.setTimeout('window.location.href = "/dspam-settings.php"', 120000); + + + dspam_configure(); + mwexec("/usr/local/etc/rc.d/spamd.sh stop"); + mwexec("/usr/local/etc/rc.d/spamd.sh start"); + + + -- cgit v1.2.3