Annotation of 43BSDReno/contrib/isode-beta/compat/tailor.c, revision 1.1.1.1

1.1       root        1: /* tailor.c - ISODE tailoring */
                      2: 
                      3: #ifndef        lint
                      4: static char *rcsid = "$Header: /f/osi/compat/RCS/tailor.c,v 7.6 90/07/09 14:32:25 mrose Exp $";
                      5: #endif
                      6: 
                      7: /* 
                      8:  * $Header: /f/osi/compat/RCS/tailor.c,v 7.6 90/07/09 14:32:25 mrose Exp $
                      9:  *
                     10:  *
                     11:  * $Log:       tailor.c,v $
                     12:  * Revision 7.6  90/07/09  14:32:25  mrose
                     13:  * sync
                     14:  * 
                     15:  * Revision 7.5  90/03/08  08:01:12  mrose
                     16:  * ending
                     17:  * 
                     18:  * Revision 7.4  90/02/19  13:07:20  mrose
                     19:  * update
                     20:  * 
                     21:  * Revision 7.3  90/01/11  18:35:16  mrose
                     22:  * real-sync
                     23:  * 
                     24:  * Revision 7.2  89/12/12  16:14:57  mrose
                     25:  * localHost
                     26:  * 
                     27:  * Revision 7.1  89/11/30  23:53:32  mrose
                     28:  * touch-up
                     29:  * 
                     30:  * Revision 7.0  89/11/23  21:23:45  mrose
                     31:  * Release 6.0
                     32:  * 
                     33:  */
                     34: 
                     35: /*
                     36:  *                               NOTICE
                     37:  *
                     38:  *    Acquisition, use, and distribution of this module and related
                     39:  *    materials are subject to the restrictions of a license agreement.
                     40:  *    Consult the Preface in the User's Manual for the full terms of
                     41:  *    this agreement.
                     42:  *
                     43:  */
                     44: 
                     45: 
                     46: /* LINTLIBRARY */
                     47: 
                     48: #include <ctype.h>
                     49: #include <stdio.h>
                     50: #include "general.h"
                     51: #include "manifest.h"
                     52: #include "isoaddrs.h"
                     53: #include "tailor.h"
                     54: 
                     55: 
                     56: #define        SUBNET_MAX      (4 + 10)  /* maximum number of subnet entries */
                     57: 
                     58: /*    DATA */
                     59: 
                     60: struct pair {
                     61:     char   *p_name;
                     62:     int            p_value;
                     63: };
                     64: 
                     65: 
                     66: static char   *isotailor = "isotailor";
                     67: 
                     68: 
                     69: char   *isodename = "";
                     70: 
                     71: char   *isodebinpath = BINPATH;
                     72: char   *isodesbinpath = SBINPATH;
                     73: char   *isodetcpath = ETCPATH;
                     74: char   *isodelogpath = LOGPATH;
                     75: 
                     76: 
                     77: static struct pair ll_pairs[] = {
                     78:     "none", LLOG_NONE,
                     79:     "fatal", LLOG_FATAL,
                     80:     "exceptions", LLOG_EXCEPTIONS,
                     81:     "notice", LLOG_NOTICE,
                     82:     "pdus", LLOG_PDUS,
                     83:     "trace", LLOG_TRACE,
                     84:     "debug", LLOG_DEBUG,
                     85:     "all", LLOG_ALL,
                     86: 
                     87:     NULL
                     88: };
                     89: 
                     90: static char *compatdebug = "none";
                     91: LLog _compat_log = {
                     92:     "%d.log", NULLCP, "compat", LLOG_NONE, LLOG_NONE, -1,
                     93:     LLOGCLS | LLOGCRT | LLOGZER, NOTOK
                     94: };
                     95: LLog *compat_log = &_compat_log;
                     96: 
                     97: static char *addrdebug = "none";
                     98: LLog _addr_log = {
                     99:     "%d.log", "addr", NULLCP, LLOG_NONE, LLOG_NONE, -1,
                    100:     LLOGCLS | LLOGCRT | LLOGZER, NOTOK
                    101: };
                    102: LLog *addr_log = &_addr_log;
                    103: 
                    104: static char *tsapdebug = "none";
                    105: LLog _tsap_log = {
                    106:     "%d.tpkt", "tsap", NULLCP, LLOG_NONE, LLOG_NONE, -1,
                    107:     LLOGCLS | LLOGCRT | LLOGZER, NOTOK
                    108: };
                    109: LLog *tsap_log = &_tsap_log;
                    110: 
                    111: static char *ssapdebug = "none";
                    112: LLog _ssap_log = {
                    113:     "%d.spkt", "ssap", NULLCP, LLOG_NONE, LLOG_NONE, -1,
                    114:     LLOGCLS | LLOGCRT | LLOGZER, NOTOK
                    115: };
                    116: LLog *ssap_log = &_ssap_log;
                    117: 
                    118: static char *psapdebug = "none";
                    119: LLog _psap_log = {
                    120:     "%d.pe", NULLCP, "psap", LLOG_NONE, LLOG_NONE, -1,
                    121:     LLOGCLS | LLOGCRT | LLOGZER, NOTOK
                    122: };
                    123: LLog *psap_log = &_psap_log;
                    124: 
                    125: static char *psap2debug = "none";
                    126: LLog _psap2_log = {
                    127:     "%d.ppkt", "psap2", NULLCP, LLOG_NONE, LLOG_NONE, -1,
                    128:     LLOGCLS | LLOGCRT | LLOGZER, NOTOK
                    129: };
                    130: LLog *psap2_log = &_psap2_log;
                    131: 
                    132: static char *acsapdebug = "none";
                    133: LLog _acsap_log = {
                    134:     "%d.acpkt", "acsap", NULLCP, LLOG_NONE, LLOG_NONE, -1,
                    135:     LLOGCLS | LLOGCRT | LLOGZER, NOTOK
                    136: };
                    137: LLog *acsap_log = &_acsap_log;
                    138: 
                    139: static char *rtsapdebug = "none";
                    140: LLog _rtsap_log = {
                    141:     "%d.rtpkt", "rtsap", NULLCP, LLOG_NONE, LLOG_NONE, -1,
                    142:     LLOGCLS | LLOGCRT | LLOGZER, NOTOK
                    143: };
                    144: LLog *rtsap_log = &_rtsap_log;
                    145: 
                    146: static char *rosapdebug = "none";
                    147: LLog _rosap_log = {
                    148:     "%d.ropkt", "rosap", NULLCP, LLOG_NONE, LLOG_NONE, -1,
                    149:     LLOGCLS | LLOGCRT | LLOGZER, NOTOK
                    150: };
                    151: LLog *rosap_log = &_rosap_log;
                    152: 
                    153: 
                    154: #define        TS_MASK "\020\01TCP\02X25\03BRG\04TP4"
                    155: 
                    156: static struct pair ts_pairs[] = {
                    157:     "tcp", TS_TCP,
                    158:     "x25", TS_X25,
                    159:     "bridge", TS_BRG,
                    160:     "tp4", TS_TP4,
                    161:     "all", TS_ALL,
                    162: 
                    163:     NULL
                    164: };
                    165: 
                    166: static char *_ts_stacks = "all";
                    167: int    ts_stacks = TS_ALL;
                    168: 
                    169: static char *_ts_interim = "";
                    170: struct ts_interim ts_interim[SUBNET_MAX + 1] = {
                    171:     "realNS",  NULL,   SUBNET_REALNS,          NA_NSAP,        "",     0,
                    172:     "Int-X25", NULL,   SUBNET_INT_X25,         NA_X25,         "",     0,
                    173:     "Janet",   NULL,   SUBNET_JANET,           NA_X25,         "",     0,
                    174:     "Internet",        NULL,   SUBNET_INTERNET,        NA_TCP,         "",     0,
                    175:     "localTCP", NULL,   SUBNET_DYNAMIC - 1,    NA_TCP,         "",     0,
                    176: 
                    177:     NULL
                    178: };
                    179: 
                    180: static char *_ts_communities = "all";
                    181: int    ts_communities[SUBNET_MAX + 1];
                    182: 
                    183: static char *_ts_comm_nsap_default = "realNS";
                    184: int    ts_comm_nsap_default = SUBNET_REALNS;
                    185: 
                    186: static char *_ts_comm_x25_default = "Int-X25";
                    187: int    ts_comm_x25_default = SUBNET_INT_X25;
                    188: 
                    189: static char *_ts_comm_tcp_default = "Internet";
                    190: int    ts_comm_tcp_default = SUBNET_INTERNET;
                    191: 
                    192: int    tsb_communities[SUBNET_MAX + 1];
                    193: char   *tsb_addresses[SUBNET_MAX + 1];
                    194: static char    *_tsb_config = "";
                    195: char   *tsb_default_address = "undefined";
                    196: 
                    197: 
                    198: #ifdef  X25
                    199: char    *x25_local_dte = "";
                    200: char    *x25_local_pid = "";
                    201: 
                    202: static char    *x25_intl_zero_str = "off";
                    203: char     x25_intl_zero = 0;
                    204: 
                    205: static char     *x25_strip_dnic_str = "off";
                    206: char    x25_strip_dnic = 0;
                    207: 
                    208: char    *x25_dnic_prefix = "";
                    209: 
                    210:                /* 0 = don't request/allow reverse charging
                    211:                 * 1 = reverse charge request/allowed
                    212:                 */
                    213: static char *reverse_charge_default = "0";
                    214: u_char reverse_charge = 0;
                    215: 
                    216:                /* 0= default recv packet size.
                    217:                 * 16, 32, 64, 128,
                    218:                 * 256, 512, 1024
                    219:                 * ( octets in decimal )
                    220:                 */
                    221: static char *recvpktsize_default = "0";
                    222: u_short recvpktsize = 0;
                    223: 
                    224:                /* same as above, but for send packet size */
                    225: static char *sendpktsize_default = "0";
                    226: u_short sendpktsize = 0;
                    227: 
                    228:                /* 0= default recv window size.
                    229:                 * 7, 127 ( in decimal )
                    230:                 */
                    231: static char *recvwndsize_default = "0";
                    232: u_char recvwndsize = 0;
                    233: 
                    234:                /* same as above, but for send window size */
                    235: static char *sendwndsize_default = "0";
                    236: u_char sendwndsize = 0;
                    237: 
                    238:                /* 0= default recv throughtput.
                    239:                 * 3= 75    8= 2400
                    240:                 * 4= 150   9= 4800
                    241:                 * 5= 300  10= 9600
                    242:                 * 6= 600  11= 19200
                    243:                 * 7= 1200 12= 48000
                    244:                 * ( bps in decimal )
                    245:                 */
                    246: static char *recvthruput_default = "0";
                    247: u_char recvthruput = 0;
                    248: 
                    249:                /* same as above, but for send throughput */
                    250:                /* 1 = use closed user group in cug_index */
                    251: static char *sendthruput_default = "0";
                    252: u_char sendthruput = 0;
                    253: 
                    254:                /* 0 = no closed user group. */
                    255:                /* 1 = use closed user group in cug_index */
                    256: static char *cug_req_default = "0";
                    257: u_char cug_req = 0;
                    258: 
                    259:                /* valid when cug_req= 1.
                    260:                 * 0x00 ~ 0x99 ( closed user group in BCD)
                    261:                 */
                    262: static char *cug_index_default = "0";
                    263: u_char     cug_index = 0;
                    264: 
                    265:                /* 0= don't use fast select
                    266:                 * 1= clear is fast select response
                    267:                 * 2= clear or call accepted
                    268:                 *    is fast select response
                    269:                 */
                    270: static char *fast_select_type_default = "0";
                    271: u_char fast_select_type = 0;
                    272: 
                    273:                /* 0= no RPOA transit request
                    274:                 * 1= use RPOA transit request in rpoa
                    275:                 */
                    276: static char *rpoa_req_default = "0";
                    277: u_char rpoa_req = 0;
                    278: 
                    279:                /* valid when rpoa_req= 1 */
                    280:                /* 0x0000 ~ 0x9999 (RPOA transit group in BCD) */
                    281: static char *rpoa_default = "0";
                    282: u_short rpoa = 0;
                    283: 
                    284: static char *x25debug = "none";
                    285: static LLog _x25_log = {
                    286:     "x25log", "x25", NULLCP, LLOG_NONE, LLOG_NONE, -1,
                    287:     LLOGCLS | LLOGCRT | LLOGZER, NOTOK
                    288: };
                    289: LLog *x25_log = &_x25_log;
                    290: 
                    291: #ifdef CAMTEC_CCL
                    292: static char *x25_outgoing_port_str = "A";
                    293: char    x25_outgoing_port = 'A';
                    294: #endif
                    295: #endif
                    296: 
                    297: 
                    298: #ifdef BRIDGE_X25
                    299: char    *x25_bridge_host = "x25bridge";
                    300: char    *x25_bridge_addr = "000021000018";
                    301: char   *x25_bridge_listen = "";
                    302: char   *x25_bridge_pid = "";
                    303: char   *x25_bridge_discrim = "0000";
                    304: #endif
                    305: 
                    306: 
                    307: #if    defined (BRIDGE_X25) || defined (X25)
                    308: static char *x25_bridge_port_default = "146";
                    309: u_short x25_bridge_port = 0;
                    310: #endif
                    311: 
                    312: 
                    313: char   ns_enabled = 0;
                    314: static char *usens = "off";
                    315: 
                    316: char   *ns_address = "undefined";
                    317: 
                    318: /*  */
                    319: 
                    320: static struct bind {
                    321:     char   *b_key;
                    322: 
                    323:     char  **b_value;
                    324:     int            b_dynamic;
                    325: }      binds[] = {
                    326:     "localname",       &isodename,                     0,
                    327:     "binpath",         &isodebinpath,                  0,
                    328:     "sbinpath",                &isodesbinpath,                 0,
                    329:     "etcpath",         &isodetcpath,                   0,
                    330:     "logpath",         &isodelogpath,                  0,
                    331: 
                    332:     "compatlevel",     &compatdebug,                   0,
                    333:     "compatfile",      &_compat_log.ll_file,           0,
                    334: 
                    335:     "addrlevel",       &addrdebug,                     0,
                    336:     "addrfile",                &_addr_log.ll_file,             0,
                    337: 
                    338:     "tsaplevel",       &tsapdebug,                     0,
                    339:     "tsapfile",                &_tsap_log.ll_file,             0,
                    340: 
                    341:     "ssaplevel",       &ssapdebug,                     0,
                    342:     "ssapfile",                &_ssap_log.ll_file,             0,
                    343: 
                    344:     "psaplevel",       &psapdebug,                     0,
                    345:     "psapfile",                &_psap_log.ll_file,             0,
                    346: 
                    347:     "psap2level",      &psap2debug,                    0,
                    348:     "psap2file",       &_psap2_log.ll_file,            0,
                    349: 
                    350:     "acsaplevel",      &acsapdebug,                    0,
                    351:     "acsapfile",       &_acsap_log.ll_file,            0,
                    352: 
                    353:     "rtsaplevel",      &rtsapdebug,                    0,
                    354:     "rtsapfile",       &_rtsap_log.ll_file,            0,
                    355: 
                    356:     "rosaplevel",      &rosapdebug,                    0,
                    357:     "rosapfile",       &_rosap_log.ll_file,            0,
                    358: 
                    359:     "ts_stacks",       &_ts_stacks,                    0,
                    360:     "ts_interim",      &_ts_interim,                   0,
                    361:     "ts_communities",  &_ts_communities,               0,
                    362: 
                    363:     "default_nsap_community", &_ts_comm_nsap_default,  0,
                    364:     "default_x25_community", &_ts_comm_x25_default,    0,
                    365:     "default_tcp_community", &_ts_comm_tcp_default,    0,
                    366: 
                    367:     "tsb_communities", &_tsb_config,                   0,
                    368:     "tsb_default_address", &tsb_default_address,       0,
                    369: 
                    370: #ifdef  X25
                    371:     "x25_local_dte",   &x25_local_dte,                 0,
                    372:     "x25_local_pid",   &x25_local_pid,                 0,
                    373:     "x25_dnic_prefix", &x25_dnic_prefix,               0,
                    374:     "x25_intl_zero",   &x25_intl_zero_str,             0,
                    375:     "x25_strip_dnic",  &x25_strip_dnic_str,            0,
                    376: 
                    377:     "reverse_charge",   &reverse_charge_default,       0,
                    378:     "recvpktsize",      &recvpktsize_default,          0,
                    379:     "sendpktsize",      &sendpktsize_default,          0,
                    380:     "recvwndsize",      &recvwndsize_default,          0,
                    381:     "sendwndsize",      &sendwndsize_default,          0,
                    382:     "recvthruput",      &recvthruput_default,          0,
                    383:     "sendthruput",      &sendthruput_default,          0,
                    384:     "cug_req",          &cug_req_default,              0,
                    385:     "cug_index",        &cug_index_default,            0,
                    386:     "fast_select_type", &fast_select_type_default,     0,
                    387:     "rpoa_req",         &rpoa_req_default,             0,
                    388:     "rpoa",             &rpoa_default,                 0,
                    389: 
                    390:     "x25level",                &x25debug,                      0,
                    391:     "x25file",         &_x25_log.ll_file,              0,
                    392: 
                    393: #ifdef CAMTEC_CCL
                    394:     "x25_outgoing_port",        &x25_outgoing_port_str,        0,
                    395: #endif
                    396: #endif
                    397: 
                    398: #ifdef BRIDGE_X25
                    399:     "x25_bridge_host",         &x25_bridge_host,       0,
                    400:     "x25_bridge_addr",         &x25_bridge_addr,       0,
                    401:     "x25_bridge_listen",       &x25_bridge_listen,     0,
                    402:     "x25_bridge_pid",          &x25_bridge_pid,        0,
                    403:     "x25_bridge_discrim",      &x25_bridge_discrim,    0,
                    404: #endif
                    405: 
                    406: #if    defined (BRIDGE_X25) || defined (X25)
                    407:     "x25_bridge_port",         &x25_bridge_port_default,0,
                    408: #endif
                    409: 
                    410: 
                    411:     "ns_enable",               &usens,                 0,
                    412:     "ns_address",              &ns_address,            0,
                    413: 
                    414:     NULL
                    415: };
                    416: 
                    417: 
                    418: int    tailor_read ();
                    419: char   *tailor_value ();
                    420: 
                    421: /*  */
                    422: 
                    423: char  *isodesetailor (file)
                    424: char  *file;
                    425: {
                    426:     char   *ofile = isotailor;
                    427: 
                    428:     if ((isotailor = file) == NULLCP)
                    429:        isotailor = "isotailor";
                    430: 
                    431:     return ofile;
                    432: }
                    433: 
                    434: /*  */
                    435: 
                    436: void   isodetailor (myname, wantuser)
                    437: char   *myname;
                    438: int    wantuser;
                    439: {
                    440:     register char *hp,
                    441:                  *mp;
                    442:     char   buffer[BUFSIZ];
                    443:     static int  inited = 0;
                    444: 
                    445:     if (inited)
                    446:        return;
                    447:     inited = 1;
                    448: 
                    449:     tsb_addresses[0] = NULL;
                    450: 
                    451:     tailor_read (isodefile (isotailor, 0));
                    452: 
                    453:     if (wantuser) {
                    454:        if ((hp = getenv ("HOME")) == NULL)
                    455:            hp = ".";
                    456:        if (myname) {
                    457:            if (mp = rindex (myname, '/'))
                    458:                mp++;
                    459:            if (mp == NULL || *mp == NULL)
                    460:                mp = myname;
                    461:        }
                    462:        else
                    463:            mp = "isode";
                    464:        (void) sprintf (buffer, "%s/.%s_tailor", hp, mp);
                    465:        tailor_read (buffer);
                    466:     }
                    467: 
                    468:     isodexport (myname);
                    469: }
                    470: 
                    471: /*  */
                    472: 
                    473: static int  tailor_read (file)
                    474: char   *file;
                    475: {
                    476:     register char  *bp,
                    477:                    *cp;
                    478:     char    buffer[BUFSIZ];
                    479:     register FILE *fp;
                    480: 
                    481:     if (fp = fopen (file, "r")) {
                    482:        while (fgets (buffer, sizeof buffer, fp)) {
                    483:            if ((cp = index (buffer, '\n')) == NULL) {
                    484:                fprintf (stderr, "%s: line too long\n", file);
                    485:                break;
                    486:            }
                    487:            *cp = NULL;
                    488:            if (*buffer == '#' || *buffer == NULL)
                    489:                continue;
                    490:            if ((bp = index (buffer, ':')) == NULL) {
                    491:                fprintf (stderr, "%s: invalid syntax in \"%s\"\n",
                    492:                         file, buffer);
                    493:                break;
                    494:            }
                    495:            for (cp = bp - 1; cp >= buffer; cp--)
                    496:                if (isspace (*cp))
                    497:                    *cp = NULL;
                    498:                else
                    499:                    break;
                    500: 
                    501:            *bp++ = NULL;
                    502:            while (isspace (*bp))
                    503:                *bp++ = NULL;
                    504: 
                    505:            for (cp = bp + strlen (bp) - 1; cp >= bp; cp--)
                    506:                if (isspace (*cp))
                    507:                    *cp = NULL;
                    508:                else
                    509:                    break;
                    510:                        
                    511:            if ((cp = tailor_value (bp))
                    512:                     && isodesetvar (buffer, cp, 1) == NOTOK)
                    513:                free (cp);
                    514:        }
                    515: 
                    516:        (void) fclose (fp);
                    517:     }
                    518: }
                    519: 
                    520: /*  */
                    521: 
                    522: int    isodesetvar (name, value, dynamic)
                    523: char   *name,
                    524:        *value;
                    525: int    dynamic;
                    526: {
                    527:     register struct bind   *b;
                    528: 
                    529:     for (b = binds; b -> b_key; b++)
                    530:        if (strcmp (b -> b_key, name) == 0) {
                    531:            if (b -> b_dynamic && *b -> b_value)
                    532:                free (*b -> b_value);
                    533:            *b -> b_value = value, b -> b_dynamic = dynamic;
                    534:            return OK;
                    535:        }
                    536: 
                    537:     return NOTOK;
                    538: }
                    539: 
                    540: /*  */
                    541: 
                    542: void   isodexport (myname)
                    543: char   *myname;
                    544: {
                    545:     compat_log -> ll_events = events_value (ll_pairs, compatdebug, "compatlevel");
                    546:     addr_log -> ll_events = events_value (ll_pairs, addrdebug, "addrlevel");
                    547:     tsap_log -> ll_events = events_value (ll_pairs, tsapdebug, "tsaplevel");
                    548:     ssap_log -> ll_events = events_value (ll_pairs, ssapdebug, "ssaplevel");
                    549:     psap_log -> ll_events = events_value (ll_pairs, psapdebug, "psaplevel");
                    550:     psap2_log -> ll_events = events_value (ll_pairs, psap2debug, "psap2level");
                    551:     acsap_log -> ll_events = events_value (ll_pairs, acsapdebug, "acsaplevel");
                    552:     rtsap_log -> ll_events = events_value (ll_pairs, rtsapdebug, "rtsaplevel");
                    553:     rosap_log -> ll_events = events_value (ll_pairs, rosapdebug, "rosaplevel");
                    554: #ifdef X25
                    555:     x25_log -> ll_events = events_value (ll_pairs, x25debug, "x25level");
                    556: #endif
                    557: 
                    558:     ll_hdinit (compat_log, myname);
                    559:     ll_hdinit (addr_log, myname);
                    560:     ll_hdinit (tsap_log, myname);
                    561:     ll_hdinit (ssap_log, myname);
                    562:     ll_hdinit (psap_log, myname);
                    563:     ll_hdinit (psap2_log, myname);
                    564:     ll_hdinit (acsap_log, myname);
                    565:     ll_hdinit (rtsap_log, myname);
                    566:     ll_hdinit (rosap_log, myname);
                    567: #ifdef X25
                    568:     ll_hdinit (x25_log, myname);
                    569: #endif
                    570: 
                    571:     ts_stacks = events_value (ts_pairs, _ts_stacks, "ts_stacks");
                    572: #ifndef        TCP
                    573:     ts_stacks &= ~TS_TCP;
                    574: #endif
                    575: #ifndef        X25
                    576:     ts_stacks &= ~TS_X25;
                    577: #endif
                    578: #ifndef        BRIDGE_X25
                    579:     ts_stacks &= ~TS_BRG;
                    580: #endif
                    581: #ifndef        TP4
                    582:     ts_stacks &= ~TS_TP4;
                    583: #endif
                    584: 
                    585:     {
                    586:        register int  *ip,
                    587:                      *jp,
                    588:                      *kp;
                    589:        int     j;
                    590:        register char *cp,
                    591:                      *adrp,
                    592:                     **ap,
                    593:                     **cpp;
                    594:        register struct ts_interim *ts;
                    595:        static struct ts_interim *te = NULL;
                    596:        char    buffer[BUFSIZ],
                    597:               *vec[NVEC + NSLACK + 1];
                    598: 
                    599:        if (te)
                    600:            te -> ts_name = NULL;
                    601:        for (ts = ts_interim; ts -> ts_name; ts++)
                    602:            if (macro2comm (ts -> ts_name, ts) == NOTOK)
                    603:                fprintf (stderr, "internal error for community \"%s\"\n",
                    604:                         ts -> ts_name);
                    605:        if (te == NULL)
                    606:            te = ts;
                    607: 
                    608:        (void) strcpy (buffer, _ts_interim);
                    609:        (void) str2vec (buffer, ap = vec);
                    610:        j = SUBNET_DYNAMIC;
                    611:        while (cp = *ap++) {
                    612:            register struct ts_interim *tp;
                    613: 
                    614:            ts -> ts_subnet = 0;
                    615:            if (macro2comm (cp, ts) == NOTOK) {
                    616:                fprintf (stderr, "invalid community name \"%s\"\n", cp);
                    617:                break;
                    618:            }
                    619:            for (tp = ts_interim; tp < ts; tp++)
                    620:                if (tp -> ts_length == ts -> ts_length
                    621:                        && bcmp (tp -> ts_prefix, ts -> ts_prefix,
                    622:                                 tp -> ts_length) == 0) {
                    623:                    fprintf (stderr,
                    624:                             "duplicate prefixes for communities \"%s\" and \"%s\"\n",
                    625:                             tp -> ts_name, cp);
                    626:                    break;
                    627:                }
                    628:            if (tp < ts)
                    629:                continue;
                    630: 
                    631:            ts -> ts_name = strdup (cp);
                    632:            if (ts -> ts_subnet == 0)
                    633:                ts -> ts_subnet = j++;
                    634:            ts++;
                    635:        }
                    636:        ts -> ts_name = NULL;
                    637: 
                    638:        (void) strcpy (buffer, _ts_communities);
                    639:        (void) str2vec (buffer, ap = vec);
                    640:        ip = ts_communities;
                    641:        while (cp = *ap++) {
                    642:            if (strcmp (cp, "all") == 0) {
                    643:                for (ts = ts_interim; ts -> ts_name; ts++) {
                    644:                    for (jp = ts_communities; jp < ip; jp++)
                    645:                        if (*jp == ts -> ts_subnet)
                    646:                            break;
                    647:                    if (jp >= ip)
                    648:                        *ip++ = ts -> ts_subnet;
                    649:                }
                    650:                break;
                    651:            }
                    652: 
                    653:            for (ts = ts_interim; ts -> ts_name; ts++)
                    654:                if (lexequ (ts -> ts_name, cp) == 0)
                    655:                    break;
                    656:            if (!ts -> ts_name) {
                    657:                fprintf (stderr,
                    658:                         "unknown community name \"%s\" for variable ts_communities\n",
                    659:                         cp);
                    660:                continue;
                    661:            }
                    662: 
                    663:            for (jp = ts_communities; jp < ip; jp++)
                    664:                if (*jp == ts -> ts_subnet)
                    665:                    break;
                    666:            if (jp >= ip)
                    667:                *ip++ = ts -> ts_subnet;
                    668:        }
                    669:        *ip = NULL;
                    670: 
                    671:        for (ap = tsb_addresses; *ap; ap++)
                    672:            free (*ap);
                    673:        (void) strcpy (buffer, _tsb_config);
                    674:        (void) str2vec (buffer, ap = vec);
                    675:        ip = tsb_communities, cpp = tsb_addresses;
                    676:        while (cp = *ap++) {
                    677:            if ((adrp = *ap++) == NULLCP) {
                    678:                fprintf (stderr,
                    679:                         "missing address for tsb_community \"%s\"\n", cp);
                    680:                break;
                    681:            }
                    682: 
                    683:            for (ts = ts_interim; ts -> ts_name; ts++)
                    684:                if (lexequ (ts -> ts_name, cp) == 0)
                    685:                    break;
                    686:            if (!ts -> ts_name) {
                    687:                fprintf (stderr,
                    688:                         "unknown community name \"%s\" for variable tsb_communities\n",
                    689:                         cp);
                    690:                continue;
                    691:            }
                    692: 
                    693:            for (jp = tsb_communities; jp < ip; jp++)
                    694:                if (*jp == ts -> ts_subnet)
                    695:                    break;
                    696:            if (jp >= ip) {
                    697:                *ip++ = ts -> ts_subnet, *cpp++ = strdup (adrp);
                    698: 
                    699:                for (kp = ts_communities; *kp; kp++)
                    700:                    if (*kp == ts -> ts_subnet)
                    701:                        break;
                    702:                if (!*kp)
                    703:                    *kp++ = ts -> ts_subnet, *kp = NULL;
                    704:            }
                    705:        }
                    706:        *ip = NULL, *cpp = NULLCP;
                    707: 
                    708:        cp = _ts_comm_nsap_default;
                    709:        for (ts = ts_interim; ts -> ts_name; ts++)
                    710:            if (lexequ (ts -> ts_name, cp) == 0)
                    711:                break;
                    712:        if (ts -> ts_name && ts -> ts_syntax == NA_NSAP)
                    713:            ts_comm_nsap_default = ts -> ts_subnet;
                    714:        else
                    715:            fprintf (stderr,
                    716:                     "bad community name \"%s\" for variable default_nsap_community\n",
                    717:                     cp);
                    718: 
                    719:        cp = _ts_comm_x25_default;
                    720:        for (ts = ts_interim; ts -> ts_name; ts++)
                    721:            if (lexequ (ts -> ts_name, cp) == 0)
                    722:                break;
                    723:        if (ts -> ts_name && ts -> ts_syntax == NA_X25)
                    724:            ts_comm_x25_default = ts -> ts_subnet;
                    725:        else
                    726:            fprintf (stderr,
                    727:                     "bad community name \"%s\" for variable default_x25_community\n",
                    728:                     cp);
                    729: 
                    730:        cp = _ts_comm_tcp_default;
                    731:        for (ts = ts_interim; ts -> ts_name; ts++)
                    732:            if (lexequ (ts -> ts_name, cp) == 0)
                    733:                break;
                    734:        if (ts -> ts_name && ts -> ts_syntax == NA_TCP)
                    735:            ts_comm_tcp_default = ts -> ts_subnet;
                    736:        else
                    737:            fprintf (stderr,
                    738:                     "bad community name \"%s\" for variable default_tcp_community\n",
                    739:                     cp);
                    740: 
                    741:        if (addr_log -> ll_events & LLOG_DEBUG) {
                    742:            LLOG (addr_log, LLOG_DEBUG,
                    743:                  ("ts_stacks: %s", sprintb (ts_stacks, TS_MASK)));
                    744: 
                    745:            for (ts = ts_interim; ts -> ts_name; ts++) {
                    746:                LLOG (addr_log, LLOG_DEBUG,
                    747:                      ("community %s value \"%s\" subnet %d syntax %d",
                    748:                       ts -> ts_name, ts -> ts_value ? ts -> ts_value : "",
                    749:                       ts -> ts_subnet, ts -> ts_syntax));
                    750:                buffer[explode(buffer, (u_char *) ts -> ts_prefix,
                    751:                               ts -> ts_length)] = NULL;
                    752:                LLOG (addr_log, LLOG_DEBUG,
                    753:                      ("    prefix \"%s\" (%d octets)", buffer,
                    754:                       ts -> ts_length));
                    755:            }
                    756: 
                    757:            for (ip = ts_communities; *ip; ip++)
                    758:                LLOG (addr_log, LLOG_DEBUG, ("community %d enabled", *ip));
                    759: 
                    760:            LLOG (addr_log, LLOG_DEBUG,
                    761:                  ("default communities: nsap=%d x25=%d tcp=%d",
                    762:                   ts_comm_nsap_default, ts_comm_x25_default,
                    763:                   ts_comm_tcp_default));
                    764: 
                    765:            for (ip = tsb_communities, cpp = tsb_addresses; *ip; ip++, cpp++) {
                    766:                LLOG (addr_log, LLOG_DEBUG,
                    767:                      ("TSB for community %d residing at %s", *ip, *cpp));
                    768:                if (str2taddr (*cpp) == NULLTA)
                    769:                    LLOG (addr_log, LLOG_EXCEPTIONS,
                    770:                          ("invalid address for TSB to community %d: %s",
                    771:                           *ip, *cpp));
                    772:            }
                    773:        }
                    774:     }
                    775: 
                    776: #ifdef X25
                    777:     reverse_charge = (u_char) atoi (reverse_charge_default);
                    778:     recvpktsize = (u_short) atoi (recvpktsize_default);
                    779:     sendpktsize = (u_short) atoi (sendpktsize_default);
                    780:     recvwndsize = (u_char) atoi (recvwndsize_default);
                    781:     sendwndsize = (u_char) atoi (sendwndsize_default);
                    782:     recvthruput = (u_char) atoi (recvthruput_default);
                    783:     sendthruput = (u_char) atoi (sendthruput_default);
                    784:     cug_req = (u_char) atoi (cug_req_default);
                    785:     cug_index = (u_char) atoi (cug_index_default);
                    786:     fast_select_type = (u_char) atoi (fast_select_type_default);
                    787:     rpoa_req = atoi (rpoa_req_default);
                    788:     rpoa = (u_short) atoi (rpoa_default);
                    789: 
                    790: #ifdef CAMTEC_CCL
                    791:     x25_outgoing_port = *x25_outgoing_port_str;
                    792: #endif
                    793: 
                    794:     x25_intl_zero = !strcmp (x25_intl_zero_str, "on");
                    795:     x25_strip_dnic =  !strcmp (x25_strip_dnic_str, "on");
                    796: #endif
                    797: 
                    798: #if    defined (BRIDGE_X25) || defined (X25)
                    799:     x25_bridge_port = htons ((u_short) atoi (x25_bridge_port_default));
                    800: #endif
                    801: 
                    802:     ns_enabled = !strcmp (usens, "on");
                    803: }
                    804: 
                    805: /*  */
                    806: 
                    807: #define        QUOTE   '\\'
                    808: 
                    809: 
                    810: static char *tailor_value (s)
                    811: register char   *s;
                    812: {
                    813:     register int    i,
                    814:                     r;
                    815:     register char  *bp;
                    816:     char    buffer[BUFSIZ];
                    817: 
                    818:     for (bp = buffer; *s; bp++, s++)
                    819:        if (*s != QUOTE)
                    820:            *bp = *s;
                    821:        else
                    822:            switch (*++s) {
                    823:                case '0':
                    824:                    *bp = '\0';
                    825:                    break;
                    826:                case 'b':
                    827:                    *bp = '\b';
                    828:                    break;
                    829:                case 'f':
                    830:                    *bp = '\f';
                    831:                    break;
                    832:                case 'n':
                    833:                    *bp = '\n';
                    834:                    break;
                    835:                case 'r':
                    836:                    *bp = '\r';
                    837:                    break;
                    838:                case 't':
                    839:                    *bp = '\t';
                    840:                    break;
                    841: 
                    842:                case NULL: s--;
                    843:                case QUOTE: 
                    844:                    *bp = QUOTE;
                    845:                    break;
                    846: 
                    847:                default: 
                    848:                    if (!isdigit (*s)) {
                    849:                        *bp++ = QUOTE;
                    850:                        *bp = *s;
                    851:                        break;
                    852:                    }
                    853:                    r = *s != '0' ? 10 : 8;
                    854:                    for (i = 0; isdigit (*s); s++)
                    855:                        i = i * r + *s - '0';
                    856:                    s--;
                    857:                    *bp = toascii (i);
                    858:                    break;
                    859:            }
                    860:     *bp = NULL;
                    861: 
                    862:     if ((bp = malloc ((unsigned) (strlen (buffer) + 1))) != NULL)
                    863:        (void) strcpy (bp, buffer);
                    864: 
                    865:     return bp;
                    866: }
                    867: 
                    868: /*  */
                    869: 
                    870: static int  events_value (pairs, s, var)
                    871: struct pair *pairs;
                    872: char   *s,
                    873:        *var;
                    874: {
                    875:     int     value;
                    876:     register char  *cp,
                    877:                   **ap;
                    878:     register struct pair   *pp;
                    879:     char    buffer[BUFSIZ],
                    880:           *vec[NVEC + NSLACK + 1];
                    881: 
                    882:     value = 0;
                    883:     (void) strcpy (buffer, s);
                    884:     (void) str2vec (buffer, ap = vec);
                    885:     while (cp = *ap++) {
                    886:        for (pp = pairs; pp -> p_name; pp++) 
                    887:            if (strcmp (pp -> p_name, cp) == 0) {
                    888:                value |= pp -> p_value;
                    889:                break;
                    890:            }
                    891:        if (!pp -> p_name)
                    892:            fprintf (stderr, "unknown value \"%s\" for variable %s\n",
                    893:                     cp, var);
                    894:     }
                    895: 
                    896:     return value;
                    897: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.