[exim] outer spamcheck: cannot find router driver "pipe"

Top Page
Delete this message
Reply to this message
Author: Michael Worobcuk
Date:  
To: exim-users
Subject: [exim] outer spamcheck: cannot find router driver "pipe"
Hello,
here comes my first e-mail to this group.
I am quite unexperienced in configuring mailservers, so I would
appreciate some help :)

I followed the instructions here: http://dman13.dyndns.org/~dman/
config_docs/exim-spamassassin/node12.html
to use SA together with exim.
When I triy to restart exim I get the following message:

[hanno: /etc/mail]>sudo /usr/local/etc/rc.d/exim.sh  
restart                                                                  
                                                          HannosServer
exim not running? (check /var/run/exim.pid).
Starting exim.
2007-02-25 11:56:11 Exim configuration error in line 616 of /usr/ 
local/etc/exim/configure:
   router spamcheck: cannot find router driver "pipe"


Here is a excerpt of my config file:

######################################################################## 
#############################
######################################################################## 
#############################
######################################################################
#                      ROUTERS CONFIGURATION                         #
#               Specifies how addresses are handled                  #
######################################################################
#     THE ORDER IN WHICH THE ROUTERS ARE DEFINED IS IMPORTANT!       #
# An address is passed to each router in turn until it is accepted.  #
######################################################################


begin routers

#smart_route:
# driver = manualroute
# domains = !+local_domains
# transport = remote_smtp
# route_list = * router.studio

# This router routes to remote hosts over SMTP by explicit IP address,
# when an email address is given in "domain literal" form, for example,
# <user@???>. The RFCs require this facility. However, it is
# little-known these days, and has been exploited by evil people seeking
# to abuse SMTP relays. Consequently it is commented out in the default
# configuration. If you uncomment this router, you also need to
uncomment
# allow_domain_literals above, so that Exim can recognize the syntax of
# domain literal addresses.

# domain_literal:
# driver = ipliteral
# domains = ! +local_domains
# transport = remote_smtp

# This router routes addresses that are not in local domains by doing
a DNS
# lookup on the domain name. The exclamation mark that appears in
"domains = !
# +local_domains" is a negating operator, that is, it can be read as
"not". The
# recipient's domain must not be one of those defined by "domainlist
# local_domains" above for this router to be used.
#
# If the router is used, any domain that resolves to 0.0.0.0 or to a
loopback
# interface address (127.0.0.0/8) is treated as if it had no DNS
entry. Note
# that 0.0.0.0 is the same as 0.0.0.0/32, which is commonly treated
as the
# local host inside the network stack. It is not 0.0.0.0/0, the
default route.
# If the DNS lookup fails, no further routers are tried because of
the no_more
# setting, and consequently the address is unrouteable.



dnslookup:
driver = dnslookup
domains = ! +local_domains
transport = remote_smtp
ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8 : 10.0.0.0/24
no_more


# The remaining routers handle addresses in the local domain(s), that
is those
# domains that are defined by "domainlist local_domains" above.


# This router handles aliasing using a linearly searched alias file
with the
# name /etc/aliases. When this configuration is installed automatically,
# the name gets inserted into this file from whatever is set in Exim's
# build-time configuration. The default path is the traditional /etc/
aliases.
# If you install this configuration by hand, you need to specify the
correct
# path in the "data" setting below.
#
##### NB You must ensure that the alias file exists. It used to be
the case
##### NB that every Unix had that file, because it was the Sendmail
default.
##### NB These days, there are systems that don't have it. Your aliases
##### NB file should at least contain an alias for "postmaster".
#
# If any of your aliases expand to pipes or files, you will need to set
# up a user and a group for these deliveries to run under. You can do
# this by uncommenting the "user" option below (changing the user name
# as appropriate) and adding a "group" option if necessary.
Alternatively, you
# can specify "user" on the transports that are used. Note that the
transports
# listed below are the same as are used for .forward files; you might
want
# to set up different ones for pipe and file deliveries from aliases.

system_aliases:
driver = redirect
allow_fail
allow_defer
data = ${lookup{$local_part}lsearch{/etc/aliases}}
user = mailnull
group = mail
file_transport = address_file
pipe_transport = address_pipe


# This router handles forwarding using traditional .forward files in
users'
# home directories. If you want it also to allow mail filtering when
a forward
# file starts with the string "# Exim filter" or "# Sieve filter",
uncomment
# the "allow_filter" option.

# If you want this router to treat local parts with suffixes
introduced by "-"
# or "+" characters as if the suffixes did not exist, uncomment the
two local_
# part_suffix options. Then, for example, xxxx-foo@??? will
be treated
# in the same way as xxxx@??? by this router. You probably
want to make
# the same change to the localuser router.

# The no_verify setting means that this router is skipped when Exim is
# verifying addresses. Similarly, no_expn means that this router is
skipped if
# Exim is processing an EXPN command.

# The check_ancestor option means that if the forward file generates an
# address that is an ancestor of the current one, the current one gets
# passed on instead. This covers the case where A is aliased to B and B
# has a .forward file pointing to A.

# The three transports specified at the end are those that are used when
# forwarding generates a direct delivery to a file, or to a pipe, or
sets
# up an auto-reply, respectively.

userforward:
driver = redirect
check_local_user
# local_part_suffix = +* : -*
# local_part_suffix_optional
file = $home/.forward
# allow_filter
no_verify
no_expn
check_ancestor
file_transport = address_file
pipe_transport = address_pipe
reply_transport = address_reply
condition = ${if exists{$home/.forward} {yes} {no} }



# SpamAssassin
spamcheck_router:
no_verify
check_local_user
# When to scan a message :
# - it isn't already flagged as spam
# - it isn't already scanned
condition = "${if and { {!def:h_X-Spam-Flag:} {!eq
{$received_protocol}{spam-scanned}}} {1}{0}}"
driver = accept
transport = spamcheck



# This router matches local user mailboxes. If the router fails, the
error
# message is "Unknown user".

# If you want this router to treat local parts with suffixes
introduced by "-"
# or "+" characters as if the suffixes did not exist, uncomment the
two local_
# part_suffix options. Then, for example, xxxx-foo@??? will
be treated
# in the same way as xxxx@??? by this router.

localuser:
driver = accept
check_local_user
# local_part_suffix = +* : -*
# local_part_suffix_optional
transport = local_delivery
cannot_route_message = Unknown user



######################################################################
#                      TRANSPORTS CONFIGURATION                      #
######################################################################
#                       ORDER DOES NOT MATTER                        #
#     Only one appropriate transport is called for each delivery.    #
######################################################################


# A transport is used only when referenced from a router that
successfully
# handles an address.

# SpamAssassin
spamcheck:
     driver = pipe
     command = /usr/local/bin/exim4 -oMr spam-scanned -bS
     use_bsmtp = true
     transport_filter = /usr/bin/spamc
     home_directory = "/tmp"
     current_directory = "/tmp"
     # must use a privileged user to set $received_protocol on the  
way back in!
     user = mail
     group = mail
     log_output = true
     return_fail_output = true
     return_path_add = false
     message_prefix =
     message_suffix =





# This transport is used for delivering messages over SMTP connections.

remote_smtp:
driver = smtp


# This transport is used for local delivery to user mailboxes in
traditional
# BSD mailbox format. By default it will be run under the uid and gid
of the
# local user, and requires the sticky bit to be set on the /var/mail
directory.
# Some systems use the alternative approach of running mail
deliveries under a
# particular group instead of using the sticky bit. The commented
options below
# show how this can be done.

# maildir delivery
local_delivery:
driver = appendfile
user = $local_part
group = mail
mode = 0660
mode_fail_narrower = false
delivery_date_add
envelope_to_add = true
return_path_add = true
directory = /home/${local_part}/Maildir
maildir_format



#hier steht noch der urpruengliche Eintrag, im Mbox Format
#local_delivery:
# driver = appendfile
# file = /var/mail/$local_part
# delivery_date_add
# envelope_to_add
# return_path_add
# group = mail
# user = $local_part
# mode = 0660
# no_mode_fail_narrower


# This transport is used for handling pipe deliveries generated by
alias or
# .forward files. If the pipe generates any standard output, it is
returned
# to the sender of the message as a delivery error. Set
return_fail_output
# instead of return_output if you want this to happen only when the
pipe fails
# to complete normally. You can set different transports for aliases and
# forwards if you want to - see the references to address_pipe in the
routers
# section above.

address_pipe:
driver = pipe
return_output


# This transport is used for handling deliveries directly to files
that are
# generated by aliasing or forwarding.

address_file:
driver = appendfile
delivery_date_add
envelope_to_add
return_path_add


# This transport is used for handling autoreplies generated by the
filtering
# option of the userforward router.

address_reply:
driver = autoreply
########################################################################
################################
########################################################################
################################

What am I doing wrong ?
My second question is :
Do I have to create the user mail, and what privileges should he have ?


Thanks for your help

--
Michael