DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T t

⟦2f8fedfad⟧ TextFile

    Length: 9439 (0x24df)
    Types: TextFile
    Names: »tai_sys.c«

Derivation

└─⟦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« 

TextFile

/* 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 );
}