You need to use a supported release of PostgreSQL, versions >= 8.2.x. It should
work fine then.

Cheers,
Ken

On Sun, Feb 06, 2011 at 11:19:13PM +0800, P.V.Anthony wrote:
> Hi,
> 
> I am currently stuck. I just do not know how to get dspam to work with
> Postgres Database. I am assuming that Postgres is the problem.
> 
> What is the minimum PostgreSQL version required?
> 
> Below are the enviroment details and the debug information.
> 
> Please share same advice.
> 
> P.V.Anthony
> 
> Trying to use dspam in the following enviroment.
> 
> 1. Gentoo 64bit
> 2. gcc version 3.4.6
> 3. PostgreSQL version 8.0.15
> 4. qmail
> 5. vpopmail
> 6. maildrop
> 
> The output from dspam --version
> ------------- start --------------------
> mailServer dspam-3.9.1-RC1 # dspam --version
> 
> DSPAM Anti-Spam Suite 3.9.1 (agent/library)
> 
> Copyright (c) 2002-2010 DSPAM Project
> http://dspam.sourceforge.net.
> 
> DSPAM may be copied only under the terms of the GNU General Public License,
> a copy of which can be found with the DSPAM distribution kit.
> 
> Configuration parameters:  '--with-pic' '--enable-daemon'
> '--enable-preferences-extension' '--enable-long-usernames'
> '--enable-domain-scale' '--enable-virtual-users' '--enable-debug'
> '--with-dspam-home=/home/dspam' '--with-dspam-home-mode=770'
> '--with-dspam-home-owner=root' '--with-dspam-home-group=vpopmail'
> '--with-dspam-mode=2510' '--with-dspam-owner=vpopmail'
> '--with-dspam-group=vpopmail' '--with-storage-driver=pgsql_drv'
> -------------- end -----------------------------
> 
> error messages from dspam.debug
> --------------- start -------------------------
> 18734: [02/06/2011 22:24:30] No QuarantineAgent option found. Using
> standard quarantine.
> 18734: [02/06/2011 22:24:30] DSPAM Instance Startup
> 18734: [02/06/2011 22:24:30] input args: /usr/local/bin/dspam --debug
> --deliver=innocent,spam --user anth...@domain.com --stdout
> 18734: [02/06/2011 22:24:30] pass-thru args:
> 18734: [02/06/2011 22:24:30] processing user anth...@domain.com
> 18734: [02/06/2011 22:24:30] uid = 89, euid = 89, gid = 89, egid = 89
> 18734: [02/06/2011 22:24:30] loading preferences for user anth...@domain.com
> 18734: [02/06/2011 22:24:30] _pgsql_drv_init_tools: Bailing and
> returning NULL!
> 18734: [02/06/2011 22:24:30] _pgsql_drv_init_tools: Bailing and
> returning NULL!
> 18734: [02/06/2011 22:24:30] _pgsql_drv_init_tools: Bailing and
> returning NULL!
> 18734: [02/06/2011 22:24:30] default preferences empty. reverting to
> dspam.conf preferences.
> 18734: [02/06/2011 22:24:30] Loading preferences from dspam.conf
> 18734: [02/06/2011 22:24:30] using
> /home/dspam/opt-in/domain.com/anthony.dspam as path
> 18734: [02/06/2011 22:24:30] using
> /home/dspam/opt-out/domain.com/anthony.nodspam as path
> 18734: [02/06/2011 22:24:30] DSPAM Instance Shutdown.  Exit Code: 0
> 
> ---------------- end --------------------------
> 
> 
> error messages from sql.errors
> ----------------- start --------------------------
> [02/06/2011 22:24:30] 18734: ERROR:  type "e" does not exist
> : SELECT coalesce(substring(split_part(split_part(version(),'
> ',2),'.',1) FROM E'\\d+')::int2,0)
> [02/06/2011 22:24:30] 18734: ERROR:  type "e" does not exist
> : SELECT coalesce(substring(split_part(split_part(version(),'
> ',2),'.',2) FROM E'\\d+')::int2,0)
> [02/06/2011 22:24:30] 18734: ERROR:  type "e" does not exist
> : SELECT coalesce(substring(split_part(split_part(version(),'
> ',2),'.',3) FROM E'\\d+')::int2,0)
> [02/06/2011 22:24:30] 18734: ERROR:  type "e" does not exist
> : SELECT coalesce(substring(split_part(split_part(version(),'
> ',2),'.',1) FROM E'\\d+')::int2,0)
> [02/06/2011 22:24:30] 18734: ERROR:  type "e" does not exist
> : SELECT coalesce(substring(split_part(split_part(version(),'
> ',2),'.',2) FROM E'\\d+')::int2,0)
> [02/06/2011 22:24:30] 18734: ERROR:  type "e" does not exist
> : SELECT coalesce(substring(split_part(split_part(version(),'
> ',2),'.',3) FROM E'\\d+')::int2,0)
> [02/06/2011 22:24:30] 18734: ERROR:  type "e" does not exist
> : SELECT coalesce(substring(split_part(split_part(version(),'
> ',2),'.',1) FROM E'\\d+')::int2,0)
> [02/06/2011 22:24:30] 18734: ERROR:  type "e" does not exist
> : SELECT coalesce(substring(split_part(split_part(version(),'
> ',2),'.',2) FROM E'\\d+')::int2,0)
> [02/06/2011 22:24:30] 18734: ERROR:  type "e" does not exist
> : SELECT coalesce(substring(split_part(split_part(version(),'
> ',2),'.',3) FROM E'\\d+')::int2,0)
> ------------------ end ---------------------------
> 
> dspam.conf
> --------------------- start ----------------------------
> ## $Id: dspam.conf.in,v 1.96 2010/04/17 14:39:49 sbajic Exp $
> ## dspam.conf -- DSPAM configuration file
> ##
> 
> #
> # DSPAM Home: Specifies the base directory to be used for DSPAM storage
> #
> Home /home/dspam
> 
> #
> # StorageDriver: Specifies the storage driver backend (library) to use.
> # You'll only need to set this if you are using dynamic storage driver
> plugins
> # from a binary distribution. The default build statically links the storage
> # driver (when only one is specified at configure time), overriding this
> # setting, which only comes into play if multiple storage drivers are
> specified
> # at configure time. When using dynamic linking, be sure to include the
> path
> # to the library if necessary, and some systems may use an extension other
> # than .so (e.g. OSX uses .dylib).
> #
> # Options include:
> #
> #   libmysql_drv.so     libpgsql_drv.so   libsqlite_drv.so
> #   libsqlite3_drv.so   libhash_drv.so
> #
> # IMPORTANT: Switching storage drivers requires more than merely changing
> # this option. If you do not wish to lose all of your data, you will need to
> # migrate it to the new backend before making this change.
> #
> StorageDriver /usr/local/lib/dspam/libpgsql_drv.so
> 
> #
> # Trusted Delivery Agent: Specifies the local delivery agent DSPAM
> should call
> # when delivering mail as a trusted user. Use %u to specify the user
> DSPAM is
> # processing mail for. It is generally a good idea to allow the MTA to
> specify
> # the pass-through arguments at run-time, but they may also be specified
> here.
> #
> # Most operating system defaults:
> #TrustedDeliveryAgent "/usr/bin/procmail"       # Linux
> #TrustedDeliveryAgent "/usr/bin/mail"           # Solaris
> #TrustedDeliveryAgent "/usr/libexec/mail.local" # FreeBSD
> #TrustedDeliveryAgent "/usr/bin/procmail"       # Cygwin
> #
> # Other popular configurations:
> #TrustedDeliveryAgent "/usr/cyrus/bin/deliver"        # Cyrus
> #TrustedDeliveryAgent "/bin/maildrop"         # Maildrop
> #TrustedDeliveryAgent "/usr/local/sbin/exim -oMr spam-scanned" # Exim
> #
> #TrustedDeliveryAgent "/usr/bin/procmail"
> 
> #
> # Untrusted Delivery Agent: Specifies the local delivery agent and arguments
> # DSPAM should use when delivering mail and running in untrusted user mode.
> # Because DSPAM will not allow pass-through arguments to be specified to
> # untrusted users, all arguments should be specified here. Use %u to specify
> # the user DSPAM is processing mail for. This configuration parameter is
> only
> # necessary if you plan on allowing untrusted processing.
> #
> #UntrustedDeliveryAgent "/usr/bin/procmail -d %u"
> 
> #
> # SMTP or LMTP Delivery: Alternatively, you may wish to use SMTP or LMTP
> # delivery to deliver your message to the mail server instead of using a
> # delivery agent. You will need to configure with --enable-daemon to use
> host
> # delivery, however you do not need to operate in daemon mode. Specify
> an IP
> # address or UNIX path to a domain socket below as a host.
> #
> # If you would like to set up DeliveryHost's on a per-domain basis, use
> # the syntax: DeliveryHost.domain.com 1.2.3.4
> #
> #DeliveryHost         127.0.0.1
> #DeliveryPort         24
> #DeliveryIdent                localhost
> #DeliveryProto                LMTP
> 
> #
> # FallbackDomains: If you want to specify certain domains as fallback
> domains,
> # enable this option. For example, you could create a user @domain.com, and
> # if b...@domain.com does not resolve to a known user on the system, the user
> # could default to your @domain.com user. NOTE: This also requires
> designating
> # fallbackDomain for the domain name;
> # e.g. dspam_admin ch pref domain.com fallbackDomain on
> #
> #FallbackDomains on
> 
> #
> # Quarantine Agent: DSPAM's default behavior is to quarantine all mail it
> # thinks is spam. If you wish to override this behavior, you may specify
> # a quarantine agent which will be called with all messages DSPAM thinks is
> # spam. Use %u to specify the user DSPAM is processing mail for.
> #
> #QuarantineAgent      "/usr/bin/procmail -d spam"
> 
> #
> # DSPAM can optionally process "plused users" (addresses in the user+detail
> # form) by truncating the username just before the "+", so all internal
> # processing occurs for "user", but delivery will be performed for
> # "user+detail". This is only useful if the LDA can handle "plused users"
> # (for example Cyrus IMAP) and when configured for LMTP delivery above
> #
> #EnablePlusedDetail   on
> 
> #
> # Character to use as seperator between user names and address extensions.
> # If you change this value then please adjust QuarantineMailbox to use the
> # new specified character. The default is '+'.
> #
> #PlusedCharacter      +
> 
> #
> # Turn this feature on if you want to force DSPAM to lowercase the "plused
> # users" username.
> #
> #PlusedUserLowercase  on
> 
> #
> # Quarantine Mailbox: DSPAM's LMTP code can send spam mail using LMTP to a
> # "plused" mailbox (such as user+quarantine) leaving quarantine processing
> # for retraining or deletion to be performed by the LDA and the mail client.
> # "plused" mailboxes are supported by Cyrus IMAP and possibly other LDAs. If
> # you don't set/change PlusedCharacter then the mailbox name must have the +
> # since the + is the default used character.
> #
> #QuarantineMailbox    +quarantine
> 
> #
> # OnFail: What to do if local delivery or quarantine should fail. If set
> # to "unlearn", DSPAM will unlearn the message prior to exiting with an
> # un successful return code. The default option, "error" will not unlearn
> # the message but return the appropriate error code. The unlearn option
> # is use-ful on some systems where local delivery failures will cause the
> # message to be requeued for delivery, and could result in the message
> # being processed multiple times. During a very large failure, however,
> # this could cause a significant load increase.
> #
> OnFail error
> 
> #
> # Trusted Users: Only the users specified below will be allowed to perform
> # administrative functions in DSPAM such as setting the active user and
> # accessing tools. All other users attempting to run DSPAM will be
> restricted;
> # their uids will be forced to match the active username and they will
> not be
> # able to specify delivery agent privileges or use tools.
> #
> Trust root
> #Trust dspam
> #Trust apache
> #Trust mail
> #Trust mailnull
> #Trust smmsp
> #Trust daemon
> #Trust nobody
> #Trust majordomo
> Trust vpopmail
> 
> #
> # Debugging: Enables debugging for some or all users. IMPORTANT: DSPAM must
> # be compiled with debug support in order to use this option. DSPAM should
> # never be running in production with debug active unless you are
> # troubleshooting problems.
> #
> # DebugOpt: One or more of: process, classify, spam, fp, inoculation, corpus
> #   process     standard message processing
> #   classify    message classification using --classify
> #   spam        error correction of missed spam
> #   fp          error correction of false positives
> #   inoculation message inoculations (source=inoculation)
> #   corpus      corpusfed messages (source=corpus)
> #
> #Debug *
> #Debug bob bill
> #
> #DebugOpt process spam fp
> 
> #
> # ClassAlias: Alias a particular class to spam/nonspam. This is useful if
> # classifying things other than spam.
> #
> #ClassAliasSpam badstuff
> #ClassAliasNonspam goodstuff
> 
> #
> # Training Mode: The default training mode to use for all operations, when
> # one has not been specified on the commandline or in the user's
> preferences.
> # Acceptable values are:
> #     toe     Train on Error (Only)
> #     teft    Train Everything (Trains on every message)
> #     tum     Train Until Mature (Train only tokens without enough data)
> #     notrain Do not train or store signatures (large ISP systems,
> post-train)
> #
> TrainingMode toe
> 
> #
> # TestConditionalTraining: By default, dspam will retrain certain errors
> # until the condition is no longer met. This usually accelerates learning.
> # Some people argue that this can increase the risk of errors, however.
> #
> TestConditionalTraining off
> 
> #
> # Features: Specify features to activate by default; can also be specified
> # on the commandline. See the documentation for a list of available
> features.
> # If _any_ features are specified on the commandline, these are ignored.
> #
> Feature noise
> Feature whitelist
> 
> # Training Buffer: The training buffer waters down statistics during
> training.
> # It is designed to prevent false positives, but can also dramatically
> reduce
> # dspam's catch rate during initial training. This can be a number from 0
> # (no buffering) to 10 (maximum buffering). If you are paranoid about false
> # positives, you should probably enable this option.
> #
> #Feature tb=5
> 
> #
> # Algorithms: Specify the statistical algorithms to use, overriding any
> # defaults configured in the build. The options are:
> #    naive       Naive-Bayesian (All Tokens)
> #    graham      Graham-Bayesian ("A Plan for Spam")
> #    burton      Burton-Bayesian (SpamProbe)
> #    robinson    Robinson's Geometric Mean Test (Obsolete)
> #    chi-square  Fisher-Robinson's Chi-Square Algorithm
> #
> # You may have multiple algorithms active simultaneously, but it is strongly
> # recommended that you group Bayesian algorithms with other Bayesian
> # algorithms, and any use of Chi-Square remain exclusive.
> #
> # NOTE: For standard "CRM114" Markovian weighting, use 'naive', or consider
> #       using 'burton' for slightly better accuracy
> #
> # Don't mess with this unless you know what you're doing
> #
> #Algorithm chi-square
> #Algorithm naive
> Algorithm graham burton
> 
> #
> # Tokenizer: Specify the tokenizer to use. The tokenizer is the piece
> # responsible for parsing the message into individual tokens. Depending on
> # how many resources you are willing to trade off vs. accuracy, you may
> # choose to use a less or more detailed tokenizer:
> #   word    uniGram (single word) tokenizer
> #           Tokenizes message into single individual words/tokens
> #           example: "free" and "viagra"
> #   chain   biGram (chained tokens) tokenizer (default)
> #           Single words + chains adjacent tokens together
> #           example: "free" and "viagra" and "free viagra"
> #   sbph    Sparse Binary Polynomial Hashing tokenizer
> #           Creates sparse token patterns across sliding window of 5-tokens
> #           example: "the quick * fox jumped" and "the * * fox jumped"
> #   osb     Orthogonal Sparse biGram tokenizer
> #           Similar to SBPH, but only uses the biGrams
> #           example: "the * * fox" and "the * * * jumped"
> #
> Tokenizer osb
> 
> #
> # PValue: Specify the technique used for calculating Probability Values,
> # overriding any defaults configured in the build. These options are:
> #    bcr         Bayesian Chain Rule (Graham's Technique - "A Plan for
> Spam")
> #    robinson    Robinson's Technique (used in Chi-Square)
> #    markov      Markovian Weighted Technique (for Markovian discrimination)
> #
> # Unlike the "Algorithms" property, you may only have one of these defined.
> # Use of the chi-square algorithm automatically changes this to robinson.
> #
> # Don't mess with this unless you know what you're doing.
> #
> #PValue robinson
> #PValue markov
> PValue bcr
> 
> #
> # WebStats: Enable this if you are using the CGI, which writes .stats files
> WebStats on
> 
> #
> # ImprobabilityDrive: Calculate odds-ratios for ham/spam, and add to
> # X-DSPAM-Improbability headers
> #
> ImprobabilityDrive on
> 
> #
> # Preferences: Specify any preferences to set by default, unless otherwise
> # overridden by the user (see next section) or a default.prefs file.
> # If user or default.prefs are found, the user's preferences will
> override any
> # defaults.
> #
> Preference "trainingMode=TOE"         # { TOE | TUM | TEFT | NOTRAIN } ->
> default:teft
> Preference "spamAction=deliver"       # { quarantine | tag | deliver } ->
> default:quarantine
> Preference "spamSubject=[SPAM]"               # { string } -> default:[SPAM]
> Preference "statisticalSedation=0"    # { 0 - 10 } -> default:0
> Preference "enableBNR=off"            # { on | off } -> default:off
> Preference "enableWhitelist=on"               # { on | off } -> default:on
> Preference "signatureLocation=message"        # { message | headers } ->
> default:message
> Preference "tagSpam=off"              # { on | off }
> Preference "tagNonspam=off"           # { on | off }
> Preference "showFactors=off"          # { on | off } -> default:off
> Preference "optIn=off"                        # { on | off }
> Preference "optOut=off"                       # { on | off }
> Preference "whitelistThreshold=10"    # { Integer } -> default:10
> Preference "makeCorpus=off"           # { on | off } -> default:off
> Preference "storeFragments=off"               # { on | off } -> default:off
> Preference "localStore="              # { on | off } -> default:username
> Preference "processorBias=on"         # { on | off } -> default:on
> Preference "fallbackDomain=off"               # { on | off } -> default:off
> Preference "trainPristine=off"                # { on | off } -> default:off
> Preference "optOutClamAV=off"         # { on | off } -> default:off
> Preference "ignoreRBLLookups=off"     # { on | off } -> default:off
> Preference "RBLInoculate=off"         # { on | off } -> default:off
> Preference "notifications=off"                # { on | off } -> default:off
> 
> #
> # Overrides: Specifies the user preferences which may override configuration
> # and commandline defaults. Any other preferences supplied by an
> untrusted user
> # will be ignored.
> #
> AllowOverride enableBNR
> AllowOverride enableWhitelist
> AllowOverride fallbackDomain
> AllowOverride ignoreGroups
> AllowOverride ignoreRBLLookups
> AllowOverride localStore
> AllowOverride makeCorpus
> AllowOverride optIn
> AllowOverride optOut
> AllowOverride optOutClamAV
> AllowOverride processorBias
> AllowOverride RBLInoculate
> AllowOverride showFactors
> AllowOverride signatureLocation
> AllowOverride spamAction
> AllowOverride spamSubject
> AllowOverride statisticalSedation
> AllowOverride storeFragments
> AllowOverride tagNonspam
> AllowOverride tagSpam
> AllowOverride trainPristine
> AllowOverride trainingMode
> AllowOverride whitelistThreshold
> AllowOverride dailyQuarantineSummary
> AllowOverride notifications
> 
> # --- MySQL ---
> 
> #
> # Storage driver settings: Specific to a particular storage driver.
> Uncomment
> # the configuration specific to your installation, if applicable.
> #
> #MySQLServer          /var/lib/mysql/mysql.sock
> #MySQLPort            
> #MySQLUser            dspam
> #MySQLPass            changeme
> #MySQLDb              dspam
> #MySQLCompress                true
> #MySQLReconnect               true
> 
> # If you are using replication for clustering, you can also specify a
> separate
> # server to perform all writes to.
> #
> #MySQLWriteServer     /var/lib/mysql/mysql.sock
> #MySQLWritePort               
> #MySQLWriteUser               dspam
> #MySQLWritePass               changeme
> #MySQLWriteDb         dspam_write
> #MySQLCompress                true
> #MySQLReconnect               true
> 
> # If your replication isn't close to real-time, your retraining might
> fail if
> # the  signature isn't found. One workaround for this is to use the write
> # database for all signature reads:
> #
> #MySQLReadSignaturesFromWriteDb       on
> 
> # Use this if you have the 4.1 quote bug (see doc/mysql.txt)
> #MySQLSupressQuote    on
> 
> # If you're running DSPAM in client/server (daemon) mode, uncomment the
> # setting below to override the default connection cache size (the number
> # of connections the server pools between all clients). The connection cache
> # represents the maximum number of database connections *available* and
> should
> # be set based on the maximum number of concurrent connections you're likely
> # to have. Each connection may be used by only one thread at a time, so all
> # other threads _will block_ until another connection becomes available.
> #
> #MySQLConnectionCache 10
> 
> # If you're using vpopmail or some other type of virtual setup and wish to
> # change the table dspam uses to perform username/uid lookups, you can over-
> # ride it below
> 
> #MySQLVirtualTable            dspam_virtual_uids
> #MySQLVirtualUIDField         uid
> #MySQLVirtualUsernameField    username
> 
> # UIDInSignature: MySQL supports the insertion of the user id into the
> DSPAM
> # signature. This allows you to create one single spam or fp alias
> # (pointing to some arbitrary user), and the uid in the signature will
> # switch to the correct user. Result: you need only one spam alias
> 
> #MySQLUIDInSignature  on
> 
> # --- PostgreSQL ---
> 
> # For PgSQLServer you can Use a TCP/IP address or a socket. If your
> socket is
> # in /var/run/postgresql/.s.PGSQL.5432 specify just the path where the
> socket
> # resits (without .s.PGSQL.5432).
> 
> PgSQLServer           /tmp
> PgSQLPort             
> PgSQLUser             dspam_domain
> PgSQLPass             dspamisgreat
> PgSQLDb                       dspam
> 
> # If you're running DSPAM in client/server (daemon) mode, uncomment the
> # setting below to override the default connection cache size (the number
> # of connections the server pools between all clients).
> #
> PgSQLConnectionCache  3
> 
> # UIDInSignature: PgSQL supports the insertion of the user id into the
> DSPAM
> # signature. This allows you to create one single spam or fp alias
> # (pointing to some arbitrary user), and the uid in the signature will
> # switch to the correct user. Result: you need only one spam alias
> 
> PgSQLUIDInSignature   on
> 
> # If you're using vpopmail or some other type of virtual setup and wish to
> # change the table dspam uses to perform username/uid lookups, you can over-
> # ride it below
> 
> PgSQLVirtualTable             dspam_virtual_uids
> PgSQLVirtualUIDField          uid
> PgSQLVirtualUsernameField     username
> 
> # --- SQLite ---
> 
> #SQLitePragma         "synchronous = OFF"
> 
> # --- Hash ---
> 
> #
> # HashRecMax: Default number of records to create in the initial segment
> when
> # building hash files. 100,000 yields files 1.6MB in size, but can fill up
> # fast, so be sure to increase this (to a million or more) if you're not
> using
> # autoextend.
> #
> # NOTE: If you're using a heavy-weight tokenizer, such as SBPH, you
> should be
> #       looking for settings in the 'millions' of records.
> #
> # Primes List:
> #  53, 97, 193, 389, 769, 1543, 3079, 6151, 12289, 24593, 49157, 98317,
> 196613,
> #  393241, 786433, 1572869, 3145739, 6291469, 12582917, 25165843, 50331653,
> #  100663319, 201326611, 402653189, 805306457, 1610612741, 3221225473,
> #  4294967291
> #
> HashRecMax            98317
> 
> #
> # HashAutoExtend: Autoextend hash databases when they fill up. This allows
> # them to continue to train by adding extents (extensions) to the file.
> There
> # will be a small delay during the growth process, as everything needs
> to be
> # closed and remapped.
> #
> HashAutoExtend                on
> 
> #
> # HashMaxExtents: The maximum number of extents that may be created in a
> single
> # hash file. Set this to zero for unlimited
> #
> HashMaxExtents                0
> 
> #
> # HashExtentSize: The initial record size for newly created extents.
> Creating
> # this too small could result in many extents being created. Creating
> this too
> # large could result in excessive disk space usage. Typically, a value
> close
> # to half of the HashRecMax size is good.
> #
> HashExtentSize                49157
> 
> #
> # HashPctIncrease: Increase the next extent size by n% from the size of the
> # last extent. This is useful in accommodating systems where the default
> # HashExtentSize can be too small for certain high-volume users, and can
> also
> # help keep seeks nice and speedy and/or prevent too many unnecessary
> extents
> # from being created when using a low HashMaxSeek. The default behavior,
> when
> # HashPctIncrease is not used, is to always use # HashExtentSize with no
> # increase.
> #
> HashPctIncrease               10
> 
> #
> # HashMaxSeek: The maximum number of record seeks when inserting a new
> record
> # before failing or adding a new extent. This ultimately translates into the
> # max # of acceptable seeks per segment. Setting this too high will
> exhaustively
> # scan each segment and hurt performance. Typically, a low value is
> acceptable
> # as even older extents will continue to fill as training progresses.
> #
> HashMaxSeek           10
> 
> #
> # HashConcurrentUser: If you are using a single, stateful hash database in
> # daemon mode, specifying a concurrent user below will cause the user to be
> # permanently mapped into memory and shared via rwlocks. This is very
> fast and
> # very cool if you are running a "userless" relay appliance.
> #
> HashConcurrentUser    user
> 
> #
> # HashConnectionCache: If running in daemon mode, this is the max # of
> # concurrent connections that will be supported. NOTE: If you are using
> # HashConcurrentUser, this option is ignored, as all connections are read-
> # write locked instead of mutex locked.
> #
> HashConnectionCache   10
> 
> 
> # --- ExtLookup ---
> 
> # ExtLookup: Prefrom various external lookup functions depending on user-
> # defined variables. ExtLookup can either be set to 'on' or 'off'. The
> # behavior of such lookups are defined by the use of ExtLookupMode, which
> # can be set to 'verify', 'map' and 'strict'.
> #
> #  verify   Will cause dspam to validate the user, prior to
> #           creating the user entry in the system.
> #
> #  map      Will cause dspam to try to map the user address
> #           to a certain unique identifier.
> #
> #  strict   Will cause dspam to enforce both 'verify' and 'map'.
> #
> # ExtLookupDriver will set the engine behind the lookups. For now the only
> # supported mechanisms are 'ldap' and 'program'. The first will make dspam
> # talk directly to the configured LDAP server. The second will prefrom the
> # various lookup functions by running a certain binary program or executable
> # script. The program MUST be a binary executable or a script with a well
> # defined interperter in its first line ( #!/path/to/interperter ). There
> # are plans to support TLS/SSL connections to backend databases.
> #
> #ExtLookup            on                              # Turns on/off external 
> lookup
> #ExtLookupMode                strict                          # available 
> modes are 'verify', 'map' and
> 'strict'.
>                                                       # 'strict' enforces 
> both verify and map
> #ExtLookupDriver      ldap                            # Currently only ldap 
> and program are supported.
>                                                       # There are plans to 
> support both MySQL and Postgres.
> #ExtLookupServer      ldap.domain.com                 # Can either be a 
> database hostname
> or the full path to
>                                                       # an executable lookup 
> program and its arguments.
> #ExtLookupPort                389                             # Desired port 
> when connecting to the lookup
> database.
> #ExtLookupDB          "ou=Users,dc=domain,dc=com"     # Can either be an LDAP 
> search
> base or a database name (TODO).
> #ExtLookupQuery       
> "(&(objectClass=qmailUser)(|(mail=%u)(mailAlternateAddress=%u)))"     # Can
> either be an LDAP search filter or an SQL query (TODO)
> #ExtLookupLDAPAttribute       "mail"                          # Attribute to 
> be used when
> ExtLookupDriver is 'ldap'
>                                                       # and ExtLookupMode 
> 'map' or 'strict'
> #ExtLookupLDAPScope   sub                             # Can be set to 'base', 
> 'sub' or 'one'. Only
> used when ExtLookupDriver is 'ldap'.
> #ExtLookupLDAPVersion 3                               # Sets the LDAP 
> protocol version (1, 2 or 3)
> #ExtLookupLogin               "cn=admin,dc=domain,dc=com"     # Login to be 
> used when
> connecting to any direct database backend.
> #ExtLookupPassword    itsasecret                      # Password to use with 
> ExtLookupLogin.
> #ExtLookupCrypto      tls                             # Sets the use of TLS 
> on backend communication
> (only compatible with LDAPv3)
> 
> 
> # --- Profiles ---
> 
> #
> # You can specify multiple storage profiles, and specify the server to
> # use on the commandline with --profile. For example:
> #
> #Profile DECAlpha
> #MySQLServer.DECAlpha 10.0.0.1
> #MySQLPort.DECAlpha   3306
> #MySQLUser.DECAlpha   dspam
> #MySQLPass.DECAlpha   changeme
> #MySQLDb.DECAlpha     dspam
> #MySQLCompress.DECAlpha       true
> #MySQLReconnect.DECAlpha      true
> #
> #Profile Sun420R
> #MySQLServer.Sun420R  10.0.0.2
> #MySQLPort.Sun420R    3306
> #MySQLUser.Sun420R    dspam
> #MySQLPass.Sun420R    changeme
> #MySQLDb.Sun420R      dspam
> #MySQLCompress.Sun420R        false
> #MySQLReconnect.Sun420R       true
> #
> #DefaultProfile       DECAlpha
> 
> #
> # If you're using storage profiles, you can set failovers for each profile.
> # Of course, if you'll be failing over to another database, that database
> # must have the same information as the first. If you're using a global
> # database with no training, this should be relatively simple. If you're
> # configuring per-user data, however, you'll need to set up some type of
> # replication between databases.
> #
> #Failover.DECAlpha    SUN420R
> #Failover.Sun420R     DECAlpha
> 
> # If the storage fails, the agent will follow each profile's failover up to
> # a maximum number of failover attempts. This should be set to a maximum of
> # the number of profiles you have, otherwise the agent could loop and try
> # the same profile multiple times (unless this is your desired behavior).
> #
> #FailoverAttempts     1
> 
> #
> # Ignored headers: If DSPAM is behind other tools which may add a header to
> # incoming emails, it may be beneficial to ignore these headers - especially
> # if they are coming from another spam filter. If you are _not_ using one of
> # these tools, however, leaving the appropriate headers commented out will
> # allow DSPAM to use them as telltale signs of forged email.
> #
> #IgnoreHeader X-Spam-Status
> #IgnoreHeader X-Spam-Scanned
> #IgnoreHeader X-Virus-Scanner-Result
> 
> #
> # Lookup: Perform lookups on streamlined blackhole list servers (see
> # http://www.nuclearelephant.com/projects/sbl/). The streamlined blacklist
> # server is machine-automated, unsupervised blacklisting system designed to
> # provide real-time and highly accurate blacklisting based on network
> spread.
> # When performing a lookup, DSPAM will automatically learn the inbound
> message
> # as spam if the source IP is listed. Until an official public RABL
> server is
> # available, this feature is only useful if you are running your own
> # streamlined blackhole list server for internal reporting among
> multiple mail
> # servers. Provide the name of the lookup zone below to use.
> #
> # This function performs standard reverse-octet.domain lookups, and while it
> # will function with many RBLs, it's strongly discouraged to use those
> # maintained by humans as they're often inaccurate and could hurt filter
> # learning and accuracy.
> #
> #Lookup               "sbl.yourdomain.com"
> 
> #
> # RBLInoculate: If you want to inoculate the user from RBL'd messages it
> would
> # have otherwise missed, set this to on.
> #
> #RBLInoculate off
> 
> #
> # Notifications: Enable the sending of notification emails to users (first
> # message, quarantine full, etc.)
> #
> Notifications on
> 
> #
> # QuarantineWarnSize: You may specify a size when DSPAM should send a
> "Quarantine
> # Full" message to each user. This is only working if you enable
> notifications
> # (see above). Value is in bytes. Default is 2097152 -> 2MB.
> #
> QuarantineWarnSize 2097152
> 
> #
> # Purge configuration: Set dspam_clean purge default options, if not
> otherwise
> # specified on the commandline
> #
> PurgeSignatures 14    # Stale signatures
> PurgeNeutral  90      # Tokens with neutralish probabilities
> PurgeUnused   90      # Unused tokens
> PurgeHapaxes  30      # Tokens with less than 5 hits (hapaxes)
> PurgeHits1S   15      # Tokens with only 1 spam hit
> PurgeHits1I   15      # Tokens with only 1 innocent hit
> 
> #
> # Purge configuration for SQL-based installations using purge.sql
> #
> #PurgeSignature       off     # Specified in purge.sql
> #PurgeNeutral 90
> #PurgeUnused  off     # Specified in purge.sql
> #PurgeHapaxes off     # Specified in purge.sql
> #PurgeHits1S  off     # Specified in purge.sql
> #PurgeHits1I  off     # Specified in purge.sql
> 
> #
> # Local Mail Exchangers: Used for source address tracking, tells DSPAM which
> # mail exchangers are local and therefore should be ignored in the Received:
> # header when tracking the source of an email. Note: you should use the
> address
> # of the host as appears between brackets [ ] in the Received header.
> # By default DSPAM is considering the following IPs always as LocalMX:
> #     10.0.0.0/8      - Private IP addresses (RFC 1918)
> #     127.0.0.0/8     - Localhost Loopback Address (RFC 1700)
> #     169.254.0.0/16  - Zeroconf / APIPA (RFC 3330)
> #     172.16.0.0/12   - Private IP addresses (RFC 1918)
> #     192.168.0.0/16  - Private IP addresses (RFC 1918)
> #
> LocalMX 127.0.0.1
> 
> #
> # Logging: Disabling logging for users will make usage graphs unavailable to
> # them. Disabling system logging will make admin graphs unavailable.
> #
> SystemLog     on
> UserLog               on
> 
> #
> # TrainPristine: for systems where the original message remains server side
> # and can therefore be presented in pristine format for retraining. This
> option
> # will cause DSPAM to cease all writing of signatures and DSPAM headers
> to the
> # message, and deliver the message in as pristine format as possible.
> This mode
> # REQUIRES that the original message in its pristine format (as of
> delivery)
> # be presented for retraining, as in the case of webmail, imap, or other
> # applications where the message is actually kept server-side during
> reading,
> # and is preserved. DO NOT use this switch unless the original message
> can be
> # presented for retraining with the ORIGINAL HEADERS and NO MODIFICATIONS.
> #
> # NOTE: You can't use this setting with dspam_trian; if you're going to
> use it,
> #       wait until after you train any corpora.
> #
> #TrainPristine on
> 
> #
> # Opt: in or out; determines DSPAM's default filtering behavior. If this
> value
> # is set to in, users must opt-in to filtering by dropping a .dspam file in
> # /var/dspam/opt-in/user.dspam (or if you have homedirs configured, a .dspam
> # folder in their home directory).  The default is opt-out, which means all
> # users will be filtered unless a .nodspam file is dropped in
> # /var/dspam/opt-out/user.nodspam
> #
> Opt in
> 
> #
> # TrackSources: specify which (if any) source addresses to track and report
> # them to syslog (mail.info). This is useful if you're running a firewall or
> # blacklist and would like to use this information. Spam reporting also
> drops
> # RABL blacklist files (see http://www.nuclearelephant.com/projects/rabl/).
> #
> TrackSources spam nonspam virus
> 
> #
> # ParseToHeaders: In lieu of setting up individual aliases for each user,
> # DSPAM can be configured to automatically parse the To: address for
> spam and
> # false positive forwards. From there, it can be configured to either
> set the
> # DSPAM user based on the username specified in the header and/or change the
> # training class and source accordingly. The options below can be used to
> # customize most common types of header parsing behavior to avoid the
> need for
> # multiple aliases, or if using LMTP, aliases entirely..
> #
> # ParseToHeader: Parse the To: headers of an incoming message. This must be
> #                set to 'on' to use either of the following features.
> #
> # ChangeModeOnParse: Automatically change the class (to spam or innocent)
> #   depending on whether spam- or notspam- was specified, and change the
> source
> #   to 'error'. This is convenient if you're not using aliases at all, but
> #   are delivering via LMTP.
> #
> # ChangeUserOnParse: Automatically change the username to match that
> specified
> #   in the To: header. For example, spam-...@domain.tld will set the
> username
> #   to bob, ignoring any --user passed in. This may not always be
> desirable if
> #   you are using virtual email addresses as usernames. Options:
> #     on or user      take the portion before the @ sign only
> #     full            take everything after the initial {spam,notspam}-.
> #
> #ParseToHeaders on
> #ChangeModeOnParse on
> #ChangeUserOnParse on
> 
> #
> # Broken MTA Options: Some MTAs don't support the proper functionality
> # necessary. In these cases you can activate certain features in DSPAM to
> # compensate. 'returnCodes' causes DSPAM to return an exit code of 99 if
> # the message is spam, 0 if not, or a negative code if an error has occured.
> # Specifying 'case' causes DSPAM to force the input usernames to lowercase.
> # Specifying 'lineStripping' causes DSPAM to strip ^M's from messages passed
> # in.
> #
> #Broken returnCodes
> #Broken case
> #Broken lineStripping
> 
> #
> # MaxMessageSize: You may specify a maximum message size for DSPAM to
> process.
> # If the message is larger than the maximum size, it will be delivered
> # without processing. Value is in bytes.
> #
> MaxMessageSize 4194304
> 
> # --- ClamAV ---
> 
> #
> # Virus Checking: If you are running clamd, DSPAM can perform stream-based
> # virus checking using TCP. Uncomment the values below to enable virus
> # checking.
> #
> # ClamAVResponse: reject (reject or drop the message with a permanent
> failure)
> #                 accept (accept the message and quietly drop the message)
> #                 spam   (treat as spam and quarantine/tag/whatever)
> #
> #ClamAVPort           3310
> #ClamAVHost           127.0.0.1
> #ClamAVResponse               accept
> 
> # --- CLIENT / SERVER ---
> 
> #
> # Daemonized Server: If you are running DSPAM as a daemonized server using
> # --daemon, the following parameters will override the default. Use the
> # ServerPass option to set up accounts for each client machine. The DSPAM
> # server will process and deliver the message based on the parameters
> # specified. If you want the client machine to perform delivery, use
> # the --stdout option in conjunction with a local setup.
> #
> # ServerHost: Not enabling ServerHost will bind DSPAM server to all
> available
> # interfaces.
> #
> #ServerHost           127.0.0.1
> #ServerPort           24
> #ServerQueueSize      32
> #ServerPID            /var/run/dspam.pid
> 
> #
> # ServerMode specifies the type of LMTP server to start. This can be one of:
> #     dspam: DSPAM-proprietary DLMTP server, for communicating with dspamc
> #  standard: Standard LMTP server, for communicating with Postfix or
> other MTA
> #      auto: Speak both DLMTP and LMTP; auto-detect by ServerPass.IDENT
> #
> #ServerMode dspam
> 
> # If supporting DLMTP (dspam) mode, dspam clients will require
> authentication
> # as they will be passing in parameters. The idents below will be used to
> # determine which clients will be speaking DLMTP, so if you will be using
> # both LMTP and DLMTP from the same host, be sure to use something other
> # than the server's hostname below (which will be sent by the MTA during a
> # standard LMTP LHLO).
> #
> #ServerPass.Relay1    "secret"
> #ServerPass.Relay2    "password"
> 
> # If supporting standard LMTP mode, server parameters will need to be
> specified
> # here, as they will not be passed in by the mail server. The ServerIdent
> # specifies the 250 response code ident sent back to connecting clients and
> # should be set to the hostname of your server, or an alias.
> #
> # NOTE: If you specify --user in ServerParameters, the RCPT TO will be
> #       used only for delivery, and not set as the active user for
> processing.
> #
> #ServerParameters     "--deliver=innocent -d %u"
> #ServerIdent          "localhost.localdomain"
> 
> # If you wish to use a local domain socket instead of a TCP socket,
> uncomment
> # the following. It is strongly recommended you use local domain sockets if
> # you are running the client and server on the same machine, as it
> eliminates
> # much of the bandwidth overhead.
> #
> #ServerDomainSocketPath       "/tmp/dspam.sock"
> 
> #
> # Client Mode: If you are running DSPAM in client/server mode, uncomment and
> # set these variables. A ClientHost beginning with a / will be treated as
> # a domain socket.
> #
> #ClientHost   /tmp/dspam.sock
> #ClientIdent  "secret@Relay1"
> #
> #ClientHost   127.0.0.1
> #ClientPort   24
> #ClientIdent  "secret@Relay1"
> 
> # --- RABL ---
> 
> # RABLQueue: Touch files in the RABL queue
> # If you are a reporting streamlined blackhole list participant, you can
> # touch ip addresses within the directory the rabl_client process is
> watching.
> #
> #RABLQueue    /var/spool/rabl
> 
> # ---  ---
> 
> # DataSource: If you are using any type of data source that does not include
> # email-like headers (such as documents), uncomment the line below. This
> # will cause the entire input to be treated like a message "body"
> #
> #DataSource document
> 
> # ProcessorWordFrequency: By default, words are only counted once per
> message.
> # If you are classifying large documents, however, you may wish to count
> once
> # per occurrence instead.
> #
> ProcessorWordFrequency occurrence
> 
> # ProcessorURLContext: By default, a URL context is generated for URLs,
> which
> # records their tokens as separate from words found in documents. To use
> # URL tokens in the same context as words, turn this feature off.
> #
> ProcessorURLContext on
> 
> # ProcessorBias: Bias causes the filter to lean more toward 'innocent', and
> # usually greatly reduces false positives. It is the default behavior of
> # most Bayesian filters (including dspam).
> #
> # NOTE: You probably DONT want this if you're using Markovian Weighting,
> unless
> # you are paranoid about false positives.
> #
> ProcessorBias on
> 
> # StripRcptDomain: Cut the domain (including the at sign) from recipients.
> # This is particularly useful if the recipient name is equal to real user
> # accounts as recipients with domains tend to cause permission issues with
> # dspam-web.
> #
> StripRcptDomain off
> 
> # --- Split Configuration File Support ---
> 
> # Include a directory with configuration items.
> #Include /etc/dspam/dspam.d/
> 
> # ---  ---
> 
> ## EOF
> 
> ---------------------- end -----------------------------
> 
> ------------------------------------------------------------------------------
> The modern datacenter depends on network connectivity to access resources
> and provide services. The best practices for maximizing a physical server's
> connectivity to a physical network are well understood - see how these
> rules translate into the virtual world? 
> http://p.sf.net/sfu/oracle-sfdevnlfb
> _______________________________________________
> Dspam-user mailing list
> Dspam-user@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/dspam-user
> 

------------------------------------------------------------------------------
The modern datacenter depends on network connectivity to access resources
and provide services. The best practices for maximizing a physical server's
connectivity to a physical network are well understood - see how these
rules translate into the virtual world? 
http://p.sf.net/sfu/oracle-sfdevnlfb
_______________________________________________
Dspam-user mailing list
Dspam-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dspam-user

Reply via email to