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