** CONF.C -- Delivermail Configuration Tables.
** Defines the configuration of this installation.
** HASARPA -- set if this machine has a connection to
** HASUUCP -- set if this machine has a connection to
** NETV6MAIL -- set if you want to use "v6mail" that
** comes with the Berkeley network. Normally
** /bin/mail will work fine, but around Berkeley
** we use v6mail because it is a "fixed target".
** V6 -- running on a version 6 system. This determines
** whether to define certain routines between
** the two systems. If you are running a funny
** system, e.g., V6 with long tty names, this
** should be checked carefully.
** DUMBMAIL -- set if your /bin/mail doesn't have the
** Configuration Variables:
** ArpaHost -- the arpanet name of the host through
** which arpanet mail will be sent.
** MyLocName -- the name of the host on a local network.
** This is used to disambiguate the contents of
** ArpaHost among many hosts who may be sharing
** ArpaLocal -- a list of local names for this host on
** the arpanet. Only functional if HASARPA set.
** UucpLocal -- ditto for the Arpanet.
** BerkLocal -- ditto for the Berknet.
** Mailer -- a table of mailers known to the system.
** - the pathname of the mailer.
** - a list of flags describing the properties
** M_FOPT -- if set, the mailer has a picky "-f"
** option. In this mode, the mailer will
** only accept the "-f" option if the
** sender is actually "root", "network",
** and possibly (but not necessarily) if
** the -f argument matches the real sender.
** The effect is that if the "-f" option
** is given to delivermail then it will be
** passed through (as arguments 1 & 2) to
** M_ROPT -- identical to M_FOPT, except uses
** M_QUIET -- if set, don't print a message if
** the mailer returns bad status.
** M_RESTR -- if set, this mailer is restricted
** to use by "daemon"; otherwise, we do a
** setuid(getuid()) before calling the
** M_HDR -- if set, the mailer wants us to
** insert a UNIX "From" line before
** M_NOHOST -- if set, this mailer doesn't care
** about the host part (e.g., the local
** M_STRIPQ -- if set, strip quote (`"')
** characters out of parameters as you
** transliterate them into the argument
** vector. For example, the local mailer
** is called directly, so these should be
** stripped, but the program-mailer (i.e.,
** csh) should leave them in.
** - an exit status to use as the code for the
** error message print if the mailer returns
** something we don't understand.
** - A list of names that are to be considered
** "local" (and hence are stripped off) for
** - An argument vector to be passed to the
** mailer with the following substitutions:
** $f - the from person name.
** $u - the target user name.
** $h - the target user host.
** >>>>>>>>>> Entry zero must be for the local
** >> NOTE >> mailer and entry one must be for
** ParseTab -- a table driving the parsing process. Each
** - a character that will trigger this entry.
** - an index into the Mailer table.
** - a word of flags, described in dlvrmail.h.
** - an argument. If we have P_MAP, it is the
** character to turn the trigger character into.
** If we have P_MOVE, it is the site to send it
** to, using the mailer specified above.
** This table will almost certainly have to be
** changed on your site if you have anything more
static char SccsId
[] = "@(#)conf.c 1.10 10/21/80";
bool UseMsgId
= FALSE
; /* don't put message id's in anywhere */
# include <whoami.h> /* definitions of machine id's at berkeley */
char *ArpaHost
= "Berkeley"; /* host name of gateway on Arpanet */
char *ArpaHost
= "[unknown]";
char *MyLocName
= sysname
;
# define HASUUCP /* default to having UUCP net */
char *UucpLocal
[] = { sysname
, NULL
};
static char *BerkLocal
[] = { "i", "ingres", "ing70", NULL
};
char *MyLocName
= "Ing70";
static char *BerkLocal
[] = { "j", "ingvax", NULL
};
char *MyLocName
= "IngVax";
static char *BerkLocal
[] = { "v", "csvax", "vax", NULL
};
static char *UucpLocal
[] = { "ucbvax", "ernie", NULL
};
char *MyLocName
= "CSVAX";
static char *BerkLocal
[] = { "y", "cory", NULL
};
char *MyLocName
= "Cory";
static char *BerkLocal
[] = { "m", "image", NULL
};
char *MyLocName
= "Image";
static char *BerkLocal
[] = { "o", "esvax", NULL
};
char *MyLocName
= "ESVAX";
static char *BerkLocal
[] = { "z", "eecs40", NULL
};
char *MyLocName
= "EECS40";
/* local mail -- must be #0 */
M_ROPT
|M_NOHOST
|M_STRIPQ
, EX_NOUSER
, NULL
,
{ "...local%mail", "-d", "$u", NULL
}
/* pipes through programs -- must be #1 */
M_HDR
|M_NOHOST
, EX_UNAVAILABLE
, NULL
,
{ "...prog%mail", "-fc", "$u", NULL
}
/* local berkeley mail */
"/usr/net/bin/sendberkmail",
M_FOPT
|M_HDR
|M_STRIPQ
, EX_UNAVAILABLE
, BerkLocal
,
{ "...berk%mail", "-m", "$h", "-t", "$u", "-h", "$c", NULL
}
{ "...arpa%mail", "$f", "$h", "$u", NULL
}
/* uucp mail (cheat & use Bell's v7 mail) */
M_ROPT
|M_STRIPQ
, EX_NOUSER
, UucpLocal
,
{ "...uucp%mail", "$h!$u", NULL
}
{ "...uucp%mail", "-d", "$h!$u", NULL
}
struct parsetab ParseTab
[] =
':', M_BERK
, P_ONE
, NULL
,
'@', M_ARPA
, P_HLAST
|P_USR_UPPER
, NULL
,
'@', M_BERK
, P_HLAST
|P_USR_UPPER
|P_MOVE
, "ing70",
'!', M_BERK
, P_MOVE
, "csvax",
'.', -1, P_MAP
|P_ONE
, ":",
'\0', M_LOCAL
, P_MOVE
, "",
struct parsetab ParseTab
[] =
'@', M_ARPA
, P_HLAST
|P_USR_UPPER
, NULL
,
'\0', M_LOCAL
, P_MOVE
, "",
** GETNAME -- Get the current users login name.
** This is in config.c because it is somewhat machine dependent.
** Examine it carefully for your installation.
** See if the person is logged in. If so, return
** the name s/he is logged in as.
** Look up the user id in /etc/passwd. If found,
** The login name of this user.
** NULL if this person is noone.
register struct passwd
*w
;
extern struct passwd
*getpwuid();
if (p
!= NULL
&& p
[0] != '\0')
w
= getpwuid(getuid() & 0377);
strcpy(namebuf
, w
->pw_name
);
** TTYPATH -- Get the path of the user's tty -- Version 6 version.
** Returns the pathname of the user's tty. Returns NULL if
** the user is not logged in or if s/he has write permission
** pathname of the user's tty.
** NULL if not logged in or write permission denied.
** Return value is in a local buffer.
static char pathn
[] = "/dev/ttyx";
/* compute the pathname of the controlling tty */
if ((i
= ttyn(2)) == 'x' && (i
= ttyn(1)) == 'x' && (i
= ttyn(0)) == 'x')
/* see if we have write permission */
if (stat(pathn
, &stbuf
) < 0 || !flagset(02, stbuf
.st_mode
))
/* see if the user is logged in */
** FDOPEN -- Open a stdio file given an open file descriptor.
** This is included here because it is standard in v7, but we
** Open /dev/null to create a descriptor.
** Close that descriptor.
** Copy the existing fd into the descriptor.
** fd -- the open file descriptor.
** type -- "r", "w", or whatever.
** The file descriptor it creates.
** The mode of fd must match "type".
f
= fopen("/dev/null", type
);
** INDEX -- Return pointer to character in string
** s -- a string to scan.
** c -- a character to look for.
** If c is in s, returns the address of the first
** NULL if c is not in s.
** TTYPATH -- Get the path of the user's tty -- Version 7 version.
** Returns the pathname of the user's tty. Returns NULL if
** the user is not logged in or if s/he has write permission
** pathname of the user's tty.
** NULL if not logged in or write permission denied.
** Return value is in a local buffer.
/* compute the pathname of the controlling tty */
if ((pathn
= ttyname(2)) == NULL
&& (pathn
= ttyname(1)) == NULL
&& (pathn
= ttyname(0)) == NULL
)
/* see if we have write permission */
if (stat(pathn
, &stbuf
) < 0 || !flagset(02, stbuf
.st_mode
))
/* see if the user is logged in */