|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T t
Length: 9439 (0x24df)
Types: TextFile
Names: »tai_sys.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
└─⟦dc59850a2⟧ »EurOpenD22/pp5.0/pp-5.tar.Z«
└─⟦e5a54fb17⟧
└─⟦this⟧ »pp-5.0/Lib/tai/tai_sys.c«
/* tai_sys.c: system tailoring routines */
# ifndef lint
static char Rcsid[] = "@(#)$Header: /cs/research/pp/hubris/pp-beta/Lib/tai/RCS/tai_sys.c,v 5.0 90/09/20 16:16:41 pp Exp Locker: pp $";
# endif
/*
* $Header: /cs/research/pp/hubris/pp-beta/Lib/tai/RCS/tai_sys.c,v 5.0 90/09/20 16:16:41 pp Exp Locker: pp $
*
* $Log: tai_sys.c,v $
* Revision 5.0 90/09/20 16:16:41 pp
* rcsforce : 5.0 public release
*
*/
#include "head.h"
#include <isode/cmd_srch.h>
#include "list_bpt.h"
#include <isode/tailor.h>
char *tai_alloc();
extern void err_abrt ();
extern void arg2vstr ();
extern char
*chndfldir,
*cmddfldir,
*formdfldir,
*lckdfldir,
*lockdir,
*loc_dom_mta,
*loc_dom_site,
*loc_or,
*logdfldir,
*mboxname,
*niftpcpf,
*niftpquedir,
*postmaster,
*pp_isodetailor,
*ppdbm,
*pplogin,
*pptsapd_addr,
*qmgr_hostname,
*quedfldir,
*tbldfldir,
*delim1,
*delim2,
*authchannel,
*authloglevel,
*sysmailfilter,
*mailfilter,
*wrndfldir;
extern LLog *pp_log_norm,
*pp_log_oper,
*pp_log_stat;
extern LIST_BPT *bodies_all;
extern int lockstyle,
warn_interval,
warn_number,
return_interval_low,
return_interval_norm,
return_interval_high;
static LLog
*log_acsap,
*log_addr,
*log_compat,
*log_psap,
*log_psap2,
*log_rosap,
*log_rtsap,
*log_ssap,
*log_tsap;
static LLog zdummy = {
"dummy.log", NULLCP, NULLCP,
LLOG_FATAL | LLOG_EXCEPTIONS | LLOG_NOTICE, LLOG_FATAL, -1,
LLOGCLS | LLOGCRT | LLOGZER, NOTOK
};
static LLog *dummy = &zdummy;
#define MAUTHLOG 1
#define MBODY_TYPES 2
#define MBOXNAME 3
#define MCHANDIR 4
#define MCMDDIR 5
#define MDBM 6
#define MFORMDIR 7
#define MISODELOG 8
#define MISOTAILOR 9
#define MLOC_DOM_MTA 10
#define MLOC_DOM_SITE 11
#define MLOC_OR 12
#define MLOGDIR 13
#define MNORMLOG 14
#define MOPERLOG 15
#define MPOSTMASTER 16
#define MPPLOGIN 17
#define MPPTSAPD_ADDR 18
#define MQMGR_HOST 19
#define MQUEDIR 20
#define MTBLDIR 21
#define MDELIM1 22
#define MDELIM2 23
#define MAUTHCHANNEL 24
#define MAUTHLOGLEVEL 25
#define MWRNDFLDIR 26
#define LOCKSTYLE 27
#define LOCKDIR 28
#define WARN_INTERVAL 29
#define WARN_NUMBER 30
#define RETURN_INTERVAL 31
#define MAILFILTER 32
#define SYSMAILFILTER 33
static CMD_TABLE cmdtab[] = {
"authlog", MAUTHLOG,
"bodypart", MBODY_TYPES,
"chandir", MCHANDIR,
"cmddir", MCMDDIR,
"dbm", MDBM,
"formdir", MFORMDIR,
"isode", MISOTAILOR,
"isodelog", MISODELOG,
"loc_dom_mta", MLOC_DOM_MTA,
"loc_dom_site", MLOC_DOM_SITE,
"loc_or", MLOC_OR,
"logdir", MLOGDIR,
"mboxname", MBOXNAME,
"normlog", MNORMLOG,
"operlog", MOPERLOG,
"postmaster", MPOSTMASTER,
"pplogin", MPPLOGIN,
"pptsapd_addr", MPPTSAPD_ADDR,
"qmgrhost", MQMGR_HOST,
"quedir", MQUEDIR,
"tbldir", MTBLDIR,
"delim1", MDELIM1,
"delim2", MDELIM2,
"authchannel", MAUTHCHANNEL,
"authloglevel", MAUTHLOGLEVEL,
"wrndfldir", MWRNDFLDIR,
"lockstyle", LOCKSTYLE,
"lockdir", LOCKDIR,
"warninterval", WARN_INTERVAL,
"nwarnings", WARN_NUMBER,
"returntime", RETURN_INTERVAL,
"mailfilter", MAILFILTER,
"sysmailfilter", SYSMAILFILTER,
0, -1
};
struct logpairs {
LLog **isode_log;
LLog **isode_save;
char *name;
char *level;
};
#define NULLOG ((LLog **)0)
static struct logpairs logpairs[] = {
&acsap_log, &log_acsap, "acsap", "acsaplevel",
&addr_log, &log_addr, "addr", "addrlevel",
&compat_log, &log_compat, "compat", "compatlevel",
&psap2_log, &log_psap2, "psap2", "psap2level",
&psap_log, &log_psap, "psap", "psaplevel",
&rosap_log, &log_rosap, "rosap", "rosaplevel",
&rtsap_log, &log_rtsap, "rtsap", "rtsaplevel",
&ssap_log, &log_ssap, "ssap", "ssaplevel",
&tsap_log, &log_tsap, "tsap", "tsaplevel",
0
};
/* --------------------- Begin Routines -------------------------------- */
static void do_isode_tailor();
static void add_bodies();
static void setlog();
char *argbak2str();
static CMD_TABLE tbl_lock_styles[] = {
"flock", LOCK_FLOCK,
"fcntl", LOCK_FCNTL,
"file", LOCK_FILE,
"lockf", LOCK_LOCKF,
0, -1
};
int sys_tai (argc, argv) /* do system wide initialisations */
int argc;
char **argv;
{
char *arg;
if (argc < 2)
return (NOTOK);
arg = tai_alloc (argv[1]);
PP_DBG (("tai/sys_tai %s %s", argv[0], arg));
switch (cmd_srch (argv[0], cmdtab)) {
case MAUTHLOG:
log_tai (pp_log_stat, &argv[1], argc-1);
break;
case MBODY_TYPES:
add_bodies (&argv[1], argc - 1);
break;
case MBOXNAME:
mboxname = arg;
break;
case MCHANDIR:
chndfldir = arg;
break;
case MCMDDIR:
cmddfldir = arg;
break;
case MDBM:
ppdbm = arg;
break;
case MFORMDIR:
formdfldir = arg;
break;
case MISODELOG:
setlog (&argv[1], argc - 1);
break;
case MISOTAILOR:
do_isode_tailor (&argv[1], argc-1);
break;
case MLOC_DOM_MTA:
loc_dom_mta = arg;
break;
case MLOC_DOM_SITE:
loc_dom_site = arg;
break;
case MLOC_OR:
loc_or = arg;
break;
case MLOGDIR:
logdfldir = arg;
break;
case MNORMLOG:
log_tai (pp_log_norm, &argv[1], argc-1);
break;
case MOPERLOG:
log_tai (pp_log_oper, &argv[1], argc-1);
break;
case MPOSTMASTER:
postmaster = arg;
break;
case MPPLOGIN:
pplogin = arg;
break;
case MPPTSAPD_ADDR:
pptsapd_addr = arg;
break;
case MQMGR_HOST:
qmgr_hostname = arg;
break;
case MQUEDIR:
quedfldir = arg;
break;
case MTBLDIR:
tbldfldir = arg;
break;
case MDELIM1:
delim1 = arg;
break;
case MDELIM2:
delim2 = arg;
break;
case MAUTHCHANNEL:
authchannel = argbak2str(&argv[1]);
break;
case MAUTHLOGLEVEL:
authloglevel = arg;
break;
case MWRNDFLDIR:
wrndfldir = arg;
break;
case LOCKSTYLE:
lockstyle = cmd_srch (arg, tbl_lock_styles);
if (lockstyle == -1)
lockstyle = LOCK_FLOCK;
break;
case LOCKDIR:
lockdir = arg;
break;
case WARN_INTERVAL:
warn_interval = atoi(arg);
break;
case WARN_NUMBER:
warn_number = atoi(arg);
break;
case RETURN_INTERVAL:
return_interval_norm = atoi (arg);
if (return_interval_norm <= 0)
return_interval_norm = 24 * 3;
return_interval_high = return_interval_norm / 2;
return_interval_low = return_interval_norm * 2;
if (argc >= 2 )
return_interval_high = atoi (argv[2]);
if (argc >= 3)
return_interval_low = atoi (argv[3]);
break;
case MAILFILTER:
mailfilter = arg;
break;
case SYSMAILFILTER:
sysmailfilter = arg;
break;
default:
PP_DBG (("Lib/tai_sys.c/default=%s", arg));
return (NOTOK);
}
return (OK);
}
/* ------------------------------------------------------------------ */
void pp_log_init()
{
struct logpairs *lp;
for (lp = logpairs; lp -> name; lp ++) {
**(lp -> isode_log) = *pp_log_norm;
*(lp -> isode_save) = *(lp -> isode_log);
*(lp -> isode_log) = dummy;
}
}
/* ------------------------------------------------------------------ */
void pp_log_export()
{
struct logpairs *lp;
for (lp = logpairs; lp -> name; lp++)
*(lp -> isode_log) = *(lp -> isode_save);
}
/* --------------------- Static Routines ------------------------------- */
static void setlog (argv, argc)
char *argv[];
int argc;
{
struct logpairs *lp;
if (argc < 1)
return;
for (lp = logpairs; lp -> name; lp ++) {
if (lexequ (argv[0], lp -> level) == 0)
break;
}
if (lp -> name == NULLCP) {
PP_LOG (LLOG_EXCEPTIONS, ("level %s not found",
argv[0]));
return;
}
log_tai (*(lp -> isode_save), &argv[1], argc - 1);
}
/* ------------------------------------------------------------------ */
static void do_isode_tailor (av, ac)
char **av;
int ac;
{
char buffer[BUFSIZ];
int i;
buffer[0] = 0;
for (i = 1; i < ac; i++) {
(void) strcat (buffer, av[i]);
(void) strcat (buffer, " ");
}
if (isodesetvar (av[0], strdup (buffer), 1) == NOTOK)
PP_LOG (LLOG_EXCEPTIONS,
("Unknown isode variable %s", av[0]));
}
/* ------------------------------------------------------------------ */
static void add_bodies (av, ac)
char **av;
int ac;
{
int i;
LIST_BPT *new;
for (i = 0; i < ac; i++, av ++) {
if (!isstr (*av))
continue;
new = list_bpt_new (*av);
if (new == NULLIST_BPT)
err_abrt (RP_MECH, "Out of memory");
list_bpt_add (&bodies_all, new);
}
}
/* ------------------------------------------------------------------ */
char *argbak2str(av) /* convert back to string for now */
char **av;
/* The purpose of this is to allow a tailor line to be entered in the same
format as a database entry, or to postpone parsing until a later
time
*/
{
char buffer[BUFSIZ];
arg2vstr( 0, BUFSIZ, buffer, av ); /* 0 = no folding */
PP_DBG (("tai_sys/argbak2str '%s'", buffer));
return strdup( buffer );
}