home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / pp / pp-6.0 / Lib / tai / tai_sys.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-12-18  |  9.7 KB  |  488 lines

  1. /* tai_sys.c: system tailoring routines */
  2.  
  3. # ifndef lint
  4. static char Rcsid[] = "@(#)$Header: /xtel/pp/pp-beta/Lib/tai/RCS/tai_sys.c,v 6.0 1991/12/18 20:24:59 jpo Rel $";
  5. # endif
  6.  
  7. /*
  8.  * $Header: /xtel/pp/pp-beta/Lib/tai/RCS/tai_sys.c,v 6.0 1991/12/18 20:24:59 jpo Rel $
  9.  *
  10.  * $Log: tai_sys.c,v $
  11.  * Revision 6.0  1991/12/18  20:24:59  jpo
  12.  * Release 6.0
  13.  *
  14.  */
  15.  
  16.  
  17.  
  18. #include "head.h"
  19. #include <isode/cmd_srch.h>
  20. #include "list_bpt.h"
  21. #include <isode/tailor.h>
  22.  
  23. extern    void        err_abrt ();
  24. extern    void        pp_setlog ();
  25. extern    void        tai_error ();
  26. extern    int        arg2vstr ();
  27.  
  28. extern char
  29.     *chndfldir,
  30.     *cmddfldir,
  31.     *dap_user,
  32.     *dap_passwd,
  33.     *formdfldir,
  34.     *lckdfldir,
  35.     *lockdir,
  36.     *loc_dom_mta,
  37.     *loc_dom_site,
  38.     *loc_or,
  39.     *logdfldir,
  40.     *mboxname,
  41.     *niftpcpf,
  42.     *niftpquedir,
  43.     *postmaster,
  44.     *adminstration_req_alt,
  45.     *pp_isodetailor,
  46.     *ppdbm,
  47.     *pplogin,
  48.     *pptsapd_addr,
  49.     *qmgr_hostname,
  50.     *quedfldir,
  51.     *tbldfldir,
  52.     *delim1,
  53.     *delim2,
  54.     *authchannel,
  55.     *authloglevel,
  56.     *submit_addr,
  57.     *sysmailfilter,
  58.     *mailfilter,
  59.     *x400_mta,
  60.     *wrndfldir;
  61.  
  62. extern    LLog
  63.     *pp_log_norm,
  64.     *pp_log_oper,
  65.     *pp_log_stat;
  66.  
  67. extern    LIST_BPT
  68.     *bodies_all,
  69.     *headers_all;
  70.  
  71. extern    int
  72.     lockstyle,
  73.     warn_interval,
  74.     warn_number,
  75.     max_hops,
  76.     max_loops,
  77.     queue_depth,
  78.     queue_fanout,
  79.     use_fsync,
  80.     disk_percent,
  81.     disk_blocks,
  82.     return_interval_low,
  83.     return_interval_norm,
  84.     return_interval_high;
  85.  
  86.  
  87.  
  88. extern CMD_TABLE tbl_bool[];
  89.  
  90. #define MAUTHLOG        1
  91. #define MBODY_TYPES        2
  92. #define MBOXNAME        3
  93. #define MCHANDIR        4
  94. #define MCMDDIR            5
  95. #define MDBM            6
  96. #define MFORMDIR        7
  97. #define MISODELOG        8
  98. #define MISOTAILOR        9
  99. #define MLOC_DOM_MTA        10
  100. #define MLOC_DOM_SITE        11 
  101. #define MLOC_OR            12    
  102. #define MLOGDIR            13 
  103. #define MNORMLOG        14 
  104. #define MOPERLOG        15  
  105. #define MPOSTMASTER        16
  106. #define MPPLOGIN        17 
  107. #define MPPTSAPD_ADDR        18 
  108. #define MQMGR_HOST        19 
  109. #define MQUEDIR            20 
  110. #define MTBLDIR            21 
  111. #define MDELIM1            22 
  112. #define MDELIM2            23 
  113. #define MAUTHCHANNEL        24 
  114. #define MAUTHLOGLEVEL        25 
  115. #define MWRNDFLDIR        26 
  116. #define LOCKSTYLE        27    
  117. #define LOCKDIR            28
  118. #define WARN_INTERVAL        29
  119. #define    WARN_NUMBER        30
  120. #define RETURN_INTERVAL        31
  121. #define MAILFILTER        32
  122. #define SYSMAILFILTER        33
  123. #define MAXLOOPS        34
  124. #define MAXHOPS            35
  125. #define X400MTA            36
  126. #define MHDR_TYPES        37
  127. #define SUBMIT_ADDR        38
  128. #define DAPUSER            39
  129. #define DAPPASSWD        40
  130. #define    QUEUE_STRUCTURE        41
  131. #define USE_FSYNC        42
  132. #define DISK_USE        43
  133. #define MADMINASIGALT        44
  134.  
  135. /* this array is sorted - be careful if you change it! */
  136. static    CMD_TABLE  cmdtab[] = {
  137.     "adminstration_assigned_alternate_recipient", MADMINASIGALT,
  138.     "authchannel",        MAUTHCHANNEL,
  139.     "authlog",        MAUTHLOG,
  140.     "authloglevel",        MAUTHLOGLEVEL,
  141.     "bodypart",        MBODY_TYPES,
  142.     "chandir",        MCHANDIR,
  143.     "cmddir",        MCMDDIR,
  144.     "dap_passwd",        DAPPASSWD,
  145.     "dap_user",        DAPUSER,
  146.     "dbm",            MDBM,
  147.     "delim1",        MDELIM1,
  148.     "delim2",        MDELIM2,
  149.     "diskuse",        DISK_USE,
  150.     "formdir",        MFORMDIR,
  151.     "fsync",        USE_FSYNC,
  152.     "headertype",        MHDR_TYPES,
  153.     "isode",        MISOTAILOR,
  154.     "isodelog",        MISODELOG,
  155.     "lockdir",        LOCKDIR,
  156.     "lockstyle",        LOCKSTYLE,
  157.     "loc_dom_mta",        MLOC_DOM_MTA,
  158.     "loc_dom_site",        MLOC_DOM_SITE,
  159.     "loc_or",        MLOC_OR,
  160.     "logdir",        MLOGDIR,
  161.     "mailfilter",        MAILFILTER,
  162.     "maxhops",        MAXHOPS,
  163.     "maxloops",        MAXLOOPS,
  164.     "mboxname",        MBOXNAME,
  165.     "normlog",        MNORMLOG,
  166.     "nwarnings",        WARN_NUMBER,
  167.     "operlog",        MOPERLOG,
  168.     "postmaster",        MPOSTMASTER,
  169.     "pplogin",        MPPLOGIN,
  170.     "pptsapd_addr",        MPPTSAPD_ADDR,
  171.     "qmgrhost",        MQMGR_HOST,
  172.     "quedir",        MQUEDIR,
  173.     "queuestruct",        QUEUE_STRUCTURE,
  174.     "returntime",        RETURN_INTERVAL,
  175.     "submit_addr",        SUBMIT_ADDR,
  176.     "sysmailfilter",    SYSMAILFILTER,
  177.     "tbldir",        MTBLDIR,
  178.     "warninterval",        WARN_INTERVAL,
  179.     "wrndfldir",        MWRNDFLDIR,
  180.     "x400mta",        X400MTA,
  181.     0,            -1
  182.     };
  183. #define N_CMDENT    ((sizeof(cmdtab)/sizeof(CMD_TABLE)) - 1)
  184.  
  185.  
  186.  
  187. /* ---------------------  Begin     Routines  -------------------------------- */
  188.  
  189.  
  190. static    void    do_isode_tailor();
  191. static    void    add_bodies(), add_hdrs();
  192. static    char    *argbak2str();
  193.  
  194. static CMD_TABLE tbl_lock_styles[]  = {
  195.     "flock",    LOCK_FLOCK,
  196.     "fcntl",    LOCK_FCNTL,
  197.     "file",        LOCK_FILE,
  198.     "lockf",    LOCK_LOCKF,
  199.     0,        -1
  200.     };
  201.  
  202. int sys_tai (argc, argv)   /* do system wide initialisations  */
  203. int    argc;
  204. char    **argv;
  205. {
  206.     char    *arg;
  207.     int val;
  208.  
  209.     if (argc < 2)
  210.         return (NOTOK);
  211.     arg = argv[1];
  212.  
  213.     PP_DBG (("tai/sys_tai %s %s", argv[0], arg));
  214.  
  215.     switch (cmdbsrch (argv[0], cmdtab, N_CMDENT)) {
  216.         case MAUTHLOG:
  217.         log_tai (pp_log_stat, &argv[1], argc-1);
  218.         break;
  219.         case MBODY_TYPES:
  220.         add_bodies (&argv[1], argc - 1);
  221.         break;
  222.         case MHDR_TYPES:
  223.         add_hdrs (&argv[1], argc - 1);
  224.         break;
  225.         case MBOXNAME:
  226.         mboxname = arg;
  227.         break;
  228.         case MCHANDIR:
  229.         chndfldir = arg;
  230.         break;
  231.         case MCMDDIR:
  232.         cmddfldir = arg;
  233.         break;
  234.         case MDBM:
  235.         ppdbm = arg;
  236.         break;
  237.         case MFORMDIR:
  238.         formdfldir = arg;
  239.         break;
  240.         case MISODELOG:
  241.         pp_setlog (&argv[1], argc - 1);
  242.         break;
  243.         case MISOTAILOR:
  244.         do_isode_tailor (&argv[1], argc-1);
  245.         break;
  246.         case MLOC_DOM_MTA:
  247.         loc_dom_mta = arg;
  248.         break;
  249.         case MLOC_DOM_SITE:
  250.         loc_dom_site = arg;
  251.         break;
  252.         case MLOC_OR:
  253.         loc_or = arg;
  254.         break;
  255.         case MLOGDIR:
  256.         logdfldir = arg;
  257.         break;
  258.         case MNORMLOG:
  259.         log_tai (pp_log_norm, &argv[1], argc-1);
  260.         break;
  261.         case MOPERLOG:
  262.         log_tai (pp_log_oper, &argv[1], argc-1);
  263.         break;
  264.         case MPOSTMASTER:
  265.         postmaster = arg;
  266.         break;
  267.         case MADMINASIGALT:
  268.         adminstration_req_alt = arg;
  269.         break;
  270.         case MPPLOGIN:
  271.         pplogin = arg;
  272.         break;
  273.         case MPPTSAPD_ADDR:
  274.         pptsapd_addr = arg;
  275.         break;
  276.         case MQMGR_HOST:
  277.         qmgr_hostname = arg;
  278.         break;
  279.         case MQUEDIR:
  280.         quedfldir = arg;
  281.         break;
  282.         case MTBLDIR:
  283.         tbldfldir = arg;
  284.         break;
  285.         case MDELIM1:
  286.         delim1 = arg;
  287.         break;
  288.         case MDELIM2:
  289.         delim2 = arg;
  290.         break;
  291.         case MAUTHCHANNEL:
  292.         authchannel = argbak2str(&argv[1]);
  293.         break;
  294.         case MAUTHLOGLEVEL:
  295.         authloglevel = arg;
  296.         break;
  297.         case MWRNDFLDIR:
  298.         wrndfldir = arg;
  299.         break;
  300.         case LOCKSTYLE:
  301.         lockstyle = cmd_srch (arg, tbl_lock_styles);
  302.         if (lockstyle == -1) {
  303.             tai_error ("Unknown lockstyle setting %s",
  304.                    arg);
  305.             lockstyle = LOCK_FLOCK;
  306.         }
  307.         break;
  308.         case LOCKDIR:
  309.         lockdir = arg;
  310.         break;
  311.  
  312.         case WARN_INTERVAL:
  313.         if ((val = atoi(arg)) > 0)
  314.             warn_interval = val;
  315.         else
  316.             tai_error ("Bad warning interval %d", val);
  317.         break;
  318.         case WARN_NUMBER:
  319.         if ((val = atoi(arg)) >= 0)
  320.             warn_number = val;
  321.         else
  322.             tai_error ("Bad warning number %d", val);
  323.         break;
  324.         case RETURN_INTERVAL:
  325.         if ((val = atoi(arg)) > 0)
  326.             return_interval_norm = val;
  327.         else
  328.             tai_error ("Bad return interval time %d", val);
  329.         return_interval_high = return_interval_norm / 2;
  330.         return_interval_low = return_interval_norm * 2;
  331.         if (argc >= 3 ) {
  332.             if ((val = atoi (argv[2])) > 0)
  333.                 return_interval_high = val;
  334.             else    tai_error ("Bad high priority return time %d",
  335.                        val);
  336.         }
  337.         if (argc >= 4) {
  338.             if ((val = atoi(argv[3])) > 0)
  339.                 return_interval_low = val;
  340.             else
  341.                 tai_error ("Bad low priority return time %d",
  342.                        val);
  343.         }
  344.         break;
  345.         case MAILFILTER:
  346.         mailfilter = arg;
  347.         break;
  348.         case SYSMAILFILTER:
  349.         sysmailfilter = arg;
  350.         break;
  351.         case MAXHOPS:
  352.         if ((val = atoi(arg)) > 1)
  353.             max_hops = val;
  354.         else    tai_error ("Bad max hops value %d", val);
  355.         break;
  356.         case MAXLOOPS:
  357.         if ((val = atoi(arg)) > 1)
  358.             max_loops = val;
  359.         else    tai_error ("Bad max loops value %d", val);
  360.         break;
  361.         case X400MTA:
  362.         x400_mta = arg;
  363.         break;
  364.         case SUBMIT_ADDR:
  365.         submit_addr = arg;
  366.         break;
  367.         case DAPUSER:
  368.         dap_user = arg;
  369.         break;
  370.         case DAPPASSWD:
  371.         dap_passwd = arg;
  372.         break;
  373.         case QUEUE_STRUCTURE:
  374.         queue_depth = 1;
  375.         if ((val = atoi(arg)) > 0)
  376.             queue_fanout = val;
  377.         else
  378.             tai_error ("Bad queue fanout param %d", val);
  379.         if (argc >= 3) {
  380.             if ((val = atoi(arg)) > 0)
  381.                 queue_depth = val;
  382.             else
  383.                 tai_error ("Bad queue depth value %d", val);
  384.         }
  385.         break;
  386.         case USE_FSYNC:
  387.         if ((val = cmd_srch (arg, tbl_bool)) == NOTOK)
  388.             tai_error ("Bad boolean value for fsync %s", arg);
  389.         else
  390.             use_fsync = val;
  391.         break;
  392.         case DISK_USE:
  393.         if ((val = atoi(arg)) >= 0)
  394.             disk_blocks = val;
  395.         else    tai_error ("Bad disk use parameter %d", val);
  396.         if (argc >= 3) {
  397.             if ((val = atoi(argv[2])) >= 0)
  398.                 disk_percent = val;
  399.             else
  400.                 tai_error ("Bad disk percentage figure %d",
  401.                        val);
  402.         }
  403.         break;
  404.         default:
  405.         PP_DBG (("Lib/tai_sys.c/default=%s", arg));
  406.         return (NOTOK);
  407.     }
  408.     return (OK);
  409. }
  410.  
  411.  
  412. /* ------------------------------------------------------------------ */
  413.  
  414. static void do_isode_tailor (av, ac)
  415. char    **av;
  416. int    ac;
  417. {
  418.     char buffer[BUFSIZ];
  419.     int    i;
  420.  
  421.     buffer[0] = 0;
  422.     for (i = 1; i < ac; i++) {
  423.         (void) strcat (buffer, av[i]);
  424.         (void) strcat (buffer, " ");
  425.     }
  426.  
  427.     if (isodesetvar (av[0], strdup (buffer), 1) == NOTOK)
  428.         tai_error ("Unknown isode variable %s", av[0]);
  429. }
  430.  
  431. /* ------------------------------------------------------------------ */
  432.  
  433. static void add_bodies (av, ac)
  434. char    **av;
  435. int    ac;
  436. {
  437.     int i;
  438.     LIST_BPT    *new;
  439.  
  440.     for (i = 0; i < ac; i++, av ++) {
  441.         if (!isstr (*av))
  442.             continue;
  443.         new = list_bpt_new (*av);
  444.         if (new == NULLIST_BPT)
  445.             err_abrt (RP_MECH, "Out of memory");
  446.         list_bpt_add (&bodies_all, new);
  447.     }
  448. }
  449.  
  450. extern char    *hdr_prefix;
  451.  
  452. static void add_hdrs (av, ac)
  453. char    **av;
  454. int    ac;
  455. {
  456.     int i;
  457.     LIST_BPT    *new;
  458.     char    buf[BUFSIZ];
  459.  
  460.     for (i = 0; i < ac; i++, av ++) {
  461.         if (!isstr (*av))
  462.             continue;
  463.         (void) sprintf(buf, "%s%s", hdr_prefix, *av);
  464.         new = list_bpt_new (buf);
  465.         if (new == NULLIST_BPT)
  466.             err_abrt (RP_MECH, "Out of memory");
  467.         list_bpt_add (&headers_all, new);
  468.     }
  469. }
  470.  
  471. /* ------------------------------------------------------------------ */
  472.  
  473. static char *argbak2str(av)    /* convert back to string for now */
  474. char    **av;
  475.  
  476. /*    The purpose of this is to allow a tailor line to be entered in the same
  477.     format as a database entry, or to postpone parsing until a later
  478.     time
  479. */
  480.  
  481. {
  482.     char    buffer[BUFSIZ];
  483.  
  484.     (void) arg2vstr( 0, BUFSIZ, buffer, av );    /* 0 = no folding */
  485.     PP_DBG (("tai_sys/argbak2str '%s'", buffer));
  486.     return strdup( buffer );
  487. }
  488.