# SpamAssassin rules file: spam and ham shortcircuiting using priorities
#
# Please don't modify this file as your changes will be overwritten with
# the next update. Use /etc/mail/spamassassin/local.cf instead.
# See 'perldoc Mail::SpamAssassin::Conf' for details.
#
# <@LICENSE>
# 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.
# See the License for the specific language governing permissions and
# limitations under the License.
# </@LICENSE>

# SpamAssassin tries hard not to launch DNS queries before priority -100. 
# If you want to shortcircuit without launching unneeded queries, make sure
# such rule priority is below -100.

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

priority USER_IN_WELCOMELIST     -1000
priority USER_IN_WHITELIST       -1000
priority USER_IN_DEF_WELCOMELIST -1000
priority USER_IN_DEF_WHITELIST   -1000
priority USER_IN_ALL_SPAM_TO     -1000

priority ALL_TRUSTED             -950

priority USER_IN_BLOCKLIST_TO    -900
priority USER_IN_BLOCKLIST       -900
priority USER_IN_BLACKLIST_TO    -900
priority USER_IN_BLACKLIST       -900

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

ifplugin Mail::SpamAssassin::Plugin::Shortcircuit

# override the default X-Spam-Status line from 10_basic.cf to
# include shortcircuit info.  (TODO: do we need a better way
# to extend the default templates like this?)
add_header all Status "_YESNO_, score=_SCORE_ required=_REQD_ tests=_TESTS_ shortcircuit=_SCTYPE_ autolearn=_AUTOLEARN_ version=_VERSION_"

header SHORTCIRCUIT             eval:check_shortcircuit()
describe SHORTCIRCUIT           Not all rules were run, due to a shortcircuited rule
tflags SHORTCIRCUIT             userconf noautolearn

endif # Mail::SpamAssassin::Plugin::Shortcircuit

