Mailing List Archive

svn commit: r453586 [1/7] - in /spamassassin/branches/jm_re2c_hacks: ./ build/ build/automc/ build/buildbot/ contrib/ lib/Mail/ lib/Mail/SpamAssassin/ lib/Mail/SpamAssassin/Bayes/ lib/Mail/SpamAssassin/BayesStore/ lib/Mail/SpamAssassin/Conf/ lib/Mail/S...
Author: jm
Date: Fri Oct 6 05:46:56 2006
New Revision: 453586

URL: http://svn.apache.org/viewvc?view=rev&rev=453586
Log:
merged up to r453533 on svn trunk using 'svn merge -r431117:453533 https://svn.apache.org/repos/asf/spamassassin/trunk'

Added:
spamassassin/branches/jm_re2c_hacks/contrib/check_spamd
- copied unchanged from r453533, spamassassin/trunk/contrib/check_spamd
spamassassin/branches/jm_re2c_hacks/rules/60_whitelist_dk.cf
- copied unchanged from r453533, spamassassin/trunk/rules/60_whitelist_dk.cf
spamassassin/branches/jm_re2c_hacks/spamd-apache2/
- copied from r453533, spamassassin/trunk/spamd-apache2/
spamassassin/branches/jm_re2c_hacks/spamd-apache2/MANIFEST
- copied unchanged from r453533, spamassassin/trunk/spamd-apache2/MANIFEST
spamassassin/branches/jm_re2c_hacks/spamd-apache2/MANIFEST.SKIP
- copied unchanged from r453533, spamassassin/trunk/spamd-apache2/MANIFEST.SKIP
spamassassin/branches/jm_re2c_hacks/spamd-apache2/META.yml
- copied unchanged from r453533, spamassassin/trunk/spamd-apache2/META.yml
spamassassin/branches/jm_re2c_hacks/spamd-apache2/Makefile.PL
- copied unchanged from r453533, spamassassin/trunk/spamd-apache2/Makefile.PL
spamassassin/branches/jm_re2c_hacks/spamd-apache2/README.apache
- copied unchanged from r453533, spamassassin/trunk/spamd-apache2/README.apache
spamassassin/branches/jm_re2c_hacks/spamd-apache2/bin/
- copied from r453533, spamassassin/trunk/spamd-apache2/bin/
spamassassin/branches/jm_re2c_hacks/spamd-apache2/bin/Bench-spamd.pl
- copied unchanged from r453533, spamassassin/trunk/spamd-apache2/bin/Bench-spamd.pl
spamassassin/branches/jm_re2c_hacks/spamd-apache2/bin/Spamd
- copied unchanged from r453533, spamassassin/trunk/spamd-apache2/bin/Spamd
spamassassin/branches/jm_re2c_hacks/spamd-apache2/bin/apache-spamd.pl
- copied unchanged from r453533, spamassassin/trunk/spamd-apache2/bin/apache-spamd.pl
spamassassin/branches/jm_re2c_hacks/spamd-apache2/lib/
- copied from r453533, spamassassin/trunk/spamd-apache2/lib/
spamassassin/branches/jm_re2c_hacks/spamd-apache2/lib/Mail/
- copied from r453533, spamassassin/trunk/spamd-apache2/lib/Mail/
spamassassin/branches/jm_re2c_hacks/spamd-apache2/lib/Mail/SpamAssassin/
- copied from r453533, spamassassin/trunk/spamd-apache2/lib/Mail/SpamAssassin/
spamassassin/branches/jm_re2c_hacks/spamd-apache2/lib/Mail/SpamAssassin/Spamd/
- copied from r453533, spamassassin/trunk/spamd-apache2/lib/Mail/SpamAssassin/Spamd/
spamassassin/branches/jm_re2c_hacks/spamd-apache2/lib/Mail/SpamAssassin/Spamd.pm
- copied unchanged from r453533, spamassassin/trunk/spamd-apache2/lib/Mail/SpamAssassin/Spamd.pm
spamassassin/branches/jm_re2c_hacks/spamd-apache2/lib/Mail/SpamAssassin/Spamd/Apache2/
- copied from r453533, spamassassin/trunk/spamd-apache2/lib/Mail/SpamAssassin/Spamd/Apache2/
spamassassin/branches/jm_re2c_hacks/spamd-apache2/lib/Mail/SpamAssassin/Spamd/Apache2.pm
- copied unchanged from r453533, spamassassin/trunk/spamd-apache2/lib/Mail/SpamAssassin/Spamd/Apache2.pm
spamassassin/branches/jm_re2c_hacks/spamd-apache2/lib/Mail/SpamAssassin/Spamd/Apache2/AclIP.pm
- copied unchanged from r453533, spamassassin/trunk/spamd-apache2/lib/Mail/SpamAssassin/Spamd/Apache2/AclIP.pm
spamassassin/branches/jm_re2c_hacks/spamd-apache2/lib/Mail/SpamAssassin/Spamd/Apache2/AclRFC1413.pm
- copied unchanged from r453533, spamassassin/trunk/spamd-apache2/lib/Mail/SpamAssassin/Spamd/Apache2/AclRFC1413.pm
spamassassin/branches/jm_re2c_hacks/spamd-apache2/lib/Mail/SpamAssassin/Spamd/Apache2/Config.pm
- copied unchanged from r453533, spamassassin/trunk/spamd-apache2/lib/Mail/SpamAssassin/Spamd/Apache2/Config.pm
spamassassin/branches/jm_re2c_hacks/spamd-apache2/lib/Mail/SpamAssassin/Spamd/Config.pm
- copied unchanged from r453533, spamassassin/trunk/spamd-apache2/lib/Mail/SpamAssassin/Spamd/Config.pm
spamassassin/branches/jm_re2c_hacks/spamd-apache2/t/
- copied from r453533, spamassassin/trunk/spamd-apache2/t/
spamassassin/branches/jm_re2c_hacks/spamd-apache2/t/30run.t
- copied unchanged from r453533, spamassassin/trunk/spamd-apache2/t/30run.t
spamassassin/branches/jm_re2c_hacks/spamd-apache2/t/TEST.PL
- copied unchanged from r453533, spamassassin/trunk/spamd-apache2/t/TEST.PL
spamassassin/branches/jm_re2c_hacks/spamd-apache2/t/certs/
- copied from r453533, spamassassin/trunk/spamd-apache2/t/certs/
spamassassin/branches/jm_re2c_hacks/spamd-apache2/t/certs/Makefile
- copied unchanged from r453533, spamassassin/trunk/spamd-apache2/t/certs/Makefile
spamassassin/branches/jm_re2c_hacks/spamd-apache2/t/certs/server.crt
- copied unchanged from r453533, spamassassin/trunk/spamd-apache2/t/certs/server.crt
spamassassin/branches/jm_re2c_hacks/spamd-apache2/t/certs/server.csr
- copied unchanged from r453533, spamassassin/trunk/spamd-apache2/t/certs/server.csr
spamassassin/branches/jm_re2c_hacks/spamd-apache2/t/certs/server.key
- copied unchanged from r453533, spamassassin/trunk/spamd-apache2/t/certs/server.key
spamassassin/branches/jm_re2c_hacks/spamd-apache2/t/conf/
- copied from r453533, spamassassin/trunk/spamd-apache2/t/conf/
spamassassin/branches/jm_re2c_hacks/spamd-apache2/t/conf/extra.last.conf.in
- copied unchanged from r453533, spamassassin/trunk/spamd-apache2/t/conf/extra.last.conf.in
spamassassin/branches/jm_re2c_hacks/t/cpp_comments_in_spamc.t
- copied unchanged from r453533, spamassassin/trunk/t/cpp_comments_in_spamc.t
spamassassin/branches/jm_re2c_hacks/t/spamd_kill_restart.t
- copied unchanged from r453533, spamassassin/trunk/t/spamd_kill_restart.t
spamassassin/branches/jm_re2c_hacks/t/spamd_kill_restart_rr.t
- copied unchanged from r453533, spamassassin/trunk/t/spamd_kill_restart_rr.t
Modified:
spamassassin/branches/jm_re2c_hacks/CREDITS
spamassassin/branches/jm_re2c_hacks/INSTALL
spamassassin/branches/jm_re2c_hacks/MANIFEST
spamassassin/branches/jm_re2c_hacks/MANIFEST.SKIP
spamassassin/branches/jm_re2c_hacks/Makefile.PL
spamassassin/branches/jm_re2c_hacks/USAGE
spamassassin/branches/jm_re2c_hacks/build/README
spamassassin/branches/jm_re2c_hacks/build/automc/etc-apache-local-conf-httpd.conf
spamassassin/branches/jm_re2c_hacks/build/automc/etc-init.d-freqsd
spamassassin/branches/jm_re2c_hacks/build/automc/freqsd
spamassassin/branches/jm_re2c_hacks/build/automc/freqsd-infrequent
spamassassin/branches/jm_re2c_hacks/build/automc/run_nightly
spamassassin/branches/jm_re2c_hacks/build/automc/run_preflight
spamassassin/branches/jm_re2c_hacks/build/buildbot/bbmass_master.cfg
spamassassin/branches/jm_re2c_hacks/build/buildbot/master.cfg
spamassassin/branches/jm_re2c_hacks/build/describe-to-po-file
spamassassin/branches/jm_re2c_hacks/build/mkrules
spamassassin/branches/jm_re2c_hacks/build/preprocessor
spamassassin/branches/jm_re2c_hacks/build/replace_license_blocks
spamassassin/branches/jm_re2c_hacks/contrib/mbox-to-check
spamassassin/branches/jm_re2c_hacks/contrib/run-corpora
spamassassin/branches/jm_re2c_hacks/contrib/run-masses
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/AICache.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/ArchiveIterator.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/AsyncLoop.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/AutoWhitelist.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Bayes.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Bayes/CombineChi.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Bayes/CombineNaiveBayes.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/BayesStore.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/BayesStore/DBM.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/BayesStore/MySQL.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/BayesStore/PgSQL.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/BayesStore/SDBM.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/BayesStore/SQL.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Client.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Conf.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Conf/LDAP.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Conf/Parser.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Conf/SQL.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Constants.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/DBBasedAddrList.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Dns.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/DnsResolver.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/HTML.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Locales.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Locker.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Locker/Flock.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Locker/UnixNFSSafe.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Locker/Win32.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Logger.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Logger/File.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Logger/Stderr.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Logger/Syslog.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/MailingList.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Message.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Message/Metadata.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Message/Metadata/Received.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Message/Node.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/NetSet.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/PerMsgLearner.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/PerMsgStatus.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/PersistentAddrList.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/AWL.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/AccessDB.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/AntiVirus.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/AutoLearnThreshold.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/Bayes.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/BodyEval.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/DCC.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/DKIM.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/DNSEval.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/DomainKeys.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/HTMLEval.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/HTTPSMismatch.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/Hashcash.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/HeaderEval.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/MIMEEval.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/MIMEHeader.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/NetCache.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/Pyzor.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/Razor2.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/RelayCountry.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/RelayEval.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/ReplaceTags.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/SPF.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/Shortcircuit.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/SpamCop.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/Test.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/TextCat.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/URIDNSBL.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/URIDetail.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/URIEval.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/WLBLEval.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/WhiteListSubject.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/PluginHandler.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Reporter.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/SQLBasedAddrList.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/SpamdForkScaling.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/SubProcBackChannel.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Timeout.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Util.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Util/DependencyInfo.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Util/Progress.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Util/RegistrarBoundaries.pm
spamassassin/branches/jm_re2c_hacks/lm/build.pl
spamassassin/branches/jm_re2c_hacks/masses/bayes-testing/graph-accuracy-curve
spamassassin/branches/jm_re2c_hacks/masses/bayes-testing/graph-bayes-histogram
spamassassin/branches/jm_re2c_hacks/masses/corpora/mk-corpus-link-farm
spamassassin/branches/jm_re2c_hacks/masses/enable-all-evolved-rules
spamassassin/branches/jm_re2c_hacks/masses/evolve_metarule/evolve_metarule.c
spamassassin/branches/jm_re2c_hacks/masses/evolve_metarule/preproc.pl
spamassassin/branches/jm_re2c_hacks/masses/extract-message-from-mbox
spamassassin/branches/jm_re2c_hacks/masses/find-extremes
spamassassin/branches/jm_re2c_hacks/masses/fp-fn-to-tcr
spamassassin/branches/jm_re2c_hacks/masses/freqdiff
spamassassin/branches/jm_re2c_hacks/masses/generate-translation
spamassassin/branches/jm_re2c_hacks/masses/hit-frequencies
spamassassin/branches/jm_re2c_hacks/masses/lint-rules-from-freqs
spamassassin/branches/jm_re2c_hacks/masses/logdiff
spamassassin/branches/jm_re2c_hacks/masses/logs-to-c
spamassassin/branches/jm_re2c_hacks/masses/mass-check
spamassassin/branches/jm_re2c_hacks/masses/mboxget
spamassassin/branches/jm_re2c_hacks/masses/mk-roc-graphs
spamassassin/branches/jm_re2c_hacks/masses/overlap
spamassassin/branches/jm_re2c_hacks/masses/parse-rules-for-masses
spamassassin/branches/jm_re2c_hacks/masses/perceptron.c
spamassassin/branches/jm_re2c_hacks/masses/plugins/01_rule_timing.cf
spamassassin/branches/jm_re2c_hacks/masses/plugins/HitFreqsRuleTiming.pm
spamassassin/branches/jm_re2c_hacks/masses/remove-ids-from-mclog
spamassassin/branches/jm_re2c_hacks/masses/rewrite-cf-with-new-scores
spamassassin/branches/jm_re2c_hacks/masses/rule-qa/corpus-hourly
spamassassin/branches/jm_re2c_hacks/masses/rule-qa/corpus-nightly
spamassassin/branches/jm_re2c_hacks/masses/rule-qa/get-rulemetadata-for-revision
spamassassin/branches/jm_re2c_hacks/masses/rule-qa/rule-hits-over-time
spamassassin/branches/jm_re2c_hacks/masses/score-ranges-from-freqs
spamassassin/branches/jm_re2c_hacks/masses/uniq-scores
spamassassin/branches/jm_re2c_hacks/rules/10_default_prefs.cf
spamassassin/branches/jm_re2c_hacks/rules/20_dnsbl_tests.cf
spamassassin/branches/jm_re2c_hacks/rules/20_head_tests.cf
spamassassin/branches/jm_re2c_hacks/rules/20_html_tests.cf
spamassassin/branches/jm_re2c_hacks/rules/20_net_tests.cf
spamassassin/branches/jm_re2c_hacks/rules/23_bayes.cf
spamassassin/branches/jm_re2c_hacks/rules/25_accessdb.cf
spamassassin/branches/jm_re2c_hacks/rules/25_antivirus.cf
spamassassin/branches/jm_re2c_hacks/rules/25_dcc.cf
spamassassin/branches/jm_re2c_hacks/rules/25_dkim.cf
spamassassin/branches/jm_re2c_hacks/rules/25_domainkeys.cf
spamassassin/branches/jm_re2c_hacks/rules/25_hashcash.cf
spamassassin/branches/jm_re2c_hacks/rules/25_pyzor.cf
spamassassin/branches/jm_re2c_hacks/rules/25_razor2.cf
spamassassin/branches/jm_re2c_hacks/rules/25_replace.cf
spamassassin/branches/jm_re2c_hacks/rules/25_spf.cf
spamassassin/branches/jm_re2c_hacks/rules/25_textcat.cf
spamassassin/branches/jm_re2c_hacks/rules/25_uribl.cf
spamassassin/branches/jm_re2c_hacks/rules/60_awl.cf
spamassassin/branches/jm_re2c_hacks/rules/60_shortcircuit.cf
spamassassin/branches/jm_re2c_hacks/rules/60_whitelist.cf
spamassassin/branches/jm_re2c_hacks/rules/60_whitelist_dkim.cf
spamassassin/branches/jm_re2c_hacks/rules/60_whitelist_spf.cf
spamassassin/branches/jm_re2c_hacks/rules/60_whitelist_subject.cf
spamassassin/branches/jm_re2c_hacks/rules/active.list
spamassassin/branches/jm_re2c_hacks/rules/regression_tests.cf
spamassassin/branches/jm_re2c_hacks/rules/rule2xs.pre
spamassassin/branches/jm_re2c_hacks/sa-learn.raw
spamassassin/branches/jm_re2c_hacks/sa-update.raw
spamassassin/branches/jm_re2c_hacks/spamassassin.raw
spamassassin/branches/jm_re2c_hacks/spamc/configure
spamassassin/branches/jm_re2c_hacks/spamc/configure.in
spamassassin/branches/jm_re2c_hacks/spamc/configure.pl
spamassassin/branches/jm_re2c_hacks/spamc/getopt.c
spamassassin/branches/jm_re2c_hacks/spamc/getopt.h
spamassassin/branches/jm_re2c_hacks/spamc/libspamc.c
spamassassin/branches/jm_re2c_hacks/spamc/libspamc.h
spamassassin/branches/jm_re2c_hacks/spamc/qmail-spamc.c
spamassassin/branches/jm_re2c_hacks/spamc/spamc.c
spamassassin/branches/jm_re2c_hacks/spamc/spamc.pod
spamassassin/branches/jm_re2c_hacks/spamc/utils.c
spamassassin/branches/jm_re2c_hacks/spamc/utils.h
spamassassin/branches/jm_re2c_hacks/spamd/spamd.raw
spamassassin/branches/jm_re2c_hacks/t/basic_lint.t
spamassassin/branches/jm_re2c_hacks/t/data/01_test_rules.cf
spamassassin/branches/jm_re2c_hacks/t/gtube.t
spamassassin/branches/jm_re2c_hacks/t/lang_pl_tests.t
spamassassin/branches/jm_re2c_hacks/t/lint_nocreate_prefs.t
spamassassin/branches/jm_re2c_hacks/t/mimeheader.t
spamassassin/branches/jm_re2c_hacks/t/mkrules.t
spamassassin/branches/jm_re2c_hacks/t/prefs_include.t
spamassassin/branches/jm_re2c_hacks/t/rcvd_parser.t
spamassassin/branches/jm_re2c_hacks/t/reportheader.t
spamassassin/branches/jm_re2c_hacks/t/reportheader_8bit.t
spamassassin/branches/jm_re2c_hacks/t/spamd_hup.t
spamassassin/branches/jm_re2c_hacks/tools/mboxsplit
spamassassin/branches/jm_re2c_hacks/tools/sa-stats.pl
spamassassin/branches/jm_re2c_hacks/tools/speedtest

Modified: spamassassin/branches/jm_re2c_hacks/CREDITS
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/CREDITS?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/CREDITS (original)
+++ spamassassin/branches/jm_re2c_hacks/CREDITS Fri Oct 6 05:46:56 2006
@@ -8,6 +8,7 @@
- Duncan Findlay
- Sidney Markowitz http://www.amazon.com/o/registry/1WJ8J7403BLTS
- Justin Mason http://www.amazon.com/o/registry/1M0UDEXT6A3I7
+ - Daryl C. W. O'Shea
- Michael Parker http://www.amazon.com/o/registry/10BBAR2M03T6F
- Daniel Quinlan http://www.amazon.com/o/registry/3B3ST4DS9DTL0
- Malte S. Stretz
@@ -20,7 +21,6 @@
- Kevin A. McGrail
- Robert Menschel
- John Gardiner Myers
- - Daryl C. W. O'Shea
- Dale 'Doc' Schneider
- Henry Stern

@@ -124,6 +124,10 @@
- Henry Stern: perceptron score optimizer (replacing the GA).

- Liam Widdowson, <liam(at)inodes.org>: shared-library use of spamc.
+
+ - Radoslaw Zielinski, <radek(at)pld-linux.org>:
+ Mail::SpamAssassin::Spamd::Apache2, a mod_perl2 module implementing spamd,
+ contributed as a Google Summer of Code project.


Translators:

Modified: spamassassin/branches/jm_re2c_hacks/INSTALL
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/INSTALL?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/INSTALL (original)
+++ spamassassin/branches/jm_re2c_hacks/INSTALL Fri Oct 6 05:46:56 2006
@@ -354,6 +354,22 @@
charsets and convert them into Unicode, you will need to install
this module.

+
+ - Apache::Test (from CPAN)
+
+ If you plan to run the Apache2 version of spamd in the
+ "spamd-apache2" directory, you will need to install this
+ module.
+
+
+ - Apache 2 and mod_perl
+
+ If you plan to run the Apache2 version of spamd in the "spamd-apache2"
+ directory, you will need to ensure these are installed.
+
+ Ubuntu: sudo apt-get install apache2 libapache2-mod-perl2
+
+
What Next?
----------


Modified: spamassassin/branches/jm_re2c_hacks/MANIFEST
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/MANIFEST?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/MANIFEST (original)
+++ spamassassin/branches/jm_re2c_hacks/MANIFEST Fri Oct 6 05:46:56 2006
@@ -20,6 +20,7 @@
build/md5sum.pl
build/preprocessor
build/sha1sum.pl
+contrib/check_spamd
contrib/mbox-to-check
contrib/run-corpora
contrib/run-masses
@@ -146,6 +147,7 @@
masses/graphs/gnuplot-score-graph
masses/hit-frequencies
masses/lint-rules-from-freqs
+masses/logdiff
masses/logs-to-c
masses/mass-check
masses/mass-check.cf
@@ -167,6 +169,7 @@
masses/rule-qa/corpus-nightly
masses/rule-qa/corpus-tagtime
masses/rule-qa/corpus.example
+masses/rule-qa/get-rulemetadata-for-revision
masses/rule-qa/markup-rules-file-with-freqs
masses/rule-qa/post-bugs-for-retired-tests
masses/rule-qa/rule-hits-over-time
@@ -222,6 +225,27 @@
spamd/solaris-rc-script.sh
spamd/spamd.raw
spamd/suse-ancient-rc-script.sh
+spamd-apache2/bin/apache-spamd.pl
+spamd-apache2/bin/Bench-spamd.pl
+spamd-apache2/bin/Spamd
+spamd-apache2/lib/Mail/SpamAssassin/Spamd.pm
+spamd-apache2/lib/Mail/SpamAssassin/Spamd/Apache2.pm
+spamd-apache2/lib/Mail/SpamAssassin/Spamd/Apache2/AclIP.pm
+spamd-apache2/lib/Mail/SpamAssassin/Spamd/Apache2/AclRFC1413.pm
+spamd-apache2/lib/Mail/SpamAssassin/Spamd/Apache2/Config.pm
+spamd-apache2/lib/Mail/SpamAssassin/Spamd/Config.pm
+spamd-apache2/Makefile.PL
+spamd-apache2/MANIFEST
+spamd-apache2/MANIFEST.SKIP
+spamd-apache2/META.yml
+spamd-apache2/README.apache
+spamd-apache2/t/30run.t
+spamd-apache2/t/certs/Makefile
+spamd-apache2/t/certs/server.crt
+spamd-apache2/t/certs/server.csr
+spamd-apache2/t/certs/server.key
+spamd-apache2/t/conf/extra.last.conf.in
+spamd-apache2/t/TEST.PL
sql/README
sql/README.awl
sql/README.bayes
@@ -245,6 +269,7 @@
t/cidrs.t
t/config.dist
t/config_errs.t
+t/cpp_comments_in_spamc.t
t/data/01_test_rules.cf
t/data/etc/hello.txt
t/data/etc/testhost.cert
@@ -459,13 +484,12 @@
rules/60_awl.cf
rules/60_shortcircuit.cf
rules/60_whitelist.cf
+rules/60_whitelist_dk.cf
rules/60_whitelist_dkim.cf
rules/60_whitelist_spf.cf
rules/60_whitelist_subject.cf
rules/70_sandbox.cf
rules/72_active.cf
-rules/sandbox-felicity.pm
-rules/sandbox-hstern.pm
rules/STATISTICS-set0.txt
rules/STATISTICS-set1.txt
rules/STATISTICS-set2.txt
@@ -500,3 +524,5 @@
lib/Mail/SpamAssassin/Plugin/BodyRuleBaseExtractor.pm
lib/Mail/SpamAssassin/Plugin/RabinKarpBody.pm
lib/Mail/SpamAssassin/Plugin/Rule2XSBody.pm
+t/spamd_kill_restart.t
+t/spamd_kill_restart_rr.t

Modified: spamassassin/branches/jm_re2c_hacks/MANIFEST.SKIP
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/MANIFEST.SKIP?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/MANIFEST.SKIP (original)
+++ spamassassin/branches/jm_re2c_hacks/MANIFEST.SKIP Fri Oct 6 05:46:56 2006
@@ -118,3 +118,12 @@
^build/buildbot/
^hack/
^patches/
+(^|/)\.
+~$
+/logs/
+/t/logs/
+\.conf$
+\.pl$
+\bCVS\b
+/t/TEST$
+

Modified: spamassassin/branches/jm_re2c_hacks/Makefile.PL
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/Makefile.PL?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/Makefile.PL (original)
+++ spamassassin/branches/jm_re2c_hacks/Makefile.PL Fri Oct 6 05:46:56 2006
@@ -284,6 +284,10 @@
# asking all questions twice after a 'make dist*'.
'NORECURS' => 1,

+ # bug 5074: perl 5.6.1 (with ExtUtils::MakeMaker 5.45) attempts to
+ # recurse anyway unless this is explicitly specified
+ 'DIR' => [ ],
+
# Don't add META.yml to the MANIFEST for god's sake!
'NO_META' => 1,
);

Modified: spamassassin/branches/jm_re2c_hacks/USAGE
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/USAGE?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/USAGE (original)
+++ spamassassin/branches/jm_re2c_hacks/USAGE Fri Oct 6 05:46:56 2006
@@ -85,7 +85,8 @@

- take a look at the notes on the Wiki website, currently at
<http://wiki.apache.org/spamassassin/UsingSiteWide>. You will probably
- want to use 'spamd' (see below).
+ want to use 'spamd' (see below). You may want to investigate the
+ new Apache mod_perl module, in the 'spamd-apache2' directory, too.

- *PLEASE* let your users know you've installed it, and how to turn it
off! This is our #1 tech support query, and the users are usually
@@ -181,6 +182,15 @@
large volumes of mail through SpamAssassin without having to
fork/exec a perl interpreter for each message. Take a look in the
'spamd' and 'spamc' directories for more details.
+
+
+ - The distribution also includes 'spamd-apache2', a mod_perl module
+ allowing the Apache HTTP server to be used as a platform for a
+ daemonized SpamAssassin, in an upwardly-compatible fashion from
+ 'spamd'. If you don't require some of the spamd features it does not
+ implement (such as switching UIDs to read per-user configuration from
+ user home directories), this may be much faster than spamd. Take a
+ look at the 'spamd-apache2' directory for details.


- spamc can now be built as a shared library for use with milters or

Modified: spamassassin/branches/jm_re2c_hacks/build/README
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/build/README?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/build/README (original)
+++ spamassassin/branches/jm_re2c_hacks/build/README Fri Oct 6 05:46:56 2006
@@ -244,7 +244,7 @@

cd /www/spamassassin.apache.org
svn up
- svn delete full/3.1.x
+ svn delete --force full/3.1.x
svn commit -m "removing old dist tree"

cd [checkedoutdir]
@@ -252,6 +252,7 @@

cd /www/spamassassin.apache.org
svn add full/3.1.x
+ svn commit -m "updating new dist tree" full

- and check the entire website into SVN (see bug 4998 for reasons why).
Note that you may need to resolve conflicts and ensure the contents of

Modified: spamassassin/branches/jm_re2c_hacks/build/automc/etc-apache-local-conf-httpd.conf
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/build/automc/etc-apache-local-conf-httpd.conf?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/build/automc/etc-apache-local-conf-httpd.conf (original)
+++ spamassassin/branches/jm_re2c_hacks/build/automc/etc-apache-local-conf-httpd.conf Fri Oct 6 05:46:56 2006
@@ -67,7 +67,8 @@
# ---------------------------------------------------------------------------

<VirtualHost *:80>
- ServerName bbmass.spamassassin.org
+ ServerName bbmass-trunk.spamassassin.org
+ ServerAlias bbmass.spamassassin.org
<Directory /var/www/bbmass.spamassassin.org>
options indexes SymLinksIfOwnerMatch
AllowOverride indexes
@@ -97,7 +98,8 @@
# ---------------------------------------------------------------------------

<VirtualHost *:80>
- ServerName ruleqa.spamassassin.org
+ ServerName ruleqa-trunk.spamassassin.org
+ ServerAlias ruleqa.spamassassin.org
<Directory /var/www/ruleqa.spamassassin.org>
options indexes SymLinksIfOwnerMatch
AllowOverride indexes
@@ -128,6 +130,73 @@
RewriteRule ^/(.*) /ruleqa.cgi/$1 [PT,L]

ScriptAlias /ruleqa.cgi /home/automc/svn/spamassassin/masses/rule-qa/automc/ruleqa.cgi
+
+</VirtualHost>
+
+# ---------------------------------------------------------------------------
+
+# <VirtualHost *:80>
+ # ServerName bbmass-stable.spamassassin.org
+ # <Directory /var/www/bbmass-stable.spamassassin.org>
+ # options indexes SymLinksIfOwnerMatch
+ # AllowOverride indexes
+ # </Directory>
+ # DocumentRoot /var/www/bbmass-stable.spamassassin.org
+ # ServerAdmin webmaster@spamassassin.org
+ # userdir disabled
+#
+ # RewriteEngine On
+#
+ # # index: straight through
+ # RewriteRule ^/$ http://127.0.0.1:8011/ [P]
+#
+ # # anything else; proxy, if it doesn't exist as a file/dir
+ # RewriteCond /var/www/bbmass-stable.spamassassin.org/%{REQUEST_FILENAME} !-d
+ # RewriteCond /var/www/bbmass-stable.spamassassin.org/%{REQUEST_FILENAME} !-f
+ # RewriteRule ^/(.*) http://127.0.0.1:8011/$1 [P]
+#
+ # ProxyRequests Off
+ # <Proxy *>
+ # Order deny,allow
+ # Allow from all
+ # </Proxy>
+#
+# </VirtualHost>
+
+# ---------------------------------------------------------------------------
+
+<VirtualHost *:80>
+ ServerName ruleqa-stable.spamassassin.org
+ <Directory /var/www/ruleqa-stable.spamassassin.org>
+ options indexes SymLinksIfOwnerMatch
+ AllowOverride indexes
+ </Directory>
+ DocumentRoot /var/www/ruleqa-stable.spamassassin.org
+ ServerAdmin webmaster@spamassassin.org
+ userdir disabled
+
+ # debugging:
+ # RewriteLogLevel 9
+ # RewriteLog /var/apache2/logs/rewrite_log
+
+ # "%2F" is used to grep rule subsets, allow it
+ AllowEncodedSlashes On
+
+ # strip out known-local files and loops; all else goes to the ruleqa code
+ RewriteEngine On
+
+ # index: straight through
+ RewriteRule ^/$ /ruleqa.cgi [PT,L]
+
+ # satisfy local files
+ RewriteCond /var/www/ruleqa-stable.spamassassin.org/%{REQUEST_FILENAME} !-d
+ RewriteCond /var/www/ruleqa-stable.spamassassin.org/%{REQUEST_FILENAME} !-f
+
+ # otherwise the CGI
+ RewriteCond %{REQUEST_URI} !^/ruleqa\.cgi
+ RewriteRule ^/(.*) /ruleqa.cgi/$1 [PT,L]
+
+ ScriptAlias /ruleqa.cgi /home/automc-stable/svn/spamassassin/masses/rule-qa/automc/ruleqa.cgi

</VirtualHost>


Modified: spamassassin/branches/jm_re2c_hacks/build/automc/etc-init.d-freqsd
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/build/automc/etc-init.d-freqsd?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/build/automc/etc-init.d-freqsd (original)
+++ spamassassin/branches/jm_re2c_hacks/build/automc/etc-init.d-freqsd Fri Oct 6 05:46:56 2006
@@ -28,8 +28,8 @@
cd /home/automc/svn/spamassassin
su automc -c "./build/automc/freqsd -pidfile /home/automc/freqsd/pid -kill"

- sleep 1
- pkill -15 -f automc/freqsd # just in case
+ # sleep 1
+ # pkill -15 -f automc/freqsd # just in case
sleep 1
pkill -15 -u automc
}

Modified: spamassassin/branches/jm_re2c_hacks/build/automc/freqsd
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/build/automc/freqsd?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/build/automc/freqsd (original)
+++ spamassassin/branches/jm_re2c_hacks/build/automc/freqsd Fri Oct 6 05:46:56 2006
@@ -24,7 +24,6 @@
my $dq_slow = IPC::DirQueue->new({ dir => "/home/automc/freqsd/dq_slow" });
$pidfile ||= "/home/automc/freqsd/pid";

-# $ENV{HOME} = '/home/bbmass';
umask(002);

# ---------------------------------------------------------------------------

Modified: spamassassin/branches/jm_re2c_hacks/build/automc/freqsd-infrequent
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/build/automc/freqsd-infrequent?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/build/automc/freqsd-infrequent (original)
+++ spamassassin/branches/jm_re2c_hacks/build/automc/freqsd-infrequent Fri Oct 6 05:46:56 2006
@@ -1,23 +1,9 @@
#!/bin/sh

-# recreate the corpus link-farm; log results to a web-visible file
-
-# BBMHOME=/home/bbmass
-#
-# (
-#
- # # create links to the user-submitted corpora in the right
- # # volumes etc.
- # date
- # ./build/automc/populate_cor
- # date
-#
- # # permit mass-check processes to create files in these dirs,
- # # so they can use the ArchiveIterator cache code
- # cd $BBMHOME/tmpfs/cor
- # find . -type d | xargs chmod 1777
-#
-# ) 2>&1 | tee \
- # /var/www/buildbot.spamassassin.org/bbmass/corpus_makeup.txt
- # # note: needs to be customised for each site
+BBMHOME=/home/bbmass

+# clean up our temporary dir
+cd $BBMHOME/tmp
+find . -mtime +7 | sort -r > o
+xargs rm -f < o
+xargs rmdir < o

Modified: spamassassin/branches/jm_re2c_hacks/build/automc/run_nightly
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/build/automc/run_nightly?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/build/automc/run_nightly (original)
+++ spamassassin/branches/jm_re2c_hacks/build/automc/run_nightly Fri Oct 6 05:46:56 2006
@@ -7,18 +7,21 @@

# add usernames who you want to do nightlies for here:
nightly_users="
- zmi
doc
jm
+ fredt
+ zmi
"

# and where the $HOMEs are:
nightly_trees="/home/bbmass/mc-nightly"


-# ensure we're running after 0900 UTC; complex due to daylight savings.
-# If we're running in the 08xx UTC hour-space, sleep for 1 hour; when
-# we wake, we will be in 09xx.
+# Ensure we're running after 0900 UTC; complex due to daylight savings. If
+# we're running in the 08xx UTC hour-space, sleep for 1 hour; when we wake, we
+# will be in 09xx. By doing it this way, we'll work both for (a) mass-checks
+# set to run from cron at 09xx (cron doesn't understand DST/UTC issues) and (b)
+# mass-checks starting at other times that != 09xx.
(
TIME="%e,%U,%S"; TZ=UTC; export TIME TZ
if date | egrep '^... ... .. 08:'; then
@@ -49,19 +52,8 @@

# use bash to work around Solaris breakage
nice bash $dir/svn/masses/rule-qa/corpus-nightly
- )

-done
+ ) 2>&1 | tee "$dir/corpus-nightly.log"

-# cycle the logfiles; keep 6 (3 days worth I think)
-# (
- # cd /var/www/buildbot.spamassassin.org/bbmass
- # rm nightly_masschecks_6.txt
- # mv nightly_masschecks_5.txt nightly_masschecks_6.txt
- # mv nightly_masschecks_4.txt nightly_masschecks_5.txt
- # mv nightly_masschecks_3.txt nightly_masschecks_4.txt
- # mv nightly_masschecks_2.txt nightly_masschecks_3.txt
- # mv nightly_masschecks_1.txt nightly_masschecks_2.txt
- # mv nightly_masschecks.txt nightly_masschecks_1.txt
-# )
+done


Modified: spamassassin/branches/jm_re2c_hacks/build/automc/run_preflight
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/build/automc/run_preflight?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/build/automc/run_preflight (original)
+++ spamassassin/branches/jm_re2c_hacks/build/automc/run_preflight Fri Oct 6 05:46:56 2006
@@ -40,35 +40,13 @@

unlink ("ham.log", "spam.log");

-# just the sandbox rules, sandbox plugins, the timing plugin,
-# and the default system-wide plugins (so DNS evals can work)
+# change of plan: mass-check the entire ruleset
#
system ("rm -rf tstrules");
run "mkdir tstrules";
-run "cp ../rules/*.pre tstrules";
-run "cp ../rules/*.pm tstrules";
-run "cp plugins/*.* tstrules";
-
-# don't just copy; instead, transcribe while dropping score and describe lines
-# (to avoid '[26260] warn: config: warning: score set for non-existent rule
-# HTML_SHORT_LENGTH').
-## run "cp ../rules/70_sandbox.cf tstrules";
-open IN, "<../rules/70_sandbox.cf" or die "cannot read ../rules/sandbox.cf";
-open OUT, ">tstrules/70_sandbox.cf" or die "cannot write tstrules/70_sandbox.cf";
-
-while (<IN>) {
- s/^\s+//;
- next if /^(?:
- score|
- describe|
- lang
- )/x;

- print OUT;
-}
-
-close IN or die "close failed!";
-close OUT or die "close failed!";
+run "cp ../rules/*.* tstrules";
+run "cp plugins/*.* tstrules";

# well, ok just those, and anything that's been mailed-in
#
@@ -89,6 +67,20 @@
} else {
print "lint passed.\n";
}
+
+# create the user_prefs file for the mass-check. Settings: turn off Bayes;
+# turn off the auto-whitelist.
+
+mkdir "spamassassin";
+open PREFS, ">spamassassin/user_prefs";
+print PREFS q{
+
+ use_bayes 0
+ use_auto_whitelist 0
+
+};
+close PREFS or die "cannot create 'spamassassin/user_prefs' file: $! $@";
+

# notes on this mass-check command:
#

Modified: spamassassin/branches/jm_re2c_hacks/build/buildbot/bbmass_master.cfg
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/build/buildbot/bbmass_master.cfg?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/build/buildbot/bbmass_master.cfg (original)
+++ spamassassin/branches/jm_re2c_hacks/build/buildbot/bbmass_master.cfg Fri Oct 6 05:46:56 2006
@@ -109,7 +109,7 @@
c['status'].append(html.Waterfall(http_port=8011))

from buildbot.status import mail
-c['status'].append(mail.MailNotifier(fromaddr="buildbot@spamassassin.org",
+c['status'].append(mail.MailNotifier(fromaddr="buildbot@spamassassin.zones.apache.org",
extraRecipients=["commits@spamassassin.apache.org"],
mode="problem",
sendToInterestedUsers=True))

Modified: spamassassin/branches/jm_re2c_hacks/build/buildbot/master.cfg
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/build/buildbot/master.cfg?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/build/buildbot/master.cfg (original)
+++ spamassassin/branches/jm_re2c_hacks/build/buildbot/master.cfg Fri Oct 6 05:46:56 2006
@@ -272,7 +272,7 @@
c['status'].append(html.Waterfall(http_port=8010))

from buildbot.status import mail
-c['status'].append(mail.MailNotifier(fromaddr="buildbot@bugzilla.spamassassin.org",
+c['status'].append(mail.MailNotifier(fromaddr="buildbot@spamassassin.zones.apache.org",
extraRecipients=["commits@spamassassin.apache.org"],
mode="problem",
sendToInterestedUsers=True))

Modified: spamassassin/branches/jm_re2c_hacks/build/describe-to-po-file
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/build/describe-to-po-file?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/build/describe-to-po-file (original)
+++ spamassassin/branches/jm_re2c_hacks/build/describe-to-po-file Fri Oct 6 05:46:56 2006
@@ -64,14 +64,15 @@
# SpamAssassin PO file
#
# <@LICENSE>
-# Copyright 2004 Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to you under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at:
+#
# http://www.apache.org/licenses/LICENSE-2.0
-#
+#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

Modified: spamassassin/branches/jm_re2c_hacks/build/mkrules
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/build/mkrules?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/build/mkrules (original)
+++ spamassassin/branches/jm_re2c_hacks/build/mkrules Fri Oct 6 05:46:56 2006
@@ -3,14 +3,15 @@
# build/mkrules -- compile the SpamAssassin rules into installable form
#
# <@LICENSE>
-# Copyright 2004 Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to you under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at:
+#
# http://www.apache.org/licenses/LICENSE-2.0
-#
+#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -95,6 +96,8 @@
# source files that need compilation, and their targets
my $needs_compile = { };
my $current_src;
+my $newest_src_mtime = 0;
+my $newest_out_mtime = 0;

my $default_file_header = join('', <DATA>);

@@ -110,6 +113,20 @@
}, $src);
}

+# get mtimes of output files; we can be sure that all
+# output is under the "opt_out" dir, so recurse there
+#File::Find::find ({
+# wanted => \&out_wanted,
+# no_chdir => 1
+# }, $opt_out);
+
+#if ($newest_src_mtime && $newest_out_mtime
+# && $newest_src_mtime < $newest_out_mtime)
+#{
+# print "mkrules: no rules updated\n";
+# exit 0;
+#}
+
my $rules = { };

my $file_manifest = { };
@@ -157,7 +174,13 @@
my $text = join("\n", "file start $file", $output_file_text->{$file}, "file end $file");
if (lint_rule_text($text) != 0) {
warn "\nERROR: LINT FAILED, suppressing output: $file\n\n";
- delete $output_file_text->{$file};
+
+ # don't suppress entirely, otherwise 'make distcheck'/'disttest'
+ # will fail since the MANIFEST-listed output files will be
+ # empty.
+
+ # delete $output_file_text->{$file};
+ $output_file_text->{$file} = '';
}
}
}
@@ -213,6 +236,11 @@
my $t;
$t = "$opt_out/$filename";

+ my @st = stat $path;
+ if ($st[9] && $st[9] > $newest_src_mtime) {
+ $newest_src_mtime = $st[9];
+ }
+
$needs_compile->{$f} = {
f => $f,
t => $t,
@@ -221,6 +249,17 @@
};
}

+sub out_wanted {
+ my $path = $File::Find::name;
+ return unless (-f $path);
+ return unless ($path =~ /\.cf$/i);
+
+ my @st = stat $path;
+ if ($st[9] && $st[9] > $newest_out_mtime) {
+ $newest_out_mtime = $st[9];
+ }
+}
+
# compile all the source files found by the wanted() sub, in sorted
# order so that the order of precedence makes sense.
sub read_all_rules {
@@ -412,14 +451,26 @@
elsif (/^loadplugin\s*(\S+)\b/) {
my $name = 'loadplugin_'.$1;

+ unless ($rules->{$name}) {
+ $rules->{$name} = rule_entry_create();
+ $rules->{$name}->{issandbox} = $issandbox;
+ $rules->{$name}->{iscommand} = 1;
+ }
+
if (/^loadplugin\s*\S+\s+(\S+)/) {
my $fname = $1;
my $fpath = dirname($f)."/".$fname;
+
if (!-f $fpath) {
warn "$f: WARNING: plugin code file '$fpath' not found, line ignored: $orig";
next;
}

+ if ($fpath =~ /sandbox/i) {
+ # Since this is a sandbox plugin, force its output to the sandbox area.
+ $rules->{$name}->{sandbox_plugin} = 1;
+ }
+
# If a 'loadplugin' line is found, and the plugin .pm is not listed in
# the MANIFEST file, this will mean that the .pm will not be copied
# during "make dist". This causes failures during "make disttest",
@@ -439,12 +490,6 @@
}
}

- unless ($rules->{$name}) {
- $rules->{$name} = rule_entry_create();
- $rules->{$name}->{issandbox} = $issandbox;
- $rules->{$name}->{iscommand} = 1;
- }
-
$rules->{$name}->{text} .= $orig;
unshift (@$rule_order, $name);
}
@@ -532,30 +577,42 @@
$is_active++;
}

- $output_files->{$pubfile} = {
- header => $default_file_header
- };
-
# fix up any rule renamings we were supposed to do
sed_renamed_rule_names(\$text);

my $cond = $rules->{$name}->{cond};
- if ($cond) {
- $rules->{$name}->{output_text} = "\n".$cond.$text."endif\n";
+ my $pluginclass = $rules->{$name}->{ifplugin};
+ if ($cond)
+ {
+ my $ifplugin_text_name = "loadplugin_".($pluginclass || "");

- # also, if the rule is active, ensure its "loadplugin" line
- # is copied to the active output file, too
- my $pluginclass = $rules->{$name}->{ifplugin};
- if ($is_active && $pluginclass) {
- my $ifplugin_text_name = "loadplugin_".$pluginclass;
+ if ($pluginclass && $rules->{$ifplugin_text_name})
+ {
+ # if the plugin is a sandbox plugin, ensure it's not
+ # sent to the active file
+ if ($rules->{$ifplugin_text_name}->{sandbox_plugin}) {
+ $pubfile = $opt_out.'/'.$opt_sandboxout;
+ $is_active = 0;
+ }
+
+ # either way, ensure the "loadplugin" line, if there is one,
+ # goes to the same file
$rules->{$ifplugin_text_name}->{output_file} = $pubfile;
}

+ $rules->{$name}->{output_text} = "\n".$cond.$text."endif\n";
+
} else {
$rules->{$name}->{output_text} = $text;
}
+
+ # note the target file
$rules->{$name}->{output_file} = $pubfile;

+ $output_files->{$pubfile} = {
+ header => $default_file_header
+ };
+
if ($is_active) {
$copied_active++;
} else {
@@ -772,6 +829,10 @@
}
else {
print "$pubfile: no rules promoted\n";
+
+ # create an empty file anyway to satisfy MANIFEST
+ open (OUT, ">".$pubfile) or die "cannot write to output file '$pubfile'";
+ close OUT or die "cannot close output file '$pubfile'";
}
}
}
@@ -883,14 +944,15 @@
# See 'perldoc Mail::SpamAssassin::Conf' for details.
#
# <@LICENSE>
-# Copyright 2004 Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to you under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at:
+#
# http://www.apache.org/licenses/LICENSE-2.0
-#
+#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

Modified: spamassassin/branches/jm_re2c_hacks/build/preprocessor
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/build/preprocessor?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/build/preprocessor (original)
+++ spamassassin/branches/jm_re2c_hacks/build/preprocessor Fri Oct 6 05:46:56 2006
@@ -1,13 +1,14 @@
#!/usr/bin/perl
# <@LICENSE>
-# Copyright 2004 Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to you under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at:
+#
# http://www.apache.org/licenses/LICENSE-2.0
-#
+#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

Modified: spamassassin/branches/jm_re2c_hacks/build/replace_license_blocks
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/build/replace_license_blocks?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/build/replace_license_blocks (original)
+++ spamassassin/branches/jm_re2c_hacks/build/replace_license_blocks Fri Oct 6 05:46:56 2006
@@ -1,4 +1,4 @@
-#!/usr/bin/perl -i.bak
+#!/usr/bin/perl -i
#
# build/replace_license_blocks file ...
#
@@ -10,6 +10,12 @@
# * <@LICENSE>
#
# will result in all lines of the license text being prefixed with " * ".
+#
+# do something like the following:
+# - create a "newlicense" file with the license text as appropriate
+# - run something like:
+# grep -rl @LICENSE * | egrep -v 'replace_license_blocks|\.svn' | xargs build/replace_license_blocks
+#

# read the new license text; die if not available
open (IN, "<newlicense") or die "cannot read 'newlicense'";
@@ -43,9 +49,14 @@

sub license_with_prefix {
my $prefix = shift;
+
+ # if the prefix is "/*" replace with " *"
+ my $orig = $prefix;
+ $prefix =~ s@^(\s*)/\*(.*)$@$1 *$2@;
+
my $text = $license; $text =~ s/^/$prefix/gm;

- return $prefix."<\@LICENSE>\n".
+ return $orig."<\@LICENSE>\n".
$text.
$prefix."</\@LICENSE>\n";
}

Modified: spamassassin/branches/jm_re2c_hacks/contrib/mbox-to-check
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/contrib/mbox-to-check?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/contrib/mbox-to-check (original)
+++ spamassassin/branches/jm_re2c_hacks/contrib/mbox-to-check Fri Oct 6 05:46:56 2006
@@ -2,14 +2,15 @@
use strict;

# <@LICENSE>
-# Copyright 2004 Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to you under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at:
+#
# http://www.apache.org/licenses/LICENSE-2.0
-#
+#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

Modified: spamassassin/branches/jm_re2c_hacks/contrib/run-corpora
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/contrib/run-corpora?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/contrib/run-corpora (original)
+++ spamassassin/branches/jm_re2c_hacks/contrib/run-corpora Fri Oct 6 05:46:56 2006
@@ -1,14 +1,15 @@
#!/bin/sh

# <@LICENSE>
-# Copyright 2004 Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to you under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at:
#
# http://www.apache.org/licenses/LICENSE-2.0
-#
+#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

Modified: spamassassin/branches/jm_re2c_hacks/contrib/run-masses
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/contrib/run-masses?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/contrib/run-masses (original)
+++ spamassassin/branches/jm_re2c_hacks/contrib/run-masses Fri Oct 6 05:46:56 2006
@@ -1,14 +1,15 @@
#!/bin/sh

# <@LICENSE>
-# Copyright 2004 Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to you under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at:
+#
# http://www.apache.org/licenses/LICENSE-2.0
-#
+#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

Modified: spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin.pm
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin.pm?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin.pm (original)
+++ spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin.pm Fri Oct 6 05:46:56 2006
@@ -1,9 +1,10 @@
# <@LICENSE>
-# Copyright 2004 Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to you under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at:
#
# http://www.apache.org/licenses/LICENSE-2.0
#
@@ -212,6 +213,11 @@
override the settings for C<rules_filename>, C<site_rules_filename>,
and C<userprefs_filename>.

+=item post_config_text
+
+Similar to C<config_text>, this text is placed after config_text to allow an
+override of config files.
+
=item force_ipv4

If set to 1, DNS tests will not attempt to use IPv6. Use if the existing tests
@@ -395,6 +401,12 @@
my($self, $message, $parsenow) = @_;
$self->init(1);
my $msg = Mail::SpamAssassin::Message->new({message=>$message, parsenow=>$parsenow, normalize=>$self->{conf}->{normalize_charset}});
+
+ # bug 5069: The goal here is to get rendering plugins to do things
+ # like OCR, convert doc and pdf to text, etc, though it could be anything
+ # that wants to process the message after it's been parsed.
+ $self->call_plugins("post_message_parse", { message => $msg });
+
return $msg;
}

@@ -1291,6 +1303,10 @@

$self->{dont_copy_prefs} = $olddcp; # revert back to previous

+ # bug 5048: override settings to ensure a faster lint
+ $self->{'conf'}->{'use_auto_whitelist'} = 0;
+ $self->{'conf'}->{'bayes_auto_learn'} = 0;
+
my $mail = $self->parse(\@testmsg, 1);
my $status = Mail::SpamAssassin::PerMsgStatus->new($self, $mail,
{ disable_auto_learning => 1 } );
@@ -1327,9 +1343,7 @@

$self->{resolver}->finish();

- foreach(keys %{$self}) {
- delete $self->{$_};
- }
+ %{$self} = ();
}

###########################################################################
@@ -1360,8 +1374,6 @@
if (!defined $self->{config_text}) {
$self->{config_text} = '';

- my $fname;
-
# read a file called "init.pre" in site rules dir *before* all others;
# even the system config.
my $siterules = $self->{site_rules_filename};
@@ -1384,25 +1396,23 @@
warn "config: could not find sys rules directory\n";
}

- $fname = $sysrules;
- if ($fname) {
- $self->{config_text} .= $self->read_cf ($fname, 'default rules dir');
+ if ($sysrules) {
+ $self->{config_text} .= $self->read_cf ($sysrules, 'default rules dir');
}

if (!$self->{languages_filename}) {
$self->{languages_filename} = $self->find_rule_support_file("languages");
}

- $fname = $siterules;
- if ($fname) {
- $self->{config_text} .= $self->read_cf ($fname, 'site rules dir');
+ if ($siterules) {
+ $self->{config_text} .= $self->read_cf ($siterules, 'site rules dir');
}

if ( $use_user_pref != 0 ) {
$self->get_and_create_userstate_dir();

# user prefs file
- $fname = $self->{userprefs_filename};
+ my $fname = $self->{userprefs_filename};
$fname ||= $self->first_existing_path (@default_userprefs_path);

if (!$self->{dont_copy_prefs}) {
@@ -1418,6 +1428,8 @@
$self->{config_text} .= $self->read_cf ($fname, 'user prefs file');
}
}
+
+ $self->{config_text} .= $self->{post_config_text} if ($self->{post_config_text});

if ($self->{config_text} !~ /\S/) {
warn "config: no configuration text or files found! please check your setup\n";

Modified: spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/AICache.pm
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/AICache.pm?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/AICache.pm (original)
+++ spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/AICache.pm Fri Oct 6 05:46:56 2006
@@ -1,9 +1,10 @@
# <@LICENSE>
-# Copyright 2004 Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to you under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at:
#
# http://www.apache.org/licenses/LICENSE-2.0
#

Modified: spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/ArchiveIterator.pm
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/ArchiveIterator.pm?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/ArchiveIterator.pm (original)
+++ spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/ArchiveIterator.pm Fri Oct 6 05:46:56 2006
@@ -1,11 +1,12 @@
# iterate over mail archives, calling a function on each message.
#
# <@LICENSE>
-# Copyright 2004 Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to you under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at:
#
# http://www.apache.org/licenses/LICENSE-2.0
#
@@ -22,8 +23,6 @@
use warnings;
use bytes;

-use IO::Select;
-use IO::Socket;
use Mail::SpamAssassin::Util;
use Mail::SpamAssassin::Constants qw(:sa);
use Mail::SpamAssassin::Logger;
@@ -35,9 +34,10 @@
use vars qw {
$MESSAGES
$AICache
+ @ISA
};

-my @ISA = qw($MESSAGES);
+@ISA = qw();

=head1 NAME

@@ -47,7 +47,6 @@

my $iter = new Mail::SpamAssassin::ArchiveIterator(
{
- 'opt_j' => 0,
'opt_n' => 1,
'opt_all' => 1,
'opt_cache' => 1,
@@ -94,31 +93,6 @@
Typically messages over 250k are skipped by ArchiveIterator. Use this option
to keep from skipping messages based on size.

-=item opt_j (required)
-
-Specifies how many messages should be run at the same time, as well as the
-method with which to scan for the messages.
-
-If the value is 0, the list of messages to process will be kept in memory,
-and only 1 message at a time will be processed by the wanted subroutine.
-Restarting is not allowed.
-
-If the value is 1, the list of messages to process will be kept in a
-temporary file, and only 1 message at a time will be processed by the
-wanted subroutine. Restarting is not allowed.
-
-If the value is 2 or higher, the list of messages to process will be kept
-in a temporary file, and the process will split into a parent/child mode.
-The option value number of children will be forked off and each child
-will process messages via the wanted subroutine in parallel. Restarting
-is allowed.
-
-B<NOTE:> For C<opt_j> >= 1, an extra child process will be created to
-determine the list of messages, sort the list, everything as appropriate.
-This will keep the list in memory (possibly multiple copies) before
-writing the final list to a temporary file which will be used for
-processing. The list generation child will exit, freeing up the memory.
-
=item opt_n

ArchiveIterator is typically used to simulate ham and spam moving through
@@ -127,12 +101,6 @@
will not occur. This is useful if you don't care about the order of the
messages.

-=item opt_restart
-
-If set to a positive integer value, children processes (see opt_j w/ value 2
-or higher above) will restart after the option value number of messages, in
-total, have been processed.
-
=item opt_head

Only use the first N ham and N spam (or if the value is -N, only use the first
@@ -245,8 +213,8 @@

sub set_functions {
my ($self, $wanted, $result) = @_;
- $self->{wanted_sub} = $wanted;
- $self->{result_sub} = $result;
+ $self->{wanted_sub} = $wanted if defined $wanted;
+ $self->{result_sub} = $result if defined $result;
}

###########################################################################
@@ -302,151 +270,22 @@
return 0;
}

- # non-forking model (generally sa-learn), everything in a single process
- if ($self->{opt_j} < 2) {
- my $messages;
-
- # message-array
- ($MESSAGES, $messages) = $self->message_array(\@targets);
-
- while (my $message = shift @{$messages}) {
- my($class, undef, $date, undef, $result) = $self->run_message($message);
- &{$self->{result_sub}}($class, $result, $date) if $result;
- }
- }
- # forking model (generally mass-check), avoid extended memory usage
- else {
- my $tmpf;
- ($tmpf, $self->{messageh}) = Mail::SpamAssassin::Util::secure_tmpfile()
- or die 'archive-iterator: failed to create temp file';
- unlink $tmpf or die "archive-iterator: unlink '$tmpf': $!";
- undef $tmpf;
-
- # forked child process scans messages
- if ($tmpf = fork()) {
- # parent
- waitpid($tmpf, 0);
- }
- elsif (defined $tmpf) {
- # child
- $self->message_array(\@targets, $self->{messageh});
- exit;
- }
- else {
- die "archive-iterator: cannot fork: $!";
- }
-
- # we now have a temporary file with the messages to process
- # in theory, our file pointer is at the start of the file, but make sure.
- # NOTE: do this here, not in message_array, since that will only affect
- # the child.
- seek($self->{messageh}, 0, 0);
- $MESSAGES = $self->next_message();
-
- if (!$MESSAGES) {
- die "archive-iterator: no messages to process\n";
- }
- # only do 1 process, message list in a temp file, no restarting
- if ($self->{opt_j} == 1 && !defined $self->{opt_restart}) {
- my $message;
- my $messages;
- my $total_count = 0;
-
- while (($MESSAGES > $total_count) && ($message = $self->next_message())) {
- my($class, undef, $date, undef, $result) = $self->run_message($message);
- &{$self->{result_sub}}($class, $result, $date) if $result;
- $total_count++;
- }
- }
- # more than one process or one process with restarts
- else {
- my $select = IO::Select->new();
-
- my $total_count = 0;
- my $needs_restart = 0;
- my @child = ();
- my @pid = ();
- my $messages;
-
- # start children processes
- $self->start_children($self->{opt_j}, \@child, \@pid, $select);
-
- # feed childen, make them work for it, repeat
- while ($select->count()) {
- foreach my $socket ($select->can_read()) {
- my $line = $self->read_line($socket);
-
- # some error happened during the read!
- if (!defined $line) {
- $needs_restart = 1;
- warn "archive-iterator: readline failed, attempting to recover\n";
- $select->remove($socket);
- }
- elsif ($line =~ /^([^\0]+)\0RESULT (.+)$/s) {
- my $result = $1;
- my ($date,$class,$type) = index_unpack($2);
- #warn ">> RESULT: $class, $type, $date\n";
-
- if (defined $self->{opt_restart} && ($total_count % $self->{opt_restart}) == 0) {
- $needs_restart = 1;
- }
-
- # if messages remain, and we don't need to restart, send message
- if (($MESSAGES > $total_count) && !$needs_restart) {
- $self->send_line($socket, $self->next_message());
- $total_count++;
- #warn ">> recv: $MESSAGES $total_count\n";
- }
- else {
- # stop listening on this child since we're done with it
- #warn ">> removeresult: $needs_restart $MESSAGES $total_count\n";
- $select->remove($socket);
- }
-
- # deal with the result we received
- if ($result) {
- &{$self->{result_sub}}($class, $result, $date);
- }
- }
- elsif ($line eq "START") {
- if ($MESSAGES > $total_count) {
- # we still have messages, send one to child
- $self->send_line($socket, $self->next_message());
- $total_count++;
- #warn ">> new: $MESSAGES $total_count\n";
- }
- else {
- # no more messages, so stop listening on this child
- #warn ">> removestart: $needs_restart $MESSAGES $total_count\n";
- $select->remove($socket);
- }
- }
- }
+ my $messages;

- #warn ">> out of loop, $MESSAGES $total_count $needs_restart ".$select->count()."\n";
+ # scan the targets and get the number and list of messages
+ ($MESSAGES, $messages) = $self->message_array(\@targets);

- # If there are still messages to process, and we need to restart
- # the children, and all of the children are idle, let's go ahead.
- if ($needs_restart && $select->count == 0 && $MESSAGES > $total_count)
- {
- $needs_restart = 0;
-
- #warn "debug: needs restart, $MESSAGES total, $total_count done\n";
- $self->reap_children($self->{opt_j}, \@child, \@pid);
- @child=();
- @pid=();
- $self->start_children($self->{opt_j}, \@child, \@pid, $select);
- }
- }
+ # go ahead and run through all of the messages specified
+ return $self->_run($messages);
+}

- # reap children
- $self->reap_children($self->{opt_j}, \@child, \@pid);
- }
+sub _run {
+ my ($self, $messages) = @_;

- # close tempfile so it will be unlinked
- close($self->{messageh});
+ while (my $message = shift @{$messages}) {
+ my($class, undef, $date, undef, $result) = $self->run_message($message);
+ &{$self->{result_sub}}($class, $result, $date) if $result;
}
-
return ! $self->{access_problem};
}

@@ -576,136 +415,12 @@

############################################################################

-## figure out the next message to process, used when opt_j >= 1
-
-sub next_message {
- my ($self) = @_;
- my $line = $self->read_line($self->{messageh});
- return $line;
-}
-
-############################################################################
-
-## children processors, start and process, used when opt_j > 1
-
-sub start_children {
- my ($self, $count, $child, $pid, $socket) = @_;
-
- my $io = IO::Socket->new();
- my $parent;
-
- # create children
- for (my $i = 0; $i < $count; $i++) {
- ($child->[$i],$parent) = $io->socketpair(AF_UNIX,SOCK_STREAM,PF_UNSPEC)
- or die "archive-iterator: socketpair failed: $!";
- if ($pid->[$i] = fork) {
- close $parent;
-
- # disable caching for parent<->child relations
- my ($old) = select($child->[$i]);
- $|++;
- select($old);
-
- $socket->add($child->[$i]);
- #warn "debug: starting new child $i (pid ",$pid->[$i],")\n";
- next;
- }
- elsif (defined $pid->[$i]) {
- my $result;
- my $line;
-
- close $self->{messageh} if defined $self->{messageh};
-
- close $child->[$i];
- select($parent);
- $| = 1; # print to parent by default, turn off buffering
- $self->send_line($parent,"START");
- while ($line = $self->read_line($parent)) {
- if ($line eq "exit") {
- close $parent;
- exit;
- }
-
- my($class, $format, $date, $where, $result) = $self->run_message($line);
- $result ||= '';
-
- # If determine_receive_date is not set, the original input date
- # wasn't calculated, but run_message would have done so, so reset
- # the packed version if possible ... use defined for date since
- # it could == 0.
- if (!$self->{determine_receive_date} && $class && $format && defined $date && $where) {
- $line = index_pack($date, $class, $format, $where);
- }
-
- $self->send_line($parent,"$result\0RESULT $line");
- }
- exit;
- }
- else {
- die "archive-iterator: cannot fork: $!";
- }
- }
-}
-
-## handling killing off the children
-
-sub reap_children {
- my ($self, $count, $socket, $pid) = @_;
-
- # If the child died, sending it the exit will generate a SIGPIPE, but we
- # don't really care since the readline will go undef (which is fine),
- # then we do the waitpid which will finish it off. So we end up in the
- # right state, in theory.
- local $SIG{'PIPE'} = 'IGNORE';
-
- for (my $i = 0; $i < $count; $i++) {
- #warn "debug: killing child $i (pid ",$pid->[$i],")\n";
- $self->send_line($socket->[$i],"exit"); # tell the child to die.
- close $socket->[$i];
- waitpid($pid->[$i], 0); # wait for the signal ...
- }
-}
-
-############################################################################
-
-# four bytes in network/vax format (little endian) as length of message
-# the rest is the actual message
-
-sub read_line {
- my($self, $fd) = @_;
- my($length,$msg);
-
- # read in the 4 byte length and unpack
- sysread($fd, $length, 4);
- $length = unpack("V", $length);
-# warn "<< $$ $length\n";
- return unless $length;
-
- # read in the rest of the single message
- sysread($fd, $msg, $length);
-# warn "<< $$ $msg\n";
- return $msg;
-}
-
-sub send_line {
- my $self = shift;
- my $fd = shift;
-
- foreach ( @_ ) {
- my $length = pack("V", length $_);
-# warn ">> $$ ".length($_)." $_\n";
- syswrite($fd, $length . $_);
- }
-}
-
-############################################################################
-
## FUNCTIONS BELOW THIS POINT ARE FOR FINDING THE MESSAGES TO RUN AGAINST

############################################################################

sub message_array {
- my ($self, $targets, $fh) = @_;
+ my ($self, $targets) = @_;

foreach my $target (@${targets}) {
if (!defined $target) {
@@ -829,12 +544,6 @@
splice(@messages, -$self->{opt_head});
}

- # Dump out the messages to the temp file if we're using one
- if (defined $fh) {
- $self->send_line($fh, scalar(@messages), @messages);
- return;
- }
-
return scalar(@messages), \@messages;
}

@@ -917,7 +626,8 @@
@files = grep { -f } map { "$folder/$_" } @files;

if (!@files) {
- warn "archive-iterator: readdir found no mail in '$folder' directory\n";
+ # this is not a problem; no need to warn about it
+ # warn "archive-iterator: readdir found no mail in '$folder' directory\n";
return;
}

@@ -1139,7 +849,7 @@
}

$self->bump_scan_progress();
- $info->{"$file.$offset"} = Mail::SpamAssassin::Util::receive_date($header);
+ $info->{$offset} = Mail::SpamAssassin::Util::receive_date($header);

# go onto the next message
seek(INPUT, $offset + $size, 0);

Modified: spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/AsyncLoop.pm
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/AsyncLoop.pm?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/AsyncLoop.pm (original)
+++ spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/AsyncLoop.pm Fri Oct 6 05:46:56 2006
@@ -1,9 +1,10 @@
# <@LICENSE>
-# Copyright 2004 Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to you under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at:
#
# http://www.apache.org/licenses/LICENSE-2.0
#

Modified: spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/AutoWhitelist.pm
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/AutoWhitelist.pm?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/AutoWhitelist.pm (original)
+++ spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/AutoWhitelist.pm Fri Oct 6 05:46:56 2006
@@ -1,9 +1,10 @@
# <@LICENSE>
-# Copyright 2004 Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to you under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at:
#
# http://www.apache.org/licenses/LICENSE-2.0
#

Modified: spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Bayes.pm
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Bayes.pm?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Bayes.pm (original)
+++ spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Bayes.pm Fri Oct 6 05:46:56 2006
@@ -1,9 +1,10 @@
# <@LICENSE>
-# Copyright 2004 Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to you under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at:
#
# http://www.apache.org/licenses/LICENSE-2.0
#
@@ -262,7 +263,7 @@
# use Carp qw(cluck); cluck "stack trace at untie";

$self->{store}->untie_db();
- delete $self->{store};
+ %{$self} = ();
}

sub sa_die { Mail::SpamAssassin::sa_die(@_); }

Modified: spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Bayes/CombineChi.pm
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Bayes/CombineChi.pm?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Bayes/CombineChi.pm (original)
+++ spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Bayes/CombineChi.pm Fri Oct 6 05:46:56 2006
@@ -1,11 +1,12 @@
# Chi-square probability combining and related constants.
#
# <@LICENSE>
-# Copyright 2004 Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to you under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at:
#
# http://www.apache.org/licenses/LICENSE-2.0
#

Modified: spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Bayes/CombineNaiveBayes.pm
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Bayes/CombineNaiveBayes.pm?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Bayes/CombineNaiveBayes.pm (original)
+++ spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Bayes/CombineNaiveBayes.pm Fri Oct 6 05:46:56 2006
@@ -1,11 +1,12 @@
# Naive-Bayesian-style probability combining and related constants.
#
# <@LICENSE>
-# Copyright 2004 Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to you under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at:
#
# http://www.apache.org/licenses/LICENSE-2.0
#

Modified: spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/BayesStore.pm
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/BayesStore.pm?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/BayesStore.pm (original)
+++ spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/BayesStore.pm Fri Oct 6 05:46:56 2006
@@ -1,9 +1,10 @@
# <@LICENSE>
-# Copyright 2004 Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to you under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at:
#
# http://www.apache.org/licenses/LICENSE-2.0
#

Modified: spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/BayesStore/DBM.pm
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/BayesStore/DBM.pm?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/BayesStore/DBM.pm (original)
+++ spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/BayesStore/DBM.pm Fri Oct 6 05:46:56 2006
@@ -1,9 +1,10 @@
# <@LICENSE>
-# Copyright 2004 Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to you under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at:
#
# http://www.apache.org/licenses/LICENSE-2.0
#

Modified: spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/BayesStore/MySQL.pm
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/BayesStore/MySQL.pm?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/BayesStore/MySQL.pm (original)
+++ spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/BayesStore/MySQL.pm Fri Oct 6 05:46:56 2006
@@ -1,9 +1,10 @@
# <@LICENSE>
-# Copyright 2004 Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to you under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at:
#
# http://www.apache.org/licenses/LICENSE-2.0
#

Modified: spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/BayesStore/PgSQL.pm
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/BayesStore/PgSQL.pm?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/BayesStore/PgSQL.pm (original)
+++ spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/BayesStore/PgSQL.pm Fri Oct 6 05:46:56 2006
@@ -1,9 +1,10 @@
# <@LICENSE>
-# Copyright 2004 Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to you under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at:
#
# http://www.apache.org/licenses/LICENSE-2.0
#

Modified: spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/BayesStore/SDBM.pm
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/BayesStore/SDBM.pm?view=diff&rev=453586&r1=453585&r2=453586
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/BayesStore/SDBM.pm (original)
+++ spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/BayesStore/SDBM.pm Fri Oct 6 05:46:56 2006
@@ -1,9 +1,10 @@
# <@LICENSE>
-# Copyright 2004 Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to you under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at:
#
# http://www.apache.org/licenses/LICENSE-2.0
#