[comp.mail.sendmail] Smail compiles, won't deliver.

dean@truevision.com (Dean Riddlebarger) (09/19/90)

Okay, I've hit a roadblock here.  I snarfed the smail3.1.19 package,
got it compiled with the default config, and now absolutely nothing
happens.

Background:  The test compile is on a 386 box running ISC UNIX 2.0.2,
and the machine should be able to see the primary mail server [another
386 running ISC UNIX] via the ethernet.  The hosts file is up to
date, and I've had no trouble with mail transfer using ISC's sendmail.
[Well, no trouble in that it will work, but doesn't handle load well.
There have been discussions of this before....]

When I invoke smail in test mode, and feed it an address like:

dean@foobar

I would expect it to decide to use the smtp connection to the server
[foobar in this example], and get a target of foobar, a transport
mechanism of smtp, and a user of dean.  This does not occur.  With
verbose mode on the following output is seen:

preparse_address(dean@foobar) entry:
preparse_address returns: dean@foobar
parse_address called: address=dean@foobar
parse_address: MAILBOX: target=foobar, remainder=dean
route_remote_addrs called
rtd_pathalias called
rtd_uuname called
rtd_smarthost called
parse_address called: address=dean
parse_address: LOCAL: remainder=dean
dean@foobar ... failed: unknown host

Any hints?  I've been reading TFM amidst other interruptions in the
office, but I can't get down into the innards right now.  So if it
appears to be something obvious, I'd love the feedback.

Thanks!


-- 
<:>   Dean Riddlebarger                               "The bus came by      <:>
<:>   MIS Manager - Truevision, Inc.                    and I got on,       <:>
<:>   [317] 841-0332                                   That's when it       <:>
<:>   uucp: uunet!epicb!dean   dean@truevision.com      all began."         <:>

les@chinet.chi.il.us (Leslie Mikesell) (09/20/90)

In article <411@epicb.com> dean@truevision.com (Dean Riddlebarger) writes:
>Okay, I've hit a roadblock here.  I snarfed the smail3.1.19 package,
>got it compiled with the default config, and now absolutely nothing
>happens.

>Background:  The test compile is on a 386 box running ISC UNIX 2.0.2,
>and the machine should be able to see the primary mail server [another
>386 running ISC UNIX] via the ethernet. 

The generic sys5.3 setup doesn't include the TCP/IP routines (for
obvious reasons).  You need to change conf/EDITME, setting OS_TYPE
to a version that matches your system.  See conf/os/sys5.3+cmc for
an example of how to define your network libs etc.

Les Mikesell
  les@chinet.chi.il.us

karl@naitc.naitc.com (Karl Denninger) (09/20/90)

In article <411@epicb.com> dean@truevision.com (Dean Riddlebarger) writes:
>Okay, I've hit a roadblock here.  I snarfed the smail3.1.19 package,
>got it compiled with the default config, and now absolutely nothing
>happens.
>
>Background:  The test compile is on a 386 box running ISC UNIX 2.0.2,
>and the machine should be able to see the primary mail server [another
>386 running ISC UNIX] via the ethernet.  The hosts file is up to
>date, and I've had no trouble with mail transfer using ISC's sendmail.
>[Well, no trouble in that it will work, but doesn't handle load well.
>There have been discussions of this before....]
>
>When I invoke smail in test mode, and feed it an address like:
>
>dean@foobar
>
>I would expect it to decide to use the smtp connection to the server
>[foobar in this example], and get a target of foobar, a transport
>mechanism of smtp, and a user of dean.  This does not occur.  With
>verbose mode on the following output is seen:
>
>preparse_address(dean@foobar) entry:
>preparse_address returns: dean@foobar
>parse_address called: address=dean@foobar
>parse_address: MAILBOX: target=foobar, remainder=dean
>route_remote_addrs called
>rtd_pathalias called
>rtd_uuname called
>rtd_smarthost called
>parse_address called: address=dean
>parse_address: LOCAL: remainder=dean
>dean@foobar ... failed: unknown host
>
>Any hints?  I've been reading TFM amidst other interruptions in the
>office, but I can't get down into the innards right now.  So if it
>appears to be something obvious, I'd love the feedback.
>
>Thanks!

A couple of things. 

First, you really ought to should want to (:-) use the configuration file
option in the lib directory.  Ours (/usr/lib/smail/config) looks something 
like this:

# @(#)config	1.4 10/2/88 09:20:06

# This file defines the default state for all variables that can be
# set in the smail config file.  By modifying either the source file
# src/config.h or conf/EDITME the actual default state can be changed.
# Thus, this should be matched up against these two files before
# assuming it is completely correct.

# Note: The following line is VERY important!
-smtp_debug
#
+auto_mkdir
auto_mkdir_mode = 0755
console = /dev/console
copying_file = COPYING
date_field = "Date: $date"
delivery_mode = background
director_file = directors
# +flock_mailbox 		# under 4.3BSD
-flock_mailbox			# otherwise
fnlock_interval = 5
fnlock_mode = 0666
fnlock_retries = 3
grades = "special-delivery:9:air-mail:A:first-class:C:bulk:a:junk:n"
hit_table_len = 241
-hostnames
-lock_by_name			# on BSD systems or System V.2/V.3
# +lock_by_name			# otherwise
lock_mode = 0444
log_mode = 0644
logfile = /usr/spool/smail/log/logfile
max_hop_count = 20
-max_load_ave
max_message_size = 100k
# message_buf_size = 4096	# for machines with small memories
message_buf_size = 100k		# otherwise
message_id_field = "Message-Id: <$message_id@$primary_name>"
message_log_mode = 0664
method_dir = methods
-more_hostnames
nobody = nobody			# under 4.3BSD or SunOS
# nobody = guest		# another possibility
open_interval = 2
open_retries = 0		# if an atomic rename() is available
# open_retries = 2		# otherwise
paniclog = /usr/spool/smail/log/paniclog
postmaster_address = root
-queue_only
received_field = "Received: by $primary_name ($version_string)
	id <$message_id@$primary_name>; $spool_date"
-require_configs
return_path_field = "Return-Path: <$sender>"
router_file = routers
-second_config_file
smail = /usr/lib/sendmail
smail_lib_dir = /usr/lib/smail
-smart_path 
-smart_transport 
-smart_user 
spool_dirs = /usr/spool/smail
spool_grade = C
# spool_mode = 0640		# under System V
spool_mode = 0440		# otherwise
transport_file = transports
-trusted
uucp_name = naitc
visible_domains = naitc.com:uucp
-visible_name 

Note the "visible_domains" declaration in there.  This file, among other
things, let's you see what you're up to and allows easy changes.  Well worth
having.

Next, make sure /etc/resolv.conf contains:

domain	naitc.com
nameserver	138.108.10.10

This is providing that you have a nameserver for your organization, of
course, and that it's address is 138.108.10.10.  If you don't, you might want:

domain	naitc.com
nonameserver

This makes sure that names such as "foobar" get the domain added to them,
and that "foobar.foo.com" match as well.

Next, you might want a /usr/lib/smail/routers file of something like this:

# @(#)routers	1.3 7/8/88 00:45:03

# This file defines the configuration of the router subsystem as
# compiled into the smail binary.  By modifying the source files
# conf/EDITME, src/config.h or src/default.c the actual internal
# configuration can be changed.  Thus, this should be matched up
# against thes files before assuming this is completely correct.

# inet_addrs and inet_hosts are only defined when BSD networking exists

# inet_addrs - match domain literals containing literal IP addresses
#
# For example, [128.103.1.1] will match harvard.harvard.edu on the internet.
# The library routine gethostbyaddr(3N) will be called to see if a reverse
# mapping to the cononical hostname is available.
inet_addrs:
	driver = gethostbyaddr,		# router to match IP domain literals
	transport = smtp;		# deliver using SMTP over TCP/IP

	fail_if_error,			# fail malformed domain literal addrs
	check_for_local			# see if this is really the local host

# inet_hosts - match hostnames with gethostbyname(3N)
inet_hosts:
	driver = gethostbyname,		# match hosts with the library function
#	driver = bind,			# match hosts with nameserver
	transport = smtp

# uucp_neighbors - match neighbors accessible over UUCP
uucp_neighbors:
	driver = uuname,		# use a program which returns neighbors
	transport = uux;

	cmd = /usr/bin/uuname,		# specifically, use the uuname program
	domain = uucp

# paths - route using a paths file, like that produced by the pathalias program
paths:	driver = pathalias,		# general-use paths router
	transport = uux;		# for matches, deliver over UUCP

	file = /usr/lib/smail/paths,	# sorted file containing path info
	proto = bsearch,		# use a binary search
	optional,			# ignore if the file does not exist
	domain = uucp			# strip ending ".uucp" before searching

# smart_host - a partically specified smarthost director
#
# If the config file attribute smart_path is defined as a path from the
# local host to a remote host, then hostnames not matched otherwise will
# be sent off to the stated remote host.  The config file attribute
# smart_transport can be used to specify a different transport.
#
# If the smart_path attribute is not defined, this router is ignored.
smart_host:
	driver = smarthost,		# special-case driver
	transport = uux			# by default deliver over UUCP

The "inet_hosts" entry there will use "gethostbyname" to get the ip address
to deliver to (or try to anyway).  If you do not have a nameserver declared
in /etc/resolv.conf, this works off the /etc/hosts file.  If you DO have one
declared, this routine will automatically use it.  The "bind" option is a
little smarter, and knows about things like "MX" records, but you have to
build smail with that library for the option "bind" to work.

This is what we use here, and it has performed flawlessly for me.

--
Karl Denninger	AC Nielsen
kdenning@ksun.naitc.com
(708) 317-3285
Disclaimer:  Contents represent opinions of the author; I do not speak for
	     AC Nielsen on Usenet.