spam/0040775000567100000120000000000011017163271011503 5ustar jcameronwheelspam/edit_header.cgi0100775000567100000120000001220411017163270014422 0ustar jcameronwheel#!/usr/local/bin/perl # edit_header.cgi # Display extra header and body test require './spam-lib.pl'; &can_use_check("header"); &ui_print_header(undef, $text{'header_title'}, ""); $conf = &get_config(); print "$text{'header_desc'}

\n"; &start_form("save_header.cgi", $text{'header_header'}."\n". "($text{'header_switch'})"); if (!$module_info{'usermin'}) { print " $text{'header_allow'} "; $allow = &find("allow_user_rules", $conf); &yes_no_field("allow_user_rules", $allow, 0); print " \n"; } @header = &find("header", $conf); print " $text{'header_test'} \n"; &edit_table("header", [ $text{'header_tname'}, $text{'header_name'}, $text{'header_op'}, $text{'header_pat'}, $text{'header_default'} ], [ map { [ &split_header($_->{'value'}) ] } @header ], [ ], \&header_conv, 2); print " \n"; print "


\n"; push(@body, map { [ &split_body($_->{'value'}), 0 ] } &find("body", $conf)); push(@body, map { [ &split_body($_->{'value'}), 1 ] } &find("rawbody", $conf)); push(@body, map { [ &split_body($_->{'value'}), 2 ] } &find("fullbody", $conf)); push(@body, map { [ &split_body($_->{'value'}), 3 ] } &find("full", $conf)); print " $text{'header_body'} \n"; &edit_table("body", [ $text{'header_tname'}, $text{'header_mode'}, $text{'header_op'}, $text{'header_pat'} ], \@body, [ ], \&body_conv, 2); print "
\n"; @uri = &find("uri", $conf); print " $text{'header_uri'} \n"; &edit_table("uri", [ $text{'header_tname'}, $text{'header_pat'} ], [ map { $_->{'words'} } @uri ], [ 20, 40 ], undef, 2); print " \n"; print "
\n"; @meta = &find("meta", $conf); print " $text{'header_meta'} \n"; &edit_table("meta", [ $text{'header_tname'}, $text{'header_bool'} ], [ map { $_->{'value'} =~ /^(\S+)\s*(.*)$/ ? [ $1, $2 ] : [ ] } @meta ], [ 20, 40 ], undef, 2); print "
\n"; @score = &find("score", $conf); print " $text{'score_score'} \n"; &edit_table("score", [ $text{'score_name'}, $text{'score_points'} ], [ map { $_->{'words'} } @score ], [ 30, 6 ]); print " \n"; @describe = &find("describe", $conf); print " $text{'score_describe'} \n"; &edit_table("describe", [ $text{'score_name'}, $text{'score_descr'} ], [ map { $_->{'value'} =~ /^(\S+)\s*(.*)/ ? [ $1, $2 ] : [ ] } @describe ], [ 30, 40 ]); print " \n"; &end_form(undef, $text{'save'}); &ui_print_footer("", $text{'index_return'}); # header_conv(col, name, size, value, &values) sub header_conv { if ($_[0] == 0) { return sprintf "", &html_escape($_[3]); } elsif ($_[0] == 1) { local $h = $_[3] =~ /^exists:(\S+)$/ ? $1 : $_[3] =~ /^eval:/ ? "" : $_[3]; return sprintf "", &html_escape($h); } elsif ($_[0] == 2) { local $rv = "\n"; return $rv; } elsif ($_[0] == 3) { return sprintf "", &html_escape($_[4]->[1] =~ /^eval:(.*)/ ? $1 : $_[3]); } elsif ($_[0] == 4) { return sprintf "", &html_escape($_[3]); } } # body_conv(col, name, size, value, &values) sub body_conv { if ($_[0] == 0) { return sprintf "", &html_escape($_[4]->[0]); } elsif ($_[0] == 1) { local $rv = "\n"; return $rv; } elsif ($_[0] == 2) { local $rv = "\n"; return $rv; } elsif ($_[0] == 3) { return sprintf "", &html_escape($_[4]->[1] =~ /^eval:(.*)$/ ? $1 : $_[4]->[1]); } } sub split_header { if ($_[0] =~ /^(\S+)\s+(eval:\S+\(.*\))/) { return ($1, $2); } elsif ($_[0] =~ /^(\S+)\s+(\S+)\s+(\S+)\s+(\/.*\/\S*)\s*(if-unset:\s*(.*))?/) { return ($1, $2, $3, $4, $6); } else { return ( ); } } sub split_body { if ($_[0] =~ /^(\S+)\s+((\/.*\/\S*)|(eval:\S+\(.*\)))/) { return ($1, $2); } else { return ( ); } } spam/edit_procmail.cgi0100775000567100000120000000460511017163270015006 0ustar jcameronwheel#!/usr/local/bin/perl # Allow changing of the rule for delivering spam require './spam-lib.pl'; &can_use_check("procmail"); &ui_print_header(undef, $text{'procmail_title'}, ""); print &text('procmail_desc', "$pmrc"),"

\n"; # Find the existing recipe &foreign_require("procmail", "procmail-lib.pl"); @pmrcs = &get_procmailrc(); $pmrc = $pmrcs[$#pmrcs]; @recipes = &procmail::parse_procmail_file($pmrc); $spamrec = &find_file_recipe(\@recipes); if (!$spamrec) { $mode = 4; } elsif ($spamrec->{'action'} eq "\$DEFAULT") { $mode = 4; } elsif ($spamrec->{'action'} eq "/dev/null") { $mode = 0; } elsif ($spamrec->{'action'} =~ /^(.*)\/$/) { $mode = 2; $file = $1; } elsif ($spamrec->{'action'} =~ /^(.*)\/\.$/) { $mode = 3; $file = $1; } elsif ($spamrec->{'type'} eq '!') { $mode = 5; $email = $spamrec->{'action'}; } else { $mode = 1; $file = $spamrec->{'action'}; } print "

\n"; print "\n"; # Spam destination inputs print "\n"; printf "\n", $mode == 0 ? "checked" : "", $text{'setup_null'}; printf "\n", $mode == 4 ? "checked" : "", $text{'setup_default'}; printf "\n", $mode == 1 ? "checked" : "", $text{'setup_file'}; printf "\n", $mode == 1 ? $file : undef; printf "\n", $mode == 2 ? "checked" : "", $text{'setup_maildir'}; printf "\n", $mode == 2 ? $file : undef; printf "\n", $mode == 3 ? "checked" : "", $text{'setup_mhdir'}; printf "\n", $mode == 3 ? $file : undef; printf "\n", $mode == 5 ? "checked" : "", $text{'setup_email'}; printf "\n", $mode == 5 ? $email : undef; print "
$text{'setup_to'} %s
%s
%s
%s
%s
%s

\n"; if ($module_info{'usermin'}) { print "$text{'setup_rel'}

\n"; } else { print "$text{'setup_home'}

\n"; } print "$text{'setup_head'}

\n"; print "

\n"; &ui_print_footer("", $text{'index_return'}); spam/edit_report.cgi0100775000567100000120000001112011017163270014501 0ustar jcameronwheel#!/usr/local/bin/perl # edit_report.cgi # Display a form for editing the spam report text require './spam-lib.pl'; &can_use_check("report"); &ui_print_header(undef, $text{'report_title'}, ""); $conf = &get_config(); print "$text{'report_desc'}

\n"; &start_form("save_report.cgi", $text{'report_header'}); if (&version_atleast(3.0)) { # New version can replace subject, from and to headers @rheader = &find("rewrite_header", $conf); foreach $h ("subject", "from", "to") { print " ",$text{'report_r'.$h}, " "; ($hn) = grep { lc($_->{'words'}->[0]) eq $h } @rheader; &opt_field("rewrite_header_${h}", $hn ? join(" ", @{$hn->{'words'}}[1..@{$hn->{'words'}}-1]) : undef, 15); } } else { # Older versions can only replace subject header print " $text{'report_rewrite'} "; $rewrite = &find("rewrite_subject", $conf); &yes_no_field("rewrite_subject", $rewrite, 1); print " \n"; print " $text{'report_subject'} "; $subject = &find("subject_tag", $conf); &opt_field("subject_tag", $subject, 15, "*****SPAM*****"); print " \n"; } print " $text{'report_rheader'} "; $header = &find("report_header", $conf); &yes_no_field("report_header", $header, 0); print " \n"; print " $text{'report_useterse'} "; $terse = &find("use_terse_report", $conf); &yes_no_field("use_terse_report", $terse, 0); print " \n"; print " $text{'report_fold'} "; $fold = &find("fold_headers", $conf); &yes_no_field("fold_headers", $fold, 1); print " \n"; print " $text{'report_detail'} "; $detail = &find("detailed_phrase_score", $conf); &yes_no_field("detailed_phrase_score", $detail, 0); print " \n"; if (!&version_atleast(3.0)) { print " $text{'report_stars'} "; $stars = &find("spam_level_stars", $conf); &yes_no_field("spam_level_stars", $stars, 1); print " \n"; } print " $text{'report_char'} "; $char = &find("spam_level_char", $conf); &opt_field("spam_level_char", $char, 2, "*"); print " \n"; print " $text{'report_defang'} "; $defang = &find("defang_mime", $conf); &yes_no_field("defang_mime", $defang, 1); print " \n"; if (&version_atleast(2.6)) { print " $text{'report_safe'} "; $safe = &find("report_safe", $conf); #&yes_no_field("report_safe", $safe, 0); &option_field("report_safe", $safe, 1, [ [ 0, $text{'no'} ], [ 1, $text{'yes'} ], [ 2, $text{'report_safe2'} ] ]); print " \n"; } if (&version_atleast(3)) { print "


\n"; print " $text{'report_adds'} \n"; print " \n"; print &ui_columns_start([ $text{'report_addfor'}, $text{'report_addheader'}, $text{'report_addtext'} ]); $i = 0; foreach $a (&find_value("add_header", $conf), undef) { local ($for, $header, $text) = split(/\s+/, $a, 3); print &ui_columns_row([ &ui_select("addfor_$i", $for, [ [ "", " " ], map { [ $_, $text{'report_add'.$_} ] } ( "spam", "ham", "all" ) ]), &ui_textbox("addheader_$i", $header, 30), &ui_textbox("addtext_$i", $text, 50) ]); $i++; } print &ui_columns_end(); print " \n"; } print "
\n"; @report = &find_value("report", $conf); $clear = &find("clear_report_template", $conf); print " $text{'report_report'} \n"; printf " %s\n", $clear ? "" : "checked", $text{'report_noclear'}; printf " %s
\n", $clear ? "checked" : "", $text{'report_clear'}; print " \n"; @report = &find_value("terse_report", $conf); $clear = &find("clear_terse_report_template", $conf); print " $text{'report_terse'} \n"; printf " %s\n", $clear ? "" : "checked", $text{'report_noclear'}; printf " %s
\n", $clear ? "checked" : "", $text{'report_clear'}; print " \n"; print "\n"; &end_form(undef, $text{'save'}); &ui_print_footer("", $text{'index_return'}); spam/edit_score.cgi0100775000567100000120000000727611017163270014322 0ustar jcameronwheel#!/usr/local/bin/perl # edit_score.cgi # Display a form for editing spam scoring options require './spam-lib.pl'; &can_use_check("score"); &ui_print_header(undef, $text{'score_title'}, ""); $conf = &get_config(); print "$text{'score_desc'}

\n"; &start_form("save_score.cgi", $text{'score_header'}); $hits_param = &version_atleast(3.0) ? "required_score" : "required_hits"; print " $text{'score_hits'} "; $hits = &find($hits_param, $conf); &opt_field($hits_param, $hits, 5, "5"); print " \n"; print " $text{'score_auto'} "; $auto = &find("auto_whitelist_factor", $conf); &opt_field("auto_whitelist_factor", $auto, 5, "0.5"); print " \n"; print " $text{'score_bayes'} "; $bayes = &find("use_bayes", $conf); &yes_no_field("use_bayes", $bayes, 1); print " \n"; print " $text{'score_mx'} "; $mx = &find("check_mx_attempts", $conf); &opt_field("check_mx_attempts", $mx, 4, "2"); print " \n"; print " $text{'score_mxdelay'} "; $mxdelay = &find("check_mx_delay", $conf); &opt_field("check_mx_delay", $mxdelay, 4, "2"); print " \n"; print " $text{'score_rbl'} "; $rbl = &find("skip_rbl_checks", $conf); &yes_no_field("skip_rbl_checks", $rbl, 0); print " \n"; print " $text{'score_timeout'} "; $timeout = &find("rbl_timeout", $conf); &opt_field("rbl_timeout", $timeout, 5, "30"); print " \n"; print " $text{'score_received'} "; $received = &find("num_check_received", $conf); &opt_field("num_check_received", $received, 5, 2); print " \n"; print "


\n"; @langs = &find_value("ok_languages", $conf); %langs = map { $_, 1 } split(/\s+/, join(" ", @langs)); $lmode = !@langs ? 2 : $langs{'all'} ? 1 : 0; print " $text{'score_langs'} \n"; printf " %s (%s)
\n", $lmode == 2 ? 'checked' : '', $text{'default'}, $text{'score_langsall'}; printf " %s
\n", $lmode == 1 ? 'checked' : '', $text{'score_langsall'}; printf " %s
\n", $lmode == 0 ? 'checked' : '', $text{'score_langssel'}; print " \n"; @locales = &find_value("ok_locales", $conf); %locales = map { $_, 1 } split(/\s+/, join(" ", @locales)); $lmode = !@locales ? 2 : $locales{'all'} ? 1 : 0; print " $text{'score_locales'} \n"; printf " %s (%s)
\n", $lmode == 2 ? 'checked' : '', $text{'default'},$text{'score_localesall'}; printf " %s
\n", $lmode == 1 ? 'checked' : '', $text{'score_localesall'}; printf " %s
\n", $lmode == 0 ? 'checked' : '', $text{'score_localessel'}; print " \n"; &end_form(undef, $text{'save'}); &ui_print_footer("", $text{'index_return'}); spam/edit_setup.cgi0100775000567100000120000000372011017163270014335 0ustar jcameronwheel#!/usr/local/bin/perl # edit_setup.cgi # Display a form for setting up SpamAssassin, either locally or globally require './spam-lib.pl'; &can_use_check("setup"); &ui_print_header(undef, $text{'setup_title'}, ""); &foreign_require("procmail", "procmail-lib.pl"); @pmrcs = &get_procmailrc(); $pmrc = $pmrcs[$#pmrcs]; if ($module_info{'usermin'}) { print &text('setup_desc_usermin', "$pmrc"),"

\n"; } else { print &text('setup_desc_webmin', "$pmrc"),"

\n"; } print "

\n"; print "\n"; # Spam destination inputs print "\n"; print "\n"; print "\n"; print "\n"; printf "\n", $module_info{'usermin'} ? "mail/spam" : "\$HOME/spam"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; # Run mode input if (!$module_info{'usermin'}) { print "\n"; } print "
$text{'setup_to'} $text{'setup_null'}
$text{'setup_default'}
$text{'setup_file'}
$text{'setup_maildir'}
$text{'setup_mhdir'}
$text{'setup_email'}
$text{'setup_drop'} \n"; print " ", "$text{'setup_drop1'}\n"; print " ", "$text{'setup_drop0'}

\n"; if ($module_info{'usermin'}) { print "$text{'setup_rel'}

\n"; } else { print "$text{'setup_home'}

\n"; } print "$text{'setup_head'}

\n"; print "

\n"; &ui_print_footer("", $text{'index_return'}); spam/edit_simple.cgi0100775000567100000120000000260411017163270014466 0ustar jcameronwheel#!/usr/local/bin/perl # Show simple body tests require './spam-lib.pl'; &can_use_check("header"); &ui_print_header(undef, $text{'simple_title'}, ""); $conf = &get_config(); print "$text{'simple_desc'}

\n"; &start_form("save_simple.cgi", $text{'simple_header'}."\n". "($text{'simple_switch'})"); print " \n"; # Find the tests we can handle @simples = &get_simple_tests($conf); print &ui_columns_start([ $text{'simple_name'}, $text{'simple_for'}, $text{'simple_regexp'}, $text{'simple_score'}, $text{'simple_describe'} ], "100"); $i = 0; foreach $s (@simples, { }, { }, { }) { print &ui_columns_row([ &ui_textbox("name_$i", $s->{'name'}, 20), &ui_select("header_$i", $s->{'header'}, [ [ "subject", "Subject: header" ], [ "from", "From: header" ], [ "to", "To: header" ], [ "cc", "Cc: header" ], [ "received", "Received: header" ], [ "uri", "URL in message" ], [ "body", "Message body" ], [ "full", "Un-decoded body" ] ], 0, 0, $s->{'header'} ? 1 : 0), "/".&ui_textbox("regexp_$i", $s->{'regexp'}, 25)."/". &ui_textbox("flags_$i", $s->{'flags'}, 2), &ui_textbox("score_$i", $s->{'score'}, 5), &ui_textbox("describe_$i", $s->{'describe'}, 30) ]); $i++; } print &ui_columns_end(); print " \n"; &end_form(undef, $text{'save'}); &ui_print_footer("", $text{'index_return'}); spam/edit_user.cgi0100775000567100000120000000640211017163270014153 0ustar jcameronwheel#!/usr/local/bin/perl # edit_user.cgi # Display other misc user-level options require './spam-lib.pl'; &can_use_check("user"); &ui_print_header(undef, $text{'user_title'}, ""); $conf = &get_config(); print "$text{'user_desc'}

\n"; &start_form("save_user.cgi", $text{'user_header'}); $dns = lc(&find_value("dns_available", $conf)); $dns = "test" if (!$dns && $config{'defaults'}); print " $text{'user_dns'} \n"; printf " %s\n", $dns eq 'yes' ? "checked" : "", $text{'yes'}; printf " %s\n", $dns eq 'no' ? "checked" : "", $text{'no'}; if (!$config{'defaults'}) { printf " %s (%s)\n", !$dns ? "checked" : "", $text{'default'}, $text{'user_dnstest'}; } printf " %s\n", $dns =~ /^test/ ? "checked" : "", $text{'user_dnslist'}; printf " \n", $dns =~ /^test:\s*(.*)/ ? $1 : ""; print "


\n"; print " $text{'user_razor'} \n"; $razor = &find("razor_timeout", $conf); &opt_field("razor_timeout", $razor, 5, 10); print " \n"; print "
\n"; print " $text{'user_dcc'} \n"; $dcc = &find("dcc_path", $conf); &opt_field("dcc_path", $dcc, 40, $text{'user_inpath'}, 1); print &file_chooser_button("dcc_path", 0); print " \n"; print " $text{'user_bodymax'} \n"; $bodymax = &find("dcc_body_max", $conf); &opt_field("dcc_body_max", $bodymax, 6, 999999); print " \n"; print " $text{'user_timeout'} \n"; $timeout = &find("dcc_timeout", $conf); &opt_field("dcc_timeout", $timeout, 5, 10); print " \n"; print " $text{'user_fuz1max'} \n"; $fuz1max = &find("dcc_fuz1_max", $conf); &opt_field("dcc_fuz1_max", $fuz1max, 6, 999999); print " \n"; print " $text{'user_fuz2max'} \n"; $fuz2max = &find("dcc_fuz2_max", $conf); &opt_field("dcc_fuz2_max", $fuz2max, 6, 999999); print " \n"; if (!&version_atleast(3)) { print " $text{'user_dheader'} \n"; $dheader = &find("dcc_add_header", $conf); &yes_no_field("dcc_add_header", $dheader, 0); print " \n"; } print "
\n"; print " $text{'user_pyzor'} \n"; $pyzor = &find("pyzor_path", $conf); &opt_field("pyzor_path", $pyzor, 40, $text{'user_inpath'}, 1); print &file_chooser_button("pyzor_path", 0); print " \n"; print " $text{'user_pbodymax'} \n"; $pbodymax = &find("pyzor_body_max", $conf); &opt_field("pyzor_body_max", $pbodymax, 6, 999999); print " \n"; print " $text{'user_ptimeout'} \n"; $ptimeout = &find("pyzor_timeout", $conf); &opt_field("pyzor_timeout", $ptimeout, 5, 10); print " \n"; print " $text{'user_pheader'} \n"; $pheader = &find("pyzor_add_header", $conf); &yes_no_field("pyzor_add_header", $pheader, 0); print " \n"; &end_form(undef, $text{'save'}); &ui_print_footer("", $text{'index_return'}); spam/edit_white.cgi0100775000567100000120000001054111017163270014314 0ustar jcameronwheel#!/usr/local/bin/perl # edit_white.cgi # Display white and black lists of to and from addresses require './spam-lib.pl'; &can_use_check("white"); &ui_print_header(undef, $text{'white_title'}, ""); $conf = &get_config(); print "$text{'white_desc'}

\n"; &start_form("save_white.cgi", $text{'white_header'}); print " $text{'white_from'} ", "$text{'white_unfrom'} \n"; print " \n"; @from = &find("whitelist_from", $conf); &edit_textbox("whitelist_from", [ map { @{$_->{'words'}} } @from ], 40, 5); print " \n"; @un = &find("unwhitelist_from", $conf); &edit_textbox("unwhitelist_from", [ map { @{$_->{'words'}} } @un ], 40, 5); print " \n"; if ($config{'show_global'}) { print " $text{'white_gfrom'} ", "$text{'white_gunfrom'} \n"; $gconf = &get_config($config{'global_cf'}, 1); print " \n"; @gfrom = &find("whitelist_from", $gconf); &edit_textbox("gwhitelist_from", [ map { @{$_->{'words'}} } @gfrom ], 40, 5); print " \n"; @gun = &find("unwhitelist_from", $gconf); &edit_textbox("gunwhitelist_from", [ map { @{$_->{'words'}} } @gun ], 40, 5); print " \n"; print "\n"; } else { print " $text{'white_rcvd'} \n"; print " \n"; @rcvd = &find("whitelist_from_rcvd", $conf); &edit_table("whitelist_from_rcvd", [ $text{'white_addr'}, $text{'white_rcvdhost'} ], [ map { $_->{'words'} } @rcvd ], [ 40, 30 ], undef, 3); print " \n"; } print "


\n"; print " $text{'white_black'} ", "$text{'white_unblack'} \n"; print " \n"; @from = &find("blacklist_from", $conf); &edit_textbox("blacklist_from", [ map { @{$_->{'words'}} } @from ], 40, 5); print " \n"; @un = &find("unblacklist_from", $conf); &edit_textbox("unblacklist_from", [ map { @{$_->{'words'}} } @un ], 40, 5); print " \n"; if ($config{'show_global'}) { print " $text{'white_gblack'} ", "$text{'white_gunblack'} \n"; print " \n"; @gfrom = &find("blacklist_from", $gconf); &edit_textbox("gblacklist_from", [ map { @{$_->{'words'}} } @gfrom ], 40, 5); print " \n"; @gun = &find("gunblacklist_from", $gconf); &edit_textbox("gunblacklist_from", [ map { @{$_->{'words'}} } @gun ], 40, 5); print " \n"; print "\n"; } else { print "
\n"; push(@to, map { [ $_, 0 ] } map { @{$_->{'words'}} } &find("whitelist_to", $conf)); push(@to, map { [ $_, 1 ] } map { @{$_->{'words'}} } &find("more_spam_to", $conf)); push(@to, map { [ $_, 2 ] } map { @{$_->{'words'}} } &find("all_spam_to", $conf)); print " $text{'white_to'} \n"; print " \n"; &edit_table("whitelist_to", [ $text{'white_addr'}, $text{'white_level'} ], \@to, [ 40, 0 ], \&whitelist_to_conv, 3); print " \n"; } &end_form(undef, $text{'save'}); # Show whitelist import form print &ui_hr(); print "$text{'white_importdesc'}

\n"; print "

\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
$text{'white_import'}
$text{'white_sort'} $text{'yes'}\n"; print " $text{'no'}
\n"; print "
\n"; &ui_print_footer("", $text{'index_return'}); # whitelist_to_conv(col, name, size, value) sub whitelist_to_conv { if ($_[0] == 0) { return &default_convfunc(@_); } else { local $rv = "\n"; return $rv; } } spam/images/0040775000567100000120000000000011017163271012750 5ustar jcameronwheelspam/images/icon.gif0100664000567100000120000000330111017163270014360 0ustar jcameronwheelGIF87a00۽ʪƞʶsh¢AAV44U|t{vwºɛ`¶_`faf|fKIoZVucjdp~z{~`YT?AgVfb^abbige:Fqf^j>Fonr^`^ba`ƹfNXvCFqbrjVNZ^Ҿblro^ab^ڎZrj`PQkfRNV22FV^lljJJBJu')J6>kvVJF6r<8Q;nJҰfDnL~T`BY>N8C5e>2@Ov4:J<4J7ZBbD`?}jGsL|S>5C7zB25>`V=fFtQuOB5j:.75,5:YdliQI6zPY^:0H6,.2*:HZN:fJV0.*9:.DL8UszFVzZh>.ZbF^~Nj6.V;U[>A2JfB6VjJ:NZ>r^BVB6JPBr¾Rn8>XQ9V@^Bº8BlZJVFxRHj^ZNƲ¦rŽrzW_~F:RﮒpަBJj~rvv,00H*\X0@ @\pAVH#dž? (RF$KRJ--:9G8qZIp Y@9@ (P@sjG$ptM >P*hک3HfPAA  {:@7 3(41t@D@G(a*,T yQa+Xp2fpX8rȑCK ~$B)bI.=&Mb8B(KDAS-H1D1$1U`@}V\qBEZCCCB34X_R ;spam/images/spam.gif0100644000567100000120000010017211017163270014372 0ustar jcameronwheelGIF89a@@@@@@??̿̀̀???˿˿˿?????֪@@@@@??wff@fff?ff?feeee?e@e?e??UkkTDUUD33333@3@@22?2?2>22>2"++"@??jU?+, H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿F(48„!Ƹ.Ƈ n(9Ə'?X2gf,phC5 LXCϤMUf}pmK-8㾓Wn9ЛG.:γOw^wlDg OHtAo_o]qH~~O6@0 8 @O,`pP~P@$"h VH<(g[hxf8A?zh@|Lbh(hÁWfږi kӀ*HHd@&馒$TI!#xMzH"iJ",vZm*H'FY h(e&>OJ牢F*gc^q))8 *#?r`q NjFyz-R ˁ|~k, b 디= ?r8gnH.< @Šv0ٺ 2k9|:/[чjH /cHe6nkN!2!rKʹofMn ej8|s\֨p&˃*ga'iv:2 LfPf؉6;Gk7P6>Jo+|zrKe-ʝ읗( 9bY hlb!"hmC }j3֫ gm#bl) z,]҆2߾ce {/c *?Z:܅84 rY"8{bRUUw=baQK)Hӧ=Mw!npQdə`͓XN.)-gPtqgb@8p:UT[7cyXB GtU3!`/;thLAnk)[ߚ]V1*Ȩ7v@ TY c3@ .*w W!Fasܫo鴮 }[!|U[ݼ^x\]+Re:%0 eaߔLe-z"@K:-}G^EWj5hE(` H@qklI,Wx0zCYy<*sxCR }hM6Zw(Z晛sPj1cI`_*_2$DHҨ@P͘m.us s}'=9gsAS$>U5Bt_)*1/Kkȡ oӑT<5tٻS!L–Y3 { 6"O@<#d@@>$y sc AE\f34+5dAlѴO %хekZe 7B`^p#L fSLDs;Mluԃ $܆pQ{-)7 &6hmbNju:u@T"+N]eMz@F:5uNlN\M[=pw+7;7^73F[+M/X*@;\X@, e:) jކ@;IkB[?a- HͿ_є.E<6=|ү & &m-r ux6.sZ;;csv,@u:4<0e- "gxܤwY*]h}Po460~~~}Cjb-W{͆&\K,R'r G/U{FY7!(.*lR0(`i1f?$m <#n}U"[5Sȸw7< Sg&kw֌:nYKAc*f1#ULId]$@4S1dMsWnD lf%1, Q0^Ggꥀ SmtnxxQ !ߒ$9~HCMn$`+ Uh0:ɓq,_,twOLO2|cG!u67oiI I)Md۷YyHAy}#X?67SA&G0z7aQQGp / * oz{&z yF4MC!99&";`Bc< 9~v&2,\g5,#*`)3 `WWGx*pxLP#2YrZ Wtי's'sߵ[e0 Jr˗009N#gaT7rD⌕QPF`Gr*e bfO֡I uD|5!.”–!r"V6723V#t`w>؉Z9Lbm7,pQYQWf0c:J 84g.vvxPOVP"V4Sw$ߘ"@GX>@`Hc օK!(xB%;1H'x$/Q`bJ@*JY@G@ PvZ%k0v80bVSzEc7]1&"K=6@sTttJD*jwՉ g)ouKI@F9#+k/ W@bsKkں:,-y K.{B 7 4gu*rc}DVd҉| r&?LUoTo[l;J`̲TpTp|-銮2(E 6|V/gqzaӞs)5L/C!DVCFYv/ V'|J,{F(__| ¢2*|; nzؠ ,nBw$aFiEPzp{4l̾dz¡LcKHFPF%l*|w +{ SǟP8)NV'Jqph#&#cFKӍ,ύ@΀ L}MХ>"L|2jۮzebN(B F%/@&P)# uN`W`+a~~0]T🇽.IKrRp_<] ٧Jر|ٝ=R ڲ)lG2HinwOi{ϑ* z,F0& $ 5;T۽D9=H9?(>/ ,SFOp)pKKs+KMԩlB>ԯ<<+[\{K=]*`/߇8)_[60'/j| @N_!_F9M@Ta0 `hxxhhxxPtDed$I ()ps4 )*j*hJ䊋KI)H| ,HL< j$9+eANp/?O_o%*YteHZ0ӕ_V tՋʎ Ɉ !:D耡LdM>S#/=tCINvڙLLL9: +_aL)'][+7ofaTҭ#8`ذ7޽|;FD;`鰗l2̎ )1DT Nr'4cYub0 YC*tRXJlOs(l/Q \F.FY Ugaj /WAB(m X6E,xzcM@AKacF$Tpr Ym6)C';XGPlpUT%=@Nى VI7L !X尉peW~pLE} 2@&MF Ⱥ$JA B@Ұ> =XF U"d$iK89cHhl} q+Hg &U@aaOEBy(x~{IUq(TTE:ۄH"1eN\*9 AzF5K 3n9n[yS\?vJ_MC:UHd0Wo GPB 9ioDR6q$8 邑%#+ePK[ nxrS _PN7[?z{$wq| byG4 !PĄRQ-.O1B & GE<$o@,IA- 9{oM̆ᆭWKDZ(GaL|޳tYqq@w"AOWر!aTRcR4@v NeK0yQC5 v e4[R:`Kz ^ةPo)䮶"B(Drm§O-z٦B̄D4nwOBӫ/=9άɥ! W &tL]y,8N08d4>ԓ6 SԄGd6&p7m<$ ^Y଄]Jv#A`bIg6E7! -kA*DpX./m2w\'l@|}a$oz )Z;ȳd@ZE< 64 0B &;p,uȍ(Hh爎騎ݨ: _0xS)'r,+"VbTaKTU ~FRдBcE@Ңi?1~#C}5cUCC%3I5i79ٍ> A*7DJ99!j [mrATDnc@dU9r3 wǗ"SCB|rPQV)dFK8!I6LY!1PCf}CXx:Ii=U3β[BSII tya* wا;7}8p1'hOq~xɳs j)-dr'?Jt)Kܲ<$%r.Tg/i ژ׉٩UIP8h*-KJ('cQ_Ae9`B' .q!S␔pwR ;1'6pCxї X d;pR0'1 ."OGg `0HD"v82uD(ۨ-/0pI`5D#';5 !`^:4qr!pS8 tJ)*!LzKH p4v=UBQC.4!m" T'!EBJ Sg00 R$`IH0JڢI];q>i^|dB!pքO3 Yw.DpF(Q- )`YPZb5 $$82aq ,IrfiJIGeaDOYp+00CUsN4á+@(RjWT %#ɛ mplБqGP+buT1r Wt,Z 9sWw!¨a JSRUI C M CrSkUr)"?Y*wnShxF RZ1h$mQ+C*Jgڍ3&Av N;qr9vhЂV^.2r~cڤ"`+X]fe8(Tw8s2_Vrz2KE a>i-EhTѨ1}TjB4!wOq('qHB@AR;E^c"wEqh m7-< TPb\Q; ђ+2iS&!r;^K${q^vG:N+hJ i=C?";qr|GQ @@,`Gky$$)0W +L!V$$E^&upu:|0-v&A9XuЖ RhJ'ݒ:-0 0z !4W IӅ 3t͔Kh*#Z`cD)B^t؄xC`p6P!6g.p-g (cqDt $*+Fk`Tc7vaVۡeRY:02rpB1\78;ỴƣmvE֠G*cg:x +Ь&> -][Ng&hjB1*@16cx;O$(mĵ6$СDBG0,0\ldg ,U`ne}j[px:*3tfCfW%4\%Q2F.Kt& e: [!$0L:\Å=,V.s|@Q ܴ!=f r$gpau㣎GNl89!i7 P "i1q,`#pfi.ӛ}-OWtQV! :s x @~]H9]D9%*4Z ޚO q&$7$WJx,0kf>}=C+5;8 M9:Fi)c`d@aEX ]ٮَ.Nnn]Qq?b->j-} '^!zwhs0. |#!`e o">\ 㝜ZL E6>CqȰqW)4;=.qD3H,#jpr xV'Mt sy̙x/ e׿$*'x羰hр t}-p qн2I~9/ڎbSQN443#zaJH&$fdMm#9\3 k^ 毮gzT}ATC__tΘx!zX;/OsXb`=\*8+@BzGR!JQTJTGJFTQ; YG,#!# #!JWHGJTGHFWḞ)GTHޚߔTFRFH;E816 H*\pQD&Qӕ,TxKF/Q(ZWHx)d+0Q!B  *8PAP 3cHU,PS,RjURډMR\8rB\b)\pd騤#&u!RЍ$ӷLFvXC<L``˘3k9vͣF 5f(VBžm4#4Ŧ4bH $,bqBN6FRXn#?-6ӁW 5թ !"D!*t5ׁ"205k -GnƄCL88ИxAgev U4[$eQFYĖ]Tt Fx]Z:;[2Rm L!$x߭ L'T-ey^uqS p}Hc,'ImDD5`}HA`3a a  pϡ`ᢌ6Tph͘ť!yE0FQvbԦm4-x8"0TŖ)T\yrNU汧Žw"qijTdZ @%|#Ӹu`1` &|8j DD^E^G ̚6K1S*Jh`K*Eo\;e YUNay^myVSgm+7q򡄉/䲭{tm`d `cXb8<\w/p$QHv"Fb lZUFu#5g̵L4@֘HuUUR0W UwL TkX~)'V Q[U,ъ-;EDCUHJhRT|,.dAI[nJ7aB?#Ʈ!*@/BftY e! Ȅ'PAj`O=Ph6-`N]a 98=UPM{[ *$C fqk;b,c1 0 4q+끦pwº"-w$2NVQJ;H8& ިu Hp;Y })96S9&V~*q{G駎Cp܊w5XUe#NR0I+F 2=p0bTa[Vh`b)C;8凮 ך,ދD? NtnV>,  D>T"2 {KPZiUV~'1ҳ[2 dQ F( B}wk_T5Nf"VI'Cy"U@0'nsC'n5nT"n8pR?WvQw>WUWVZo84FK,F4crmj s#=z[Ha+Z$T8#R~L5IFIOE6bFn|}nWs@t8@v>pn,N'EohKVGu!Ku{t8εt8 Xbv(1RkRPP=ev(ш}8u*3"g".^ 4t0b C찏Nȏ nC HQkXW.WhEzKI WLcRT 1fof#FFc! vEvjWZeSH1q Es'(T@(U}}}m`T0+n}T脧X)Uc^WR29E]ZQd]`][DWbWDosc,2xun'?UGcPi0P*Qs%v:yM:.80/}V @瀾XupEЕ#%' , ptlqz 8cAF%9&8かC D&ҸRvr|]3@M.1@;"/ƙ(}+/B*BCrBJPGn ވafl hQhhǩ{ pTXdu8WPhC'0ye5`)f h+&Ew: J*o dAo3cu+3 JRVc IݥbJduRx9b5g'C /=E;Au\]c0BqBŎ.t+@Kwc?d¨ i RkLW+2 uWxuSoc9R^#pN7d6]wU*@Kw$+|xm.!PU GauzگY1LJ]DNKWX88ts*sJ'(`=˼+&v~q6Q\]cеch>`;!R(QF\EliuV>\kUTV[M Eؖj'SG!ı`"d" 6tY>2GƁ0bZ/q8;u3V{{eREl{%ӀЩy.tR 8iGŒecPmCwCqv h[W @Ø&TKwnm27cA3&+>fܵHME.pkugfW)Dl! $Ip\VP1S]!C Էy;y% `ӥVR,:ʨQS)zi&c EᑹԌpjp*cH}mAdpGް /±,|!e+4 )QTX+tcVy n2WQML@M=zQ#ۗV<:"W> v9nˤ0Zva8"Ii+!]$R<4҂lV=@QdyuN<%YhKKy~8 ЋJ܋L9ħI=ꦝ|9UT>:8CGx lͻ!fS} 1`їzgVl/3/.V%K'Wz@KyWQVoI.{\W Eީ>I6[ʂ}~.V8zdHax%WG_bxㆪz{KSW\(DT$[g R$Xo^^N/oTk*bH[z}h! $"Gf ,X" ]C; G LA RMĦEAW4ӾtRdjn]*E"0@|jvč / (w e )L^+=?ĩpf W;|uz/K=d@{ju^ŝ>Q鐿 Njoܦ'8믇g~q@Hq1P"(@R@XaHh)9IYiyyEuDDu53+0 R2ۋˋ+<<"ܠ+\LKp!PP==}=]@-2Ύа0\܀?12ÂőGQʑ* <(,X:E%c*V6JEHF$BR!)%#R 1#pSRMz 4P" )UHNE  ܰboǺbUZz =fޘ9"]Vnt; ^fyoG>rCD->!` QC+BUh ʽN*'kv& tBjr#H]D?g|`]3nc^j2a%+_v]-4`'{ lA+5Ѝ~7' n+5BRC;eRSˊj6IE"HcE)LweY@eDed#`],#WGlH6 ,c2%{RCk">E ;`0)( z0sF*WE|(flbvؠ7o0z7rZq%Kf),[,ť.A{ 3&1Jc"_uiI b̏e'1ŁBUPC pg+l-9l@0Ap1z[9HJhUgqJ!|8*C+:,{[93CsZ21#hԣ `ٵZTup|Pgu D:h= BVC6hC \T ;$9CݐًB@r#.r]ixޣo+y=ndc)A٤F0 `:*@ m4D*t1~  *.X] ͫ)ăKhO/l)ʉݤt$<MMUNޥcV/_qPP.>Z~!˳HCi5Zڳq#]<̗ )AϤ`A(H(!ܚO;x=1[LTE'lE2թPmSQpѬd 釱 c* ^H&' t$ +% w50 y? sS8rP\,TiMSCTa4T(UT*  (nT x))#E[z=nc7sŻEUÊ|6f)M{E^'.= 22+yY3M 5yiH)̗kiڴ} F̓@e &XF^[+sL-ȋ*5sޣHAXVbzOL:ԲF^cz֘uNjAvMktQ>ִB0XO=HvDC`x`[oN|`4zKp'~y٨'(/1a5@A( b%?/Ĝ*?Whe<ڢ o2cymͧh3lE fCPSњq C 8P D5#y]hJ r;ad3vPԝ?K:X b!(wc~44ke-k<}͊.c)W%omҝSDE9cNAz/;H\|W貌ͅ7䙱Uvmg >{ږ.,g` I:}S^XH+9T։"r7S&:B62v$-;}҄5~D1J铕<D ~.IZ9'EQ9WFZ]@&Oui?љҐz ^ RR+H*N_64G{ǀd7 hG)+pdF $m P?d >0^v  $.Gkn3v2&nl`w9RzF+ƂE/ jk&ooNGoQ0α)a"r_,aH/@-B=C ؀@fcQbr8dlfaR2K{LIb&'Ik-OhBa*: :@xbxsR b1`.7u׳t idU1;;/YG.aZ`dk0dH`v "CƂOtFK*&Jqa#?Ve~]*'&#J5C9ls&k\KrO$~@;oh𖄺3S)F%d)_{ŋ Y Fd/C?O nJ+&8V DF@4&{^5 ӅR߀} \B &2Wl9 Au5Yd.ISpPd=@G@ P^uCa &_Z i ) CtFdD"?PwQ|2&9Ft'80WQٲDP:=c-sR -t]n;W& (OQRy*pK揚z)Z""\Na ]'DO. n8nOpi&YrRpLvKܨR@8) )&btbŀ}J/2I7YQd׳dUi1_UHpA@NF"T0Bh{ G"Il7}$ zX |)&q φO~RAqmd4!` `0&9xV@#t"V|ۀ?o?WY|,05_FGjD!O` C1/:#FUZ" W 8x$AD.O[ QWX&-> *shy?5K|Q}sG~'-@:M$ȗ,yGJ) GTAkE_z/SpBN C0"'.1pZj1ZCuڀC%P'm,EUQH"AA^AD@,dT P8u&BCgsRUs]u~mSAzdJDh]FA)i0_:pJˁвmgk5y"93gQ@iU"x'Ş72kdw6:)cMPaj˟1j^8]GputBd``0 Hzzc6z:~§nJfg2-C4RM@C|Q\s[F2 w"]ʔ t{dt!JZdk$ApHP/"54ppwKJ)zsg3:-ۧq+44|;V $/SeBq b\ F 9+ UaM?פSĺWVH`D@0/)]8 UN8`pSLNKIVf{3'Cвmw7Q'}71D}8vTK!t7'S̖4G?&wP _GV/Y(N*P6U)i̻A!,F0J² 1z!?$%ip?ږԙi IER:&*Rq&{GP6HiD2%(|䟲LZ?<Ueʻ,H#zN0`ǺX60pf[U˲d|'CR( 4 `R(F5 2R[P9J 23 '‚+GGd}US|Z1\̻X Z v̽h 9+^Gײ /l|4Sօ<~itEhwt0'R8fRn9T+/ՄoAju!|SH)zC]m<"“"Y(6#( eW)JP,aͶ} ӈ;QpV?P8ڱ,py+WJi"r3s3pIoIGY7S xT(j'tN4e{Hp(ZP1M7.< }'b^%|a4Xu5-V xRK2?lD&vY?,2 uY[A ~Ta;USmCTtB"&9`Z;! QqFJf| ՛{T#7 J֦b& | D?* maMoId U K֏uAL` X/.Q`"e 3$k1CPK T"406RջL,06^@QA*LJl4>bفK E7: D4[$YQG}d ܄Y>y$u0^1dˡ5Uyq(5 \*&͎i%RzÕPn|>$ԗfLrI.5xӵ៷?u=*(/!z4Q8,y*h,|$}CMpѣ3 &prPIYK?QHݞof\'F LU`މn>%&!X8NS6"$@6WV,TQpRc|W//swi13@XDj~Kl? BOw RvR|BlԌB}cyJ:7X YQUQGQUQJGQ=JJGS;CACCTJTTHFRF;FC16$0TQHYG!,,GGWU?4##,# #! !! !  #[pALaB~! (ѫxaE/$t O;z/k.],*$C tє# 9џMP BB#6`@jBzڕpʝK--G*)1̊$Hfaq¶ UƢG8Y26ȸ$z)h`"D@LޓyzAʄ˸NG#*޶ RAJ.o>]ZjQ$cgHiPBG&X H8UcRTNZF&r.(`\#e4B]Í6% +N"ІPqhtO"Ԑ@5Dր@T=Lx%tAV[pT\qq:!4tA)$@BHsNADR 1P8Y_"E|R0 p@i/h衈5^:WHJ!a@6TXb-z3S[hc>-ԢDcAuxH>)ZHfGmBiPKqЯ2B@Q+w@RT&D#1f/ Tq'i (x~m Sh,0|y(;danps76ϪCF^ى>͇]H#B Rm&SNHHw">i4*Ġ) C['{H.$p DY6d:b27< K?ȸrs AWtQώ4I;#JM]H!H1tTB8b;wZHЉ9iVЛ}g}1sZ); >. U|,I i8WfIk*#F!)?t:xcv#D5 j Mx󝷶*./b ->YJ)t'VО1pJqQ!Q*MPT(G܁$+9㢌59"0 A8C Qr!1VtHG[cGdRDApUZ Q.L ip)HU>8x,\?,1,{1+F  @I,7rfYQGDD)_2ˑ5 b*tO6>E uvL犀u'\t(qPbJ"yDpJ?1D^pxB P! {şТro [v1R_/ȋ3,H h(NF=B#m&[1ӒװlKȱRy($%R֍4r*X]-*Qn5ƄQ7lg-mJ{i 31RN1Ž$Df=jkNd cHH*RF?cXaH (G cPB:xL!*xˮ`y*@O.XpPr,:Rl\ X Bx_ rt Ӛ@Y0O|Sq_V"=4B.PC<cb\{|0ϝ֪\-N4E$!jrLlb`AE ` UX\ab焤s|jįX,BjABNUy8ͮ#-*hP;}  VJ0$(υ_4>N ~E MaN",h/X6#5և`elcIEйϬzMHsc#5ղ.hd&!hI9nIǓ1 d$0ILNS|,J{dJS]AK,7G=@.Ql=zN gsZ'|!!&5 &WlٜnS/MHY~_H4rR/*GaLa!PBht%$UCGVZbG7vGN$&2/PmG}~s=z]cQɕ X <'ΙD6e(y3HtJ !7M6L193sag|6bZ4iE7o{LǤ,V${N8S@F&dAg=&as'f8Ѓ&/g+rd 7Y6w6~U0 )a#T2btC5XT2A\`a{nA@ !A"Z@8u?z53Um 0lSrsJkxG'1Cw0h&%} @/  2KW6gh `|[thuz f$će$)98+R2#@(o/$o2[adE Eem=e|Ek8y5JfP'/`=Q:J~$ RPDp1J*8p'1:R=$S0ng9 $wa+և";ACdꞕ2nTf&:=$&. 0|waѦ/(iK:YLkYsz3=;@ VWg1Zt t#7hh u+oUFHNA* ZSZ'kqp聧0{}z0DV(C[~<Zq~N[s[s;: %)Pz8SduRj4%wu&29 +c;2~Ȣ:ֱ5YA6Agugnh!|.0xKswb JHlCﵹڹx`d Y\R]Ygiq$30Gu8|#a|Sj@hTQbp`)R't9@n5Q* '&+Yqw 0=C."O=N\lZSTPsw D~N:N1PP[ui[$\qFC)'k[Z4oU0lη)L`8L"+1c{d @Ps - LY 'y3d6H ޗLjʩȊ:y3Ǯ<5;Ph97Ɍv(a!E\XSyn`rh!}<- )L`h p1m&Z^;5J(\126 k0`e+p ;s뿕~ p1M 9m! tISFs#+1:zq/} ) 7@-#(`'`3DJ_p·%BG1ժ,гkJ@Qv ~I >/Q,y[ZyG 1+UVޑ] R t m;g|*1)0S)p } }Th$,T"Θ׃/628^6ޱA\^%X6J` lZ|7@|adK 1-YHC)O ӒMDH5?# ")l~kn5j^ڥکڴ"10ɉ1B܊^{k6 r :D8R&ҹ~K wTyM^ m5`g* WS43SBA:VZ" E 4{/ j/ ~ R.:`5rÔl)p1ڦ @]r|DMHqsb^!JWX=yeKHL[i1:z6 |ebmePg 1X |: 梅F.䢠k!վ^7o֞^ 75y j^}ށ}Z=խ rb0+ީkPd`<%OۅɅsηi8[g.^کӎ3rrQ_Q[_p0@0 b 8X @@Ta  :ə$0!W^&*|ŋ /("E  |wԦmR ,x1p}@ADŽE;6ڵl@B$mtnqfݎk1.8ƷAu0C$n(C YhBcJ65PAl #RP d{m͆d?؉87pOJZ U,$HD/ν 3 }ۻ_ő#ֶ (I'Aw`FDܵOb4Os-B`XY,PnMD\`A!It!P`@Jh,t n[n37 p t1,XUlUZ1 ]Y 3grY Yda߂ ڧ'V3h&(Rɠeʃ&A֋P&t!DP .4emZ?$!PLP+xA: |Qj \P.AJXapvs0 )RU0ʘR q x0güޜ 4$*w 9%8_1*]ۘBE\1C T eQXMl.<*X 1T@ `"Tگ s lTDp7T@7 (]d5*5C^DeTdJ۰`1v DtEaN| ]mW3 w@q 04>QPR&ǔ%IDJ-KGsTdF H (sN|G)@H7T/:Uµ*lCXPa1C z = &B=fDb(Nwr}]s Ce \jFt%Xc1`PlH?d} %1@lp)@D0 jHPcIIIlV_,5*RiB`O8 c({E+^#ᅺ` sZyz <)0p83&Q U'[_u;&f\ R|Xn$]XH,,4Gh~ $P| (QPJ¸Znx,pP)\$ƛ8̘%",\! ~bP# H_UyQ &i:2}務1LPj̣;Q1V0AT&A[p @U}, KtUī8-2Dډ)ϚW iHS F,G/f̺v,?3A@ڟTBqT/4[g8PDOC{@!A`ր.n4apE(D"X@0_`YHy4*ê vLQ)j$PtZJM8i֢ k}Vp58͖O`7 xB0,pDsZ5PM}J$ DPGHsZZb 1LF`A&t`^A叁 TʁI69M0ҚQ6u(A*.DV.ǞL=C4Ps[CI I *T̋ݳ*ke.{Q D̴ij݆<2[Tf˧#7z*~Ɇ `K[λtFnuPubPGhqϚX.1z2vsCFSVo*p;%~fm_H/ bRW˭] THgɑP(ł诧&r `R FF42׭fa"TSMY£!=izX12f|V"gvZAb *`bκtӛdm]u5&bzq. z޼HK~nNaWǍ ᜗ƔAA.xA;Bw{u1V_3xn|ݐn4i hbÝ7RL(#%K_N o㉀23! r,؃N&#`ea L7 {7l5O9:޾6Sp@ `~C0dR ?EgUnENzfhuUY0majpRvCLpkohS}Qn$O}?Y 0qzt 0ԁ/!aʃm0zGFc8S11GGdz00ܲcw'bf;PɅ5e'? #e *eGSY kϲ6]~7$}Ga&p E~M4[Wj&KvaThM E\+pyT9 wd݁P0 Aljx`35yXՔ8YQ# ._T. @-cJH"5V"!*2iWD zRmPs-T8MN~F2pD /@6xH D q7ѴaXu@tAqѷ/i,  4fd LBv^&A$1a_ V%ch'R&ey0ۦ-Zrj ֡~Q!(LfRU2DaS(8 }قhDrN$J}1]V )Bhz16 Qr Ewp Gz#V&bc%tAs)FDL`&>s/| lbi$VI*.jsf_I^xpgMtEs =(8\6aUIpxf0m([C1@y5qo#@d(4#7qyD9 Mwsg3bQ  zxT(8ңmϨlF Fyr}XUqD29R Ʃ7` J1WP:9&@.0EbZwua!aMQ?T@8)_߲ c :<ʍ YAd33L}Sn ;rg x3P[QxOERiTz#r'j;:zJq/k&NVؤ@I*J:)6_ Iyy[xx 2(szf(su[r1&E: z06 յљ}r3 @h88 .r L% f~~ 0GI]@7}ʮO(+p$FJ;(2. QRQ* 1ZD(M ~?pC `MA*%[qi0ղX>`ilcA x//HP=gZf&@$y2˂ZYe{6٧õ`[ ;.2]"C2rȁ( NG|D@Ƹ3.黒;S^dR)Z sJ:s`JB"ibY@ۉ ;!GiJ0kyJKYC {:K;?&kj̻_[ȫ_++ e0Mʎq1h:6 c;,% XN%C6 (,$D8*,/)i68\(}4,$?9y*,7-:\H`"nk;3CLEF F</^{4Ŝ`!Dǒ k¿k$D cܼ c<,ă gsǹxEɹlSr7ǗɴYĦlw쾳>mƩ엣|Ǿ<ˇˀ\Ŷ,ż| [ɥlqL ,q{\<6ܼ@lŬˮ,B8<,S LLa{&G< }Ü}y L.L!-#M%m')+-/ 1-3M5m79;=? A-CMEmGIKMO Q-SMUmWY[]_ a-cMemgikmo q-sMumwy{}^ ؁-؃M؅m؇؉؋؍؏ ّ-ٓMٕmٟٗٙٛٝ ڡ-ڣMڥmڧکګڭگ ۱-۳M۵m۷۹ۻՁ;spam/images/white.gif0100644000567100000120000000061411017163270014552 0ustar jcameronwheelGIF89a00!,00x0I+8; di(.(3jߣj-^+!nj5zʤqsIx4rh.$ma(aK"|$ןRmzwfk,wxX9.UBPn ^t~{}/Bwuy~"½ɗ1uy$ҷxӇ~+vߥ{$爈ȣ[H`=|+7a;BB*nQ )Bɓ(S\y̌K;spam/images/settings.gif0100644000567100000120000000047411017163270015276 0ustar jcameronwheelGIF89a00UUU999rrr㎎!Made with GIMP,00I8ͻρ 1AS!p r+r}co3~ q ;"%BԆ>>'''˱rrrtttkkkݦwww껻qqq~~~sssyyyzzzϜ猌ߋ)))ܡ***+++ nnnlll___񓓓,,,mmmfffQQQ000eeeppp҈%%%HHHvvv"""FFFGGG!!!KKKEEE999###dddccc666hhh```OOO777???JJJ\\\<<1/L zDP@{G;"dM!VA04O90 JP@lT1! 0Q@ (H H4!NE5 M)E TFǺpPBD,X 4 pX-.䉀C|PBD1I/W/$3^D.iCE!'1L>~$@ FZ0q" A xp|sĴ3ڑ #!ȁ~c .<`@G #I0ӐYPE@Z!0@eBЄ">1}1p06 e~ TL@X,OFD 2TF(rxP5<`?a$!P3Qp b&J[bx@\F鍀 IB ;spam/images/header.gif0100664000567100000120000000134011017163270014661 0ustar jcameronwheelGIF89a00Ȁnnn[[[,00I8 !@eA0Cq61t#I!pR:@% ! XP]PYn ÔNJi|9N+dvduuxtwT~*}eYgVebUZCh)/DiIDC<;(Y3,?!( [0wa_DHBHe=?O&ׯ8i]Ce\^`^[Wcytdw#oT",(`@|ӧzd&qAC%Zt֬1`#f|1e0ӌi 74m^@3f "LTЕ F)#3VICKvEV4N V:y74|3A zK aC@˓i~M%3)+(j^ nq_(*U^ux5XKcs%1T)l5KH'< Xj3Mq@u/PB mB~ 4^?w~AF&~+(?_Gu0`]]!Q'>2 aL55RKH Zx-8z@p8L8iPVF?J(eШD_Kb3A#wȉx="OX# AAs\B{SDY'ne8"(G4D;spam/images/user.gif0100644000567100000120000000050411017163270014406 0ustar jcameronwheelGIF89a00UUU999rrr㎎!Made with GIMP!,00I8ͻρ 1AS!p r+r}co3~ q ;"%BԆ>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~,00 H*\ȰÆ"F|hPŋ-/Ǐ =;}:\Rn\U^˛G; aT(?h"Jt-ڲ,!ѳTS\-`PBe-XJd?T&RjQ -<{ -Lldf"xqE#zR%Q seԌ(G+7G}*×H'}ۇsb 0H1C " pܚ>P #PCJSu@Ds '.3( ֹ' kڰD\q-\#-cC(LO>8>w*#C &@.܄t&p1 z)eC .l pS,? #ݠw806 "X,G3  `82c+֠7&=O(-:2pBؤ#,l9 ?D0 xؒ%f̰B гe150 x^)NDP |+9 ?|B 2X2* '@?堰BÉ̳3&4~- ?1E&:`>b-d$Ґ6؃O>(c̔*B m?0% (XˊF߂${>0/pB`p'd!=ŀD 6PA-3^>G:2 )pDQ6sc? 8z@G&x! : pF`;!Փ"wW9~,8#KB ǂBLV@  {Ha016 C r3׸ n"*A( @|aB X+1Zz~BRd2~8/ b^ % bzWB~406`=`.Ȃ1cS jRAb Nk<(() V@%/F hm6xuHKxv`ܨ;|`= $8=[Ђ# Ul= , p`'RъWB,PqB! E B  `<#`=u@C:!^Gh!؋Z* etB,O GJYA;spam/images/smallicon.gif0100664000567100000120000000220011017163270015406 0ustar jcameronwheelGIF87agGX#r5$X,1Bs;(SB`ak<( ;86<7-;fEU\b[Ex_\I?fJxyx|RK4^curkn*X^Ks<'s:'gd2|wkzXjTG:94gG;aS=kJ+;"o?3w*-;&HRUpro"8Hv=)eGQ_|{tA;%Ui^pJ>67vsF@@<6 g4'sPⱧb{S۩P6f!7;70~~u_AO!<;4xxr~~xXM+U[~752GEE 9<@[`}S"NJ1cimer3#=+CDQT=SA;Ajxrg@=0'(J?@PyWanLuVxo`@@@ǺX:,tUH77-gd1>=7A4HTyk*Ƹcs>)gI9=8IS\s>=:rrmmJ`I77=^*(!)o]F*}yq$3i0"M6.IGKbvp`,wHpǯ_ VJXpBp+NX l@cBs0CE0ZDJRHfV 6I@c(~q* 30"#*3(pI%ɋ7%Unq@C"U)@b1%RCz!'xb,^#V`0AÃ? CS,Ӏy\iΡDGJ$ H F[,ZH#̱GD.RЍf0K}^=(dPW@GTQdŕ% Y2 -8   }t*.ti_*]=B/Y9dP=U5oT9C$!,00 HÇ#J0ŋ3jQ)2Ȏ Xi⁗/q 8$PA D0L*̬)&ɑ%qZ!4lʡ/"Y1F!D\ADF NHq@Ҳf/XqE .^pͼc00FK\ w#Ρ$EB MM/HAH 8@HH۵sBpjڤ,<>IH0w&, &#"կ#  ^"oǐS6 F}!TJV؇rWDłX\Ԡ0Q hj[E\@l]XxҊ+z!}a""q!F!ّc# 9@QyVjDFf8ّg!3C;Q%GkŜs8trnnGa&ṟtD*餏 Pħwhy ԇW?r Z!\B!F"(#` )L[E"$ ,AJ@%\u &ZlB '+_'`eUm(ȫ( "T) *J +",JK-`KdzBIȸ+r\./z.֬)/2' "D't20C'mP02;0,K,;spam/images/mail.gif0100644000567100000120000000047211017163270014356 0ustar jcameronwheelGIF89a00fff!,00I8ͻ`(dihlptmxpH,`\6(@'FL'+ąlMyN8r[{{}~ytnUf@NChiBe\Mh?AjjOzi@]Gz»DOPkPE׽ͱޑɾut^R2 H7D;spam/images/.xvpics/0040755000567100000120000000000011017163271014340 5ustar jcameronwheelspam/images/.xvpics/score.gif0100664000567100000120000000450611017163270016145 0ustar jcameronwheelP7 332 #IMGINFO:48x48 Indexed (1924 bytes) #END_OF_COMMENTS 48 48 255 I$II۶IH%I۶%HI%۶ڶ%HIIڶ%HII۶I$II۶I$II۶IH%I۶%HI%۶ڶ%HIIڶ%HII۶I$II۶I$II۶IH%I۶%HI%۶ڶ%HIIڶ%HII۶I$II۶I$II۶IH%I۶%HI%۶ڶ%HIIڶ%HII۶I$II۶۶I$II۶%H%I۶ڶ%HI%۶ڶ%HIIڶI$II۶HI$I۶I$II۶%H%I۶ڶ%HI%۶ڶ%HIIڶI$II۶HI$I۶I$II۶%H%I۶ڶ%HI%۶ڶ%HI۶$IIIڷH%II۶I$II۶%H%I۶ڶllnHII۶$I%II$II۶IH%I۶%H$$%۶HI$۶۶I$II۶IH%I۶ۑ%$$l%II۶I$II۶IH%I۶%m%$$$$ڒI$nH%IڷI$II۶IH%I۶%ڶۑm%$$$II۶۶I$II۶%H%Iۑnڶ$IHI۶I$II۶%H%ImnڷHI%I۶I$II۶%H%Iڒmm$ڶ$IHI۶I$II۶%H%Iڷmnnmmmmڷ$IIHI$II۶IH%I۶%ۑnۑm$%H%ڶI$II۶IH%IۑIm$$$$$II۶I$II۶IH%I۶ڷۑImnm$$II۶I$II۶IH%InmImۑI%$IIڷ۶I$II۶%ImmmڶI$۶$III۶I$II۶$mmڒIHI$I۶I$II۶mI$%$I$۶$III۶I$II۶nmmm$nIHH%III$II۶IHmmm$mI%H%I۶I$II۶Imnےlm$mI%$II۶I$II۶mmۑmm$mI%$II۶I$II۶ۑ$۶mm$mI%H%I۶۶I$IIn$ڑI$ے$%۶$IIH۶I$Iڶ%lm$m%۶$IIH۶I$ۑnڒI$mIH%IH۶I$I$m۶l$mIH%IHI$II۶Inmےlm$m%$II۶I$II۶m%۶$mۑmm$mI%HIڶI$II۶$mmIۑmm$m$%HI%۶ڷI$II۶%I$$HےڒI$ےHn$III۶۶I$I$mnmۑmm$mInڷH%IH۶I$Im$I%$۵I$mInڶ$I%H۶I$I$%۶۶mHn$$$m$II%۶I$II$IڶHI۶$%m۶$I$II$II۶$%$۶$nڶڷڷHI$IH%۶۶I$II۶Iڷ$۶m$I%m$I%IڷڶI$II۶IH%I۶%HI%۶mmn$II$۶۶I$II۶IH%I۶%HI%۶ڶ%HIIڶ%HII۶I$II۶۶I$II۶%H%I۶ڶ%HI%۶ڶ%HIIڶI$II۶HI$I۶I$II۶%H%I۶ڶ%HI%۶ڶ%HIIڶI$II۶HI$I۶I$II۶%H%I۶ڶ%HI%۶ڶ%HIIڶI$II۶HI$I۶I$II۶%H%I۶ڶ%HI%۶ڶ%HIIڶI$II۶HI$Ispam/images/.xvpics/header.gif0100664000567100000120000000450511017163270016261 0ustar jcameronwheelP7 332 #IMGINFO:48x48 Indexed (736 bytes) #END_OF_COMMENTS 48 48 255 ڶڶڒڒnmnۑڷmۑڒnڒڒmڷڷڷڶ۶ڷڶ۶ڷڶڷڶ۶ڷnۑڷڶڶmۑ۶mnۑۑm۶۶ڒۑmۑۑ۵nڒ۶ۑۑڷHۑڒIIn۶۶H۶ڷۑڒ۵۶ڷڶڷڶnڷڶ۶mڶmۑnH۶ڷ۶ڷڒۑ۶ۑۑڒ۵ےm۶I۶Iڒڶmmۑڶmۑ۶ڶm۶ۑmڶ۶ڷڷl۷ۑےI۶ڶۑ۶ۑڒۑ۶ۑImۑۑۑnڒ۶Iڒڒۑۑۑmnm۶ڷmڒ۶ڷn۶ۑmnnڒڒۑnnmۑۑۑmۑmڶےnۑmnۑڒ۶mm۶۵Iڶۑۑۑmڶspam/images/.xvpics/razor.gif0100664000567100000120000000450611017163270016167 0ustar jcameronwheelP7 332 #IMGINFO:48x48 Indexed (1523 bytes) #END_OF_COMMENTS 48 48 255 I$II۶IH%I۶%HI%۶ڶ%HIIڶ%HII۶I$II۶I$II۶IH%I۶%HI%۶ڶ%HIIڶ%HII۶I$II۶I$II۶IH%I۶%HI%۶ڶ%HIIڶ%HII۶I$II۶I$II۶IH%I۶%HI%۶ڶ%HIIڶ%HII۶I$II۶۶I$II۶%H%I۶ڶ%HI%۶ڶ%HIIڶI$II۶HI$I۶I$II۶%H%I۶ڶ%HI%۶ڶ%HIIڶI$II۶HI$I۶I$II۶%H%I۶ڶ%HI%۶ڶ%HIIڶI$II۶HI$I۶IDI)Eڷ$II)I$IID)IH۶(E)H۶׺$IE(ֻ$II(EIֶI$I)II*HJ-E-II)II*HN)I)II)II.HJ)IINMrs$I۶I$Iw$$%$E$$%$%H%$%$$E$%$%$H%$%$%D$%$%$$*(׺ֶI$II. H)E(E)D)D)E(E)D)E(E(E)D)E(E)D)D)E$)׶۶w (E)D)%H%$D%$%$)D$%$%D%$)D%H%I$)D)E$w(ID)۶w$I$I%$I$)E))I)I)I)E))I)I)%$$E)D)$I%$nDI%I۶w$I%H%H%%vn$)E(E(E%)D)EI۶w$I%H%H%%۶$III۶$IN$E(E(E%MD)IEI$IIw$I%H%H%%$II$۶$III۶HD)E(E$NֶI$IIw$I%H%H%%$II$۶$III۶HH%I$E(JֺI$IIw$I%H%H%%$II$۶$III۶HH%E(E(JֺI$IIw$I%H%H%%$II$۶$III۶HH%E(E(Jֺ۶w$I%H%H%%۶$III۶$IIIڗw (E)D)$J$IEH۶w$I%H%H%%۶$III۶$IIIrI$I%H%IID)I۶w$I%H%H%%w$$I%D)D)IE(II۶w$I%H%H%%rrNrrmSqoqRnrrNrnM)%$I$I%H%$r%H)EI$IIw$I%H%H%%$$%$%$$%$D) %$$%$I$I%H%H%)׺I$IIw$I%H%H%I$I%H%H%I$I%H%H%I$I%H%(E%H)%ڷڶI$IIw$I%H%H%I$E(%I$I$I%D)D)E(E)D)D)E(EEw$۶I$IIw$I%H%H%$%$%$%$%$D$$) ) $%$)D)E$I$%۶w$I%H%H%%wrrvvrwwsvnr$%(E$I%H%N$II(۶w$I%H%H%%)$E(E)D%-D)EI۶w$I%H%H%%۶$III۶$IIIڗwHE)D)$J$II(۶w$I%H%H%%۶$III۶$IIIڗw (E)D)$J$%HI$IIw$I%H%H%%$II$۶$III۶HH%E(E(J֛I$IIw$I%H%H%%$II$۶$III۶HH%E(E(J֛I$IIw$I%H%H%%$IIE۶$IIIֻHH%I$I$J֛I$IIw$%H%H%I$E(II׺)D)I۶ֺ%w (E)D%(F֛۶R )D)E(E$sڶ(E)H۶׺$IE(ۻN$$I%H%$)$II۶$%H%IH%I$)۶$IIIڷH%IIw$I$I$I%H%M)D۶$$!$ $%ַ(EH)۶ֻ$IDI$!$$%$%%H۶Ivsvssvֶ$IH%ۺ׶$IIHvvsrww$III$II(I$I۶$IH%۶ڷ$I$II۶IH%I۶%HI%۶ڶ%HIIڶ%HII۶I$II۶I$II۶IH%I۶%HI%۶ڶ%HIIڶ%HII۶I$II۶I$II۶IH%I۶%HI%۶ڶ%HIIڶ%HII۶I$II۶۶I$II۶%H%I۶ڶ%HI%۶ڶ%HIIڶI$II۶HI$I۶I$II۶%H%I۶ڶ%HI%۶ڶ%HIIڶI$II۶HI$I۶I$II۶%H%I۶ڶ%HI%۶ڶ%HIIڶI$II۶HI$I۶I$II۶%H%I۶ڶ%HI%۶ڶ%HIIڶI$II۶HI$Ispam/images/razor.gif0100664000567100000120000000276311017163270014600 0ustar jcameronwheelGIF89a00666555%%&++,556"#&*D-`+Z*W$M(R^|&,32e/]5j-Y4f1`9o!2%@j ĻݣT*ǭ!(; >wzsG?|]{'y݀Q1`~mˆvء.+9BH5czUN0(wT> \#D5|qS YH̕Xf]O2P֌;h0_^R3=|=p3f% Y2 -8   }t*.ti_*]=B/Y9dP=U5oT9C$!,00 HÇ#J0ŋ3jQ)2Ȏ Xi⁗/q 8$PA D0L*̬)&ɑ%qZ!4lʡ/"Y1F!D\ADF NHq@Ҳf/XqE .^pͼc00FK\ w#Ρ$EB MM/HAH 8@HH۵sBpjڤ,<>IH0w&, &#"կ#  ^"oǐS6 F}!TJV؇rWDłX\Ԡ0Q hj[E\@l]XxҊ+z!}a""q!F!ّc# 9@QyVjDFf8ّg!3C;Q%GkŜs8trnnGa&ṟtD*餏 Pħwhy ԇW?r Z!\B!F"(#` )L[E"$ ,AJ@%\u &ZlB '+_'`eUm(ȫ( "T) *J +",JK-`KdzBIȸ+r\./z.֬)/2' "D't20C'mP02;0,K,;spam/images/simple.gif0100664000567100000120000000134011017163270014722 0ustar jcameronwheelGIF89a00Ȁnnn[[[,00I8 !@eA0Cq61t#I!pR:@% ! XP]PYn ÔNJi|9N+dvduuxtwT~*}eYgVebUZCh)/DiIDC<;(Y3,?!( [0wa_DHBHe=?O&ׯ8i]Ce\^`^[Wcytdw#oT",(`@|ӧzd&qAC%Zt֬1`#f|1e0ӌi 74m^@3f "LTЕ F)#3VICKvEV4N V:y74|3A zK aC@˓i~M%3)+(j^ nq_(*U^ux5XKcs%1T)l5KH'< Xj3Mq@u/PB mB~ 4^?w~AF&~+(?_Gu0`]]!Q'>2 aL55RKH Zx-8z@p8L8iPVF?J(eШD_Kb3A#wȉx="OX# AAs\B{SDY'ne8"(G4D;spam/images/db.gif0100644000567100000120000000254211017163270014021 0ustar jcameronwheelGIF89a00LWEVRJQaoƗI{O]xp5酵œ̀Ü2~ʧղQ/[4rcڈuu3pm jU,)b1+L5q2peyeng:ܨ߯DߘΆݫ; VǴoF8rCek$.,ґߗFdfl|n lqrFRh'|1hhڣՙ՗>f\ kԔ ؠڤюOif_(|}i"`PxH ١٣z^ɵܽ*}̃ó՘e]faםs忣ԝ!x%z⹌7^!,00H*\ȰÇ#JHŋ3jȱǏ =0 B @@Ƀ 4pB ._@ dР<DE@B&N@EBE,h 1ʘaF 6nđBQ;x(GQ A0(8HF I&GtJ)PRʍ XC,(j]x #f1dʘ9M5kش! qș30:v ēG>@*d`C)ZĈ 9^Q$DI! d%wP&h '6E'|(2R)J*@* `E t(P",b-"/:(&._<0@ BQP/B/kG0\2 1 !$rL'<#2(ɞˌL33D#%PS)\M6ژhjlM77NCT J嘣9@:AN;;#ϪC0 Qϰs>4G0c>0D ?#ֵfvkQ@;spam/images/awl.gif0100644000567100000120000000302411017163270014213 0ustar jcameronwheelGIF89a00  !!!!!!""#"$#$#$#$#%#%$%%&&''''('(()())****++++++,,,,--...././/00001121222232334467878899:;<<==>>?@@@ABBCBBCCDCEDEEGHIHIKLLMMNMNPQXY[\\]^^cccdddghghijijjkkllnz{z{}~}~!Created with The GIMP! ,00 H*\ȰÇ l(Дŋ3jX@@ɓ(QF0`%,cʜI&(5T„ѣH-`6AYjuիX%)T<ͧQÎuF)X+)1Ox"+L kiA̿ }ex$*$V,$(٧߇,Rʠ1Y<^h A4bJC\כ`f@M*b&Rg,+s@#bּ5h$IYB- bRhcйYP\A) D3,A?\PS^ _DME$w L"a V?=̴B ?]0 !ChpB@ q1$#AMPBLd.@TP䔏4ҌRP% Teq(8@w؁q- ;YvYg& -4! 5אfSM8IW103E 2L |,&@ڭ20 :# BhP+k(sA3щ@BM1|qq ^"z"# y3P!~tq q"co7.G \o7). A Jx1?5i\2An31@0 0<-/q" LTWmu,@;spam/import.cgi0100775000567100000120000000237711017163270013511 0ustar jcameronwheel#!/usr/local/bin/perl # import.cgi # Add email addresses to the allowed list require './spam-lib.pl'; &ReadParseMime(); $in{'import'} || &error($text{'import_efile'}); # Parse the file while($in{'import'} =~ s/((([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+([a-zA-Z]{2,})+)))//) { push(@addrs, $1); } @addrs || &error($text{'import_enone'}); @addrs = &unique(@addrs); &lock_spam_files(); $conf = &get_config(); @from = map { @{$_->{'words'}} } &find("whitelist_from", $conf); %already = map { $_, 1 } @from; @newaddrs = grep { !$already{$_} } @addrs; &ui_print_header(undef, $text{'import_title'}, ""); if (@newaddrs) { print "

",&text('import_ok1', scalar(@newaddrs), scalar(@addrs)),"

\n"; push(@from, @newaddrs); if ($in{'sort'}) { @from = sort { ($ua, $da) = split(/\@/, $a); ($ub, $db) = split(/\@/, $b); lc($da) cmp lc($db) || lc($ua) cmp lc($ub) } @from; } &save_directives($conf, 'whitelist_from', \@from, 1); &flush_file_lines(); } else { print "

",&text('import_ok2', scalar(@addrs)),"

\n"; } &webmin_log("import", scalar(@newaddrs)); &unlock_spam_files(); &ui_print_footer("edit_white.cgi", $text{'white_return'}); spam/index.cgi0100775000567100000120000001154411017163270013302 0ustar jcameronwheel#!/usr/local/bin/perl # index.cgi # Display a menu of spamassassin config category icons require './spam-lib.pl'; $hsl = $module_info{'usermin'} ? undef : &help_search_link("spamassassin", "perl", "google"); if (!&has_command($config{'spamassassin'}) || (!$module_info{'usermin'} && !($vers = &get_spamassassin_version(\$out)))) { # Program not found &ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1, undef, $hsl); if ($module_info{'usermin'}) { print &text('index_ecmd2', "$config{'spamassassin'}"),"

\n"; } else { print &text('index_ecmd', "$config{'spamassassin'}", "$gconfig{'webprefix'}/config.cgi?$module_name"),"

\n"; # Offer to install package &foreign_require("software", "software-lib.pl"); $lnk = &software::missing_install_link( "spamassassin", $text{'index_spamassassin'}, "../$module_name/", $text{'index_title'}); if ($lnk) { print $lnk,"

\n"; } elsif (&foreign_available("cpan")) { # Offer to install perl module $modname = "Mail::SpamAssassin"; print &text('index_cpan', "$modname", "../cpan/download.cgi?source=3&cpan=$modname&mode=2&return=/$module_name/&returndesc=".&urlize($module_info{'desc'})),"

\n"; } } } else { $vtext = $module_info{'usermin'} ? undef : &text('index_version', $vers); &ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1, undef, $hsl, undef, undef, $vtext); if (!-r $local_cf && !-d $local_cf && !$module_info{'usermin'}) { # Config not found print &text('index_econfig', "$local_cf", "../config.cgi?$module_name"),"

\n"; } elsif ($dberr = &check_spamassassin_db()) { # Cannot contact the DB print &text('index_edb', $dberr, "../config.cgi?$module_name"),"

\n"; } else { # Work out of SpamAssassin is enabled in procmail if ($warn_procmail && &foreign_check("procmail")) { &foreign_require("procmail", "procmail-lib.pl"); $spam_enabled = 0; # Found call to spamassassin $delivery_enabled = 0; # Found X-Spam: header rule @pmrcs = &get_procmailrc(); foreach $pmrc (@pmrcs) { local @recipes = &procmail::parse_procmail_file($pmrc); local $isglobal = $pmrc eq $config{'global_procmailrc'}; if (&find_spam_recipe(\@recipes)) { $spam_enabled ||= 1; } if (&find_file_recipe(\@recipes)) { if ($isglobal) { # Enabled globally, and so # cannot be changed by user $delivery_enabled ||= -2; } else { $delivery_enabled ||= 1; } } if (&find_virtualmin_recipe(\@recipes)) { # Controlled by Virtualmin if ($isglobal && &find_force_default_receipe( \@recipes)) { # User .procmailrc files are # prevented $spam_enabled ||= -2; $delivery_enabled ||= -2; } else { # Users can have a .procmailrc $spam_enabled ||= -2; $delivery_enabled ||= 1; } } } } else { # don't know, or checking disabled $spam_enabled = -1; $delivery_enabled = -1; } if ($spam_enabled == 0) { if ($module_info{'usermin'}) { print &text('index_warn_usermin', "$pmrcs[0]", "$pmrcs[1]"),"

\n"; } else { print &text('index_warn_webmin', "$pmrcs[0]"),"

\n"; } } # Check if razor is set up if ($module_info{'usermin'}) { $razor = 1 if (-r "$remote_user_info[7]/.razor/identity"); } # Show icons @pages = ( 'white', 'score', 'report', 'user' ); push(@pages, 'simple') if (!$module_info{'usermin'} || &find_default("allow_user_rules",0)); push(@pages, 'priv') if (!$module_info{'usermin'}); push(@pages, 'mail') if ($module_info{'usermin'} && $userconfig{'spam_file'}); push(@pages, 'razor') if (!$razor && $module_info{'usermin'}); push(@pages, 'setup') if ($spam_enabled == 0); push(@pages, 'procmail') if ($delivery_enabled == 1); push(@pages, 'db') if (!$module_info{'usermin'}); push(@pages, 'awl') if (&supports_auto_whitelist()); @pages = grep { &can_use_page($_) } @pages; $sfolder = $module_info{'usermin'} ? &spam_file_folder() : undef; @links = map { $_ eq "mail" && $sfolder ? "../mailbox/index.cgi?folder=$sfolder->{'index'}" : "edit_${_}.cgi" } @pages; @icons = map { "images/${_}.gif" } @pages; @titles = map { $text{"${_}_title"} } @pages; &icons_table(\@links, \@titles, \@icons); # Show buttons for HUPing spamd processes (if any) if (!$module_info{'usermin'} && (@pids = &get_process_pids())) { print &ui_hr(); print "

\n"; print "\n"; print "\n"; print "\n"; print "
",&text('index_applydesc', "".join(" and ", &unique( map { $_->[1] } @pids)).""),"
\n"; } } } &ui_print_footer("/", $text{'index'}); spam/lang/0040775000567100000120000000000011017163271012424 5ustar jcameronwheelspam/lang/en0100664000567100000120000004503111017163270012750 0ustar jcameronwheelindex_title=SpamAssassin Mail Filter index_ecmd=The SpamAssassin command $1 was not found on your system. Maybe it is not installed, or your module configuration is incorrect. index_ecmd2=The SpamAssassin command $1 was not found on your system. index_econfig=The SpamAssassin local configuration file or directory $1 was not found on your system. Maybe SpamAssassin is not installed, or your module configuration is incorrect. index_edb=Failed to connect to the SpamAssassin configuration database : $1. Check the module configuration to be sure you are using the correct settings. index_version=SpamAssassin version $1 index_warn_usermin=SpamAssassin does not appear to be set up in your Procmail configuration file $2 or the global file $1, so any configuration done using this module will have no effect unless SpamAssassin has been setup globally. index_warn_webmin=SpamAssassin does not appear to be set up in the system's Procmail configuration file $1, so any configuration done using this module will have no effect unless users have it set up individually. index_return=module index index_apply=Apply Changes index_applydesc=Click this button to apply the current SpamAssassin configuration by sending a HUP signal to all running $1 processes. index_cpan=Because SpamAssassin is a Perl module, you can also install it automatically using Webmin's Perl Modules module to download $1 from CPAN. index_spamassassin=SpamAssassin white_title=Allowed and Denied Addresses white_desc=The tables on this page allow you to specify From: and To: addresses for email that is always or never categorized as spam. Any other email will be processed as normal by SpamAssassin's rules. All email addresses can contain wildcards, like *@foo.com or *.foo.com to match entire domains. white_header=Email addresses to categorize as spam white_from=From: addresses to never classify as spam white_gfrom=System-wide addresses to never classify as spam white_addr=Address white_rcvd=From: addresses to never classify as spam, depending on Received: domain white_rcvdhost=Source domain white_unfrom=Exceptions for From: addresses to never classify as spam white_gunfrom=System-wide exceptions for addresses to never classify as spam white_black=From: addresses to always classify as spam white_gblack=System-wide addresses to always classify as spam white_unblack=Exceptions for From: addresses to always classify as spam white_gunblack=System-wide exceptions for addresses to always classify as spam white_to=To: or Cc: addresses to allow some or all spam to white_level=Allow white_level0=Some spam white_level1=More spam white_level2=All spam white_err=Failed to save white and black lists white_efrom='$1' is not a valid From: address white_ercvd='$1' is not a valid domain name white_importdesc=This form can be used to add email addresses from a file (such as an exported Outlook or Eudora address book) to the allowed list. white_import=Import addresses from file white_sort=Sort allowed addresses after import? white_importok=Import Now white_return=allowed and denied addresses score_title=Spam Classification score_desc=SpamAssassin assigns a score to each message based on its content and headers. The options on this page determine the score above which a message is considered spam, and some of the methods via which that score is calculated. score_header=Spam message classification options score_score=SpamAssassin test scores score_name=Test name score_points=Points score_hits=Hits above which a message is considered spam score_rbl=Skip RBL open-relay check? score_mx=Number of times to check From: address MX score_mxdelay=Seconds to wait between MX checks score_langs=Languages in email that are not considered potential spam score_langsall=All languages score_langssel=Selected languages .. score_locales=Character sets in email that are not considered potential spam score_localesall=All character sets score_localessel=Selected character sets .. score_auto=Whitelist score factor score_timeout=Seconds to wait for RBL queries score_received=Number of Received: headers to check with RBL score_describe=Test descriptions for report score_descr=Description score_err=Failed to save message scoring score_ename='$1' is not a valid test name score_epoints='$1' is not a valid number of points score_edesc=Missing description for score '$1' score_ehits=Missing or invalid number of hits above which a message is considered spam score_eauto=Missing or invalid whitelist score factor (must be between 0 and 1) score_emx=Missing or invalid number of times to check From: address MX score_emxdelay=Missing or invalid seconds to wait between MX checks score_etimeout=Missing or invalid seconds to wait for RBL queries score_ereceived=Missing or invalid number of Received: headers to check with RBL score_bayes=Use Bayesian learning classifier? report_title=Message Modification report_desc=The options on this page control the modifications that SpamAssassin makes to the headers and body of all messages that it analyzes, and modifications that it makes to those classified as spam. report_header=Analysed and spam message modification options report_report=Report attached to messages exceeding the spam threshold report_clear=Use just text below .. report_noclear=Add text below to default message .. report_terse=Report attached to spam messages when in terse mode report_rsubject=Prepend text to Subject: header report_rfrom=Prepend text to From: header report_rto=Prepend text to To: header report_leave=Leave unchanged report_rewrite=Modify Subject: header of spam? report_subject=Text to prepend to spam Subject: header report_rheader=Put report in X-Spam-Status: header instead of body? report_useterse=Only generate terse report? report_fold=Split X-Spam-Status: header over multiple lines? report_safe=Put original message into attachment? report_safe2=Yes, as plain text report_detail=Include details of spam phrases? report_stars=Include X-Spam-Level: header? report_char=X-Spam-Level: header character report_defang=Change MIME type of spam to text/plain? report_err=Failed to save spam report options report_echar=A single character must be entered for the X-Spam-Level: header report_adds=Additional headers to add report_addfor=Message type report_addheader=Header report_addtext=Text for header report_addspam=Spam report_addham=Ham report_addall=All report_eaddheader=Missing or invalid additional header to add $1 user_title=Miscellaneous User Options user_desc=The options on this page are mostly related to the paths and settings that SpamAssassin uses for the external spam identification packages Razor, DCC and Pyzor. You can also tell SpamAssassin if it will be able to perform DNS lookups or not. user_header=Miscellaneous user-level options user_dns=Can SpamAssassin do DNS lookups? user_dnslist=Test by checking servers user_dnstest=Test user_razor=Razor request timeout in seconds user_dcc=Location of DCC client program user_inpath=In PATH user_bodymax=DCC body checksum count before match user_fuz1max=DCC fuz1 checksum count before match user_fuz2max=DCC fuz2 checksum count before match user_timeout=DCC request timeout in seconds user_dheader=Add DCC header to messages? user_pyzor=Location of Pyzor client program user_pbodymax=Pyzor body checksum count before match user_ptimeout=Pyzor request timeout in seconds user_pheader=Add Pyzor header to messages? user_err=Failed to save user options user_etimeout='$1' is not a valid timeout user_epath='$1' is not a valid client program path user_emax='$1' is not a valid checksum count header_title=Header and Body Tests header_desc=This page allows you to define additional tests that SpamAssassin will apply to email, based on message headers, the body content, URLs found in the body, or combinations of other tests. The name assigned to each test is up to you, but is usually something like CONTAINS_FOO. The actual score that SpamAssassin adds to messages matching a test can be set by entering your own or built-in test names in the tables at the bottom of the page. header_switch=Switch to simple mode .. header_header=Additional header and body tests header_allow=Allow users to define tests? header_test=Header tests header_tname=Test name header_name=For header header_op=Check if header_op0=Matches.. header_op1=Doesn't match.. header_op2=Exists header_op3=Evaluate.. header_pat=Regular expession header_default=Default value header_uri=Email URL tests header_body=Body tests header_mode=Body part header_mode0=Plain text header_mode1=All text header_mode2=Raw text header_mode3=Entire mail header_meta=Tests based on others header_bool=Boolean test expression header_err=Failed to save tests header_ename='$1' is not a valid test name header_eclash=Test name '$1' is appears more than once header_eregexp2=Missing expression for test '$1' header_eflags='$1' are not valid regular expression flags header_eeval='$1' is not a valid evaluation function header_eheader='$1' is not a valid email header header_eregexp='$1' is not a valid regular expression (must be like /expression/) header_emeta=Missing test expression for test '$1' priv_title=Miscellaneous Privileged Options priv_desc=The options on this can only be set globally, rather than in individual users' configuration files. They control with paths to various configuration and logging file. priv_header=Miscellaneous privilege-level settings priv_white=Automatic whitelist file path priv_mode=Whitelist octal file mode priv_dcc=DCC command arguments priv_log=Timing log files path priv_razor=Razor configuration file path priv_phrases=Spam indicator phrases priv_phrase=Two-word phrase priv_score=Score priv_highest=Highest phrase score priv_err=Failed to save privileged options priv_epath='$1' is not a valid path priv_emode='$1' is not a 4-digit octal file mode priv_eargs='$1' is not a valid list of arguments priv_emscore='$1' is not a valid highest phrase score priv_ephrase='$1' is not a valid two-word spam phrase priv_escore=Missing or invalid score for spam phrase '$1' usually=Usually $1 ecannot=You are not allowed to use this page setup_title=Setup Procmail For SpamAssassin setup_desc_webmin=This form can be used to setup Procmail in $1 to run SpamAssassin on all email messages received by your system. However, this will only have any effect if your mail server has been configured to use Procmail for local delivery, or for users whose .forward files are set up to run Procmail. setup_desc_usermin=This form can be used to setup Procmail in $1 to run SpamAssassin on all email messages sent to your account. However, this will only have any effect if the mail server has been configured to use Procmail for local delivery, or if your .forward files is set up to feed all email to Procmail. setup_head=All messages processed by SpamAssassin will have the X-Spam headers set, so that they can be further filtered by mail clients. setup_rel=Any non-absolute mail file or directory paths entered above will be relative to the home directory of the user receiving email. setup_home=The variable $HOME can be used in the paths above, which will be replaced with the home directory of the user receiving email. setup_to=Action for messages classified as spam setup_null=Throw away setup_default=Deliver normally setup_file=Append to mbox-format mail file .. setup_maildir=Append to Qmail-style mail directory .. setup_mhdir=Append to MH-style mail directory .. setup_drop=Run SpamAssassin and write to file as setup_drop1=Recipient Unix user setup_drop0=root user setup_ok=Setup Procmail for SpamAssassin setup_email=Forward to email address setup_err=Failed to setup SpamAssassin setup_efile=Missing or invalid mbox-format file setup_emaildir=Missing or invalid Qmail mail directory setup_emhdir=Missing or invalid MH mail directory setup_eemail=Missing or invalid email address log_white=Modified allowed and denied addresses log_score=Modified spam classification log_report=Modified message modification log_user=Modified miscellaneous user options log_header=Modified header and body tests log_priv=Modified miscellaneous privileged options log_setup=Setup Procmail for SpamAssassin log_procmail=Changed Procmail configuration log_import=Imported $1 allowed addresses import_title=Import Addresses import_err=Failed to import addresses import_efile=No file to import from selected import_enone=No email addresses found in file import_ok1=$2 email addresses were found in the file, of which $1 were new and have been added to the alllowed addresses list. import_ok2=$1 email addresses were found in the file, but they were all already in the allowed addresses list. mail_title=Spam Mail mail_desc=This page lists messages that have been classified as spam, and are awaiting some action. Messages that have been incorrectly indentified can be moved to your Inbox, while those that are really spam can be deleted. mail_level=Score mail_level2=Spam score mail_inbox=Move to Inbox mail_whitelist2=Allow Sender & Inbox mail_razor=Report as Spam & Delete mail_ham=Report as Ham & Inbox mail_delete=Delete mail_return=spam mail list mail_pos=Spam messages $1 to $2 of $3 mail_none=There are no messages in your spam folder mail_refresh=Refresh mail_will=Automatic refresh in $1 minutes mail_wills=Automatic refresh in $1 seconds mail_delall=Delete All Spam mail_search3=Search for score above: process_eclean=An error occurred removing the SpamAssassin headers from this email process_ereport=Failed to report email to SpamAssassin : $1 apply_err=Failed to apply changes apply_none=No SpamAssassin daemon processes found! acl_avail=Icons available to user acl_file=SpamAssassin configuration file to edit acl_filedef=Global config file acl_awl=Allowed users for auto-whitelist editing acl_awl0=All users acl_awl1=Only listed users $1 acl_awl2=Only members of groups $1 search_escore=Missing or invalid spam score search_results5=$1 mail messages with spam score at or above $2 .. razor_title=Setup Razor Spam Detector razor_desc=Vipul's Razor is a collaborative spam detection and reporting system that can improve the classification of spam sent to your address. However, before it can be used you must register for a Razor account, using the form below. razor_user=Razor username razor_pass=Razor password razor_auto=Choose automatically razor_enter=Entered razor_ok=Setup Now razor_ecmd=The Razor setup command $1 was not found on your system, indicating that Razor is not installed. razor_err=Failed to setup Razor razor_euser=Missing username razor_epass=Missing password razor_doing=Now attempting to register and setup Razor .. razor_done=.. done. razor_failed=.. failed! See the error output above for the reason why. procmail_title=Procmail Spam Delivery procmail_ok=Change Procmail Delivery procmail_desc=The form can be used to change the Procmail configuration that determines what happens to messages classified as spam. simple_title=$header_title simple_desc=This page allows you to define additional tests that SpamAssassin will apply to email, based on message headers, the body content, URLs found in the body. The name assigned to each test is up to you, but is usually something like CONTAINS_FOO. simple_switch=Switch to advanced mode .. simple_header=Message tests to apply simple_name=Test name simple_for=Check simple_regexp=Match expression simple_score=Score to apply simple_describe=Description simple_err=Failed to save message tests before_ecmd=Before-saving command failed : $1 after_ecmd=After-saving command failed : $1 connect_emysql=Failed to load the database driver $1 connect_elogin=Failed to login to the database $1 : $2. connect_equery=The database $1 does not contain the preferences table $2 connect_eldapmod=Perl module $1 needed to communicate with LDAP is not installed or not loadable connect_eldap=Failed to connect to LDAP server $1 on port $2 connect_eldaplogin=Failed to login to LDAP server $1 as $2 : $3 connect_ebase=LDAP base DN $1 is not valid : $2 eldap=LDAP operation failed : $1 esql=SQL failed : $1 ldap_euser=Could not find LDAP user object for $1 db_title=SQL and LDAP Databases db_header=Configuration storage database options db_dsn=Store user configurations in db_mode0=Configuration files db_mode1=SQL database db_mode3=LDAP database db_mode4=Other DSN db_user=SQL database username db_pass=SQL database password db_luser=LDAP server username db_lpass=LDAP server password db_dbdriver=Database type db_dbhost=Database server hostname db_dbdb=Database name db_dbport=Port number db_err=Failed to save databases db_edbhost=Missing or invalid SQL server hostname db_edbdb=Missing or invalid-looking database name db_edbport=Missing or invalid SQL server port number db_edsn=Missing other DSN db_eusername=Missing or invalid database username - no spaces are allowed db_ldaphost=LDAP server hostname db_ldapport=Port number db_ldapdn=Base DN for users db_ldapattr=Attribute for SpamAssassin preferences db_ldapscope=Search depth db_ldapsub=Entire subtree db_ldapone=One level db_ldapbase=Base only db_ldapuid=Attribute for username db_eldaphost=Missing or invalid LDAP server hostname db_eldapport=Missing or invalid LDAP server port number db_eldapdn=Missing or invalid base DN - no spaces are allowed db_eldapattr=Missing or invalid SpamAssassin attribute db_eldapuid=Missing or invalid username attribute awl_title=Manage Auto-Whitelists awl_search=Search whitelist for: awl_ok=Search awl_searching=Showing auto-whitelist entries matching $1 .. awl_email=Email address awl_ip=Sender's IP or network awl_score=Score to apply awl_none=None awl_unknown=Unknown awl_delete=Remove Selected Entries awl_cannot=Usermin could not open your auto-whitelist file $1, perhaps because it is in an un-supported format. awl_empty=Your auto-whitelist file $1 does not contain any entries. It will be populated by SpamAsssassin as mail is processed by the system. awl_user=Show auto-whitelist for user: awl_uok=Show awl_nofile=The user $1 does not have an auto-whitelist file. awl_nouser=The user $1 does not exist. awl_cannotuser=You are not allowed to edit the auto-whitelist for user $1. awl_toomany=There are $1 entries in the auto-whitelist, but at most $2 can be displayed. Use the search form above to limit those shown. awl_deleteone=Clear Auto-Whitelist awl_deleteonedesc=Remove all auto-whitelist entries for the user $1. awl_deleteall=Clear All Auto-Whitelists awl_deletealldesc=Remove all auto-whitelist entries for all users on the system. dawl_err=Failed to delete from auto-whitelist dawl_eopen=Could not open whitelist dawl_enone=No addresses to delete selected dawl_ecannot=You are not allowed to manage the auto-whitelist for this user dawl_doing=Deleting auto-whitelists for all users .. dawl_done=.. deleted $2 entries from $1 users. dawl_title=Delete All Auto-Whitelists spam/lang/de0100644000567100000120000004176511017163270012746 0ustar jcameronwheelacl_avail=Icons, die für Benutzer sichtbar sind apply_err=Konnte Änderungen nicht anwenden apply_none=Es wurde kein SpamAssassin-Daemon-Prozess gefunden! ecannot=Sie dürfen diese Seite nicht benutzen header_allow=Erlaube Benutzern eigene Teste zu definieren? header_body=Textkörpertests header_bool=Boolescher Testausdruck header_default=Standard-Wert header_desc=Auf dieser Seite können Sie zusätzliche Tests definieren, die SpamAssassin auf E-Mails, basierend auf E-Mail-Header, den Textkörper, URLs die im Textkörper gefunden werden anwendet oder vorhandene Test kombinieren. Den Namen, den Sie vergeben, ist völlig frei. Für den Überblick wäre jedoch ein den Test beschreibender Name hilfreich (BEINHALTET_BLUBB). Den Wert, den Spamassassin über eine oder mehrere zusätzliche E-Mail-Header einer E-Mail hinzufügt, wenn ein Test erfolgreich war, können Sie einstellen, wenn Sie Ihren Test der Tabelle am Ende dieser Seite hinzufügen. header_eeval='$1' ist keine gültige Auswertungsfunktion header_eheader='$1' ist kein gültiger E-Mail-Header header_emeta=Fehlender Testausdruck für Test '$1' header_ename='$1' ist kein gültiger Testname header_eregexp='$1' ist kein gültiger regulärer Ausdruck (muß aussehen wie /ausdruck/) header_err=Konnte Tests nicht speichern header_header=Zusätzliche E-Mail-Header- und Textkörpertests header_meta=Tests basiert auf anderen header_mode=Textkörperteil header_mode0=Normaler Text header_mode1=Gesamter Text header_mode2=Rohtext header_mode3=Gesamte E-Mail header_name=Für E-Mail-Header header_op=Prüfe ob header_op0=ist ähnlich .. header_op1=ist nicht ähnlich ... header_op2=Existiert header_op3=Auswerten ... header_pat=Regulärer Ausdruck header_test=E-Mail-Header-Tests header_title=E-Mail-Header- und Textkörpertests header_tname=Testname header_uri=E-Mail-URL-Tests import_efile=Es wurde keine Datei, aus der importiert werden soll, ausgewählt import_enone=Es wurden keine E-Mail-Adressen in der Datei gefunden import_err=Konnte Adressen nicht importieren import_ok1=$2 E-Mail-Adressen wurden in der Datei gefunden, wobei $1 neu sind und der Liste der erlaubten E-Mail-Adressen hinzugefügt wurden. import_ok2=$1 E-Mail-Adressen wurden in der Datei gefunden, aber diese befinden sich bereits in der Liste der erlaubten E-Mail-Adressen. import_title=Importiere Adressen index_apply=Änderungen anwenden index_applydesc=Klicken Sie auf diesen Button, um die momentan SpamAssassin-Konfiguration anzuwenden, indem Sie ein HUP-Signal an alle $1 laufenden Prozesse schicken. index_cpan=Da SpamAssassin ein Perl-Modul ist, können Sie es auch automatisch durch das Webmin-Modul Perl-Module (CPAN) aus CPAN herunterladen und installieren lassen. index_ecmd=Das SpamAssassin-Kommando $1 wurde nicht auf Ihrem System gefunden. Entweder ist SpamAssassin nicht installiert, oder Ihre Modul-Konfiguration ist falsch. index_ecmd2=Das SpamAssassin Kommando $1 wurde auf Ihrem System nicht gefunden. index_econfig=Die lokale SpamAssassin-Konfigurationsdatei oder das Verzeichnis $1 wurde nicht auf Ihrem System gefunden. Entweder ist SpamAssassin nicht installiert, oder Ihre Modul-Konfiguration ist falsch. index_return=Modulindex index_title=SpamAssassin E-Mail-Filter index_version=SpamAssassin Version $1 index_warn_usermin=SpamAssassin scheint weder in Ihrer persönlichen Procmail-Konfigurationsdatei $2 noch der globalen Konfigurationsdatei $1 aufgenommen zu sein. Solange SpamAssassin nicht global aktivert ist, wird jede Konfigurationsänderung hier keinerlei Wirkung zeigen. index_warn_webmin=SpamAssassin scheint nicht in der globalen Konfigurationsdatei $1 aufgenommen zu sein. Solange ein Benutzer SpamAssassin nicht in seine persönliche Procmail-Konfigurationsdatei aufnimmt, wird jede Konfigurationsänderung hier keinerlei Wirkung zeigen. log_header=Header- und Textkörpertest geändert log_import=$1 erlaubte E-Mail-Adressen importiert. log_priv=Verschiedene privilegierte Benutzeroptionen geändert log_report=E-Mail-Änderung geändert log_score=Spam-Klassifizierung geändert log_setup=Procmail für SpamAssassin eingerichtet log_user=Verschiedene Benutzeroptionen geändert log_white=Erlaubte und verbotene E-Mail-Adressen geändert mail_delall=Lösche alle Spams mail_delete=Löschen mail_desc=Auf dieser Seite sehen Sie E-Mails, die als Spam klassifiziert wurden und auf weitere Bearbeitung warten. Sie können E-Mails, die fälschlicherweise als Spam erkannt wurden in Ihren Posteingang verschieben, während die übrig gebliebenen E-Mails als Spam gelöscht werden können. mail_ham="Kein Spam" --> Posteingang mail_inbox=--> Posteingang mail_level=Wert mail_level2=Spamwert mail_none=Es gibt keine E-Mails in Ihrem Spam-Ordner mail_pos=Spam-E-Mails $1 bis $2 von $3 mail_razor="Spam" --> Löschen mail_refresh=Aktualisieren mail_return=Spam-E-Mail-Liste mail_search3=Suche nach Spam mit einem Wert höher als: mail_title=Spam-E-Mail mail_whitelist2="Erlauben" --> Posteingang mail_will=Diese Seite wird in $1 Minuten neu aufgebaut. mail_wills=Diese Seite wird in $1 Sekunden neu aufgebaut. priv_dcc=DCC-Befehlsargumente priv_desc=Diese Option kann nur global und nicht in Benutzer-Konfigurationsdateien gesetzt werden. Sie bestimmen den Pfad zu verschiedensten Konfigurations- und Logdateien. priv_eargs='$1' ist kein gültige Liste von Argumenten priv_emode='$1' ist nicht im vierstelligem oktalem Dateimodus priv_emscore='$1' ist kein gültiger Wert für höchste Phrasen priv_epath='$1' ist kein gültiger Pfad priv_ephrase='$1' ist keine gültige zweiwörtrige Spam-Phrase priv_err=Konnte privilegierte Optionen nicht speichern priv_escore=Fehlender oder unzulässiger Wert für Spam-Phrase '$1' priv_header=Verschiedene Privileg-Niveaueinstellungen priv_highest=Höchster Phrasenwert priv_log=Pfad zur Timing-Logdatei priv_mode=Oktaler Dateimodus für Whitelist priv_phrase=Zwei-wörtrige Phrase priv_phrases=Spam-Indikatorphrasen priv_razor=Pfad zur Razor-Konfigurationsdatei priv_score=Wert priv_title=Verschiedene privilegierte Optionen priv_white=Automatischer Pfad zur Whitelist process_eclean=Beim Entfernen der SpamAssassin-E-Mail-Header aus dieser E-Mail ist ein Fehler aufgetreten process_ereport=Konnte E-Mail nicht an SpamAssassin melden: $1 razor_auto=Wähle automatisch razor_desc="Vipul's Razor" ist ein kollaboratives Spamerkennungs- und Reportingsystem, welches die Einstufung von an Sie adressierten Spam erleichtern kann. Sie müssen jedoch einen Account eröffnen, bevor Sie Razor benutzen können. Diese Seite soll dabei helfen. razor_doing=Versuche einen Account zu registrieren und Razor einzurichten ... razor_done=... erledigt. razor_ecmd=Das Razor-Setupkommando $1 wurde auf Ihrem System nicht gefunden. Dies impliziert, daß Razor nicht installiert zu sein scheint. razor_enter=Benutzerdefiniert razor_epass=Fehlendes Password razor_err=Konnte Razor nicht einrichten razor_euser=Fehlender Benutzername razor_failed=.. nicht erfolgreich! Lesen Sie im weiteren den Grund dafür. razor_ok=Jetzt einrichten razor_pass=Razor Passwort razor_title=Razor Spamerkennung einrichten razor_user=Razor Benutzername report_char=X-Spam-Level: E-Mail-Header-Zeichen report_clear=Benutze nur den untenstehenden Text ... report_defang=Ändere den MIME-Typ von Spam auf text/plain? report_desc=Die Optionen auf dieser Seite kontrollieren sowohl die Änderungen, die SpamAssassin an E-Mail-Headern und Testkörpern aller E-Mails tätigt, als auch die Änderungen, die er vornimmt, damit eine E-Mail als Spam klassifiziert werden kann. report_detail=Details des Spam-Phrasen mitangeben? report_echar=Es darf nur ein Zeichen für den X-Spam-Level: E-Mail-Header angegeben werden report_err=Konnte Spam-Reportoptionen nicht speichern report_fold=Teile den X-Spam-Status: E-Mail-Header über mehrere Zeilen auf? report_header=Analysierte und Spam-E-Mail-Änderungsoptionen report_leave=Unverändert lassen report_noclear=Füge folgenden Test der Standard-Nachricht hinzu ... report_report=Report, welcher E-Mails angefügt wird, die die Spam-Schwelle übersteigen report_rewrite=Ändere den Betreff-E-Mail-Header von Spam? report_rfrom=Vor dem From:-Header einstellen report_rheader=Füge den Report in den X-Spam-Status: E-Mail-Header statt in den Textkörper ein? report_rsubject=Vor dem Betreff:-Header einstellen report_rto=Vor dem An:-Header einstellen report_safe=Füge die Original-E-Mail nicht dem Dateianhang hinzu? report_stars=X-Spam-Level: E-Mail-Header benutzen? report_subject=Text, welcher dem Betreff-E-Mail-Header hinzugefügt wird. report_terse=Report dem Spam anhängen, wenn SpamAssassin im kurzen Modus läuft report_title=E-Mail-Modifizierung report_useterse=Nur kurzen Report generieren? score_auto=Whitelist Wertfaktor score_desc=SpamAssassin vergibt jeder E-Mail einen Wert, die auf der Auswertung von E-Mail-Headern und Textkörper basiert. Die Optionen auf dieser Seite zeigen den Wert, oberhalb eine E-Mail als Spam klassifiziert wird und zeigen einige der Methoden an, die diesen Wert berechnen. score_descr=Beschreibung score_describe=Testbeschreibung für Reports score_eauto=Fehlender oder ungültiger Whitelist Wertfaktor (muß zwischen 0 und 1 sein) score_edesc=Fehlende Beschreibung für Wert '$1' score_ehits=Fehlende oder ungültige Anzahl von Hits, oberhalb eine E-Mail als Spam klassifiziert wird. score_emx=Fehlende oder ungültige Anzahl an Versuchen den MX-Eintrag der Absender-Domaine zu ermitteln. score_emxdelay=Fehlende oder ungültige Anzahl an Sekunden, die zwischen den Tests des MX-Eintrages vergehen soll. score_ename='$1' ist kein gültiger Testname score_epoints='$1' ist keine gültige Anzahl von Punkten score_ereceived=Fehlende oder ungültige Anzahl von Received:-E-Mail-Headern die via RBL getestet werden sollen. score_err=Konnte die E-Mail-Wertung nicht speichern score_etimeout=Fehlende oder ungültige Anzahl an Sekunden, um auf Ergebnisse des RBL-Tests zu warten. score_header=Spam-E-Mail-Klassifikationsoptionen score_hits=Hits höher als, damit eine E-Mail als Spam klassifiziert wird score_langs=Sprachen in E-Mails, die nicht als potentieller Spam gelten sollen score_langsall=Alle Sprachen score_langssel=Ausgewählte Sprachen ... score_locales=Zeichensätze in E-Mails, die nicht als potentieller Spam gelten sollen score_localesall=Alle Zeichensätze score_localessel=Ausgewählte Zeichensätze ... score_mx=Anzahl von Versuchen um den MX-Eintrag eines Versenders zu prüfen score_mxdelay=Sekunden um zwischen den MX-Tests zu warten score_name=Testname score_points=Punkte score_rbl=Übergehe den RBL-Open-Relay-Test? score_received=Anzahl der Received:-E-Mail-Headern, die mit RBL getestet werden sollen score_score=SpamAssassin Testwerte score_timeout=Sekunden, die auf Rückmeldung der RBL-Tests gewarten wird score_title=Spamklassifizierung search_escore=Fehlender oder ungültiger Spamwert search_results5=$1 E-Mails mit einem Spamwert gleich oder höher als $2 ... setup_default=Normal ausliefern setup_desc_usermin=Dieses Formular kann benutzt werden, um Procmail in $1 so einzurichten, daß SpamAssassin alle E-Mails, die Sie erreichen sollen, prüft. Das kann jedoch nur dann funktionieren, wenn der Mailserver dahingehend konfiguriert ist, Procmail für die lokale Auslieferung zu benutzen, oder wenn Ihre .forward-Datei so eingestellt ist, daß alle E-Mails an Procmail ausgeliefert werden. setup_desc_webmin=Dieses Formular kann benutzt werden, um Procmail in $1 so einzurichten, daß SpamAssassin alle E-Mails, die Ihr System erreichen sollen, prüft. Das kann jedoch nur dann funktionieren, wenn der Mailserver dahingehend konfiguriert ist, Procmail für die lokale Auslieferung zu benutzen, oder wenn Ihre .forward-Datei so eingestellt ist, daß alle E-Mails an Procmail ausgeliefert werden. setup_drop=SpamAssassin starten und schreibe zur Datei als setup_drop0=root setup_drop1=Empfangender Unixbenutzer setup_efile=Fehlende oder ungültige Mbox-artige Datei setup_emaildir=Fehlendes oder ungültiges QMail-Mailverzeichnis setup_emhdir=Fehlendes oder ungültiges MH-Mailverzeichnis setup_err=Konnte SpamAssassin nicht einrichten setup_file=Schreibe in folgende mbox-artige Datei ... setup_head=Alle E-Mails, die von Spamassassin geprüft werden, werden über einen oder mehrere X-Spam-E-Mail-Header verfügen, die von nachfolgenden E-Mail-Clients zur weiteren Filterung genutzt werden können. setup_home=Die Variable $HOME kann in den obigen Pfaden benutzt werden und werden durch das Heimatverzeichnis des Benutzers ersetzt, der eine E-Mail erhält. setup_maildir=Füge dem QMail-artigen Verzeichnis an ... setup_mhdir=Füge dem MH-artigen Verzeichnis an ... setup_null=Werfe weg setup_ok=Richte Procmail für SpamAssassin ein setup_rel=Jede(s) nicht-absolute(s) E-Maildatei oder -Verzeichnis, welche(s) oben angegeben wird, wird relativ zum Heimatverzeichnis des Benutzers, der E-Mails empfängt, verwendet. setup_title=Richte Procmail für SpamAssassin ein setup_to=Aktionen für E-Mails, die als Spam klassifiziert werden user_bodymax=DCC-Textkörper-Prüfsummenanzahl vor einem Hit user_dcc=Pfad zum DCC-Client-Programm user_desc=Die Optionen dieser Seite werden zumeist für die Einstellungen von Pfaden und Einstellungen genutzt, die SpamAssassin braucht, um die externen Spam-Identifizierungstools Razor,DCC und Pyzor parametrisiert ansprechen zu können. Hier können Sie Spamassassin auch mitteilen, ob es DNS-Lookups machen soll oder nicht. user_dheader=Füge DCC-E-Mail-Header den E-Mails hinzu? user_dns=SpamAssassin darf DNS-Lookups machen? user_dnslist=Prüfung mit diesem Servern user_dnstest=Test user_emax='$1' ist keine gültige Prüfsummenzahl user_epath='$1' ist kein gültiger Pfad zum Client-Programm user_err=Konnte Benutzeroptionen nicht speichern user_etimeout='$1' ist kein gültiges Timeout user_fuz1max=DCC user_fuz2max=DCC-fuz2-Prüfsummenanzahl vor einem Hit user_header=Verschiedene Benutzer-Ebene-Optionen user_inpath=In Pfad user_pbodymax=Pyzor-Prüfsummenanzahl vor einem Hit user_pheader=Füge Pyzor-E-Mail-Header den E-Mails hinzu? user_ptimeout=Zeit in Sekunden, die Pyzor auf Ergebnisse warten soll. user_pyzor=Pfad zum Pyzor-Client-Programm user_razor=Zeit in Sekunden, die Razor auf Ergebnisse warten soll. user_timeout=Zeit in Sekunden, die DCC auf Ergebnisse warten soll. user_title=Verschiedene Benutzeroptionen usually=Normalerweise $1 white_addr=Adresse white_black=Absender-E-Mail-Adressen, die immer als Spam gelten sollen white_desc=Die Tabellen auf dieser Seite erlauben Ihnen Absender- und Empfänger-E-Mail-Adressen einzugeben, deren E-Mails immer oder niemals als Spam erkannt werden sollen. Jede andere E-Mail wird durch SpamAssassin geprüft werden. E-Mail-Adressen können Wildcards wie z. B. *@foo.com oder sogar *.foo.com beinhalten, um Auswirkungen auf komplette Domains zu haben. white_efrom='$1' ist keine gültige Absender-E-Mail-Adresse white_ercvd='$1' ist kein gültiger Domnainname white_err=Konnte White- und Blacklisten nicht speichern white_from=Absender-E-Mail-Adressen, die niemals als Spam gelten sollen white_gblack=Systemweite E-Mail-Adressen, die immer als Spam gelten sollen white_gfrom=Systemweite E-Mail-Adressen, die niemals als Spam gelten sollen white_gunblack=Systemweite Ausnahmen für E-Mail-Adressen, die immer als Spam gelten sollen white_gunfrom=Systemweite Ausnahmen für E-Mail-Adressen, die niemals als Spam gelten sollen white_header=E-Mail-Adressen, die immer als Spam gelten sollen white_import=Importiere Adressen aus Datei white_importdesc=Dieses Formular kann dazu benutzt werden, um E-Mail-Adressen aus einer Datei (wie z. B. ein exportiertes Outlook- oder Eudora-Adressbuch im CVS-Format) in die Liste der erlaubten Adressen importieren. white_importok=Importiere jetzt white_level=Erlaube white_level0=Wenig Spam white_level1=Mehr Spam white_level2=Nur Spam white_rcvd=Absender-E-Mail-Adressen, die niemals als Spam gelten sollen, basierend auf der Received-Daomaine white_rcvdhost=Quell-Domain white_return=Liste der erlaubten und verbotenen Absender-E-Mail-Adressen white_sort=Sortiere erlaubte E-Mail-Adressen nach dem Importieren? white_title=Erlaubte und verbotene Absender-E-Mail-Adressen white_to=To: oder Cc:-E-Mail-Adressen, an die wenig oder aller Spam ausgeliefert werden soll white_unblack=Ausnahmen für Absender-E-Mail-Adressen, die immer als Spam gelten sollen. white_unfrom=Ausnahmen für Absender-E-Mail-Adressen, die niemals als Spam gelten sollen. spam/lang/ca0100644000567100000120000004722711017163270012740 0ustar jcameronwheelindex_title=Filtre de Correu SpamAssassin index_ecmd=No s'ha trobat al sistema l'ordre $1 de SpamAssassin. Pot ser que no estigui installada, o b que la configuraci del mdul sigui incorrecta. index_ecmd2=No s'ha trobat al sistema l'ordre $1 de spamassassin. index_econfig=No s'ha trobat al sistema el directori o fitxer de configuraci local $1 de SpamAssassin. Pot ser que SpamAssassin no estigui installat, o b que la configuraci del mdul sigui incorrecta. index_edb=No he pogut connectar amb la base de dades de configuracio de SpamAssassin: $1. Comprova la configuraci del mdul per assegurar que ests utilitzant els valors correctes. index_version=SpamAssassin versi $1 index_warn_usermin=No sembla que SpamAssassin estigui configurat al fitxer de configuraci $2 de Procmail ni al fitxer global $1, aix que cap configuraci feta utilitzant aquest mdul tindr cap efecte a menys que SpamAssassin s'hagi configurat globalment. index_warn_webmin=No sembla que SpamAssassin estigui configurat al fitxer de configuraci $1 de Procmail, aix que cap configuraci feta utilitzant aquest mdul tindr cap efecte a menys que els usuaris se'l configurin individualment. index_return=a l'ndex de mduls index_apply=Aplica els Canvis index_applydesc=Fes clic sobre aquest bot per aplica la configuraci actual de SpamAssassin enviant un senyal HUP a tots els processos $1 en execuci. index_cpan=Com que SpamAssassin s un mdul Perl, tamb el pots installar automticament fent servir el mdul Mduls Perl de Webmin per descarregar $1 de CPAN. index_spamassassin=SpamAssassin white_title=Adreces Permeses i Denegades white_desc=Les taules d'aquesta pgina permeten especificar adreces de correu From: i To: que sempre o mai estan classificades com a spam. Qualsevol altre correu es processar com a normal per part de les regles de SpamAssassin. Totes les adreces de correu poden contenir escarrassos, com ara *@foo.com o *.foo.com per a coincidir amb dominis sencers. white_header=Adreces de correu que s'han de classificar com a spam white_from=Adreces From: que mai s'han de classificar com a spam white_gfrom=Adreces de tot el sistema que mai s'han de classificar com a spam white_addr=Adrea white_rcvd=Adreces From: que mai s'han de classificar com a spam, depenent del domini de Received: white_rcvdhost=Domini origen white_unfrom=Excepcions de les adreces From: que mai s'han de classificar com a spam white_gunfrom=Excepcions per a tot el sistema de les adreces que mai s'han de classificar com a spam white_black=Adreces From: que sempre s'han de classificar com a spam white_gblack=Adreces de tot el sistema que sempre s'han de classificar com a spam white_unblack=Excepcions de les adreces From: que sempre s'han de classificar com a spam white_gunblack=Excepcions per a tot el sistema de les adreces que sempre s'han de classificar com a spam white_to=Adreces To: o Cc: per a les quals cal permetre una mida o tot el spam white_level=Permet white_level0=Una mica de spam white_level1=Ms spam white_level2=Tot el spam white_err=No he pogut desar les llistes blanca i negra white_efrom='$1' no s una adrea From: vlida white_ercvd='$1' no s un nom de domini vlid white_importdesc=Aquest formulari es pot fer servir per afegir adreces de correu d'un fitxer (com ara una llibreta dadreces exportada des d'Outlook o Eudora) a la llista permesa. white_import=Importa les adreces del fitxer white_sort=Ordena les adreces permeses desprs de la importaci white_importok=Importa-ho Ara white_return=a les adreces permeses i denegades score_title=Classificaci de Spam score_desc=SpamAssassin assigna una puntuaci a cada missatgebasant-se en el seu contingut i les seves capaleres. Les opcions d'aquesta pgina determinen la puntuaci per sobre de la qual un missatge es considera spam, i alguns dels mtodes mitjanant els quals es calcula aquesta puntuaci. score_header=Opcions de classificaci de missatges spam score_score=Puntuaci dels tests de SpamAssassin score_name=Nom del test score_points=Punts score_hits=Impactes per sobre dels quals un missatge es considera spam score_rbl=Omet la comprovaci relay obert RBL score_mx=Nombre de cops a comprovar l'adrea MX From: score_mxdelay=Segons d'espera entre comprovacions MX score_langs=Idiomes del correu que no sn considerats spam potencial score_langsall=Tots els idiomes score_langssel=Els idiomes seleccionats... score_locales=Jocs de carcters del correu que no sn considerats spam potencial score_localesall=Tots els jocs de carcters score_localessel=Els jocs de carcters seleccionats... score_auto=Factor de puntuaci de la llista blanca score_timeout=Segons d'espera entre consultes RBL score_received=Nombre de capaleres Received: a comprovar amb RBL score_describe=Descripci del test per a l'informe score_descr=Descripci score_err=No he pogut desar la puntuaci del missatge score_ename='$1' no s un nom de test vlid score_epoints='$1' no s un nombre de punts vlid score_edesc=Hi falta la descripci de la puntuaci '$1' score_ehits=Hi falta el nombre d'impactes per sobre del qual un missatge es considera spam o b s incorrecte score_eauto=Hi falta el factor de puntuaci de la llista blanc o b s invlid (ha d'estar entre 0 i 1) score_emx=Hi falta el nombre de vegades a comprovar les adreces MX From: o b s invlid score_emxdelay=Hi falten els segons d'espera entre comprovacions MX o b sn invlids score_etimeout=Hi falten els segons d'espera entre consultes RBL o b sn invlids score_ereceived=Hi falten les capaleres Received: a comprovar amb RBL o b sn invlides score_bayes=Utilitza el classificador d'aprenentatge Bayesi report_title=Modificaci de Missatges report_desc=Les opcions d'aquesta pgina controlen les modificacions que SpamAssassin fa a les capaleres i el cos de tots els missatges que analitza, les modificacions que fa en aquells classificats com a spam. report_header=Opcions de modificaci dels missatges analitzats i els missatges spam report_report=Informe adjuntat als missatges que excedeixen el llindar de spam report_clear=Fes servir noms el text de sota... report_noclear=Afegeix el text a sota del missatge per defecte... report_terse=Informe adjuntat al missatge spam en mode tibant report_rsubject=Prefixa la capalera Subject: amb el text report_rfrom=Prefixa la capalera From: amb el text report_rto=Prefixa la capalera To: amb el text report_leave=Deixa-ho tal com est report_rewrite=Modifica al capalera Subject: del spam report_subject=Text per prefixar la capalera Subject: del spam report_rheader=Posa l'informe a la capalera X-Spam-Status: en lloc del cos report_useterse=Genera noms un informe tibant report_fold=Parteix la capalera X-Spam-Status: en mltiples lnies report_safe=Posa el missatge original en l'adjunci report_safe2=S, com a text planer report_detail=Inclou detalls de les frases spam report_stars=Inclou la capalera X-Spam-Level: report_char=Carcter de la capalera X-Spam-Level: report_defang=Canvia el tipus MIME del spam a text/plain report_err=No he pogut desar les opcions d'informe de spam report_echar=Cal introduir un sol carcter per a la capalera X-Spam-Level: report_adds=Capaleres addicionals per afegir report_addfor=Tipus de missatge report_addheader=Capalera report_addtext=Text de capalera report_addspam=Spam report_addham=Ham report_addall=Tot report_eaddheader=La capalera addicional $1 per afegir s invlida user_title=Opcions Miscellnies d'Usuari user_desc=Les opcions d'aquesta pgina estan majoritriament relacionades amb els camins i els valors que SpamAssassin fa servir per a paquets externs d'identificaci de spam Razor, DCC i Pyzor. Tamb podeu dir a SpamAssassin si podr dur a terme consultes DNS o no. user_header=Opcions miscellnies a nivell d'usuari user_dns=SpamAssassin pot fer consultes DNS user_dnslist=Prova-ho comprovant els servidors user_dnstest=Test user_razor=Temps lmit de consulta Razor en segons user_dcc=Ubicaci del programa client DCC user_inpath=A la variable PATH user_bodymax=Suma de control del cos DCC abans de coincidir user_fuz1max=Suma de control fuz1 DCC abans de coincidir user_fuz2max=Suma de control fuz1 DCC abans de coincidir user_timeout=Temps lmit de consulta DCC en segons user_dheader=Afegeix la capalera DCC als missatges user_pyzor=Ubicaci del programa client Pyzor user_pbodymax=Suma de control Pyzor del cos abans de la coincidncia user_ptimeout=Temps lmit de la consulta Pyzor en segons user_pheader=Afegeix la capalera Pyzor als missatges user_err=No he pogut desar les opcions d'usuari user_etimeout='$1' no s un temps lmit vlid user_epath='$1' no s un cam de programa client vlid user_emax='$1' no s una suma de control vlida header_title=Comprovacions de Capalera i Cos header_desc=Aquesta pgina permet definir tests addicionals que SpamAssassin aplicar al correu, basant-se en capaleres de missatges, contingut del cos, URLs trobats dins del cos o combinacions d'altres tests. El nom assignat a cada test s cosa teva, per normalment s alguna cosa com CONTE_BAH. La puntuaci que SpamAssassin afegeix als missatges que coincideixen amb un test es pot establir introduint els noms dels teus propis tests a les taules del peu de la pgina. header_switch=Canvia a mode simple... header_header=Tests de capalera i cos addicionals header_allow=Permet que els usuaris defineixin tests header_test=Tests de capaleres header_tname=Nom del test header_name=Per a la capalera header_op=Comprova si header_op0=Coincideix amb... header_op1=No coincideix amb... header_op2=Existeix header_op3=Avalua... header_pat=Expressi regular header_default=Valor per defecte header_uri=Tests de l'URL de correu header_body=Tests del cos header_mode=Part del cos header_mode0=Text pla header_mode1=Tot el text header_mode2=Text tal qual header_mode3=Tot el correu header_meta=Tests basats en altres header_bool=Expressi de test lgica header_err=No he pogut desar els tests header_ename='$1' no s un nom de test vlid header_eclash=El nom de test '$1' apareix ms d'un cop header_eregexp2=Hi falta l'expressi del test '$1' header_eflags='$1' no sn banderes d'expressions regulars vlides header_eeval='$1' no s una funci d'avaluaci vlida header_eheader='$1' no s una capalera de correu vlida header_eregexp='$1' no s una expressi regular vlida (s'ha d'escriure com /expressi/) header_emeta=Hi falta l'expressi de test al test '$1' priv_title=Opcions Miscellnies Privilegiades priv_desc=Aquestes opcions noms es poden establir globalment, ms que no pas en fitxers de configuraci d'usuaris individuals. Controlen els camins a diversos fitxers de configuraci i registre. priv_header=Valors miscellanis a nivell privilegiat priv_white=Cam del fitxer de llista blanca automtic priv_mode=Mode octal del fitxer de llista blanca priv_dcc=Arguments de l'ordre DCC priv_log=Cam dels fitxers de registre de temps priv_razor=Cam del fitxer de configuraci de Razor priv_phrases=Frases indicadores de spam priv_phrase=Frase de dues paraules priv_score=Puntuaci priv_highest=Puntuaci mxima de frase priv_err=No he pogut desar les opcions privilegiades priv_epath='$1' no s un cam vlid priv_emode='$1' no s un mode octal de 4 dgits priv_eargs='$1' no s una llista vlida d'arguments priv_emscore='$1' no s una puntuaci mxima de frase vlida priv_ephrase='$1' no s una frase de spam de dues paraules vlida priv_escore=Hi falta la puntuaci de la frase spam '$1' o b no s vlida usually=Normalment $1 ecannot=No tens perms per fer servir aquesta pgina setup_title=Configuraci de Procmail Per A SpamAssassin setup_desc_webmin=Aquest formulari es pot fer servir per configurar Procmail a $1 de manera que executi SpamAssassin sobre tots els missatges de correu rebuts pel sistema. No obstant, aix noms tindr efecte si el servidor de correu est configurat per utilitzar Procmail per al lliurament local, o per a usuaris tals que els fitxers .forward estiguin configurats per executar Procmail. setup_desc_usermin=Aquest formulari es pot fer servir per configurar Procmail a $1 de manera que executi SpamAssassin sobre tots els missatges de correu enviats al teu compte. No obstant, aix noms tindr efecte si el servidor de correu est configurat per utilitzar Procmail per al lliurament local, o si els teus fitxers .forward estan configurats per passar tot el correu a Procmail. setup_head=Tots els missatges processats per SpamAssassin tindran la capalera X-Spam, de manera que puguin ser filtrats pels clients de correu. setup_rel=Tots els camins de fitxers o directoris de correu no absoluts introduts a dalt seran relatius al directori arrel de l'usuari que rebi el correu. setup_home=La variable $HOME es pot fer servir als camins de dalt i ser substituda pel directori arrel de l'usuari que rebi el correu. setup_to=Acci per als missatges classificats com a spam setup_null=Llena'ls setup_default=Lliura'ls normalment setup_file=Afegeix-los a un fitxer de correu en format mbox... setup_maildir=Afegeix-los a un directori de correu estil Qmail... setup_mhdir=Afegeix-los a un directori de correu estil MH... setup_drop=Executa SpamAssassin i grava al fitxer com a setup_drop1=Destinatari usuari Unix setup_drop0=Usuari root setup_ok=Configura Procmail per a SpamAssassin setup_email=Reenvia a l'adrea de correu setup_err=No he pogut configurar SpamAssassin setup_efile=Hi falta el fitxer en format mbox o b s invlid setup_emaildir=Hi falta el directori de correu Qmail o b s invlid setup_emhdir=Hi falta el directori de correu MH o b s invlid setup_eemail=Hi falta l'adrea de correu o b s invlida log_white=He modificat les adreces permeses i denegades log_score=He modificat la classificaci del spam log_report=He modificat la modificaci del missatge log_user=He modificat les opcions miscellnies d'usuari log_header=He modificat els tests de capaleres i cos log_priv=He modificat les opcions miscellnies privilegiades log_setup=He configurat Procmail per a SpamAssassin log_procmail=He canviat la configuraci de Procmail log_import=He importat $1 adreces permeses import_title=Importaci d'Adreces import_err=No he pogut importar les adreces import_efile=No hi ha cap fitxer a importar a la selecci import_enone=No s'ha trobat cap adrea de correu al fitxer import_ok1=S'han trobat $2 adreces de correu al fitxer, de les quals $1 eren noves i s'han afegit a la llista d'adreces permeses. import_ok2=S'han trobat $1 adreces de correu al fitxer, per ja eren totes a la llista d'adreces permeses. mail_title=Correu Spam mail_desc=Aquesta pgina llista els missatges que s'han classificat com a spam i estan esperant alguna acci. Els missatges que s'han identificat incorrectament es poden desplaar a la teva carpeta d'entrada,mentre que aquells que sn realment spam es poden suprimir. mail_level=Puntuaci mail_level2=Puntuaci de spam mail_inbox=Desplaa a la carpeta d'Entrada mail_whitelist2=Permet el Remitent i desplaa-ho a la carpeta d'Entrada mail_razor=Informa com a Spam i Suprimeix mail_ham=Informa com a Ham i desplaa-ho a la carpeta d'Entrada mail_delete=Suprimeix mail_return=a la llista de correu spam mail_pos=Missatges de spam $1 a $2 de $3 mail_none=No hi ha cap missatge a la carpeta de spam mail_refresh=Refresca mail_will=Refresc automtic en $1 minuts mail_wills=Refresc automtic en $1 segons mail_delall=Suprimeix Tot el Spam mail_search3=Busca la puntuaci anterior: process_eclean=S'ha produt un error en eliminar les capaleres SpamAssassin d'aquest correu process_ereport=No he pogut informar SpamAssassin d'aquest correu: $1 apply_err=No he pogut aplicar els canvis apply_none=No s'ha trobat cap procs dimoni SpamAssassin! acl_avail=Icones a disposici de l'usuari acl_file=Fitxer de configuraci de SpamAssassin a editar acl_filedef=Fitxer de configuraci global search_escore=Hi falta la puntuaci de spam o b s invlida search_results5=$1 missatges de correu amb puntuaci de spam igual o superior a $2... razor_title=Configura el Detector de Spam Razor razor_desc=El Razor de Vipul's s un sistema collaboratiu de detecci i informaci de spam que pot millorar la classificaci del spam enviat a la teva adrea. No obstant, abans de poder-lo utilitzar t'has de registrar amb un compte de Razor, emprant el formulari de sota. razor_user=Usuari Razor razor_pass=Contrasenya Razor razor_auto=Tria-la automticament razor_enter=Introduda razor_ok=Configura'l Ara razor_ecmd=No s'ha trobat al sistema l'ordre $1 de configuraci de Razor, aix vol dir que el Razor no est installat. razor_err=No he pogut configurar Razor razor_euser=Hi falta l'usuari razor_epass=Hi falta la contrasenya razor_doing=Intentant registrar i configurar Razor... razor_done=...fet. razor_failed=...ha fallat! Mira el missatge d'error de sobre per saber-ne el motiu. procmail_title=Lliurament de Spam Procmail procmail_ok=Canvia el Lliurament Procmail procmail_desc=El formulari es pot utilitzar per canviar la configuraci de Procmail que determina qu passa als missatges classificats com a spam. simple_title=$header_title simple_desc=Aquesta pgina permet definir tests addicionals que SpamAssassin aplicar al correu, basant-se en les capaleres dels missatges, el contingut del cos, els URLs trobats al cos. El nom assignat a cada test s cosa teva, per normalment s una cosa com ara CONTE_FOO. simple_switch=Canvia a mode avanat... simple_header=Tests de missatge a aplicar simple_name=Nom del test simple_for=Comprova simple_regexp=Coincideix amb l'expressi simple_score=Puntuaci a aplicar simple_describe=Descripci simple_err=No he pogut desar els tests de missatges before_ecmd=L'ordre d'abans de desar ha fallat: $1 after_ecmd=L'ordre de desprs de desar ha fallat: $1 connect_emysql=No he pogut carregar el driver $1 de la base de dades connect_elogin=No he pogut entrar a la base de dades $1: $2. connect_equery=La base de dades $1 no cont la taula de preferncies $2 connect_eldapmod=El mdul perl $1 necessari per comunicar-se amb LDAP no est installat o no es pot carregar connect_eldap=No he pogut connectar amb el servidor LDAP $1 al port $2 connect_eldaplogin=No he pogut entrar al servidor LDAP com a $2: $3 connect_ebase=El DN base LDAP $1 no s vlid: $2 eldap=L'operaci LDAP ha fallat: $1 esql=El SQL ha fallat: $1 ldap_euser=No he pogut trobar l'objecte d'usuari LDAP per a $1 db_title=Bases de dades SQL i LDAP db_header=Opcions de configuraci de la base de dades d'emmagatzematge db_dsn=Emmagatzema les configuracions d'usuari db_mode0=Als fitxers de configuraci db_mode1=A la base de dades SQL db_mode3=A la base de dades LDAP db_mode4=A un altre DSN db_user=Usuari de la base de dades SQL db_pass=Contrasenya de la base de dades SQL db_luser=Usuari de la base de dades LDAP db_lpass=Contrasenya de la base de dades LDAP db_dbdriver=Tipus de base de dades db_dbhost=Nom de host del servidor de bases de dades db_dbdb=Nom de la base de dades db_dbport=Nmero de port db_err=No he pogut desar les bases de dades db_edbhost=Hi falta el nom de host del servidor de bases de dades o b s invlid db_edbdb=Hi falta el nom de la base de dades o b sembla invlid db_edbport=Hi falta el nmero de port del servidor SQL o b s invlid db_edsn=Hi falta l'altre DSN db_eusername=Hi falta l'usuari de la base de dades o b s invlid - no es permeten espais db_ldaphost=Nom del host servidor LDAP db_ldapport=Nmero de port db_ldapdn=DN base dels usuaris db_ldapattr=Atribut de les preferncies de SpamAssassin db_ldapscope=Profunditat de la recerca db_ldapsub=Tot el subarbre db_ldapone=Un nivell db_ldapbase=Noms la base db_ldapuid=Atribut d'usuaris db_eldaphost=Hi falta el nom de host servidor LDAP o b s invlid db_eldapport=Hi falta el nmero de port del servidor LDAP o b s invlid db_eldapdn=Hi falta el DN base o b s invlid - no es permeten espais db_eldapattr=Hi falta l'atribut de SpamAssassin o b s invlid db_eldapuid=Hi falta l'atribut d'usuaris o b s invlid spam/lang/fr0100644000567100000120000004536711017163270012767 0ustar jcameronwheelacl_avail=Icônes à la disposition de l'utilisateur apply_err=Impossible d'appliquer les changements apply_none=Aucun processus de démon SpamAssassin n'a été trouvé ! ecannot=Vous n'êtes pas autorisé à utiliser cette page header_allow=Autoriser les utilisateurs à définir des tests ? header_body=Tests du corps header_bool=Expression booléenne de test header_default=Valeur par défaut header_desc=Cette page vous permet de définir des tests additionnels que SpamAssassin appliquera au courrier électronique, selon les en-têtes du message, le contenu du corps, les URL trouvés dans le corps, ou des combinaisons d'autres tests. Le nom affecté à chaque test vous appartient, mais il est le plus souvent de la forme CONTAINS_FOO. Le score réel que SpamAssassin ajoute aux messages correspondant à un test peut être défini en saisissant vos propres noms de tests ou intégrés dans les tableaux au bas de la page. header_eeval='$1' n'est pas une fonction d'évaluation valide header_eheader='$1' n'est pas un en-tête de message électronique valide header_emeta=Expression du test absente pour le test '$1' header_ename='$1' n'est pas un nom de test valide header_eregexp='$1' n'est pas une expression régulière valide (doit être de la forme /expression/) header_err=Impossible d'enregistrer les tests header_header=Test additionnels de l'en-tête et du corps header_meta=Tests basés sur d'autres header_mode=Partie du corps header_mode0=Texte en clair header_mode1=Tout le texte header_mode2=Texte brut header_mode3=Message entier header_name=Pour l'en-tête header_op=Vérifier si header_op0=Correspond... header_op1=Ne correspond pas... header_op2=Existe header_op3=Évaluer... header_pat=Expression régulière header_test=Tests de l'en-tête header_title=Tests de l'en-tête et du corps header_tname=Nom du test header_uri=Test des URLs du message électronique import_efile=Aucun fichier à importer dans la sélection import_enone=Aucune adresse électronique trouvée dans le fichier import_err=Impossible d'importer des adresses import_ok1=Les adresses électroniques $2 ont été trouvées dans le fichier, parmi lesquelles $1 étai(en)t nouvelle(s) et a(ont) été ajoutée(s) à la liste des adresses autorisées. import_ok2=Les adresses électroniques $1 ont été trouvées dans le fichier, mais elles avaient déjà été ajoutées à la liste des adresses autorisées. import_title=Importation d'adresses index_apply=Appliquer les changements index_applydesc=Cliquez sur ce bouton pour appliquer la configuration actuelle de SpamAssassin en émettant un signal HUP à tous les processus $1 actifs. index_cpan=Du fait que SpamAssassin est un module Perl, vous pouvez également l'installer automatiquement à l'aide du module Modules Perl de Webmin à télécharger $1 depuis CPAN. index_ecmd=La commande SpamAssassin $1 n'a pas été trouvée sur votre système. Peut-être n'est-elle pas installé, ou la configuration du module est-elle incorrecte. index_ecmd2=La commande SpamAssassin $1 n'a pas été trouvée sur votre système. index_econfig=Le fichier ou le répertoire de configuration local de SpamAssassin $1 n'a pas été trouvé sur votre système. Peut-être SpamAssassin n'est-il pas installé, ou la configuration du module est-elle incorrecte. index_return=à l'index du module index_title=Filtre de courrier SpamAssassin index_version=SpamAssassin version $1 index_warn_usermin=Comme SpamAssassin ne semble pas être configuré dans votre fichier de configuration Procmail $2 ou le fichier global $1, toute configuration effectuée à l'aide de ce module n'aura aucun effet, à moins que SpamAssassin n'ait été configuré globalement. index_warn_webmin=Comme SpamAssassin ne semble pas être configuré dans le fichier de configuration Procmail $1 du système, toute configuration effectuée à l'aide de ce module n'aura aucun effet, à moins que les utilisateurs ne l'aient configuré individuellement. log_header=Tests d'en-têtes et de corps modifiés log_import=Adresses autorisées $1 importées log_priv=Options privilégiées diverses modifiées log_report=Modification des messages modifiés log_score=Classification du spam modifié log_setup=Configurer Procmail pour SpamAssassin log_user=Options utilisateur diverses modifiées log_white=Adresses autorisées et interdites modifiées mail_delall=Supprimer tout le spam mail_delete=Supprimer mail_desc=Cette page dresse la liste des messages qui ont été classifiés comme du spam et attendent une action. Les messages qui ont été identifiés de façon incorrecte peuvent être déplacés dans votre boîte de réception, tandis que ceux qui sont rééllement du spam peuvent être supprimés. mail_ham=Signaler comme du Ham & Boîte de réception mail_inbox=Déplacer dans la Boîte de réception mail_level=Score mail_level2=Score du spam mail_none=Il n'y a aucun message dans votre dossier de spam mail_pos=Messages de spam $1 à $2 parmi $3 mail_razor=Signaler comme du Spam & Supprimer mail_refresh=Rafraîchir mail_return=Liste de messages de spam mail_search3=Rechercher le score ci-dessus : mail_title=Courrier non sollicité (spam) mail_whitelist2=Autoriser l'Expéditeur & Boîte de réception mail_will=Rafraîchir automatiquement dans $1 minutes mail_wills=Rafraîchir automatiquement dans $1 secondes priv_dcc=Arguments de la commande DCC priv_desc=Les options de cette page ne peuvent être définies que globalement, plutôt que dans les fichiers individuels de configuration des utilisateurs. Elles déterminent à l'aide de chemins les divers fichiers de configuration et de journalisation. priv_eargs='$1' n'est pas une liste d'arguments valide priv_emode='$1' n'est pas un mode octal de fichier à 4 chiffres priv_emscore='$1' n'est pas un score de phrase le plus élevé valide priv_epath='$1' n'est pas un chemin valide priv_ephrase='$1' n'est pas une phrase de spam de deux mots valide priv_err=Impossible d'enregistrer les options privilégiées priv_escore=Score de phrase de spam '$1' absent ou invalide priv_header=Réglages divers des niveaux de privilèges priv_highest=Score de phrase le plus élevé priv_log=Chronométrage du chemin des fichiers journaux priv_mode=Mode octal de fichier de la liste blanche priv_phrase=Phrase de deux mots priv_phrases=Phrases de l'indicateur de spam priv_razor=Chemin du fichier de configuration de Razor priv_score=Score priv_title=Options privilégiées diverses priv_white=Chemin du fichier de la liste blanche automatique process_eclean=Une erreur s'est produite lors de la suppression des en-têtes SpamAssassin provenant de ce message électronique process_ereport=Impossible de faire un rapport du courrier électronique à SpamAssassin : $1 razor_auto=Choisir automatiquement razor_desc=Razor de Vipul est un système collaboratif de détection et de rapport de spam qui peut améliorer la classification du spam envoyé à votre adresse. Cependant, avant de pouvoir l'utiliser, vous devez enregistrer un compte Razor à l'aide du formulaire ci-dessous. razor_doing=Tentative pour enregistrer et configurer Razor en cours... razor_done=... effectué. razor_ecmd=La commande de configuration Razor $1 n'a pas été trouvée sur votre système, ce qui indique que Razor n'est pas installé. razor_enter=Saisi razor_epass=Mot de passe manquant razor_err=Impossible de configurer Razor razor_euser=Nom d'utilisateur manquant razor_failed=... a échoué ! Vérifiez la sortie d'erreur ci-dessus pour en connaître la raison. razor_ok=Configurer maintenant razor_pass=Mot de passe de Razor razor_title=Configuration du détecteur de spam Razor razor_user=Nom d'utilisateur de Razor report_addall=Tout report_addfor=Type de message report_addham=Ham report_addheader=En-tête report_adds=En-têtes additionnels à ajouter report_addspam=Spam report_addtext=Texte de l'en-tête report_char=Caractères de l'en-tête X-Spam-Level: report_clear=Utiliser simplement le texte ci-dessous... report_defang=Changer le type MIME du spam pour du texte/texte en clair ? report_desc=Les options de cette page contrôlent les modifications que SpamAssassin apporte aux en-têtes et aux corps de tous les messages qu'il analyse, ainsi que les modifications qu'il apporte à ceux qui sont classifiés comme du spam. report_detail=Inclure les détails des phrases de spam ? report_eaddheader=En-tête à ajouter $1 manquant ou invalide report_echar=Un seul caractère doit être saisi pour l'en-tête X-Spam-Level: report_err=Impossible d'enregistrer les options du rapport de spam report_fold=Scinder l'en-tête X-Spam-Status: sur plusieurs lignes ? report_header=Options de modification des messages analysés et du spam report_leave=Laisser inchangé report_noclear=Ajouter le texte ci-dessous au message par défaut... report_report=Rapport attaché aux messages dépassant le seuil du spam report_rewrite=Modifier l'en-tête Subject: du spam ? report_rfrom=Ajouter du texte au début de l'en-tête From: report_rheader=Placer un rapport dans l'en-tête X-Spam-Status: au lieu du corps ? report_rsubject=Ajouter du texte au début de l'en-tête Subject: report_rto=Ajouter du texte au début de l'en-tête To: report_safe=Ne pas mettre le message original dans la pièce jointe ? report_stars=Inclure l'en-tête X-Spam-Level: ? report_subject=Texte à ajouter au début de l'en-tête Subject: du spam report_terse=Rapport attaché aux messages de spam (si mode concis) report_title=Modification des messages report_useterse=Générer seulement un rapport concis ? score_auto=Facteur de score de la liste blanche score_desc=SpamAssassin affecte un score à chaque message selon son contenu et ses en-têtes. Les options de cette page déterminent le score au-dessus duquel un message est considéré comme du spam, et certaines des méthodes permettant de calculer ce score. score_descr=Description score_describe=Descriptions du test pour le rapport score_eauto=Facteur de score de la liste blanche absent ou invalide (doit être compris entre 0 et 1) score_edesc=Description du score '$1' absente score_ehits=Nombre de réponses pertinentes absent ou invalide au-dessus duquel un message est considéré comme du spam score_emx=Nombre de contôles MX de l'adresse de From: absent ou invalide score_emxdelay=Nombre de secondes à attendre entre deux contrôles MX absent ou invalide score_ename='$1' n'est pas un nom de test valide score_epoints='$1' n'est pas un nombre de points valide score_ereceived=Nombre d'en-têtes Received: à vérifier avec RBL absent ou invalide score_err=Impossible d'enregistrer le score des messages score_etimeout=Nombre de secondes à attendre les requêtes RBL absent ou invalide score_header=Options de classification des messages de spam score_hits=Nombre de réponses pertinentes au-dessus duquel un message est considéré comme du spam score_langs=Langues dans un message électronique qui ne sont pas considérées comme du spam potentiel score_langsall=Toutes les langues score_langssel=Langues sélectionnées... score_locales=Jeux de caractères dans un message électronique qui ne sont pas considérés comme du spam score_localesall=Tous les jeux de caractères score_localessel=Jeux de caractères sélectionnés... score_mx=Nombre de contrôles MX d'adresses From: score_mxdelay=Nombre de secondes à attendre entre les contrôles MX score_name=Nom du test score_points=Points score_rbl=Ignorer le contrôle de relais ouvert RBL ? score_received=Nombre d'en-têtes Received: à vérifier avec RBL score_score=Scores du test de SpamAssassin score_timeout=Nombre de secondes à attendre les requêtes RBL score_title=Classification du spam search_escore=Score du spam manquant ou invalide search_results5=$1 messages de courrier ayant un score égal à ou au-dessus de $2... setup_default=Distribuer normalement setup_desc_usermin=Ce formulaire peut être utilisé pour configurer Procmail dans $1 pour exécuter SpamAssassin sur tous les messages électroniques envoyés sur votre compte. Cependant, ceci n'aura d'effet que si le serveur de messagerie a été configuré pour utiliser Procmail pour une distribution locale ou si vos fichiers .forward sont configurés pour fournir tout le courrier électronique à Procmail. setup_desc_webmin=Ce formulaire peut être utilisé pour configurer Procmail dans $1 pour exécuter SpamAssassin sur tous les messages électroniques que reçoit votre système. Cependant, ceci n'aura d'effet que si votre serveur de messagerie a été configuré pour utiliser Procmail pour une distribution locale ou pour les utilisateurs dont les fichiers .forward sont configurés pour exécuter Procmail. setup_drop=Exécuter SpamAssassin et écrire sur le fichier comme setup_drop0=Utilisateur root setup_drop1=Utilisateur Unix destinataire setup_efile=Fichier de format mbox absent ou invalide setup_emaildir=Répertoire de courrier Qmail absent ou invalide setup_emhdir=Répertoire de courrier MH absent ou invalide setup_err=Impossible de configurer SpamAssassin setup_file=Ajouter à la fin du fichier de courrier au format mbox... setup_head=Tous les messages que traite SpamAssassin auront les en-têtes X-Spam définis, de sorte qu'ils pourront être filtrés ultérieurement par les clients de messagerie. setup_home=La variable $HOME, qui sera remplacée par le répertoire personnel de l'utilisateur recevant du courrier électronique, peut être utilisée dans les chemins ci-dessus. setup_maildir=Ajouter à la fin du répertoire de courrier de type Qmail... setup_mhdir=Ajouter à la fin du répertoire de courrier de type MH... setup_null=Rejeter setup_ok=Configurer Procmail pour SpamAssassin setup_rel=Tout nom non absolu de chemin de fichier ou de répertoire de courrier saisi ci-dessus sera relatif au répertoire personnel de l'utilisateur recevant du courrier électronique. setup_title=Configuration de Procmail pour SpamAssassin setup_to=Action concernant les messages classifiés comme du spam user_bodymax=Compte la somme de contrôle DCC avant correspondance user_dcc=Emplacement du programme du client DCC user_desc=Les options de cette page concernent surtout les chemins d'accès et les paramètres que SpamAssassin utilise pour les paquetages externes d'identification du spam Razor, DCC et Pyzor. Vous pouvez également indiquer si SpamAssassin sera en mesure d'effectuer ou non des requêtes DNS. user_dheader=Ajouter un en-tête DCC aux messages ? user_dns=SpamAssassin peut-il effectuer des requêtes DNS ? user_dnslist=Tester en vérifiant les serveurs user_dnstest=Tester user_emax='$1' n'est pas un calcul de somme de contrôle valide user_epath='$1' n'est pas un chemin de programme client valide user_err=Impossible d'enregistrer les options utilisateur user_etimeout='$1' n'est pas un temps imparti valide user_fuz1max=Calcul de la somme de contrôle DCC fuz1 avant correspondance user_fuz2max=Calcul de la somme de contrôle DCC fuz2 avant correspondance user_header=Options diverses au niveau de l'utilisateur user_inpath=Dans le chemin d'accès (PATH) user_pbodymax=Calcul de la somme de contrôle du corps Pyzor avant correspondance user_pheader=Ajputer un en-tête Pyzor aux messages ? user_ptimeout=Délai imparti à une requête Pyzor en secondes user_pyzor=Emplacement du programme client de Pyzor user_razor=Temps imparti aux requêtes Razor en secondes user_timeout=Temps imparti à une requête DCC en secondes user_title=Options utilisateur diverses usually=Habituellement $1 white_addr=Adresse white_black=Champs From: à classifier toujours comme du spam white_desc=Les tableaux de cette page vous permettent de spécifier les champs From: et To: d'un message électronique qui est toujours, ou n'est jamais, classifié comme du spam. Tout autre message électronique sera considéré comme normal par les règles de SpamAssassin. Toutes les adresses électroniques peuvent contenir des jokers, comme *@toto.com ou *.toto.com pour correspondre à des domaines entiers. white_efrom='$1' n'est pas un champ From: valide white_ercvd='$1' n'est pas un nom de domaine valide white_err=Impossible d'enregistrer les listes blanche et noire white_from=Champs From: à ne jamais classifier comme du spam white_gblack=Adresses à l'échelle du système à classifier toujours comme du spam white_gfrom=Adresses à l'échelle du système à ne jamais classifier comme du spam white_gunblack=Exceptions à l'échelle du système pour les adresses à classifier toujours comme du spam white_gunfrom=Exceptions à l'échelle du système pour les adresses à ne jamais classifier comme du spam white_header=Adresses électroniques à classifier comme du spam white_import=Importer des adresses à partir d'un fichier white_importdesc=Ce formulaire peut être utilisé pour ajouter des adresses électroniques à partir d'un fichier (comme un carnet d'adresses Outlook ou Eudora exporté) vers la liste autorisée. white_importok=Importer maintenant white_level=Autoriser white_level0=Un peu de spam white_level1=Plus de spam white_level2=Tout le spam white_rcvd=Champs From: à ne jamais classifier comme du spam, en fonction du domaine Received: white_rcvdhost=Domaine source white_return=Adresses autorisées et interdites white_sort=Trier les adresses autorisées après l'importation ? white_title=Adresses autorisées et interdites white_to=Champs To: ou Cc: pour lesquels autoriser un peu de spam ou tout le spam white_unblack=Exceptions pour les champs From: à classifier toujours comme du spam white_unfrom=Exceptions pour les champs From: à ne jamais classifier comme du spam spam/lang/es0100644000567100000120000001451511017163270012756 0ustar jcameronwheelacl_avail=Iconos accesibles al usuario acl_file=Archivo de configuración de SpamAssassin a editar acl_filedef=Archivo de configuración global apply_err=Fallo al aplicar cambios apply_none=¡No se encontraron procesos demonio de SpamAssassin! ecannot=No está autorizado a utilizar esta página header_allow=¿Permitir a los usuarios definir tests? header_body=Tests de cuerpo header_bool=Expresión test booleana header_default=Valor por defecto header_desc=Esta página le permite definir tests adicionales que SpamAssassin aplicará al email, basándose en las cabeceras del mensaje, el contenido del cuerpo, las URLs halladas en el cuerpo, o combinaciones de otros tests. El nombre asignado a cada test depende de usted, pero normalmente es algo parecido a CONTIENE_ALGO. La cadena real que SpamAssassin añadirá a los mensajes que cumplan un test puede configurarse introduciendo los que vienen por defecto o sus propios nombres de test en las tablas de la parte inferior de la página. header_eclash=El nombre de test '$1' aparece más de una vez header_eeval='$1' no es una función de evaluación válida header_eflags='$1' no son flags de expresión regular válidos header_eheader='$1' no es una cabecera de email válida header_emeta=Falta expresión de prueba para el test '$1' header_ename='$1' no es un nombre de test válido header_eregexp='$1' no es una expresión regular válida (debe ser algo como /expresión/) header_eregexp2=Falta expresión para test '$1' header_err=Fallo al salvar tests header_header=Tests adicionales de cabecera y cuerpo header_meta=Tests basados en otros header_mode=Parte de cuerpo header_mode0=Texto plano header_mode1=Todo el texto header_mode2=Texto en crudo header_mode3=Mail completo header_name=Para cabecera header_op=Chequear si header_op0=Coincide con.. header_op1=No coincide con.. header_op2=Existe header_op3=Evaluar.. header_pat=Expresión regular header_switch=Cambiar a modo simple.. header_test=Tests de cabecera header_title=Tests de Cabecera y Cuerpo header_tname=Nombre de Test header_uri=Tests de Email URL import_efile=No hay archivo desde el que importar seleccionado import_enone=No se encontraron direcciones email en el archivo import_err=Fallo al importar direcciones import_ok1=$2 direcciones email se encontraron en el archivo, de las cuales $1 eran nuevas y han sido añadidas a la lista de direcciones permitidas import_ok2=$1 direcciones email se encontraron en el archivo, pero ya estaban todas en la lista de direcciones permitidas. import_title=Importar Direcciones index_apply=Aplicar Cambios index_applydesc=Pulse en este botón para aplicar la configuración actual de SpamAssassin enviando una señal HUP a todos los procesos $1 en ejecución. index_cpan=Dado que SpamAssassin es un módulo Perl, también puede instalarlo automáticamente utilizando el módulo de Webmin Módulos de Perl (CPAN) para descargar $1 desde CPAN. index_ecmd=El comando $1 de SpamAssassin no se encontró en su sistema. Puede que no esté instalado, o que su configuración del módulo sea incorrecta. index_ecmd2=El comando $1 de SpamAssassin no se encontró en su sistema. index_econfig=El archivo o directorio local de configuración de SpamAssassin $1 no se encontró en su sistema. Puede que SpamAssassin no esté instalado o que su configuración del módulo sea incorrecta. index_return=índice de módulo index_spamassassin=SpamAssassin index_title=SpamAssassin - Filtro de Correo index_version=SpamAssassin versión $1 index_warn_usermin=SpamAssassin no parece estar configurado ni en su archivo de configuración de Procmail $2 ni en el archivo global $1, así que cualquier configuración realizada mediante este módulo no tendrá efecto a menos que SpamAssassin se configure glabalmente. index_warn_webmin=SpamAssassin no parece estar configurado en el archivo de configuración $1 de Procmail del sistema, por tanto toda configuración realizada mendiante éste módulo no tendrá efecto a menos que los usuarios lo tengan configurado individualmente. log_header=Tests de cabecera y cuerpo modificados log_import=Se importaron $1 direcciones permitidas log_priv=Se modificaron las opciones varias privilegiadas log_procmail=Se cambió la configuración Procmail log_report=Se modificó modificación de mensaje log_score=Se modificó clasificación de spam log_setup=Configurar Procmail para SpamAssassin log_user=Se modificaron opcionnes varias de usuario log_white=Se modificaron direcciones permitidas y denegadas mail_delall=Borrar Todo el Spam mail_delete=Borrar mail_desc=Esta página lista los mensajes que han sido clasificados como spam, y que están a la espera de alguna acción. Los mensajes que hayan sido incorrectamente identificados pueden moverse a su Bandeja de Entrada, y los que realmente son Spam pueden ser borrados. mail_ham=Informar como Bueno & Bandeja de Entrada mail_inbox=Mover a Bandeja de Entrada mail_level=Anotar mail_level2=Cuenta de Spam mail_none=No hay mensajes en su carpeta spam mail_pos=Mensajes de spam $1 a $2 de $3 mail_razor=Informar como Spam & Borrar mail_refresh=Refrescar mail_return=lista de correo spam mail_search3=Buscar anotaciones arriba: mail_title=Correo Spam mail_whitelist2=Permitir Remitente & Bandeja de entrada mail_will=Refresco automático en $1 minutos mail_wills=Refresco automático en $1 segundos priv_dcc=Argumentos de comando DCC priv_desc=Las opciones de esta parte sólo pueden configurarse globalmente, en lugar de en archivos de configuración individual de cada usuario. They control with paths to various configuration and logging file. priv_eargs='$1' no es una lista válida de argumentos priv_emode='$1' no es un modo de archivo octal de 4 dígitos priv_emscore='$1' no es una anotación de frase mayor válido priv_epath='$1' no es una ruta válida priv_ephrase='$1' no es una frase de spam de dos palabras válida priv_err=Fallo al salvar opciones privilegiadas priv_escore=Anotación para frase spam '$1' falta o no válida priv_header=Configuraciones varias de nivel privilegiado priv_highest=Anotación de frase más alta spam/lang/cz0100644000567100000120000004305411017163270012763 0ustar jcameronwheelacl_avail=Ikony uvolnn pro uivatele acl_file=Editace konfiguranho souboru SpamAssassinu acl_filedef=Globln konfiguran soubor after_ecmd=Pkaz po uloen selhal : $1 apply_err=Chyba pi aplikovn zmn apply_none=SpamAssassin dmon nenalezen! before_ecmd=Pkaz ped uloenm selhal : $1 connect_ebase=LDAP zkladna DN $1 nen sprvn : $2 connect_eldap=Chyba pi pipojen k LDAP serveru $1 na portu $2 connect_eldaplogin=Chyba pi pihlen k LDAP serveru $1 jako $2 : $3 connect_eldapmod=Perl modul $1 nutn pro komunikaci s LDAP nen nainstalovn nebo nahrn connect_elogin=Chyba pi pihlen k databzi $1 : $2. connect_emysql=Chyba pi nahrvn ovladae databze $1 connect_equery=Databze $1 neobsahuje pedvolenou tabulku $2 db_dbdb=Jmno databze db_dbdriver=Typ databze db_dbhost=Jmno databzovho serveru db_dbport=slo portu db_dsn=Uloit uivatelskou konfiguraci do db_edbdb=Chybjc nebo patn jmno databze k prohlen db_edbhost=Chybjc nebo patn jmno SQL serveru db_edbport=Chybjc nebo patn slo portu SQL serveru db_edsn=Chybjc dal DSN db_eldapattr=Chybjc nebo patn SpemAssassin atributy db_eldapdn=Chybjc nebo patn vchoz DN - mezery nejsou povoleny db_eldaphost=Chybjc nebo patn jmno LDAP serveru db_eldapport=Chybjc nebo patn slo portu LDAP serveru db_eldapuid=Chybjc nebo patn vlastnosti uivatelskho jmna db_err=Chyba pi ukldn databze db_eusername=Chybjc nebo patn uivatelsk jmno pro databzi - mezery nejsou povoleny db_header=Konfigurace vlastnost databzovho loit db_ldapattr=Atributy SpamAssassin preferenc db_ldapbase=Pouze vchoz db_ldapdn=Vchoz DN pro uivatele db_ldaphost=Jmno LDAP serveru db_ldapone=Jedna rove db_ldapport=slo portu db_ldapscope=Hloubka prohledvn db_ldapsub=Kompletn podstrom db_ldapuid=Vlastnosti pro uivatelsk jmno db_lpass=Heslo pro LDAP server db_luser=Uivatelsk jmno pro LDAP server db_mode0=Konfiguran soubor db_mode1=SQL databze db_mode3=LDAP databze db_mode4=Dal DSN db_pass=Heslo pro SQL databzi db_title=SQL a LDAP databze db_user=Uivatelsk jmno pro SQL databzi ecannot=Toto nen povoleno na tto strnce eldap=LDAP operace selhala : $1 esql=SQL selhalo : $1 header_allow=Povolit uivatelm definovat testy? header_body=Test tla header_bool=Booleanovsk testovac vraz header_default=Standardn hodnoty header_desc=Tato strnka umouje definovat roziujc testy pro SpamAssassin aplikovateln na e-mail, podle hlaviky zprvy, obsahu tla zprvy, URL obsaench ve zprv nebo kombinovat s ostatnmi testy. Jmno piazen kadmu testu je na Vs, ale nejastji nco jako OBSAHUJICI_XXX. Aktuln skre, kter SpamAssassin pid k odpovdajcm zprvm mete zadat sm nebo u peddefinovanch test ke konci tto strnky. header_eclash=Test jmnem '$1' existuje vce jak jednou. header_eeval='$1' nen sprvnou hodnotc funkc header_eflags='$1' nen sprvnm znakem regulrnho vrazu header_eheader='$1' nen platn e-mailov adresa header_emeta=Chybjc testovac vraz pro test '$1' header_ename='$1' nen povolen nzev testu header_eregexp='$1' nen povolen regulrn vraz (mel by bt obdobou /vraz/) header_eregexp2=Chybjc vraz pro test '$1' header_err=Selhn pi ukldn test header_header=Dodaten test hlaviky a tla header_meta=Test zaloen na jinch header_mode=st tla header_mode0=ist text header_mode1=Vechen text header_mode2=Nezpracovan text header_mode3=Veker pota header_name=Pro hlaviku header_op=Zkontroluj jestli header_op0=Shody.. header_op1=Neschody.. header_op2=Existuje header_op3=Vyhodnocen.. header_pat=Regulrn vraz header_switch=Pepnut do jednoduchho reimu .. header_test=Hlavika testu header_title=Test hlaviky a tla header_tname=Jmno testu header_uri=Testy URL v e-mailu import_efile=Nen vybrn dn soubor pro import import_enone=dn e-mailov adresa nebyla v souboru nalezena import_err=Import adres selhal import_ok1=V souboru se nachz $2 e-mailovch adres, z eho je $1 novch kter budou pidny do seznamu povolench adres. import_ok2=V souboru se nachz $1 e-mailovch adres, ale vechny ji existuj v seznamu povolench adres. import_title=Import adres index_apply=Aplikovat zmny index_applydesc=Kliknutm na tlatko bude aplikovna souasn konfigurace SpemAssassinu odeslnm HUP signlu vem bcm $1 procesm. index_cpan=Protoe je SpamAssassin modul Perlu, mue bt instalovn automaticky s pouitm Webmin modulu Moduly Perlu k downloadu $1 pes CPAN. index_ecmd=Pkaz SpamAssassinu $1 nen dostupn na Vaem systmu. Mon nen instalovn nebo Vae konfigurace modulu je nesprvn. index_ecmd2=Pkaz SpamAssassinu $1 nen k dispozici ve Vaem systmu. index_econfig=Lokln konfiguran soubor nebo adres $1 SpamAssassinu nen k dispozici na Vaem systmu. SpamAssassin mon nen nainstalovn nebo konfigurace modulu nen sprvn. index_edb=Chyba pi pipojen k SpamAssassin konfiguran databzi : $1. Zkontrolujte konfiguraci modulu ujistte se, e pouvte sprvn nastaven. index_return=Index modulu index_spamassassin=SpamAssassin index_title=Spamov filtr SpamAssassin index_version=SpamAssassin verze $1 index_warn_usermin=Zd se, e SpamAssassin nen nastaven ve Vaem konfiguranm souboru $2 Procmailu nebo v globlnm souboru $1, veker konfigurace pouit v tomto modulu nebudou efektivn krom globlnch nastaven SpamAssassinu. index_warn_webmin=Zd se, e SpamAssassin nen nastaven ve Vaem systmovm konfiguranm souboru $1 Procmailu, veker konfigurace pouit v tomto modulu nebudou efektivn krom individulnch uivatelskch nastaven . ldap_euser=Nemohu najt uivatelsk LDAP objekt pro $1 log_header=prava hlaviky a tla test log_import=Importovno $1 povolench adres log_priv=Upravit rznorod privilegovan nastaven log_procmail=Zmna konfigurace Procmailu log_report=prava modifikace zprvy log_score=Zmna klasifikace spamu log_setup=Nastaven Procmailu pro SpamAssassin log_user=Upravit rznorod uivatelsk nastaven log_white=Upravit povolen a zakzan adresy mail_delall=Vymazat vechny spamy mail_delete=Vymazat mail_desc=Tato strnka obsahuje seznam zprv klasifikovanch jako spam a ekajcch na zpracovn. Zprvy kter byli nesprvn oznaeny mete pesunout do Vaeho Inboxu, zatmco skuten spamy mohou byt smazny. mail_ham=Zprva o Hamech v Inboxu mail_inbox=Pesunout do Inbox mail_level=Skre mail_level2=Spam skre mail_none=Nemte dnou zprvu ve svm spam adresi mail_pos=Spam zprvy $1 po $2 z $3 mail_razor=Zprva o smazanch spamech mail_refresh=Obnovit mail_return=seznam spamov poty mail_search3=Vyhledej skre pesahujc: mail_title=ten spam poty mail_whitelist2=Povolen odeslatel v Inboxu mail_will=Automatick obnoven po $1 minutch mail_wills=Automatick obnoven po $1 sekundch priv_dcc=Argumenty pkazu DCC priv_desc=Tyto volby jsou nastaveny pouze globln, pesnji pak v individulnch uivatelskch konfiguranch souborech. Tyto volby kontroluj od cest pes rzn nastaven po logovac soubory. priv_eargs='$1' nen povolenm seznamem argument priv_emode='$1' je nesprvnm 4-selnm osmikovm slem modu souboru priv_emscore='$1' je nepovolenou hodnotou pro nejvy ohodnocen frze priv_epath='$1' nen platnou cestou priv_ephrase='$1' je neppustn dvoj-slovn frze spamu priv_err=Chyba pi ukldn privilegovanch nastaven priv_escore=Chybjc nebo nesprvn hodnota skre pro spam frze '$1' priv_header=Rznorod nastaven pro privilegovanou rove priv_highest=Nejvy skre frze priv_log=asov nastaven cesty pro logovac soubory priv_mode=Whitelist - osmikov md souboru priv_phrase=Dvojslovn frze priv_phrases=Frze indikujc spam priv_razor=Cesta ke konfiguranmu souboru Razoru priv_score=Skre priv_title=Rznorod nastaven privilegovan rovn priv_white=Cesta k automatick bl listin process_eclean=Chyba nastala pi odstrann SpamAssassin hlaviky z tohoto e-mailu process_ereport=Selhalo zasln e-mailu pro SpamAssassinu : $1 procmail_desc=Tento formul slou ke zmn konfigurace Procmailu, kter uruje co se stane se zprvou oznaenou jako spam. procmail_ok=Zmnit Procmail doruen procmail_title=Procmail - doruovn spamu razor_auto=Vybrat automaticky razor_desc=Vipul's Razor je spolupracujc spamy detekujc a hlsc systm pro zdokonalen klasifikace spam zaslanch na Vai adresu. Nicmn, ped jeho pouitm se muste registrovat a zskat Razor et, kter pouijete nsledn. razor_doing=Nyn se pokoum se registrovat a nastavit Razor .. razor_done=.. dokoneno. razor_ecmd=Konfiguran pkaz $1 pro Razor nen k dispozici na Vaem systmu, nejspe proto, e Razor nen instalovn. razor_enter=Odeslat razor_epass=Chybjc heslo razor_err=Chyba nastaven Razoru razor_euser=Chyb uivatelsk jmno razor_failed=.. selhal! Podvejte se vstupn chyby pro zjitn piny. razor_ok=Nastavit razor_pass=Heslo pro Razor razor_title=Nastaven Razor spam detektoru razor_user=Uivatelsk jmno pro Razor report_addall=Ve report_addfor=Typ zprvy report_addham=Ham report_addheader=Hlavika report_adds=Pidat dal hlaviky report_addspam=Spam report_addtext=Text pro hlaviku report_char=X-Spam-Level: charakter hlaviky report_clear=Pouijte jen text ne .. report_defang=Zmna MIME u spamu na ist text? report_desc=Nastaven na tto strnce d pravy, kter provede SpamAssassin v hlavikch a tle vech zprv, pi analze a pravch zprv oznaench za spam. report_detail=Vloit detaily o spam frze? report_eaddheader=Chybjc nebo nevhodn dodaten hlavika k pidn $1 report_echar=V hlavice X-Spam-Level: mus bt pouity jednoduch psmo report_err=Chyba pi uloen vlastnost spam reportu report_fold=Rozdlit hlaviku X-Spam-Status: na nkolik dk? report_header=Monosti pozmnn analyzovanch a spamovch zprv report_leave=Ponechat nezmnn report_noclear=Pidat text dolu k standardn zprv .. report_report=Pidat report ke zprv pekroili prh spamu report_rewrite=Upravit Pedmt: hlaviky spamu? report_rfrom=Vhodn text pro hlaviku Od koho: report_rheader=Pidat zprvu do hlaviky X-Spam-Status: msto do tla? report_rsubject=Vhodn text pro hlaviku Pedmt: report_rto=Vhodn text pro hlaviku Komu: report_safe=Vloit originln zprvu do plohy? report_safe2=Ano, ist text report_stars=Vloit hlaviku X-Spam-Level:? report_subject=Text vhodn pro spam hlaviku Pedmt: report_terse=Pidat report k spam zprv kdy je zapnut strun md report_title=pravy zprvy report_useterse=Generovat pouze strun report? score_auto=Skre faktor bl listiny score_bayes=Pout Bayesian samouc se klasifikaci? score_desc=SpamAssassin piazuje skre zprv na zklad obsahu a hlaviky. Nastaven na tto strnce uruj skre pi kterm bude zprva povaovan za spam a nkter z tchto metod uruj zpsob jak je skre potno. score_descr=Poznmka score_describe=Poznmka testu pro report score_eauto=Chybjc nebo nevhodn skre faktor pro blou listinu (m bt v rozmez 0 a 1) score_edesc=Chybjc poznmka pro skre '$1' score_ehits=Chybjc nebo nevhodn poet bod nutnch k tomu aby zprva byla oznaena za spem score_emx=Chybjc nebo nesprvn poet opakovn kontroly adresy Od koho: na MX score_emxdelay=Chybjc nebo nevhodn as ekn v sekundch mezi kontrolou MX zznam score_ename='$1' nen povolenm jmnem testu score_epoints='$1' nen povolenm potem bod score_ereceived=Chybjc nebo nevhodn poet pjemc v hlavice pro kontrolu pes RBL score_err=Chyba pi ukldn zprvy o vyhodnocen score_etimeout=Chybjc nebo nevhodn poet sekund pro ekn na RBL dotazy score_header=Monosti klasifikace spamovch zprv score_hits=Kolik mus zprva nasbrat bod aby byla povaovna za spam score_langs=Jazyk e-mailu, kter nebude povaovan za potenciln spam score_langsall=Vechny jazyky score_langssel=vyberte jazyky .. score_locales=Znakov sada e-mailu, kter nebude povaovan za potenciln spam score_localesall=Vechny znakov sady score_localessel=Vyberte znakov sady .. score_mx=Poet opakovn kontroly adresy Od koho: na MX score_mxdelay=Sekundy ekn mezi testy MX score_name=Jmno testu score_points=Body score_rbl=Peskoit RBL open-relay test? score_received=Poet pjemc v hlavice pro test v RBL score_score=Skre testu SpamAssassinu score_timeout=Sekundy ekn na RBL dotazy score_title=Klasifikace spamu search_escore=Chybjc nebo nevhodn spam skre search_results5=$1 potovnch zprv se spam skre rovnm nebo vym ne $2 .. setup_default=Doruit normln setup_desc_usermin=Tento formul se pouv pro nastaven Procmailu v $1 pro sputn SpamAssassinu na vechny e-mailov zprvy zaslan va V et. Nicmn toto je pouiteln pouze tehdy jeli potovn server konfigurovn tak aby pro lokln doruen pouval Procmail nebo pokud V soubor .forward pedv vechny e-maily Procmailu. setup_desc_webmin=Tento formul se pouv pro nastaven Procmailu v $1 pro sputn SpamAssassinu na vechny e-mailov zprvy pijat Vam systmem. Nicmn toto je pouiteln pouze tehdy jeli potovn server konfigurovn tak aby pro lokln doruen pouval Procmail nebo pro uivatele, jejich soubor .forward je nastaven na sputn Procmailu. setup_drop=Spustit SpamAssassin a uloit do souboru jako setup_drop0=uivatel root setup_drop1=Pjemce unixov uivatel setup_eemail=Chybjc nebo nevhodn e-mailov adresa setup_efile=Chybjc nebo nevhodn soubor formtu mbox setup_email=Peposlat na e-mailovou adresu setup_emaildir=Chybjc nebo nevhodn potovn adres typu Qmail setup_emhdir=Chybjc nebo nevhodn potovn adres typu MH setup_err=Chyba pi konfiguraci SpamAssassinu setup_file=Pidat do potovnho souboru formtu mbox .. setup_head=Vechny zprvy zpracovan SpamAssassinem obsahuj v hlavice X-Spam nastaven, pro budouc filtrovn v potovnm klientu. setup_home=Hodnota $HOME je pouita v cestch uvedench ve kter bude pepsna domovskm adresem uivatele pijmajcho e-mail. setup_maildir=Pidat potu do adrese ve stylu Qmail .. setup_mhdir=Pidat potu do adrese ve stylu MH .. setup_null=Odmtnout setup_ok=Nastaven Procmailu pro SpamAssassin setup_rel=Vechny potovn soubory nebo adrese nezapsan absolutn budou uloeny jako relativn k domovskmu adresi uivatele pijmajcho e-mail. setup_title=Nastaven Procmailu pro SpamAssassin setup_to=Co vykonat je-li zprava oznaena za spam simple_desc=Tato strnka povoluje definovat doplkov testy pro SpamAssassin, kter budou aplikovny na e-maily podle hlaviky zprvy, tla zprvy, URL v tle zprvy. simple_describe=Poznmka simple_err=Chyba pi uloen testovac zprvy simple_for=Test simple_header=Aplikovat test zprvy simple_name=Test jmno simple_regexp=Odpovdajc vraz simple_score=Aplikovat vsledek simple_switch=Pepnout do rozenho reimu .. simple_title=$header_title user_bodymax=Poet DCC kontrolnch sout tla zprvy ped shodou user_dcc=Umstn programu DDC clienta user_desc=Volby na tto strnce vtinou souvisej s cestami a nastavenmi SpemAssassinu pro uvn externch spam identifikujcch balk Razor, DCC a Pyzor. Tak zde mete SpemAssassinu ci zda m provdt DNS peklady i nikoliv. user_dheader=Pidat DCC hlaviku do zprvy? user_dns=M SpamAssassin provdt DNS lookup? user_dnslist=Test kontrolou serveru user_dnstest=Test user_emax='$1' nen povolen poet kontrolnch sout user_epath='$1' nen povolen cesta ke klientskmu programu user_err=Uloen uivatelskch nastaven selhalo user_etimeout='$1' nen povolen timeout user_fuz1max=Poet DCC fuz1 kontrolnch sout ped shodou user_fuz2max=Poet DCC fuz2 kontrolnch sout ped shodou user_header=Rznorod nastaven uivatelsk rovn user_inpath=V cest (PATH) user_pbodymax=Poet Pyzor kontrolnho soutu tla zprvy ped shodou user_pheader=Pidat hlaviku Pyzor do zprvy? user_ptimeout=as vypren dosti Pyzoru v sekundch user_pyzor=Umstn klientskho programu pro Pyzor user_razor=as vypren dosti Razoru v sekundch user_timeout=as vypren dosti DCC v sekundch user_title=Rznorod uivatelsk nastaven usually=Obvykle $1 white_addr=Adresy white_black=Od: adresy vdy oznait jako spam white_desc=Tabulka na tto strnce definuje adresy odeslatele (Od:) a pjemce (Komu:) oznaen vdy nebo nikdy jako spam. Vechny ostatn e-mailov adresy projdou normlnmi pravidly SpamAssasinu. Vechny adresy obsahujc zstupn znaky (nap. *@foo.com nebo *.foo.com) budou porovnvny jako domny. white_efrom='$1' nen platn adresa odeslatele white_ercvd='$1' nen platn jmno domny white_err=Chyba pi uloen bl a ern listiny white_from=Od: adresy nikdy neoznaovat jako spam white_gblack=Systmov adresy vdy klasifikovan jako spam white_gfrom=Systmov adresy vdy klasifikovan jako nespamov white_gunblack=Vjimky v systmovch adresch klasifikovanch jako spamov white_gunfrom=Vjimky v systmovch adresch klasifikovanch jako nespamov white_header=Definice e-mailovch adrese tvocch spam white_import=Import adres ze souboru white_importdesc=Tento formul pouijte pro pidn e-mailovch adres ze souboru (exportovanho z adrese Outlooku nebo Eudory) mezi seznam povolench. white_importok=Importovat white_level=Povolit white_level0=Asi spamy white_level1=Dal spamy white_level2=Vechny spamy white_rcvd=Od: adresy nikdy neoznaovat jako spam, v zvislosti na domn pjemce white_rcvdhost=Zdrojov domna white_return=povolen a zakzan adresy white_sort=Setdit povolen adresy po importu? white_title=Povolen a zakzan adresy white_to=Komu: nebo Kopie: povolit adresy nebo oznait jako spam white_unblack=Vjimky pro Od: adresy vdy oznait jako spam white_unfrom=Vjimky pro Od: adresy nikdy neoznaovat jako spam spam/lang/nl0100644000567100000120000004467111017163270012766 0ustar jcameronwheelacl_avail=Iconen beschikbaar voor gebruiker acl_file=Bewerk SpamAssassin configuratie file acl_filedef=Global config file after_ecmd=Opdracht na het opslaan mislukte : $1 apply_err=Mislukt veranderingen toe te voegen apply_none=Geen SpamAssassin daemon proces gevonden! before_ecmd=Opdracht vooraf het opslaan mislukte : $1 connect_ebase=LDAP base DN $1 is niet geldig : $2 connect_eldap=Mislukt te verbinden met LDAP server $1 op poort $2 connect_eldaplogin=Mislukt in te loggen met LDAP server $1 als $2 : $3 connect_eldapmod=Perl module $1 die nodig is om te communiceren met LDAP is niet geinstalleerd of kan niet geladen worden connect_elogin=Mislukt in te loggen bij de databasen $1 : $2. connect_emysql=Mislukt om de database driver $1 te laden connect_equery=De databse $1 bevat niet de voorkeur table $2 db_dbdb=Database naam db_dbdriver=Database type db_dbhost=Database server hostname db_dbport=Poort nummer db_dsn=Gebruiker configuraties opslaan in db_edbdb=Ontbrekende of ongeldig lijkende database naam db_edbhost=Ontbrekende of ongeldige SQL server hostname db_edbport=Ontbrekende of ongeldige SQL server poort nummer db_edsn=Ontbrekende andere DSN db_eldapattr=Ontbrekende of ongeldige SpamAssassin attributen db_eldapdn=Ontbrekende of ongeldige base DN - spaties zijn niet toegestaan db_eldaphost=Ontbrekende of ongeldige LDAP server hostname db_eldapport=Ontbrekende of ongeldige LDAP server poort nummer db_eldapuid=Ontbrekende of ongeldige gebruikersnaam attributen db_err=Mislukt om database op te slaan db_eusername=Ontbrekende of ongeldige database gebruikersnaam - spaties zijn niet toegestaan db_header=Configuratie opties opslag database db_ldapattr=Attribute voor SpamAssassin vookeuren db_ldapbase=Alleen basis db_ldapdn=Basis DN voor gebruikers db_ldaphost=LDAP server hostnaam db_ldapone=Één level db_ldapport=Poort nummer db_ldapscope=Zoekdiepte db_ldapsub=Gehele subtree db_ldapuid=Attributen voor gebruikersnaam db_lpass=LDAP server wachtwoord db_luser=LDAP server gebruikersnaam db_mode0=Configuratie files db_mode1=SQL database db_mode3=LDAP database db_mode4=Andere DSN db_pass=SQL database wachtwoord db_title=SQL en LDAP Databases db_user=SQL database gebruikersnaam ecannot=U bent niet bevoegd om deze pagina te gebruiken eldap=LDAP operatie mislukt : $1 esql=SQL mislukt : $1 header_allow=Gebruikers toestaan de test te definieeren? header_body=Body test header_bool=Boolean test expressie header_default=Standaard waarde. header_desc=Op deze pagina kunt U extra testen definieeren die SpamAssassin zal toepassen op mail, Gebaseerd op berichten headers, de body inhoud, URL's gevonden in de body's, of combinaties en andere testen. U mag zelf de naam van de test verzinnen, maar het is meestal zoiets als CONTAINS_FOO of BEVAT_ONZIN. De actuele score die SpamAssassin op een bericht doet met een overeenkomende test kunt U zelf invullen of met een ingebouwde test doendie U onderaan deze pagina ziet staan. header_eclash=Test naam '$1' komt vaker voor header_eeval='$1' is geen geldige evaluatie functie header_eflags='$1' zijn geen geldige reguliere exressie flags header_eheader='$1' is geen geldige email header header_emeta=Ontbrekende test expressie voor test '$1' header_ename='$1' is geen geldige test naam header_eregexp='$1' is geen geldige reguliere expressie (moet lijken op /expressie/) header_eregexp2=Ontbrekende expressie voor test '$1' header_err=Mislukt om test op te slaan header_header=Extra header en body tests header_meta=Testd gebaseerd op andere header_mode=Body gedeelte header_mode0=Platte tekst header_mode1=Alle tekst header_mode2=Raw tekst header_mode3=Gehele mail header_name=Voor header header_op=Kontroleer als header_op0=Komt overeen.. header_op1=Komt niet overeen.. header_op2=Bestaat header_op3=Evalueer.. header_pat=Reguliere expessie header_switch=Schakel naar simpele mode .. header_test=Header tests header_title=Header en Body Tests header_tname=Test naam header_uri=Email URL testen import_efile=Geen file om te importeren van geselecteerde import_enone=Geen email adres gevonden in file import_err=Importeren adressen mislukt import_ok1=$2 email adressen zijn gevonden in de file, waarvan $1 nieuwe en deze is toegevoegd aan de lijst van toegestane adressen. import_ok2=$1 email adressen zijn gevonden in de file, maar deze staan al in de lijst van toegestane adressen. import_title=Importeer adressen index_apply=Veranderingen toevoegen index_applydesc=Klik op deze knop om de huidige SpamAssassin configuratie toe te voegen door het zenden van een HUP signaal aan alle lopende $1 processen. index_cpan=Omdat SpamAssassin een Perl module is, kunt U het ook automatisch installeren met gebruik van de Webmin's a href='$2'>Perl Modules module die dan $1 download van CPAN. index_ecmd=De SpamAssassin opdracht $1 is niet gevonden op uw systeem. Misschien is het niet geinstalleerd, of uw module configuratie is niet correct. index_ecmd2=De SpamAssassin opdracht $1 is niet gevonden op uw systeem. index_econfig=De SpamAssassin locale configuratie file of directorie $1 is niet gevonden op uw systeem. Misschien is SpamAssassin niet geinstalleerd, of uw module configuratie is niet correct. index_edb=Mislukt om te verbinden met de SpamAssassin configuratie database : $1. Kontroleer de module configuratie om er zeker van te zijn dat U de juiste settings gebruikt. index_return=module index index_spamassassin=SpamAssassin index_title=SpamAssassin Mail Filter index_version=SpamAssassin versie $1 index_warn_usermin=SpamAssassin lijkt niet te zijn opgezet in uw Procmail configuratie file $2 of de global file $1, dus iedere configuratie die deze module gebruikt zal geen effect hebben totdat SpamAssassin globale is opgezet. index_warn_webmin=SpamAssassin lijkt niet te zijn opgezet in uw systeem's Procmail configuratie file $1, dus iedere configuratie die deze module gebruikt zal geen effect hebben totdat gebruikers het individueel hebben ingesteld. ldap_euser=Kon LDAP gebruiker object niet vinden voor $1 log_header=Gemodificeerde header en body testen log_import=Geimporteerde $1 met toegestane adressen log_priv=Gemodificeerde extra privilege opties log_procmail=Veranderde Procmail configuratie log_report=Gemodificeerde berichten modificatie log_score=Gemodificeerde spam classificatie log_setup=Setup Procmail voor SpamAssassin log_user=Gemodificeerde extra gebruikers opties log_white=Gemodificeerd toegestane en geweigerde adressen mail_delall=Alle Spam Wissen mail_delete=Wissen mail_desc=De lijst met berichten op deze pagina is geclassificeerd als spam, en wachten tot er actie word ondernomen. Berichten die verkeerd als spam aangemerkt zijn kunnen verplaatst worden naar uw Inbox, en echte spam kan gewist worden. mail_ham=Rapport als Ham & Inbox mail_inbox=Verplaats naar Inbox mail_level=Score mail_level2=Spam score mail_none=Er zijn geen berichten in uw spam folder mail_pos=Spam berichten $1 naar $2 of $3 mail_razor=Rapport als Spam & Wissen mail_refresh=Herladen mail_return=spam mail lijst mail_search3=Zoek naar score hoger: mail_title=Spam Mail mail_whitelist2=Toegestane Zender & Inbox mail_will=Automatisch herladen in $1 minute mail_wills=Automatisch herladen in $1 seconden priv_dcc=DCC opdrachten argumenten priv_desc=De opties die hier staan kunnen alleen globaal gezet worden en niet voor de individuele gebruikers configuratie files. Zij doen dat dmv het pad naar diverse configuratie en log file's. priv_eargs='$1' is geen geldige lijst met argumenten priv_emode='$1' is geen geldige 4-digit file mode priv_emscore='$1' is geen geldige hoogste uitdrukkingsscore priv_epath='$1' is geen geldig pad priv_ephrase='$1' is geen geldig dubble woord spam uitdrukking priv_err=Mislukt om voorkeur-opties op te slaan priv_escore=Ontbrekende of ongeldige score voor spam uitdrukking '$1' priv_header=Extra voorkeur-level settings priv_highest=Hoogste voorkeur score priv_log=Timing log files pad priv_mode=Witte lijst octal file mode priv_phrase=Twee-woord uitdrukking priv_phrases=Spam indicator uitdrukking priv_razor=Razor configuratie file pad priv_score=Score priv_title=Extra Privilege Opties priv_white=Automatische wittelijst file pad process_eclean=Er ontstond een fout tijdens verwijderen van de SpamAssassin headers van deze mail process_ereport=Mislukt email rapport naar SpamAssassin : $1 procmail_desc=Dit formulier kan gebruikt worden om de Procmail configuratie te veranderen die uitmaakt wat er gebeurt met berichten die als spam worden aangemerkt procmail_ok=Verander Procmail Aflevering procmail_title=Procmail Spam Aflevering razor_auto=Kies automatisch razor_desc=Vipul's Razor is een samenwerkings spam detectie en rapportering systeem die de classificatie kan verbeteren op de spam die naar uw adres gestuurd word. Maar voordat U het kunt gebruiken moet U het registratie formulier invullen voor een Razor account. razor_doing=Ik probeer nu om U te registreren en Razor setup te draaien .. razor_done=.. klaar. razor_ecmd=De Razor setup opdracht $1 is niet gevonden op uw systeem, wat inhoud dat Razor niet is geinstalleerd. razor_enter=Bevestigd razor_epass=Ontbrkend wachtwoord razor_err=Setup Razor mislukt razor_euser=Ontbrekende gebruikersnaam razor_failed=.. mislukt! zie de fout output hierboven waarom razor_ok=Setup Nu razor_pass=Razor wachtwoord razor_title=Setup Razor Spam Detector razor_user=Razor gebruikersnaam report_addall=Alles report_addfor=Berichten type report_addham=Ham report_addheader=Header report_adds=Extra headers om toe te voegen report_addspam=Spam report_addtext=Tekst voor header report_char=X-Spam-Level: header karakter report_clear=Gebruik de tekst hieronder .. report_defang=Verander MIME type van spam naar platte tekst? report_desc=De opties op deze pagina controleren de modificaties die SpamAssassin toepast op headers en body van alle berichten die hij analyseerd, en modificaties die hij toepast op mail geclassificeerd als spam. report_detail=Inclusief details van spam uitdrukkingen? report_eaddheader=Ontbrekende of ongeldige extra header om toe te voegen $1 report_echar=Een enkle karakter moet ingevuld worden voor de X-Spam-Level: header report_err=Mislukt om spam rapport opties op te slaan report_fold=Split X-Spam-Status: header over diverse regels? report_header=Annalyse en spam berichten modificatie options report_leave=Laat onverandert report_noclear=Voeg hieronder tekst toe aan standaard bericht .. report_report=Rapporteer met bijlagen aan bericht indien de spamdrempel word overschreden report_rewrite=Modificeer Onderwerp: header of spam? report_rfrom=Prepend tekst naar- Van: header report_rheader=Stop rapport in X-Spam-Status: header inplaats van body? report_rsubject=Prepend tekst naar- Onderwerp: header report_rto=Prepend tekst naar- Naar: header report_safe=Stop origineel bericht in bijlage? report_safe2=Ja, als platte tekst report_stars=Inclusief X-Spam-Level: header? report_subject=Tekst naar prepend naar spam Subject: header report_terse=Rapporteer bijlage naar spam bericht wanneer in bruuske mode report_title=Berichten Modificatie report_useterse=Alleen bruuske rapport genereren? score_auto=Wittelijst score factor score_bayes=Gebruik Bayesian leer classificator? score_desc=SpamAssassin wijst een score toe aan ieder bericht gebaseerd op zijn inhoud en header. De opties op deze pagina bepalen de hoogte van de score wanneer een bricht als spam word gezien, en sommige methoden hoer die score berekend word. score_descr=Omschrijving score_describe=Test omschrijving voor rapport score_eauto=Ontbrekende of ongeldige wittelijst score factor (moet tussen 1 en 0 zijn) score_edesc=Ontbrekende omschrijving voor score '$1' score_ehits=Ontbrekende of ongeldige aantal hits indien een bericht word gezien als spam score_emx=Ontbrekende of ongeldige aantal keren om te kontroleren Van: adres MX score_emxdelay=Ontbrekende of ongeldige aantal seconden om te wachten tussen MX kontrole score_ename='$1' is geen geldige test naam score_epoints='$1' is geen geldig aantal punten score_ereceived=Ontbrekende of ongeldige aantal voor- Ontvangen: headers te kontroleren met RBL score_err=Mislukt om berichten score op te slaan score_etimeout=Ontbrekende of ongeldige seconden om te wachten op RBL aanvragen score_header=Spam berichten classificatie opties score_hits=Aantal hits totdat een bericht als spam word gezien score_langs=Talen in email die niet als potentiele spam worden gezien score_langsall=Alle talen score_langssel=Geselecteerde talen .. score_locales=Karakter sets in email die niet als potentiele spam worden gezien score_localesall=Alle karakter sets score_localessel=Geselecteerde karakter sets .. score_mx=Aantal keren om te kontroleren- Van: adres MX score_mxdelay=Seconden om te wachten tussen MX kontrole score_name=Test naam score_points=Punten score_rbl=Skip RBL open-relay kontrole? score_received=Aantal van Ontvangen: headers om te kontroleren met RBL score_score=SpamAssassin test scores score_timeout=Seconden om te wachten voor RBL aanvragen score_title=Spam Classificatie search_escore=Ontbrekende of ongeldige spam score search_results5=$1 mail bericht met spam score gelijk aan of hoger dan $2 .. setup_default=Normaal afleveren setup_desc_usermin=Dit formulier kunt U gebruiken om Procmail in $1 op te zetten om te werken met SpamAssassin op alle mail berichten die naar uw account gestuurd worden. Maar dit heeft alleen effect als de mail server gebruik maakt van Procmail voor locale aflevering, of indien uw .forward files is opgezet om alle email naar Procmail te sturen. setup_desc_webmin=Dit formulier kunt U gebruiken om Procmail in $1 op te zetten om te werken met SpamAssassin op alle mail berichten die door uw systeem ontvangen worden. Maar dit heeft alleen effect als de mail server gebruik maakt van Procmail voor locale aflevering, of indien uw .forward files is opgezet om alle email naar Procmail te sturen. setup_drop=Run SpamAssassin en schrijf naar file als setup_drop0=root gebruiker setup_drop1=Ontvanger Unix gebruiker setup_eemail=Ontbrekende of ongeldig email adres setup_efile=Ontbrekende of ongeldig mbox-formaat file setup_email=Doorsturen naar email address setup_emaildir=Ontbrekende of ongeldig Qmail mail directorie setup_emhdir=Ontbrekende of ongeldig MH mail directorie setup_err=Setup voor SpamAssassin mislukt setup_file=Invoegen aan mbox-formaat mail file .. setup_head=Alle berichten onderzocht door SpamAssassin hebben de X-Spam headers set, zodat ze later nogmaals gefilterd kunnen worden door de mail clients. setup_home=De variabel $HOME kan gebruikt worden in het pad hierboven, wat vervangen zal worden door de naam van de home directorie van de gebruiker die de mail ontvangt. setup_maildir=Toevoegen aan Qmail-style mail directorie .. setup_mhdir=Toevoegen aan MH-style mail directorie .. setup_null=Weggooien setup_ok=Setup Procmail voor SpamAssassin setup_rel=Alle niet-absolute mail files of directorie paden die hierboven ingevuld worden zullen relatief worden naar de home directorie van de gebruiker die de mail ontvangt. setup_title=Setup Procmail voor SpamAssassin setup_to=Actie voor berichten geclassificeerd als spam simple_desc=Op deze pagina kunt U extra testen definieeren die SpamAssassin zal toepassen op email, gebaseerd op berichten headers, de body inhoud, URL's gevonden in de body. De naam mag U zelf verzinnen maar is gebruikelijk zoiets als CONTAINS_FOO (BEVAT_ONZIN. simple_describe=Omschrijving simple_err=Mislukt om berichten test op te slaan simple_for=Kontroleer simple_header=Berichten test om op te slaan simple_name=Test naam simple_regexp=Overeenkomende expressie simple_score=Score om toe te voegen simple_switch=Schakel naar geavanceerde mode .. simple_title=$header_titel user_bodymax=DCC body checksum tellen voordat het overeenkomt user_dcc=Locatie van DCC client programma user_desc=De opties op deze pagina zijn meest gerelateerd tot de paden en settings die SpamAssassin gebruikt voor de externe spam identificatie pakketten Razor, DCC en Pyzor. U kunt SpamAssassin ook vertellen dat hij DNS moet opzoeken of niet. user_dheader=Toevoegen DCC header aan bericht? user_dns=Mag SpamAssassin een DNS opzoeken? user_dnslist=Test met kontroleren servers user_dnstest=Test user_emax='$1' is geen geldige checksum telling user_epath='$1' is geen geldige client programma pad user_err=Mislukt om gebruiker opties op te slaan user_etimeout='$1' is geen geldige timeout user_fuz1max=DCC fuz1 checksum telling voordat hij overeenkomt user_fuz2max=DCC fuz2 checksum telling voordat hij overeenkomt user_header=Extra gebruikers-level opties user_inpath=In pad user_pbodymax=Pyzor body checksum telling voordat hij overeenkomt user_pheader=Toevoegen Pyzor header aan bericht? user_ptimeout=Pyzor aanvraag timeout in seconden user_pyzor=Locatie van Pyzor client programma user_razor=Razor aanvraag timeout in seconden user_timeout=DCC aanvraag timeout in seconden user_title=Extra Gebruikers Opties usually=Gebruikelijk $1 white_addr=Adres white_black=Van: adressen naar altijd classificeren als spam white_desc=Met de tabellen op deze pagina kunt U specificeren Van: en Naar: adressen voor email die altijd of nooit gecategorieseerd zijn als spam. Elke andere email zal worden behandeld met normale SpamAssassin's regels. Alle email adressen mogen wildcarts bevatten, zoals *@foo.com of *.foo.com om met gehele domeinen overeen te komen. white_efrom='$1' is geen geldig- Van: adres white_ercvd='$1' is geen geldige domein naam white_err=Mislukt om zwarte en witte lijst op te slaan white_from=Van: adressen om nooit te classificeren als spam white_gblack=Systeem-wide adressen altijd te classificeren als spam white_gfrom=Systeem-wide adressen om nooit te classificeren als spam white_gunblack=Systeem-wide uitzonderingen voor adressen altijd te classificeren als spam white_gunfrom=Systeem-wide uitzonderingen om nooit te classificeren als spam white_header=Emai adressen om te categoriseren als spam white_import=Importeer adres van file white_importdesc=Dit formulier kan gebruikt worden om email adressen toe te voegen vanaf een file (zoals een gexporteerde Outlook of Eudora adres boek) naar de toegestane lijst. white_importok=Importeer Nu white_level=Toestaan white_level0=Beetje spam white_level1=Meer spam white_level2=Alle spam white_rcvd=Van: adressen om nooit te classificeren als spam, anhankelijk van Ontvangen: domein white_rcvdhost=Bron domein white_return=Toegestane en Niet-toegestane adressen white_sort=Sorteer toegestane adressen na importeren? white_title=Toegestane en Niet-toegestane Adressen white_to=Naar: of Cc: adressen om sommige toe te staan of alle spam naar white_unblack=Uitzonderingen voor- Van: adressen altijd classificeren als spam white_unfrom=Uitzonderingen voor- Van: adressen nooit classificeren als spam spam/langs0100664000567100000120000000131611017163270012527 0ustar jcameronwheelaf afrikaans am amharic ar arabic be byelorussian bg bulgarian bs bosnian ca catalan cs czech cy welsh da danish de german el greek en english eo esperanto es spanish et estonian eu basque fa persian fi finnish fr french fy frisian ga irish gd scots he hebrew hi hindi hr croatian hu hungarian hy armenian id indonesian is icelandic it italian ja japanese ka georgian ko korean la latin lt lithuanian lv latvian mr marathi ms malay ne nepali nl dutch no norwegian pl polish pt portuguese qu quechua rm rhaeto-romance ro romanian ru russian sa sanskrit sco scots sk slovak sl slovenian sq albanian sr serbian sv swedish sw swahili ta tamil th thai tl tagalog tr turkish uk ukrainian vi vietnamese yi yiddish zh chinese spam/locales0100664000567100000120000000010511017163270013040 0ustar jcameronwheelen English ja Japanese ko Korea ru Cyrillic th Thai zh Chinese spam/save_header.cgi0100775000567100000120000000572111017163270014441 0ustar jcameronwheel#!/usr/local/bin/perl # save_header.cgi # Save custom header and body tests require './spam-lib.pl'; &can_use_check("header"); &error_setup($text{'header_err'}); &ReadParse(); &execute_before("header"); &lock_spam_files(); $conf = &get_config(); if (!$module_info{'usermin'}) { &parse_yes_no($conf, "allow_user_rules"); } @header = &parse_table("header", \&header_parser); &save_directives($conf, "header", \@header, 1); @oldbody = ( &find("body", $conf), &find("rawbody", $conf), &find("fullbody", $conf), &find("full", $conf) ); @body = &parse_table("body", \&body_parser); &save_directives($conf, \@oldbody, \@body, 0); @uri = &parse_table("uri", \&uri_parser); &save_directives($conf, "uri", \@uri, 1); @meta = &parse_table("meta", \&meta_parser); &save_directives($conf, "meta", \@meta, 1); @score = &parse_table("score", \&score_parser); &save_directives($conf, 'score', \@score, 1); @describe = &parse_table("describe", \&describe_parser); &save_directives($conf, 'describe', \@describe, 1); &flush_file_lines(); &unlock_spam_files(); &execute_after("header"); &webmin_log("header"); &redirect(""); # header_parser(rowname, value, ...) sub header_parser { return undef if ($_[1] eq ''); $_[1] =~ /^\S+$/ || &error(&text('header_ename', $_[1])); if ($_[3] eq 'eval') { $_[4] =~ /^\S+\(.*\)$/ || &error(&text('header_eeval', $_[4])); return "$_[1] eval:$_[4]"; } elsif ($_[3] eq 'exists') { $_[2] =~ /^\S+$/ || &error(&text('header_eheader', $_[2])); return "$_[1] exists:$_[2]"; } else { $_[2] =~ /^\S+$/ || &error(&text('header_eheader', $_[2])); $_[4] =~ /^\/(.*)\/\S*$/ || &error(&text('header_eregexp', $_[4])); return "$_[1] $_[2] $_[3] $_[4]".($_[5] ? " if-unset: $_[5]" : ""); } } # body_parser(rowname, value, ...) sub body_parser { return undef if ($_[1] eq ''); $_[1] =~ /^\S+$/ || &error(&text('header_ename', $_[1])); local $v; if ($_[3] == 0) { $_[4] =~ /^\/(.*)\/\S*$/ || &error(&text('header_eregexp', $_[4])); $v = "$_[1] $_[4]"; } else { $_[4] =~ /^\S+\(.*\)$/ || &error(&text('header_eeval', $_[4])); $v = "$_[1] eval:$_[4]"; } return { 'name' => $_[2] == 0 ? 'body' : $_[2] == 1 ? 'rawbody' : $_[2] == 2 ? 'fullbody' : 'full', 'value' => $v }; } sub uri_parser { return undef if ($_[1] eq ''); $_[1] =~ /^\S+$/ || &error(&text('header_ename', $_[1])); $_[2] =~ /^\/(.*)\/\S*$/ || &error(&text('header_eregexp', $_[2])); return "$_[1] $_[2]"; } sub meta_parser { return undef if ($_[1] eq ''); $_[1] =~ /^\S+$/ || &error(&text('header_ename', $_[1])); $_[2] =~ /\S/ || &error(&text('header_emeta', $_[1])); return "$_[1] $_[2]"; } sub score_parser { return undef if (!$_[1]); $_[1] =~ /^\S+$/ || &error(&text('score_ename', $_[1])); $_[2] =~ /^\-?\d+(\.\d+)?$/ || $_[2] =~ /^\-?\.\d+$/ || &error(&text('score_epoints', $_[2])); return "$_[1] $_[2]"; } sub describe_parser { return undef if (!$_[1]); $_[1] =~ /^\S+$/ || &error(&text('score_ename', $_[1])); $_[2] =~ /\S/ || &error(&text('score_edesc', $_[1])); return "$_[1] $_[2]"; } spam/save_procmail.cgi0100775000567100000120000000334311017163270015015 0ustar jcameronwheel#!/usr/local/bin/perl # Change the procmail rule that delivers spam require './spam-lib.pl'; &error_setup($text{'procmail_err'}); &can_use_check("procmail"); &ReadParse(); # Validate inputs $type = undef; if ($in{'to'} == 0) { $file = "/dev/null"; } elsif ($in{'to'} == 1) { $in{'file'} =~ /^\S+$/ || &error($text{'setup_efile'}); $file = $in{'file'}; } elsif ($in{'to'} == 2) { $in{'maildir'} =~ /^\S+$/ || &error($text{'setup_emaildir'}); $file = "$in{'maildir'}/"; } elsif ($in{'to'} == 3) { $in{'mhdir'} =~ /^\S+$/ || &error($text{'setup_emhdir'}); $file = "$in{'mhdir'}/."; } elsif ($in{'to'} == 4) { $file = "\$DEFAULT"; } elsif ($in{'to'} == 5) { $in{'email'} =~ /^\S+$/ || &error($text{'setup_eemail'}); $file = $in{'email'}; $type = "!"; } # Find the existing recipe &foreign_require("procmail", "procmail-lib.pl"); @pmrcs = &get_procmailrc(); $pmrc = $pmrcs[$#pmrcs]; @recipes = &procmail::parse_procmail_file($pmrc); $spamrec = &find_file_recipe(\@recipes); &lock_file($pmrc); if ($file) { if ($spamrec) { # Update the recipe $spamrec->{'action'} = $file; $spamrec->{'type'} = $type; &procmail::modify_recipe($spamrec); } else { # Add a new recipe $spamrec = { 'flags' => [ ], 'conds' => [ [ '', '^X-Spam-Status: Yes' ] ], 'type' => $type, 'action' => $file }; &procmail::create_recipe($spamrec, $pmrc); } } elsif ($spamrec) { # Remove the recipe, to fall back to default delivery &procmail::delete_recipe($spamrec); } &unlock_file($pmrc); if ($module_info{'usermin'} && $file ne "/dev/null") { # Remember spam mail file $userconfig{'spam_file'} = $file; &write_file("$user_module_config_directory/config", \%userconfig); } # All done! &webmin_log("procmail"); &redirect(""); spam/save_report.cgi0100775000567100000120000000365511017163270014530 0ustar jcameronwheel#!/usr/local/bin/perl # save_report.cgi # Save report generation options require './spam-lib.pl'; &error_setup($text{'report_err'}); &can_use_check("report"); &ReadParse(); &execute_before("report"); &lock_spam_files(); $conf = &get_config(); &save_directives($conf, 'clear_report_template', $in{'clear_report'} ? [ "" ] : [ ], 1); $in{'report'} =~ s/\r//g; @report = split(/\n/, $in{'report'}); &save_directives($conf, 'report', \@report, 1); &save_directives($conf, 'clear_terse_report_template', $in{'clear_terse'} ? [ "" ] : [ ], 1); $in{'terse'} =~ s/\r//g; @terse = split(/\n/, $in{'terse'}); &save_directives($conf, 'terse_report', \@terse, 1); if (&version_atleast(3.0)) { foreach $h ("subject", "from", "to") { if (!$in{"rewrite_header_${h}_def"}) { push(@rheader, { 'name' => 'rewrite_header', 'value' => $h." ".$in{"rewrite_header_${h}"} }); } } &save_directives($conf, "rewrite_header", \@rheader); } else { &parse_yes_no($conf, "rewrite_subject"); &parse_opt($conf, "subject_tag", undef); } &parse_yes_no($conf, "report_header"); &parse_yes_no($conf, "use_terse_report"); &parse_yes_no($conf, "fold_headers"); &parse_yes_no($conf, "detailed_phrase_score"); if (!&version_atleast(3.0)) { &parse_yes_no($conf, "spam_level_stars"); } &parse_opt($conf, "spam_level_char", \&char_check); &parse_yes_no($conf, "defang_mime"); &parse_option($conf, "report_safe") if (defined($in{'report_safe'})); if (&version_atleast(3)) { for($i=0; defined($addfor = $in{"addfor_$i"}); $i++) { next if (!$addfor); $addheader = $in{"addheader_$i"}; $addtext = $in{"addtext_$i"}; $addheader =~ /^\S+$/ || &error(&text('report_eaddheader', $i+1)); push(@adds, "$addfor $addheader $addtext"); } &save_directives($conf, "add_header", \@adds, 1); } &flush_file_lines(); &unlock_spam_files(); &webmin_log("report"); &execute_after("report"); &redirect(""); sub char_check { $_[0] =~ /^\S$/ || &error($text{'report_echar'}); } spam/save_score.cgi0100775000567100000120000000346711017163270014331 0ustar jcameronwheel#!/usr/local/bin/perl # save_score.cgi # Save message scoring options require './spam-lib.pl'; &error_setup($text{'score_err'}); &can_use_check("score"); &ReadParse(); &execute_before("score"); &lock_spam_files(); $conf = &get_config(); $hits_param = &version_atleast(3.0) ? "required_score" : "required_hits"; &parse_opt($conf, $hits_param, \&hits_check); &parse_opt($conf, "auto_whitelist_factor", \&auto_check); &parse_yes_no($conf, "use_bayes"); &parse_opt($conf, "check_mx_attempts", \&mx_check); &parse_opt($conf, "check_mx_delay", \&mxdelay_check); &parse_yes_no($conf, "skip_rbl_checks"); &parse_opt($conf, "rbl_timeout", \&timeout_check); &parse_opt($conf, "num_check_received", \&received_check); if ($in{'langs_def'} == 2) { &save_directives($conf, "ok_languages", [ ], 1); } elsif ($in{'langs_def'} == 1) { &save_directives($conf, "ok_languages", [ "all" ], 1); } else { &save_directives($conf, "ok_languages", [ join(" ", split(/\0/, $in{'langs'})) ], 1); } if ($in{'locales_def'} == 2) { &save_directives($conf, "ok_locales", [ ], 1); } elsif ($in{'locales_def'} == 1) { &save_directives($conf, "ok_locales", [ "all" ], 1); } else { &save_directives($conf, "ok_locales", [ join(" ", split(/\0/, $in{'locales'})) ], 1); } &flush_file_lines(); &unlock_spam_files(); &execute_after("score"); &webmin_log("score"); &redirect(""); sub hits_check { $_[0] =~ /^\d+(\.\d+)?$/ || &error($text{'score_ehits'}); } sub auto_check { $_[0] =~ /^\d+(\.\d+)?$/ && $_[0] >= 0 && $_[0] <= 1 || &error($text{'score_eauto'}); } sub mx_check { $_[0] =~ /^\d+$/ || &error($text{'score_emx'}); } sub mxdelay_check { $_[0] =~ /^\d+$/ || &error($text{'score_emxdelay'}); } sub timeout_check { $_[0] =~ /^\d+$/ || &error($text{'score_etimeout'}); } sub received_check { $_[0] =~ /^\d+$/ || &error($text{'score_ereceived'}); } spam/save_simple.cgi0100775000567100000120000000534211017163271014502 0ustar jcameronwheel#!/usr/local/bin/perl # Update simple tests require './spam-lib.pl'; &can_use_check("header"); $conf = &get_config(); &error_setup($text{'simple_err'}); &ReadParse(); &execute_before("simple"); # Get existing rules @simples = &get_simple_tests($conf); @headers = &find("header", $conf); @bodies = &find("body", $conf); @fulls = &find("full", $conf); @uris = &find("uri", $conf); @scores = &find("score", $conf); @describes = &find("describe", $conf); # Parse and validate inputs for($i=0; defined($name = $in{"name_$i"}); $i++) { $simple = $i < @simples ? $simples[$i] : undef; if ($simple) { # Take out the directives that would be replaced @headers = grep { $_ ne $simple->{'header_dir'} } @headers; @bodies = grep { $_ ne $simple->{'body_dir'} } @bodies; @fulls = grep { $_ ne $simple->{'full_dir'} } @fulls; @uris = grep { $_ ne $simple->{'uri_dir'} } @uris; @scores = grep { $_ ne $simple->{'score_dir'} } @scores; @describes = grep { $_ ne $simple->{'describe_dir'} } @describes; } if ($name) { $name =~ /^\S+$/ || &error(&text('header_ename', $name)); $donename{$name}++ && &error(&text('header_eclash', $name)); $header = $in{"header_$i"}; $regexp = $in{"regexp_$i"}; $regexp || &error(&text('header_eregexp2', $name)); $flags = $in{"flags_$i"}; $flags =~ /^[a-z]*$/ || &error(&text('header_eflags', $flags)); $score = $in{"score_$i"}; $score eq "" || $score =~ /^\-?\d+(\.\d+)?$/ || $score =~ /^\-?\.\d+$/ || &error(&text('score_epoints', $score)); $describe = $in{"describe_$i"}; # Update or add the actual directives if ($header eq "body") { push(@bodies, { 'name' => 'body', 'value' => "$name /$regexp/$flags" }); } elsif ($header eq "full") { push(@fulls, { 'name' => 'full', 'value' => "$name /$regexp/$flags" }); } elsif ($header eq "uri") { push(@uris, { 'name' => 'uri', 'value' => "$name /$regexp/$flags" }); } else { my $ucheader = ucfirst($header); push(@headers, { 'name' => 'header', 'value' => "$name $ucheader =~ /$regexp/$flags" }); } # Update the score and describe if ($score ne "") { push(@scores, { 'name' => 'score', 'value' => "$name $score" }); } if ($describe ne "") { push(@describes, { 'name' => 'describe', 'value' => "$name $describe" }); } } } # Save the directives &lock_spam_files(); &save_directives($conf, "header", \@headers, 0); &save_directives($conf, "body", \@bodies, 0); &save_directives($conf, "full", \@fulls, 0); &save_directives($conf, "score", \@scores, 0); &save_directives($conf, "describe", \@describes, 0); &save_directives($conf, "uri", \@uris, 0); &flush_file_lines(); &unlock_spam_files(); &execute_after("header"); &webmin_log("header"); &redirect(""); spam/save_user.cgi0100775000567100000120000000315711017163271014171 0ustar jcameronwheel#!/usr/local/bin/perl # save_user.cgi # Save other user options require './spam-lib.pl'; &error_setup($text{'user_err'}); &can_use_check("user"); &ReadParse(); &execute_before("user"); &lock_spam_files(); $conf = &get_config(); if ($in{'dns'} == 1) { &save_directives($conf, 'dns_available', [ 'yes' ], 1); } elsif ($in{'dns'} == 0) { &save_directives($conf, 'dns_available', [ 'no' ], 1); } elsif ($in{'dns'} == -1) { &save_directives($conf, 'dns_available', [ ], 1); } else { local $test = "test"; if ($in{'dnslist'}) { $test .= ": $in{'dnslist'}"; } if ($config{'defaults'} && !$in{'dnslist'}) { &save_directives($conf, 'dns_available', [ ]); } else { &save_directives($conf, 'dns_available', [ $test ], 1); } } &parse_opt($conf, "razor_timeout", \&check_timeout); &parse_opt($conf, "dcc_path", \&check_path); &parse_opt($conf, "dcc_body_max", \&check_max); &parse_opt($conf, "dcc_timeout", \&check_timeout); &parse_opt($conf, "dcc_fuz1_max", \&check_max); &parse_opt($conf, "dcc_fuz2_max", \&check_max); if (!&version_atleast(3)) { &parse_yes_no($conf, "dcc_add_header"); } &parse_opt($conf, "pyzor_path", \&check_path); &parse_opt($conf, "pyzor_body_max", \&check_max); &parse_opt($conf, "pyzor_timeout", \&check_timeout); &parse_yes_no($conf, "pyzor_add_header"); &flush_file_lines(); &unlock_spam_files(); &execute_after("user"); &webmin_log("user"); &redirect(""); sub check_timeout { $_[0] =~ /^\d+$/ || &error(&text('user_etimeout', $_[0])); } sub check_path { $_[0] =~ /^\// && -r $_[0] || &error(&text('user_epath', $_[0])); } sub check_max { $_[0] =~ /^\d+$/ || &error(&text('user_emax', $_[0])); } spam/save_white.cgi0100775000567100000120000000262311017163271014330 0ustar jcameronwheel#!/usr/local/bin/perl # save_white.cgi # Save white and black lists of to and from addresses require './spam-lib.pl'; &error_setup($text{'white_err'}); &can_use_check("white"); &ReadParse(); &execute_before("white"); &lock_spam_files(); $conf = &get_config(); &parse_textbox($conf, "whitelist_from"); &parse_textbox($conf, 'unwhitelist_from'); if (!$config{'show_global'}) { @rcvd = &parse_table("whitelist_from_rcvd", \&rcvd_parser); &save_directives($conf, 'whitelist_from_rcvd', \@rcvd, 1); } &parse_textbox($conf, 'blacklist_from'); &parse_textbox($conf, 'unblacklist_from'); if (!$config{'show_global'}) { @to = &parse_table("whitelist_to", \&to_parser); @oldto = ( &find("whitelist_to", $conf), &find("more_spam_to", $conf), &find("all_spam_to", $conf) ); &save_directives($conf, \@oldto, \@to, 0); } &flush_file_lines(); &unlock_spam_files(); &execute_after("white"); &webmin_log("white"); &redirect(""); sub from_parser { return undef if (!$_[1]); $_[1] =~ /^\S+$/ || &error(&text('white_efrom', $_[1])); return $_[1]; } sub rcvd_parser { local $a = &from_parser($_[0], $_[1]); return undef if (!$a); $_[2] =~ /^[A-Za-z0-9\.\-]+$/ || &error(&text('white_ercvd', $_[2])); return "$a $_[2]"; } sub to_parser { local $a = &from_parser($_[0], $_[1]); return undef if (!$a); return { 'name' => $_[2] == 0 ? 'whitelist_to' : $_[2] == 1 ? 'more_spam_to' : 'all_spam_to', 'value' => $a }; } spam/setup.cgi0100775000567100000120000000534011017163271013331 0ustar jcameronwheel#!/usr/local/bin/perl # setup.cgi # Actually setup SpamAssassin for the user or globally require './spam-lib.pl'; &error_setup($text{'setup_err'}); &can_use_check("setup"); &ReadParse(); # Validate inputs $type = undef; if ($in{'to'} == 0) { $file = "/dev/null"; } elsif ($in{'to'} == 1) { $in{'file'} =~ /^\S+$/ || &error($text{'setup_efile'}); $file = $in{'file'}; } elsif ($in{'to'} == 2) { $in{'maildir'} =~ /^\S+$/ || &error($text{'setup_emaildir'}); $file = "$in{'maildir'}/"; } elsif ($in{'to'} == 3) { $in{'mhdir'} =~ /^\S+$/ || &error($text{'setup_emhdir'}); $file = "$in{'mhdir'}/."; } elsif ($in{'to'} == 4) { $file = "\$DEFAULT"; } elsif ($in{'to'} == 5) { $in{'email'} =~ /^\S+$/ || &error($text{'setup_eemail'}); $file = $in{'email'}; $type = "!"; } if ($module_info{'usermin'} && $file !~ /^\//) { # Create parent directory if needed if ($file =~ /^(\S+)\/([^\/]+)(\/(\.)?)?$/ && !-d "$remote_user_info[7]/$1") { &system_logged("mkdir -p '$remote_user_info[7]/$1'"); } } # Add template procmail rules &foreign_require("procmail", "procmail-lib.pl"); @pmrc = &get_procmailrc(); if (!-s $pmrc[0] && $config{'extra_procmail'}) { &open_tempfile(PMRC, ">$pmrc[0]"); &print_tempfile(PMRC, map { "$_\n" } split(/\t/, $config{'extra_procmail'})); &close_tempfile(PMRC); } # Add new Procmail directives at the top of config file $pmrc = $pmrc[$#pmrc]; @recipes = &procmail::parse_procmail_file($pmrc); if ($in{'drop'}) { # Environment variable to drop privileges $recipe0 = { 'name' => 'DROPPRIVS', 'value' => 'yes' }; } if ($config{'call_spam'} || !$module_info{'usermin'}) { # Recipe to call spamassassin $recipe1 = { 'flags' => [ 'f', 'w' ], 'conds' => [ ], 'type' => '|', 'action' => &get_procmail_command() }; } if ($file) { # Recipe to perform actual filtering to a file $recipe2 = { 'flags' => [ ], 'conds' => [ [ '', '^X-Spam-Status: Yes' ] ], 'type' => $type, 'action' => $file }; } &lock_file($pmrc); if (@recipes) { # Insert at start of file &procmail::create_recipe_before($recipe0, $recipes[0], $pmrc) if ($recipe0); &procmail::create_recipe_before($recipe1, $recipes[0], $pmrc) if ($recipe1); &procmail::create_recipe_before($recipe2, $recipes[0], $pmrc) if ($recipe2); } else { # Just add to file &procmail::create_recipe($recipe0, $pmrc) if ($recipe0); &procmail::create_recipe($recipe1, $pmrc) if ($recipe1); &procmail::create_recipe($recipe2, $pmrc) if ($recipe2); } chmod(0644, $pmrc); &unlock_file($pmrc); if ($module_info{'usermin'} && $file ne "/dev/null") { # Remember spam mail file $userconfig{'spam_file'} = $file; &write_file("$user_module_config_directory/config", \%userconfig); } # All done! &webmin_log("setup"); &redirect(""); spam/spam-lib.pl0100775000567100000120000006443511017163271013560 0ustar jcameronwheel# spam-lib.pl # Common functions for parsing and editing the spamassassin config file do '../web-lib.pl'; &init_config(); do '../ui-lib.pl'; use Fcntl; $local_cf = $config{'local_cf'}; $warn_procmail = $config{'warn_procmail'}; if ($module_info{'usermin'}) { # Running under Usermin, editing user's personal config file &switch_to_remote_user(); &create_user_config_dirs(); if ($local_cf !~ /^\//) { $local_cf = "$remote_user_info[7]/$local_cf"; if ($local_cf =~ /^(.*)\// && !-d $1) { mkdir($1, 0700); } } $database_userpref_name = $remote_user; $include_config_files = !$config{'mode'} || $config{'readfiles'}; $add_to_db = 1; $max_awl_keys = $userconfig{'max_awl'} || 200; } else { # Running under Webmin, typically editing global config file %access = &get_module_acl(); if ($access{'file'}) { $local_cf = $access{'file'}; } if ($access{'nocheck'}) { $warn_procmail = 0; } $database_userpref_name = $config{'dbglobal'} || '@GLOBAL'; $include_config_files = 1; $add_to_db = $config{'addto'}; $max_awl_keys = $config{'max_awl'} || 200; } $ldap_spamassassin_attr = $config{'attr'} || 'spamassassin'; $ldap_username_attr = $config{'uid'} || 'uid'; $add_cf = !-d $local_cf ? $local_cf : $module_info{'usermin'} ? "$local_cf/user_prefs" : "$local_cf/local.cf"; # get_config([file], [for-global]) # Return a structure containing the contents of the spamassassin config file sub get_config { local $forglobal = $_[1]; local @rv; if ($include_config_files || $forglobal) { # Reading from file(s) local $lnum = 0; local $file = $_[0] || $local_cf; if (-d $file) { # A directory of files - read them all opendir(DIR, $file); local @files = sort { $a cmp $b } readdir(DIR); closedir(DIR); local $f; foreach $f (@files) { if ($f =~ /\.cf$/) { local $add = &get_config("$file/$f"); map { $_->{'index'} += scalar(@rv) } @$add; push(@rv, @$add); } } } else { # A single file that can be read right here open(FILE, $file); while() { s/\r|\n//g; s/^#.*$//; if (/^(\S+)\s*(.*)$/) { local $dir = { 'name' => $1, 'value' => $2, 'index' => scalar(@rv), 'file' => $file, 'mode' => 0, 'line' => $lnum }; $dir->{'words'} = [ split(/\s+/, $dir->{'value'}) ]; push(@rv, $dir); } $lnum++; } close(FILE); } } if ($config{'mode'} == 1 || $config{'mode'} == 2) { # Add from SQL database local $dbh = &connect_spamassasin_db(); &error($dbh) if (!ref($dbh)); local $cmd = $dbh->prepare("select preference,value from userpref where username = ?"); $cmd->execute(!$forglobal ? $database_userpref_name : $config{'dbglobal'} ? $config{'dbglobal'} : '@GLOBAL'); while(my ($name, $value) = $cmd->fetchrow()) { local $dir = { 'name' => $name, 'value' => $value, 'index' => scalar(@rv), 'mode' => $config{'mode'} }; $dir->{'words'} = [ split(/\s+/, $dir->{'value'}) ]; push(@rv, $dir); } $cmd->finish(); } elsif ($config{'mode'} == 3 && !$forglobal) { # From LDAP local $ldap = &connect_spamassassin_ldap(); &error($ldap) if (!ref($ldap)); local $uinfo = &get_ldap_user($ldap); if ($uinfo) { local $aindex = 0; foreach my $a ($uinfo->get_value($ldap_spamassassin_attr)) { local ($name, $value) = split(/\s+/, $a, 2); local $dir = { 'name' => $name, 'value' => $value, 'index' => scalar(@rv), 'aindex' => $aindex++, 'oldattr' => $a, 'mode' => $config{'mode'} }; $dir->{'words'} = [ split(/\s+/, $dir->{'value'}) ]; push(@rv, $dir); } } } return \@rv; } # find(name, &config) sub find { local @rv; foreach $c (@{$_[1]}) { push(@rv, $c) if (lc($c->{'name'}) eq lc($_[0])); } return wantarray ? @rv : $rv[0]; } # find_value(name, &config) sub find_value { local @rv = map { $_->{'value'} } &find(@_); return wantarray ? @rv : $rv[0]; } # save_directives(&config, name|&old, &new, valuesonly) # Update the config file with some directives sub save_directives { if ($module_info{'usermin'} && $local_cf =~ /^(.*)\/([^\/]+)$/) { # Under Usermin, make sure .spamassassin exists local $spamdir = $1; if (!-d $spamdir) { &make_dir($spamdir, 0755); } } local @old = ref($_[1]) ? @{$_[1]} : &find($_[1], $_[0]); local @new = $_[3] ? &make_directives($_[1], $_[2]) : @{$_[2]}; local $i; for($i=0; $i<@old || $i<@new; $i++) { local $line; if ($new[$i]) { $line = $new[$i]->{'name'}; $line .= " ".$new[$i]->{'value'} if ($new[$i]->{'value'} ne ''); } if ($old[$i] && $new[$i]) { # Replacing a directive if ($old[$i]->{'name'} eq $new[$i]->{'name'} && $old[$i]->{'value'} eq $new[$i]->{'value'}) { # Nothing to do! next; } if ($old[$i]->{'mode'} == 0) { # In a file local $lref = &read_file_lines($old[$i]->{'file'}); $lref->[$old[$i]->{'line'}] = $line; } elsif ($old[$i]->{'mode'} == 1 || $old[$i]->{'mode'} == 2) { # In an SQL DB local $dbh = &connect_spamassasin_db(); &error($dbh) if (!ref($dbh)); local $cmd = $dbh->prepare("update userpref set value = ? where username = ? and preference = ? and value = ?"); $cmd->execute($new[$i]->{'value'}, $database_userpref_name, $old[$i]->{'name'}, $old[$i]->{'value'}); $cmd->finish(); } elsif ($old[$i]->{'mode'} == 3) { # In LDAP - modify the attribute local $ldap = &connect_spamassassin_ldap(); &error($ldap) if (!ref($ldap)); local $uinfo = &get_ldap_user($ldap); $uinfo || &error(&text('ldap_euser', $database_userpref_name)); local @values = $uinfo->get_value( $ldap_spamassassin_attr); $values[$old[$i]->{'aindex'}] = $new[$i]->{'name'}." ". $new[$i]->{'value'}; local $rv = $ldap->modify( $uinfo->dn(), replace => { $ldap_spamassassin_attr => \@values }); if (!$rv || $rv->code) { &error(&text('eldap', $rv ? $rv->error : "Unknown modify error")); } } $_[0]->[$old[$i]->{'index'}] = $new[$i]; } elsif ($old[$i]) { # Deleting a directive if ($old[$i]->{'mode'} == 0) { # From a file local $lref = &read_file_lines($old[$i]->{'file'}); splice(@$lref, $old[$i]->{'line'}, 1); foreach $c (@{$_[0]}) { if ($c->{'line'} > $old[$i]->{'line'} && $c->{'file'} eq $old[$i]->{'file'}) { $c->{'line'}--; } } } elsif ($old[$i]->{'mode'} == 1 || $old[$i]->{'mode'} == 2) { # From an SQL DB local $dbh = &connect_spamassasin_db(); &error($dbh) if (!ref($dbh)); local $cmd = $dbh->prepare("delete from userpref where username = ? and preference = ? and value = ?"); $cmd->execute($database_userpref_name, $old[$i]->{'name'}, $old[$i]->{'value'}); $cmd->finish(); } elsif ($old[$i]->{'mode'} == 3) { # From LDAP .. get current values, and remove this one local $ldap = &connect_spamassassin_ldap(); &error($ldap) if (!ref($ldap)); local $uinfo = &get_ldap_user($ldap); $uinfo || &error(&text('ldap_euser', $database_userpref_name)); local @values = $uinfo->get_value( $ldap_spamassassin_attr); splice(@values, $old[$i]->{'aindex'}, 1); local $rv = $ldap->modify( $uinfo->dn(), replace => { $ldap_spamassassin_attr => \@values }); if (!$rv || $rv->code) { &error(&text('eldap', $rv ? $rv->error : "Unknown delete error")); } } # Fix up indexes splice(@{$_[0]}, $old[$i]->{'index'}, 1); foreach $c (@{$_[0]}) { if ($c->{'index'} > $old[$i]->{'index'}) { $c->{'index'}--; } } } elsif ($new[$i]) { # Adding a directive local $addmode = scalar(@old) ? $old[0]->{'mode'} : $new[$i]->{'name'} =~ /^user_scores_/ ? 0 : $add_to_db ? $config{'mode'} : 0; if ($addmode == 0) { # To a file local $lref = &read_file_lines($add_cf); $new[$i]->{'line'} = @$lref; push(@$lref, $line); } elsif ($addmode == 1 || $addmode == 2) { # To an SQL DB local $dbh = &connect_spamassasin_db(); &error($dbh) if (!ref($dbh)); local $cmd = $dbh->prepare("insert into userpref (username, preference, value) values (?, ?, ?)"); $cmd->execute($database_userpref_name, $new[$i]->{'name'}, $new[$i]->{'value'}); $cmd->finish(); } elsif ($addmode == 3) { # To LDAP local $ldap = &connect_spamassassin_ldap(); &error($ldap) if (!ref($ldap)); local $uinfo = &get_ldap_user($ldap); $uinfo || &error(&text('ldap_euser', $database_userpref_name)); local $rv = $ldap->modify( $uinfo->dn(), add => { $ldap_spamassassin_attr => $new[$i]->{'name'}." ".$new[$i]->{'value'} }); if (!$rv || $rv->code) { &error(&text('eldap', $rv ? $rv->error : "Unknown add error")); } } $new[$i]->{'mode'} = $addmode; $new[$i]->{'index'} = @{$_[0]}; push(@{$_[0]}, $new[$i]); } } } # make_directives(name, &values) sub make_directives { return map { { 'name' => $_[0], 'value' => $_ } } @{$_[1]}; } ### UI functions ### # edit_table(name, &headings, &&values, &sizes, [&convfunc], blankrows) # Display a table of values for editing, with one blank row sub edit_table { local ($h, $v); print "\n"; print "\n"; foreach $h (@{$_[1]}) { print "\n"; } print "\n"; local $i = 0; local $cfunc = $_[4] || \&default_convfunc; local $blanks = $_[5] || 1; foreach $v (@{$_[2]}, map { [ ] } (1 .. $blanks)) { print "\n"; for($j=0; $j<@{$_[1]}; $j++) { print ""; } print "\n"; $i++; } print "
$h
",&$cfunc($j, "$_[0]_${i}_${j}", $_[3]->[$j], $v->[$j], $v),"
\n"; } # default_convfunc(column, name, size, value) sub default_convfunc { return ""; } # parse_table(name, &parser) # Parse the inputs from a table and return an array of results sub parse_table { local ($i, @rv); local $pfunc = $_[1] || \&default_parsefunc; for($i=0; defined($in{"$_[0]_${i}_0"}); $i++) { local ($j, $v, @vals); for($j=0; defined($v = $in{"$_[0]_${i}_${j}"}); $j++) { push(@vals, $v); } local $p = &$pfunc("$_[0]_${i}", @vals); push(@rv, $p) if (defined($p)); } return @rv; } # default_parsefunc(rowname, value, ...) # Returns a value or undef if empty, or calls &error if invalid sub default_parsefunc { return $_[1] ? join(" ", @_[1..$#_]) : undef; } # start_form(cgi, header) sub start_form { print "\n"; print "\n"; print "\n"; print "
$_[1]
\n"; } # end_form(buttonname, buttonvalue, ...) sub end_form { print "
\n"; if (@_) { local $p = int(200 / scalar(@_)); print "\n"; local $i; for($i=0; $i<@_; $i+=2 ) { local $al = $i == 0 ? "align=left" : $i == @_-2 ? "align=right" : "align=center"; local $n = $_[$i] ? "name='$_[$i]'" : ""; local $v = &html_escape($_[$i+1]); print "\n"; } print "
\n"; } print "\n"; } # yes_no_field(name, value, default) sub yes_no_field { local $v = !$_[1] ? -1 : $_[1]->{'value'}; local $def = &find_default($_[0], $_[2]) ? $text{'yes'} : $text{'no'}; printf " %s\n", $v == 1 ? "checked" : "", $text{'yes'}; printf " %s\n", $v == 0 ? "checked" : "", $text{'no'}; printf " %s (%s)\n", $v == -1 ? "checked" : "", $text{'default'}, $def; } # parse_yes_no(&config, name) sub parse_yes_no { &save_directives($_[0], $_[1], $in{$_[1]} == 1 ? [ 1 ] : $in{$_[1]} == 0 ? [ 0 ] : [ ], 1); } # option_field(name, value, default, &opts) sub option_field { local $v = !$_[1] ? -1 : $_[1]->{'value'}; local $def = &find_default($_[0], $_[2]); local ($defopt) = grep { $_->[0] eq $def } @{$_[3]}; print &ui_radio($_[0], $v, [ @{$_[3]}, [ -1, "$text{'default'} ($defopt->[1])" ] ]); } sub parse_option { &save_directives($_[0], $_[1], $in{$_[1]} == -1 ? [ ] : [ $in{$_[1]} ], 1); } # opt_field(name, value, size, default) sub opt_field { local $def = &find_default($_[0], $_[3]) if ($_[3]); printf " %s %s\n", $_[1] ? "" : "checked", $text{'default'}, $_[3] ? " ($def)" : ""; printf "\n", $_[1] ? "checked" : ""; printf "\n", $_[1] ? &html_escape(ref($_[1]) ? $_[1]->{'value'} : $_[1]) : ""; } # parse_opt(&config, name, [&checkfunc]) sub parse_opt { if (defined($in{"$_[1]_default"}) && $in{"$_[1]_default"} eq $in{$_[1]} || !defined($in{"$_[1]_default"}) && $in{"$_[1]_def"}) { &save_directives($_[0], $_[1], [ ], 1); } else { &{$_[2]}($in{$_[1]}) if ($_[2]); &save_directives($_[0], $_[1], [ $in{$_[1]} ], 1); } } # edit_textbox(name, &values, width, height) sub edit_textbox { print "\n"; } # parse_textbox(&config, name) sub parse_textbox { $in{$_[1]} =~ s/^\s+//; $in{$_[1]} =~ s/\s+$//; local @v = split(/\s+/, $in{$_[1]}); &save_directives($_[0], $_[1], \@v, 1); } # get_procmailrc() # Returns the full paths to the procmail config files in use, the last one # being the user's config sub get_procmailrc { if ($module_info{'usermin'}) { local @rv; push(@rv, $config{'global_procmailrc'}); push(@rv, $config{'procmailrc'} || $procmail::procmailrc); return @rv; } else { return ( $access{'procmailrc'} || $config{'procmailrc'} || $procmail::procmailrc ); } } # find_default(name, compiled-in-default) sub find_default { if ($config{'global_cf'}) { if (!defined($global_config_cache)) { $global_config_cache = &get_config($config{'global_cf'}, 1); } local $v = &find_value($_[0], $global_config_cache); return $v if (defined($v)); } return $_[1]; } # can_use_page(page) # Returns 1 if some page can be used, 0 if not sub can_use_page { local %avail_icons; if ($module_info{'usermin'}) { %avail_icons = map { $_, 1 } split(/,/, $config{'avail_icons'}); $avail_icons{'awl'} = 1; # Always usable } else { %avail_icons = map { $_, 1 } split(/,/, $access{'avail'}); } local $p = $_[0] eq "simple" ? "header" : $_[0]; return $avail_icons{$p}; } # can_use_check(page) # Calls error if some page cannot be used sub can_use_check { &can_use_page($_[0]) || &error($text{'ecannot'}); } # get_spamassassin_version(&out) sub get_spamassassin_version { local $out; &execute_command("$config{'spamassassin'} -V", undef, \$out, \$out, 0, 1); ${$_[0]} = $out if ($_[0]); return $out =~ /(version|Version:)\s+(\S+)/ ? $2 : undef; } # version_atleast(num) sub version_atleast { if (!$version_cache) { $version_cache = &get_spamassassin_version(); } return $version_cache >= $_[0]; } # spam_file_folder() sub spam_file_folder { &foreign_require("mailbox", "mailbox-lib.pl"); local ($sf) = grep { $_->{'spam'} } &mailbox::list_folders(); return $sf; } # disable_indexing(&folder) sub disable_indexing { if (!$config{'index_spam'}) { $mailbox::config{'index_min'} = 1000000000; unlink(&mailbox::user_index_file($_[0]->{'file'})); } } # get_process_pids() # Returns the PIDs and names of SpamAssassin daemon processes like spamd sub get_process_pids { local ($pn, @pids); foreach $pn (split(/\s+/, $config{'processes'})) { push(@pids, map { [ $_, $pn ] } &find_byname($pn)); } return @pids; } sub lock_spam_files { local $conf = &get_config(); @spam_files = &unique(map { $_->{'file'} } @$conf); local $f; foreach $f (@spam_files) { &lock_file($f); } } sub unlock_spam_files { local $f; foreach $f (@spam_files) { &unlock_file($f); } } # show_buttons(number) sub show_buttons { print "\n"; local $onclick = "onClick='return check_clicks(form)'" if (defined(&check_clicks_function)); print "\n"; print "\n"; if (&has_command($config{'sa_learn'})) { print "\n"; } print "\n"; print "\n"; print "
\n"; } # restart_spamd() # Re-start all SpamAssassin processes, or return an error message sub restart_spamd { if ($config{'restart_cmd'}) { local $out = &backquote_logged( "$config{'restart_cmd'} 2>&1 $out"; } } else { local @pids = &get_process_pids(); @pids || return $text{'apply_none'}; local $p; foreach $p (@pids) { &kill_logged("HUP", $p->[0]); } } return undef; } # find_spam_recipe(&recipes) # Returns the recipe that runs spamassassin sub find_spam_recipe { local $r; foreach $r (@{$_[0]}) { if ($r->{'action'} =~ /spamassassin/i || $r->{'action'} =~ /spamc/i) { return $r; } } return undef; } # find_file_recipe(&recipes) # returns the recipe for delivering mail based on the x-spam-status header sub find_file_recipe { local ($r, $c); foreach $r (@{$_[0]}) { foreach $c (@{$r->{'conds'}}) { if ($c->[1] =~ /x-spam-status/i) { return $r; } } } return undef; } # find_delete_recipe(&recipes) # returns the recipe for delete mail based on the x-spam-level header, and # the level it deletes at. sub find_delete_recipe { local ($r, $c); foreach $r (grep { $_->{'action'} eq '/dev/null' } @{$_[0]}) { foreach $c (@{$r->{'conds'}}) { if ($c->[1] =~ /x-spam-level:\s+((\\\*)+)/i) { return ($r, length($1)/2); } } } return ( ); } # find_virtualmin_recipe(&recipes) # Returns the recipe that runs the Virtualmin lookup command sub find_virtualmin_recipe { local ($r, $c); foreach $r (@{$_[0]}) { if ($r->{'action'} =~ /^VIRTUALMIN=/) { return $r; } } return undef; } # find_force_default_receipe(&recipes) # Returns the recipe that forces delivery to $DEFAULT, used by Virtualmin and # others to prevent per-user .procmailrc settings sub find_force_default_receipe { local ($r, $c); foreach $r (@{$_[0]}) { if ($r->{'action'} eq '$DEFAULT' && !@{$r->{'conds'}}) { return $r; } } return undef; } # get_simple_tests(&conf) sub get_simple_tests { local ($conf) = @_; local (@simple, %simple); foreach my $h (&find("header", $conf)) { if ($h->{'value'} =~ /^(\S+)\s+(\S+)\s+=~\s+\/(.*)\/(\S*)\s*$/) { push(@simples, { 'header_dir' => $h, 'name' => $1, 'header' => lc($2), 'regexp' => $3, 'flags' => $4, }); $simples{$1} = $simples[$#simples]; } } foreach my $b (&find("body", $conf), &find("full", $conf), &find("uri", $conf)) { if ($b->{'value'} =~ /^(\S+)\s+\/(.*)\/(\S*)\s*$/) { push(@simples, { $b->{'name'}.'_dir' => $b, 'name' => $1, 'header' => $b->{'name'}, 'regexp' => $2, 'flags' => $3, }); $simples{$1} = $simples[$#simples]; } } foreach my $s (&find("score", $conf)) { if ($s->{'value'} =~ /^(\S+)\s+(\S+)/ && $simples{$1}) { $simples{$1}->{'score_dir'} = $s; $simples{$1}->{'score'} = $2; } } foreach my $d (&find("describe", $conf)) { if ($d->{'value'} =~ /^(\S+)\s+(\S.*)/ && $simples{$1}) { $simples{$1}->{'describe_dir'} = $d; $simples{$1}->{'describe'} = $2; } } return @simples; } # get_procmail_command() # Returns the command that should be used in /etc/procmailrc to call # spamassassin, such as spamc or the full spamassassin path sub get_procmail_command { if ($config{'procmail_cmd'} eq '*') { # Is spamd running? if (&get_process_pids()) { local $spamc = &has_command("spamc"); return $spamc if ($spamc); } return &has_command($config{'spamassassin'}); } elsif ($config{'procmail_cmd'}) { return $config{'procmail_cmd'}; } else { return &has_command($config{'spamassassin'}); } } # execute_before(section) # If a before-change command is configured, run it. If it fails, call error sub execute_before { local ($section) = @_; if ($config{'before_cmd'}) { $ENV{'SPAM_SECTION'} = $section; local $out; local $rv = &execute_command( $config{'before_cmd'}, undef, \$out, \$out); $rv && &error(&text('before_ecmd', "
".&html_escape($out)."
")); } } # execute_after(section) # If a after-change command is configured, run it. If it fails, call error sub execute_after { local ($section) = @_; if ($config{'after_cmd'}) { $ENV{'SPAM_SECTION'} = $section; local $out; local $rv = &execute_command( $config{'after_cmd'}, undef, \$out, \$out); $rv && &error(&text('after_ecmd', "
".&html_escape($out)."
")); } } # check_spamassassin_db() # Checks if the LDAP or MySQL backend can be contacted, and if not returns # an error message. sub check_spamassassin_db { if ($config{'mode'} == 0) { return undef; # Local files always work } elsif ($config{'mode'} == 1 || $config{'mode'} == 2) { # Connect to a database local $dbh = &connect_spamassasin_db(); return $dbh if (!ref($dbh)); local $testcmd = $dbh->prepare("select * from userpref limit 1"); if (!$testcmd || !$testcmd->execute()) { undef($connect_spamassasin_db_cache); $dbh->disconnect(); return &text('connect_equery', "$config{'db'}", "userpref"); } $testcmd->finish(); undef($connect_spamassasin_db_cache); $dbh->disconnect(); return undef; } elsif ($config{'mode'} == 3) { # Connect to LDAP local $ldap = &connect_spamassassin_ldap(); return $ldap if (!ref($ldap)); local $rv = $ldap->search(base => $config{'base'}, filter => "(uid=$remote_user)", sizelimit => 1); if (!$rv || $rv->code) { return &text('connect_ebase', "$config{'base'}", $rv ? $rv->error : "Unknown search error"); } return undef; } else { return "Unknown config mode $config{'mode'} !"; } } # connect_spamassasin_db() # Attempts to connect to the SpamAssasin MySQL or PostgreSQL database. Returns # a driver handle on success, or an error message string on failure. sub connect_spamassasin_db { if (defined($connect_spamassasin_db_cache)) { return $connect_spamassasin_db_cache; } local $driver = $config{'mode'} == 1 ? "mysql" : "Pg"; local $drh; eval <install_driver(\$driver); EOF if ($@) { return &text('connect_edriver', "DBD::$driver"); } local $dbistr = &make_dbistr($driver, $config{'db'}, $config{'server'}); local $dbh = $drh->connect($dbistr, $config{'user'}, $config{'pass'}, { }); $dbh || return &text('connect_elogin', "$config{'db'}", $drh->errstr)."\n"; $connect_spamassasin_db_cache = $dbh; return $dbh; } # connect_spamassassin_ldap() # Attempts to connect to the configured LDAP DB, and returns the handle on # success, or an error message on failure. sub connect_spamassassin_ldap { if (defined($connect_spamassasin_ldap_cache)) { return $connect_spamassasin_ldap_cache; } eval "use Net::LDAP"; if ($@) { return &text('connect_eldapmod', "Net::LDAP"); } local $port = $config{'port'} || 389; local $ldap = Net::LDAP->new($config{'server'}, port => $port); if (!$ldap) { return &text('connect_eldap', "$config{'server'}", $port); } local $mesg = $ldap->bind(dn => $config{'user'}, password => $config{'pass'}); if (!$mesg || $mesg->code) { return &text('connect_eldaplogin', "$config{'server'}", "$config{'user'}", $mesg ? $mesg->error : "Unknown error"); } $connect_spamassasin_ldap_cache = $ldap; return $ldap; } sub make_dbistr { local ($driver, $db, $host) = @_; local $rv; if ($driver eq "mysql") { $rv = "database=$db"; } elsif ($driver eq "Pg") { $rv = "dbname=$db"; } else { $rv = $db; } if ($host) { $rv .= ";host=$host"; } return $rv; } # get_ldap_user(&ldap, [username]) # Returns the LDAP object for a user, or undef if not found sub get_ldap_user { local ($ldap, $user) = @_; $user ||= $database_userpref_name; #if (exists($get_ldap_user_cache{$user})) { # return $get_ldap_user_cache{$user}; # } local $rv = $ldap->search(base => $config{'base'}, filter => "($ldap_username_attr=$user)", ); if (!$rv || $rv->code) { &error(&text('eldap', $rv ? $rv->error : "Search failed")); } local ($uinfo) = $rv->all_entries; $get_ldap_user_cache{$user} = $uinfo; return $uinfo; } # get_auto_whitelist_file([user]) # Returns the base path to the auto whitelist DBM, if any. sub get_auto_whitelist_file { local ($user) = @_; local $conf = &get_config(); local $awp = &find("auto_whitelist_path", $conf); if (!$awp) { $awp = &find_default("auto_whitelist_path"); } $awp ||= "~/.spamassassin/auto-whitelist"; if ($awp !~ /^\//) { # Make absolute local @uinfo = $module_info{'usermin'} ? @remote_user_info : $user ? getpwnam($user) : ( ); return undef if (scalar(@uinfo) == 0); $awp =~ s/^(\~|\$HOME)\//$uinfo[7]\//; if ($awp !~ /^\//) { $awp = "$uinfo[7]/$awp"; } } # Does it exist? if (!-r $awp) { local @real = glob("$awp.*"); $awp = undef if (!@real); } return $awp; } # open_auto_whitelist_dbm([user]) # Ties the %awl hash to the autowhitelist DBM file. Returns 1 if successful, or # 0 if it could not be opened, or -1 if empty. sub open_auto_whitelist_dbm { local ($user) = @_; local $awp = &get_auto_whitelist_file($user); return 0 if (!$awp); local $anyok; foreach my $cls ('DB_File', 'GDBM_File', 'SDBM_File') { $@ = undef; eval "use $cls"; next if ($@); tie(%awl, $cls, $awp, O_RDWR, 0755) || next; if (scalar(keys %awl)) { return 1; } $anyok = 1; } return $anyok ? -1 : 0; } # close_auto_whitelist_dbm() # Disconnects the global %awl hash from the DBM file, flushing changes to disk sub close_auto_whitelist_dbm { untie(%awl); } # supports_auto_whitelist() # Returns 1 if SpamAssassin is doing auto-whitelisting for the current user, # 2 if for multiple users. sub supports_auto_whitelist { if ($module_info{'usermin'}) { return &get_auto_whitelist_file() ? 1 : 0; } else { return 2; } } sub can_edit_awl { local ($user) = @_; return 1 if ($module_info{'usermin'}); # Only one user anyway if ($access{'awl_users'}) { # Check if on user list return &indexof($user, split(/\s+/, $access{'awl_users'})) >= 0; } elsif ($access{'awl_groups'}) { # Check if the user is a member of any of the allowed groups local %ugroups; local @uinfo = getpwnam($user); return 0 if (!defined(@uinfo)); local @ginfo = getgrgid($uinfo[3]); $ugroups{$ginfo[0]}++ if (defined(@ginfo)); foreach my $o (&other_groups($user)) { $ugroups{$o}++; } local @can = grep { $ugroups{$_} } split(/\s+/, $access{'awl_groups'}); return @can ? 1 : 0; } else { # No restrictions return 1; } } 1; spam/config-freebsd0100664000567100000120000000044511017163271014303 0ustar jcameronwheellocal_cf=.spamassassin/user_prefs spamassassin=spamassassin sa_learn=sa-learn global_procmailrc=/usr/local/etc/procmailrc global_cf=/usr/local/etc/mail/spamassassin show_global=0 avail_icons=white,score,report,user,header,setup,mail warn_procmail=1 index_spam=0 call_spam=1 mode=0 readfiles=0 spam/CHANGELOG0100664000567100000120000000303311017163271012711 0ustar jcameronwheel---- Changes since 1.060 ---- Spam mail can now be searched, and the whole spam folder deleted with a single button. ---- Changes since 1.070 ---- A preferences option has been added to control whether the spam search includes only From and Subject headers, or the entire message. Spam mail can now be searched by score as well, using a new field. ---- Changes since 1.080 ---- Added an icon for setting up Razor, if it is not already set up. ---- Changes since 1.110 ---- Added support for the add_header directive, when using SpamAssassin 3.0. ---- Changes since 1.130 ---- Added a new icon for re-configuring where Procmail delivers mail classifies as Spam. ---- Changes since 1.140 ---- Simplified the Header and Body Tests page, to more easily allow the definition of rules using the header, score and describe directives. ---- Changes since 1.180 ---- Updated the setup and procmail delivery pages to allow forwarding of spam to an email address. ---- Changes since 1.200 ---- When reading spam, the mail list is now simply a link to the Read Mail module, instead of separate (and inferior) code. ---- Changes since 1.230 ---- Added Module Config options for commands to run before and after saving SpamAssassin config changes. Improved support for running under Virtualmin, where spamassassin is run globally. ---- Changes since 1.300 ---- Added global configuration settings to use MySQL, PostgreSQL or LDAP backends for storing preferences. ---- Changes since 1.340 ---- Added a page for viewing and removing entries from the user's auto-whitelist file. spam/config0100664000567100000120000000046611017163271012676 0ustar jcameronwheellocal_cf=.spamassassin/user_prefs spamassassin=spamassassin sa_learn=sa-learn global_procmailrc=/etc/procmailrc global_cf=/etc/mail/spamassassin show_global=0 avail_icons=white,score,report,user,header,setup,mail,procmail,awl warn_procmail=1 index_spam=0 call_spam=1 razor_admin=razor-admin mode=0 readfiles=0 spam/config.info.de0100644000567100000120000000215711017163271014214 0ustar jcameronwheellocal_cf=SpamAssassin-Konfigurationsdatei für Benutzer,0 avail_icons=Icons, die dem Benutzer zur Verfügung stehen,13,white-Erlaubte und Verbotene E-Mail-Adressen,score-Spam-Klassifizierung,report-E-Mail-Modifizierung,user-Verschiedene Benutzeroptionen,header-E-Header und Textkrpertests,setup-Procmail für Spamassassin einrichten,mail-Spam-Mails lesen warn_procmail=Warne Benutzer, wenn SpamAssassin nicht eingerichtet ist?,1,1-Ja,0-Nein index_spam=Bilde einen Index für den Spamordner,1,1-Ja,0-Nein global_cf=Systemweite SpamAssassin-Konfigurationsdatei ,0 show_global=Zeige den Benutzern auch die global erlaubten und verbotenen E-Mail-Adressen?,1,1-Ja,0-Nein spamassassin=Voller Pfad zu SpamAssassin,0 procmail_cmd=SpamAssassin-Kommando für die Procmail-Konfiguration,3,Starte einfach spamassassin procmailrc=Persönliche Procmail-Konfigurationsdatei,3,Aus dem Procmail-Modul global_procmailrc=Systemweite Procmail-Konfigurationsdatei,0 call_spam=Füge den Aufruf für SpamAssassin der Procmailkonfiguration beim Einrichten hinzu?,1,1-Ja,0-Nein spam/config.info0100664000567100000120000000360011017163271013621 0ustar jcameronwheelline0=Configuration files and programs,11 local_cf=Users' SpamAssassin configuration file,0 avail_icons=Icons available to users,13,white-Allowed and Denied Addresses,score-Spam Classification,report-Message Modification,user-Miscellaneous User Options,header-Header and Body Tests,setup-Setup Procmail For SpamAssassin,mail-Read Spam mail,razor-Razor setup,procmail-Change Procmail Delivery warn_procmail=Warn users if SpamAssassin is not set up?,1,1-Yes,0-No index_spam=Build index for spam folder,1,1-Yes,0-No global_cf=System-wide SpamAssassin configuration file,0 show_global=Display global allowed and denied addresses to users?,1,1-Yes,0-No spamassassin=Full path to SpamAssassin command,0 sa_learn=Full path to sa-learn command,0 procmail_cmd=SpamAssassin command for Procmail configuration,3,Just run spamassassin procmailrc=Personal Procmail configuration file,3,From Procmail module global_procmailrc=System-wide Procmail configuration file,0 call_spam=Add call to SpamAssassin to procmail configuration when setting up?,1,1-Yes,0-No extra_procmail=Additional procmail lines to prepend,9,40,3,\t razor_admin=Full path to razor-admin command,0 before_cmd=Command to run before changing rules,3,None after_cmd=Command to run after changing rules,3,None line1=LDAP and SQL server options,11 mode=Store SpamAssassin settings in,1,0-Configuration files,1-MySQL database,2-PostgreSQL database,3-LDAP database server=LDAP or SQL server hostname,0 port=LDAP or SQL server port,3,Default user=LDAP or SQL server login,0 pass=LDAP or SQL server password,0 db=SQL database name,3,Not needed base=LDAP base DN,3,Not needed dbglobal=Tag for global settings in SQL database,3,Default (@GLOBAL) attr=LDAP attribute for SpamAssassin preferences,3,Default (spamassassin) uid=LDAP attribute for usernames,3,Default (uid) readfiles=Display settings from configuration files too?,1,1-Yes,0-No spam/ulang/0040775000567100000120000000000011017163271012611 5ustar jcameronwheelspam/ulang/en0100664000567100000120000000037111017163271013134 0ustar jcameronwheelindex_edb=Failed to connect to the SpamAssassin configuration database : $1. Ask your system administrator to check the module configuration settings. awl_title=Manage Auto-Whitelist awl_deleteonedesc=Remove all your current auto-whitelist entries spam/defaultuconfig0100664000567100000120000000004611017163271014422 0ustar jcameronwheelfull_from=1 search_body=0 max_awl=200 spam/delete_all.cgi0100775000567100000120000000040711017163271014262 0ustar jcameronwheel#!/usr/local/bin/perl # delete_all.cgi # Delete all spam messages require './spam-lib.pl'; &foreign_require("mailbox", "mailbox-lib.pl"); $folder = &spam_file_folder(); &disable_indexing($folder); &mailbox::mailbox_empty_folder($folder); &redirect("mail.cgi"); spam/detach.cgi0100755000567100000120000000166211017163271013422 0ustar jcameronwheel#!/usr/local/bin/perl # detach.cgi # View one attachment from a message use Socket; require './spam-lib.pl'; &foreign_require("mailbox", "mailbox-lib.pl"); $folder = &spam_file_folder(); &disable_indexing($folder); &ReadParse(); @mail = &mailbox::mailbox_list_mails_sorted($in{'idx'}, $in{'idx'}, $folder); $mail = $mail[$in{'idx'}]; &mailbox::parse_mail($mail); @sub = split(/\0/, $in{'sub'}); foreach $s (@sub) { # We are looking at a mail within a mail .. &mailbox::decrypt_attachments($mail); local $amail = &mailbox::extract_mail($mail->{'attach'}->[$s]->{'data'}); &mailbox::parse_mail($amail); $mail = $amail; } &mailbox::decrypt_attachments($mail); $attach = $mail->{'attach'}->[$in{'attach'}]; print "X-no-links: 1\n"; print "Content-type: $attach->{'type'}\n\n"; if ($attach->{'type'} =~ /^text\/html/i) { print &filter_javascript($attach->{'data'}); } else { print $attach->{'data'}; } spam/edit_razor.cgi0100775000567100000120000000163511017163271014336 0ustar jcameronwheel#!/usr/local/bin/perl # Offer to setup razor, if the user hasn't already require './spam-lib.pl'; &ui_print_header(undef, $text{'razor_title'}, ""); if (!&has_command($config{'razor_admin'})) { # Not installed print "

",&text('razor_ecmd', "$config{'razor_admin'}"),"

\n"; } else { # Show form print "

\n"; print "$text{'razor_desc'}

\n"; print "\n"; foreach $w ("user", "pass") { print "\n"; } print "
",$text{'razor_'.$w}," \n"; print " ", "$text{'razor_auto'}\n"; print " ", "$text{'razor_enter'}\n"; $t = $w eq "user" ? "text" : "password"; print "
\n"; print "

\n"; } &ui_print_footer("", $text{'index_return'}); spam/install_check.pl0100775000567100000120000000062011017163271014641 0ustar jcameronwheel# install_check.pl do 'spam-lib.pl'; # is_installed(mode) # For mode 1, returns 2 if the server is installed and configured for use by # Webmin, 1 if installed but not configured, or 0 otherwise. # For mode 0, returns 1 if installed, 0 if not sub is_installed { return 0 if (!&has_command($config{'spamassassin'})); return 0 if (!-r $local_cf && !$module_info{'usermin'}); return $_[0] ? 2 : 1; } spam/mail.cgi0100775000567100000120000001125511017163271013115 0ustar jcameronwheel#!/usr/local/bin/perl # mail.cgi # Display messages that have been categorized as spam require './spam-lib.pl'; &foreign_require("mailbox", "mailbox-lib.pl"); &ReadParse(); $folder = &spam_file_folder(); &disable_indexing($folder); dbmopen(%read, "$user_config_directory/mailbox/read", 0600); $ref = $userconfig{'refresh'} || $mailbox::userconfig{'refresh'}; if ($ref) { print "Refresh: $ref\r\n"; &ui_print_header(undef, $text{'mail_title'}, "", undef, 0, 0, 0, $ref > 60 ? &text('mail_will', int($ref/60)) : &text('mail_wills', $ref)); } else { &ui_print_header(undef, $text{'mail_title'}, ""); } print &check_clicks_function() if (defined(&check_clicks_function)); #print "$text{'mail_desc'}

\n"; # View mail from the most recent $perpage = $folder->{'perpage'} || $mailbox::userconfig{'perpage'}; @mail = &mailbox::mailbox_list_mails_sorted($in{'start'}, $in{'start'}+$perpage-1, $folder, 1, \@error); print "

\n"; if ($in{'start'}+$perpage < @mail) { printf "%s\n", $in{'start'}+$perpage, ''; } local $s = @mail-$in{'start'}; local $e = @mail-$in{'start'}-$perpage+1; print "\n"; if (@mail) { print &text('mail_pos', $s, $e < 1 ? 1 : $e, scalar(@mail)); } else { print &text('mail_none'); } print " \n"; if ($in{'start'}) { printf "%s\n", $in{'start'}-$perpage, ''; } print "
\n"; print "
\n"; if ($mailbox::userconfig{'top_buttons'} && @mail) { &show_buttons(1); print &select_all_link("d", 1, $mailbox::text{'mail_all'})," \n"; print &select_invert_link("d", 1, $mailbox::text{'mail_invert'})," \n"; } if (@mail) { print "\n"; print " ", " ", " ", " ", " ", "\n"; } for($i=int($in{'start'}); $i<@mail && $i<$in{'start'}+$perpage; $i++) { local $idx = $mail[$i]->{'idx'}; print "\n"; print "\n"; if ($userconfig{'full_from'}) { print "\n"; } else { print "\n"; } print "\n"; print "\n"; print "\n"; print "\n"; } if (@mail) { print "
 $mailbox::text{'mail_from'}$mailbox::text{'mail_date'}$mailbox::text{'mail_size'}$text{'mail_level'}$mailbox::text{'mail_subject'}
", &html_escape($mail[$i]->{'header'}->{'from'}), "", &mailbox::simplify_from($mail[$i]->{'header'}->{'from'}), "",&mailbox::simplify_date($mail[$i]->{'header'}->{'date'}), "",int($mail[$i]->{'size'}/1000)+1," kB","",length($mail[$i]->{'header'}->{'x-spam-level'}),"", "
",&mailbox::simplify_subject($mail[$i]->{'header'}->{'subject'}), " "; if ($mail[$i]->{'header'}->{'content-type'} =~ /multipart\/\S+/i) { print ""; } local $p = int($mail[$i]->{'header'}->{'x-priority'}); if ($p == 1) { print " "; } elsif ($p == 2) { print " "; } if (!$showto) { if ($read{$mail[$i]->{'header'}->{'message-id'}} == 2) { print " "; } elsif ($read{$mail[$i]->{'header'}->{'message-id'}} == 1) { print " "; } } print "
\n"; print &select_all_link("d", 1, $mailbox::text{'mail_all'})," \n"; print &select_invert_link("d", 1, $mailbox::text{'mail_invert'})," \n"; &show_buttons(2); } print "
\n"; # Show search field print "\n"; print "\n"; # Show score search field print "\n"; # Show delete all button print "\n"; print "\n"; print "
\n"; print "\n"; print "\n"; print "
\n"; print "\n"; print "
\n"; print "
\n"; &ui_print_footer("", $text{'index_return'}); spam/mail_search.cgi0100775000567100000120000001201011017163271014430 0ustar jcameronwheel#!/usr/local/bin/perl # mail_search.cgi # Find mail messages matching some pattern require './spam-lib.pl'; &foreign_require("mailbox", "mailbox-lib.pl"); &ReadParse(); if ($in{'simple'}) { # Make sure a search was entered $in{'search'} ne "" || &error($mailbox::text{'search_ematch'}); } elsif (defined($in{'score'})) { # Make sure a score was entered $in{'score'} =~ /^\d+$/ || &error($text{'search_escore'}); } else { # Validate search fields for($i=0; defined($in{"field_$i"}); $i++) { if ($in{"field_$i"}) { $in{"what_$i"} || &error(&mailbox::text('search_ewhat', $i+1)); $neg = $in{"neg_$i"} ? "!" : ""; push(@fields, [ $neg.$in{"field_$i"}, $in{"what_$i"} ]); } } @fields || &error($mailbox::text{'search_enone'}); } &ui_print_header(undef, $mailbox::text{'search_title'}, ""); $folder = &spam_file_folder(); if ($in{'simple'}) { # Just search by Subject and From in one folder, or body, depending # on preferences ($mode, $words) = &mailbox::parse_boolean($in{'search'}); if ($userconfig{'search_body'} && $mode != 2) { # Do an 'and' or 'or' search of body @searchlist = map { [ 'body', $_ ] } @$words; @rv = &mailbox::mailbox_search_mail(\@searchlist, $mode, $folder); } elsif ($mode == 0) { # Can just do a single 'or' search @searchlist = map { ( [ 'subject', $_ ], [ 'from', $_ ] ) } @$words; @rv = &mailbox::mailbox_search_mail(\@searchlist, 0, $folder); } elsif ($mode == 1) { # Need to do two 'and' searches and combine @searchlist1 = map { ( [ 'subject', $_ ] ) } @$words; @rv1 = &mailbox::mailbox_search_mail(\@searchlist1, 1, $folder); @searchlist2 = map { ( [ 'from', $_ ] ) } @$words; @rv2 = &mailbox::mailbox_search_mail(\@searchlist2, 1, $folder); @rv = @rv1; %gotidx = map { $_->{'idx'}, 1 } @rv; foreach $mail (@rv2) { push(@rv, $mail) if (!$gotidx{$mail->{'idx'}}); } } else { &error($mailbox::text{'search_eboolean'}); } print "

",&mailbox::text('search_results2', scalar(@rv), "$in{'search'}"),"

\n"; } elsif (defined($in{'score'})) { # Search by score @rv = &mailbox::mailbox_search_mail( [ [ 'x-spam-level', '*' x $in{'score'} ] ], 0, $folder); print "

",&text('search_results5', scalar(@rv), $in{'score'}),"

\n"; } else { # Complex search @rv = &mailbox::mailbox_search_mail(\@fields, $in{'and'}, $folder); print "

",&mailbox::text('search_results4', scalar(@rv)),"

\n"; } @rv = reverse(@rv); &mailbox::set_sort_indexes($folder, \@rv); print "

\n"; if ($mailbox::userconfig{'top_buttons'} && @rv) { &show_buttons(1); print "$mailbox::text{'mail_all'} \n"; print "$mailbox::text{'mail_invert'} \n"; } if (@rv) { print "\n"; print " ", " ", " ", " ", " ", "\n"; } foreach $m (@rv) { local $idx = $m->{'sortidx'}; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; } if (@rv) { print "
 $mailbox::text{'mail_from'}$mailbox::text{'mail_date'}$mailbox::text{'mail_size'}$text{'mail_level'}$mailbox::text{'mail_subject'}
", &mailbox::simplify_from($m->{'header'}->{$showto?'to':'from'}),"",&mailbox::simplify_date($m->{'header'}->{'date'}),"",int($m->{'size'}/1000)+1," kB","",length($m->{'header'}->{'x-spam-level'}),"", "
",&mailbox::simplify_subject($m->{'header'}->{'subject'}), " "; if ($m->{'header'}->{'content-type'} =~ /multipart\/\S+/i) { print ""; } local $p = int($m->{'header'}->{'x-priority'}); if ($p == 1) { print " "; } elsif ($p == 2) { print " "; } print "
\n"; print "$mailbox::text{'mail_all'} \n"; print "$mailbox::text{'mail_invert'} \n"; &show_buttons(2); } else { print "$text{'search_none'}

\n"; } print "

\n"; &ui_print_footer("mail.cgi", $text{'mail_return'}); spam/module.info0100664000567100000120000000055111017163271013643 0ustar jcameronwheelname=SpamAssassin desc=SpamAssassin Mail Filter category=mail longdesc=Set up and configure SpamAssassin to filter email sent to your account. usermin=1 desc_fr=Filtre Anti-Spam Spamassassin desc_de=SpamAssassin E-Mail-Filter desc_ru_RU= desc_ru_SU= desc_cz=Spamov filtr SpamAssassin desc_ca=Filtre de Correu SpamAssassin version=1.351 spam/process.cgi0100755000567100000120000000554511017163271013654 0ustar jcameronwheel#!/usr/local/bin/perl # process.cgi # Delete, move or whitelist messages require './spam-lib.pl'; &foreign_require("mailbox", "mailbox-lib.pl"); $folder = &spam_file_folder(); &disable_indexing($folder); &ReadParse(); @delete = sort { $a <=> $b } split(/\0/, $in{'d'}); @mail = &mailbox::mailbox_list_mails_sorted($delete[0], $delete[@delete-1], $folder); foreach $d (@delete) { push(@delmail, $mail[$d]); } if ($in{'inbox'} || $in{'whitelist'} || $in{'ham'}) { # Move mails to inbox @delete || &error($mailbox::text{'delete_emnone'}); @folders = &mailbox::list_folders(); ($inbox) = grep { $_->{'inbox'} } @folders; if ($userconfig{'inbox'}) { $mfolder = &mailbox::find_named_folder( $userconfig{'inbox'}, \@folders); } $mfolder ||= $inbox; foreach $d (@delete) { push(@movemail, $mail[$d]); push(@addrs, map { $_->[0] } &mailbox::split_addresses($mail[$d]->{'header'}->{'from'})); } # Pass through spamassassin to remove headers, then add to Inbox &mailbox::lock_folder($mfolder); foreach $d (@movemail) { local $temp = &transname(); &mailbox::send_mail($d, $temp); local $newmail = &mailbox::read_mail_file("$config{'spamassassin'} -d <$temp |"); $newmail || &error($text{'process_eclean'}); &mailbox::write_mail_folder($newmail, $mfolder); unlink($temp); } &mailbox::unlock_folder($mfolder); # Delete from spam folder &mailbox::lock_folder($folder); &mailbox::mailbox_delete_mail($folder, $mfolder, @movemail); &mailbox::unlock_folder($folder); } if ($in{'whitelist'}) { # Add senders to whitelist foreach $d (@delete) { push(@addrs, map { $_->[0] } &mailbox::split_addresses($mail[$d]->{'header'}->{'from'})); } &lock_file($local_cf); $conf = &get_config(); @from = map { @{$_->{'words'}} } &find("whitelist_from", $conf); %already = map { $_, 1 } @from; @newaddrs = grep { !$already{$_} } &unique(@addrs); push(@from, @newaddrs); &save_directives($conf, 'whitelist_from', \@from, 1); &flush_file_lines(); &unlock_file($local_cf); } if ($in{'ham'}) { # Report to spamassassin as ham local $temp = &transname(); foreach $d (@delmail) { &mailbox::send_mail($d, $temp); local $out = `$config{'sa_learn'} --ham <$temp 2>&1`; unlink($temp); if ($? || $out =~ /failed/i) { &error(&text('process_ereport', "

$out
")); } } } if ($in{'delete'} || $in{'razor'}) { # Delete messages @delete || &error($mailbox::text{'delete_enone'}); &mailbox::lock_folder($folder); &mailbox::mailbox_delete_mail($folder, @delmail); &mailbox::unlock_folder($folder); } if ($in{'razor'}) { # Report to spamassassin as spam local $temp = &transname(); foreach $d (@delmail) { &mailbox::send_mail($d, $temp); local $out = `$config{'spamassassin'} -r <$temp 2>&1`; unlink($temp); if ($? || $out =~ /failed/i) { &error(&text('process_ereport', "
$out
")); } } } &redirect("mail.cgi"); spam/setup_razor.cgi0100775000567100000120000000146111017163271014546 0ustar jcameronwheel#!/usr/local/bin/perl # Do the setup require './spam-lib.pl'; &ReadParse(); &error_setup($text{'razor_err'}); # Validate inputs $in{'user_def'} || $in{'user'} =~ /\S/ || &error($text{'razor_euser'}); $in{'pass_def'} || $in{'pass'} =~ /\S/ || &error($text{'razor_epass'}); # Do it &ui_print_header(undef, $text{'razor_title'}, ""); print "

$text{'razor_doing'}
\n"; $cmd = "$config{'razor_admin'} -register"; $cmd .= " -user ".quotemeta($in{'user'}) if (!$in{'user_def'}); $cmd .= " -pass ".quotemeta($in{'pass'}) if (!$in{'pass_def'}); $out = `cd $remote_user_info[7] ; $cmd 2>&1 $out\n"; if ($? || !-r "$remote_user_info[7]/.razor/identity") { print "$text{'razor_failed'}

\n"; } else { print "$text{'razor_done'}

\n"; } &ui_print_footer("", $text{'index_return'}); spam/uconfig.info0100664000567100000120000000057211017163271014013 0ustar jcameronwheelspam_file=Mail file for spam,3,None full_from=Show full From: addresses in spam list?,1,1-Yes,0-No refresh=Seconds between automatic spam list refreshes,3,Don't refresh inbox=Name of folder to move non-spam to,3,Inbox search_body=When searching spam, check,1,1-Entires messages,0-Subject and From headers only max_awl=Maximum number of auto-whitelist entries to display,0,5 spam/uconfig.info.cz0100644000567100000120000000053511017163271014423 0ustar jcameronwheelspam_file=Soubor poty pro spam,3,dn full_from=Zobrazovat plnou adresu odesilatele v seznamu spamu?,1,1-Ano,0-Ne refresh=Interval obnovy seznamu spamu v sekundch,3,Neobnovovat inbox=Jmno sloky, kam se m pesouvat pota, kter nen spam,3,Inbox search_body=Pi kontrole na spam kontrolovat,1,1-Cel zprvy,0-Jen pedmt a odesilatele spam/uconfig.info.de0100755000567100000120000000064311017163271014402 0ustar jcameronwheelspam_file=Speicherort für Spam,3,Keiner full_from=Zeige komplette Absender-E-Mail-Adresse in der Spamliste an?,1,1-Ja,0-Nein refresh=Aktualisiere die Spamliste alle X Sekunden,3,Nicht aktualisieren inbox=In welchen Ordner soll Nicht-Spam verschoben werden,3,Posteingang search_body=Wenn Spam klassifiziert wird, teste,1,1-Gesamte Nachricht,0-Nur Betreff und Absender-E-Mail-Adresse spam/view_mail.cgi0100755000567100000120000002001011017163271014132 0ustar jcameronwheel#!/usr/local/bin/perl # view_mail.cgi # View a single email message require './spam-lib.pl'; &foreign_require("mailbox", "mailbox-lib.pl"); $folder = &spam_file_folder(); &disable_indexing($folder); $force_charset = ''; &ReadParse(); &ui_print_header(undef, $mailbox::text{'view_title'}, ""); @mail = &mailbox::mailbox_list_mails_sorted($in{'idx'}, $in{'idx'}, $folder); $mail = $mail[$in{'idx'}]; &mailbox::parse_mail($mail); @sub = split(/\0/, $in{'sub'}); $subs = join("", map { "&sub=$_" } @sub); foreach $s (@sub) { # We are looking at a mail within a mail .. &mailbox::decrypt_attachments($mail); local $amail = &mailbox::extract_mail($mail->{'attach'}->[$s]->{'data'}); &mailbox::parse_mail($amail); $mail = $amail; } dbmopen(%read, "$user_config_directory/mailbox/read", 0600); if ($mailbox::userconfig{'auto_mark'}) { eval { $read{$mail->{'header'}->{'message-id'}} = 1 } if (!$read{$mail->{'header'}->{'message-id'}}); } print "

\n"; if (!@sub) { if ($in{'idx'}) { print "", "\n"; } print "",&mailbox::text('view_desc', $in{'idx'}+1, $folder->{'name'}),"\n"; if ($in{'idx'} < @mail-1) { print "", "\n"; } } else { print "$text{'view_sub'}\n"; } print "
\n"; # Check for encryption ($deccode, $decmessage) = &mailbox::decrypt_attachments($mail); @attach = @{$mail->{'attach'}}; # Find body attachment and type ($textbody, $htmlbody, $body) = &mailbox::find_body($mail); # XXX look for text/calendar body # Check for signing if (&has_command("gpg") && &foreign_check("gnupg")) { # Check for GnuPG signatures local $sig; foreach $a (@attach) { $sig = $a if ($a->{'type'} =~ /^application\/pgp-signature/); } if ($sig) { # Verify the signature against the rest of the attachment &foreign_require("gnupg", "gnupg-lib.pl"); local $rest = $sig->{'parent'}->{'attach'}->[0]; $rest->{'raw'} =~ s/\r//g; $rest->{'raw'} =~ s/\n/\r\n/g; ($sigcode, $sigmessage) = &foreign_call("gnupg", "verify_data", $rest->{'raw'}, $sig->{'data'}); @attach = grep { $_ ne $sig } @attach; } elsif ($body && $body eq $textbody && $body->{'data'} =~ /(-+BEGIN PGP SIGNED MESSAGE-+\n(Hash:\s+(\S+)\n\n)?([\000-\377]+\n)-+BEGIN PGP SIGNATURE-+\n([\000-\377]+)-+END PGP SIGNATURE-+\n)/i) { # Signature is in body text! local $sig = $1; local $text = $4; &foreign_require("gnupg", "gnupg-lib.pl"); ($sigcode, $sigmessage) = &foreign_call("gnupg", "verify_data", $sig); if ($sigcode == 0 || $sigcode == 1) { # XXX what about replying? $body->{'data'} = $text; } } } # Strip out attachments not to display as icons @attach = grep { $_ ne $body } @attach; @attach = grep { !$_->{'attach'} } @attach; print "\n"; print "\n"; print "
", "\n"; if ($in{'headers'}) { print "\n"; } else { print "\n"; } print "
$mailbox::text{'view_headers'}$mailbox::text{'view_noheaders'}$mailbox::text{'view_allheaders'}
\n"; if ($in{'headers'}) { # Show all the headers if ($mail->{'fromline'}) { print "", "\n"; } foreach $h (@{$mail->{'headers'}}) { print " ", "\n"; } } else { # Just show the most useful headers print " ", "\n"; print " ", "\n"; print " ", "\n" if ($mail->{'header'}->{'cc'}); print " ", "\n"; print " ", "\n"; if (!@sub) { print " ", "\n"; } } print "
$text{'mail_rfc'}",&mailbox::eucconv(&html_escape($mail->{'fromline'})), "
$h->[0]:",&mailbox::eucconv(&html_escape(&mailbox::decode_mimewords($h->[1]))), "
$mailbox::text{'mail_from'}",&address_link($mail->{'header'}->{'from'}),"
$mailbox::text{'mail_to'}",&address_link($mail->{'header'}->{'to'}),"
$mailbox::text{'mail_cc'}",&address_link($mail->{'header'}->{'cc'}),"
$mailbox::text{'mail_date'}",&mailbox::eucconv(&html_escape($mail->{'header'}->{'date'})), "
$mailbox::text{'mail_subject'}",&mailbox::eucconv(&html_escape(&mailbox::decode_mimewords( $mail->{'header'}->{'subject'}))),"
$text{'mail_level2'}",length($mail->{'header'}->{'x-spam-level'}),"

\n"; # Show body attachment, with properly linked URLs if ($body && $body->{'data'} =~ /\S/) { if ($body eq $textbody) { # Show plain text print "
\n";
		foreach $l (&mailbox::wrap_lines($body->{'data'},
					$mailbox::userconfig{'wrap_width'})) {
			print &mailbox::link_urls_and_escape($l),"\n";
			}
		print "

\n"; } elsif ($body eq $htmlbody) { # Attempt to show HTML print "
\n"; print &mailbox::safe_html($body->{'data'}); print "

\n"; } } # Display other attachments if (@attach) { print "\n"; print "\n"; print "
$mailbox::text{'view_attach'}
\n"; foreach $a (@attach) { local $fn; $size = (int(length($a->{'data'})/1000)+1)." Kb"; local $cb; if ($a->{'type'} eq 'message/rfc822') { push(@titles, "$mailbox::text{'view_sub'}
$size"); } elsif ($a->{'filename'}) { push(@titles, &mailbox::decode_mimewords($a->{'filename'}). "
$size"); $fn = &mailbox::decode_mimewords($a->{'filename'}); push(@detach, [ $a->{'idx'}, $fn ]); } else { push(@titles, "$a->{'type'}
$size"); $a->{'type'} =~ /\/(\S+)$/; $fn = "file.$1"; push(@detach, [ $a->{'idx'}, $fn ]); } $fn =~ s/ /_/g; $fn =~ s/\#/_/g; $fn = &html_escape($fn); if ($a->{'type'} eq 'message/rfc822') { push(@links, "view_mail.cgi?idx=$in{'idx'}$subs&sub=$a->{'idx'}"); } else { push(@links, "detach.cgi/$fn?idx=$in{'idx'}&attach=$a->{'idx'}$subs"); } push(@icons, "/mailbox/images/boxes.gif"); } &icons_table(\@links, \@titles, \@icons, 8); print "

\n"; } # Display GnuPG results if (defined($sigcode)) { print "\n"; print "\n"; print "
$mailbox::text{'view_gnupg'}
"; $sigmessage = &html_escape($sigmessage); $sigmessage = $sigmessage if ($sigcode == 4); print &mailbox::text('view_gnupg_'.$sigcode, $sigmessage),"\n"; if ($sigcode == 3) { local $url = "/$module_name/view_mail.cgi?idx=$in{'idx'}&folder=$in{'folder'}$subs"; print "

",&mailbox::text('view_recv', $sigmessage, "/gnupg/recv.cgi?id=$sigmessage&return=".&urlize($url)."&returnmsg=".&urlize($text{'view_return'})),"\n"; } print "

\n"; } if ($deccode) { print "\n"; print "\n"; print "
$text{'view_crypt'}
"; print &mailbox::text('view_crypt_'.$deccode, "
$decmessage
"); print "

\n"; } dbmclose(%read); local @sr = !@sub ? ( ) : ( "view_mail.cgi?idx=$in{'idx'}", $mailbox::text{'view_return'} ), $s = int((@mail - $in{'idx'} - 1) / $mailbox::userconfig{'perpage'}) * $mailbox::userconfig{'perpage'}; &ui_print_footer(@sub ? ( "view_mail.cgi?idx=$in{'idx'}", $mailbox::text{'view_return'} ) : ( ), "mail.cgi", $text{'mail_return'}); # address_link(address) sub address_link { local @addrs = &mailbox::split_addresses(&mailbox::decode_mimewords($_[0])); local @rv; foreach $a (@addrs) { push(@rv, &html_escape($a->[2])); } return join(" , ", @rv); } spam/config.info.ca0100755000567100000120000000431411017163271014207 0ustar jcameronwheelline0=Fitxers de configuraci i programes,11 local_cf=Fitxer de configuraci de SpamAssassin d'usuaris,0 avail_icons=Icones disponibles per als usuaris,13,white-Adreces Permeses i Denegades,score-Classificaci de Spam,report-Modificaci de Missatges,user-Opcions Miscellnies d'Usuari,header-Tests de Capaleres i Cos,setup-Configuraci de Procmail per a SpamAssassin,mail-Lectura de Correu Spam,razor-Configuraci de Razor,procmail-Canvi del Lliurament Procmail warn_procmail=Avisa els usuaris si SpamAssassin no est configurat,1,1-S,0-No index_spam=Construeix un ndex per a la carpeta de spam,1,1-S,0-No global_cf=Fitxer global de configuraci de SpamAssassin,0 show_global=Mostra als usuaris les adreces globalment permeses i denegade,1,1-S,0-No spamassassin=Cam complet de l'ordre spamassassin,0 sa_learn=Cam complet de l'ordre sa-learn,0 procmail_cmd=Ordre SpamAssassin per a la configuraci Procmail,3,Executa simplement spamassassin procmailrc=Fitxer de configuraci personal de Procmail,3,Del mdul de Procmail global_procmailrc=Fitxer de configuraci global de Procmail,0 call_spam=Afegeix una crida a SpamAssassin a la configuraci de procmail quan es configuri,1,1-S,0-No extra_procmail=Lnies addicionals de procmail a prefixar,9,40,3,\t razor_admin=Cam complet de l'ordre "razor-admin,0 before_cmd=Ordre a executar abans de canviar les regles,3,Cap after_cmd=Ordre a executar desprs de canviar les regles,3,Cap line1=Opcions dels servidor LDAP i SQL,11 mode=Emmagatzema la configuraci de SpamAssassin,1,0-Als fitxers de configuraci,1-A la base de dades MySQL,2-A la base de dades PostgreSQL,3- A la base de dades LDAP server=Nom de host del servidor LDAP o SQL,0 port=Port del servidor LDAP or SQL,3,Per defecte user=Usuari del servidor LDAP o SQL,0 pass=Contrasenya del servidor LDAP o SQL,0 db=Nom de la base de dades SQL,3,No cal base=DN base LDAP,3,No cal dbglobal=Etiqueta per als valors globals a la base dedades SQL,3,Per defecte (@GLOBAL) attr=Atribut LDAP de les preferncies de SpamAssassin,3,Per defecte (spamassassin) uid=Atribut LDAP dels noms d'usuaris,3,Per defecte (uid) readfiles=Mostra tamb els valors dels fitxers de configuraci,1,1-S,0-No spam/uconfig.info.ca0100755000567100000120000000056011017163271014373 0ustar jcameronwheelspam_file=Fitxer de correu de spam,3,Cap full_from=Mostra les adreces From: completes a la llista de spam,1,1-S,0-No refresh=Segons entre refrescs automtics de la llista de spam,3,No la refresquis inbox=Nom de la carpeta per emmagatzemar el correu No-spam,3,Entrada search_body=En buscar spam, comprova,1,1-El missatge sencer,0-Noms l'assumpte i les capaleres spam/config-debian-linux0100664000567100000120000000045511017163271015251 0ustar jcameronwheellocal_cf=.spamassassin/user_prefs spamassassin=spamassassin sa_learn=sa-learn global_procmailrc=/etc/procmailrc global_cf=/etc/spamassassin show_global=0 avail_icons=white,score,report,user,header,setup,mail,procmail warn_procmail=1 index_spam=0 call_spam=1 razor_admin=razor-admin mode=0 readfiles=0 spam/edit_awl.cgi0100775000567100000120000000642511017163271013766 0ustar jcameronwheel#!/usr/local/bin/perl # Display entries in the auto-whitelist require './spam-lib.pl'; &can_use_check("awl"); &ui_print_header(undef, $text{'awl_title'}, ""); &ReadParse(); $formno = 0; # Check if we need a username if (&supports_auto_whitelist() == 2) { print &ui_form_start("edit_awl.cgi"); print "$text{'awl_user'}\n"; print &ui_user_textbox("user", $in{'user'}),"\n", &ui_submit($text{'awl_uok'}); print &ui_form_end(); if (!$in{'user'}) { # Can't do any more &ui_print_footer("", $text{'index_return'}); return; } } # Open the DBM, or give up $awf = &get_auto_whitelist_file($in{'user'}); $ok = &open_auto_whitelist_dbm($in{'user'}); if (!&can_edit_awl($in{'user'})) { &ui_print_endpage("".&text('awl_cannotuser', "".&html_escape($in{'user'})."").""); } elsif (!defined(getpwnam($in{'user'})) && !$module_info{'usermin'}) { &ui_print_endpage("".&text('awl_nouser', "".&html_escape($in{'user'})."").""); } elsif (!$awf) { &ui_print_endpage("".&text('awl_nofile', "".&html_escape($in{'user'})."").""); } elsif ($ok == 0) { &ui_print_endpage("".&text('awl_cannot', $awf).""); } elsif ($ok < 0) { &ui_print_endpage("".&text('awl_empty', $awf).""); } # Show search form @keys = sort { $a cmp $b } keys %awl; @keys = grep { !/\|totscore/ } @keys; print &ui_form_start("edit_awl.cgi"); print "$text{'awl_search'}\n"; print &ui_textbox("search", $in{'search'}, 30),"\n", &ui_submit($text{'awl_ok'}); print &ui_hidden("user", $in{'user'}); print &ui_form_end(); $formno++; if ($in{'search'}) { @keys = grep { /\Q$in{'search'}\E/i } @keys; print &text('awl_searching', "".&html_escape($in{'search'}).""),"

\n"; } if (@keys > $max_awl_keys && !$in{'search'}) { # Too many to show print "",&text('awl_toomany', scalar(@keys), $max_awl_keys),"

\n"; } else { # Show table print &ui_form_start("delete_awl.cgi", "post"); print &ui_hidden("search", $in{'search'}); print &ui_hidden("user", $in{'user'}); @links = ( &select_all_link("d", $formno), &select_invert_link("d", $formno) ); @tds = ( "width=5" ); print &ui_links_row(\@links); print &ui_columns_start([ "", $text{'awl_email'}, $text{'awl_ip'}, $text{'awl_score'} ], \@tds); foreach $k (@keys) { ($email, $ip, $rest) = split(/\|/, $k); if ($ip eq "ip=none") { $ip = $text{'awl_none'}; } elsif ($ip =~ /^ip=(\S+)$/) { $ip = $1; } else { $ip = $text{'awl_unknown'}; } print &ui_checked_columns_row([ $email, $ip, $awl{$k} ], \@tds, "d", $k); } print &ui_columns_end(); print &ui_links_row(\@links); print &ui_form_end([ [ undef, $text{'awl_delete'} ] ]); } &close_auto_whitelist_dbm(); # Show delete buttons print &ui_hr(); print &ui_buttons_start(); if ($in{'user'} || &supports_auto_whitelist() == 1) { # Delete for this user print &ui_buttons_row("deleteone_awl.cgi", $text{'awl_deleteone'}, &text('awl_deleteonedesc', "".&html_escape($in{'user'}).""), &ui_hidden("user", $in{'user'})); } if (&supports_auto_whitelist() == 2) { # Delete for all users print &ui_buttons_row("deleteall_awl.cgi", $text{'awl_deleteall'}, $text{'awl_deletealldesc'}); } print &ui_buttons_end(); &ui_print_footer("", $text{'index_return'}); spam/delete_awl.cgi0100775000567100000120000000107511017163271014277 0ustar jcameronwheel#!/usr/local/bin/perl # Delete auto-whitelist entries require './spam-lib.pl'; &error_setup($text{'dawl_err'}); &can_use_check("awl"); &ReadParse(); &can_edit_awl($in{'user'}) || &error($text{'dawl_ecannot'}); # Check stuff &open_auto_whitelist_dbm($in{'user'}) || &error($text{'dawl_eopen'}); @d = split(/\0/, $in{'d'}); @d || &error($text{'dawl_enone'}); # Delete from hash foreach $d (@d) { delete($awl{$d}); delete($awl{$d."|totscore"}); } &close_auto_whitelist_dbm(); &redirect("edit_awl.cgi?search=".&urlize($in{'search'}). "&user=".&urlize($in{'user'})); spam/deleteone_awl.cgi0100775000567100000120000000072511017163271015002 0ustar jcameronwheel#!/usr/local/bin/perl # Delete all auto-whitelist entries require './spam-lib.pl'; &error_setup($text{'dawl_err'}); &can_use_check("awl"); &ReadParse(); &can_edit_awl($in{'user'}) || &error($text{'dawl_ecannot'}); # Delete them &open_auto_whitelist_dbm($in{'user'}) || &error($text{'dawl_eopen'}); foreach $k (keys %awl) { delete($awl{$k}); } &close_auto_whitelist_dbm(); &redirect("edit_awl.cgi?search=".&urlize($in{'search'}). "&user=".&urlize($in{'user'}));