Annotation of 43BSDReno/contrib/isode-beta/acsap/acsapstub.c, revision 1.1.1.1

1.1       root        1: /* acsapstub.c - application entity titles -- stub directory service */
                      2: 
                      3: #ifndef        lint
                      4: static char *rcsid = "$Header: /f/osi/acsap/RCS/acsapstub.c,v 7.1 90/07/09 14:30:41 mrose Exp $";
                      5: #endif
                      6: 
                      7: /* 
                      8:  * $Header: /f/osi/acsap/RCS/acsapstub.c,v 7.1 90/07/09 14:30:41 mrose Exp $
                      9:  *
                     10:  * RFC1085 (LPP) support contributed by the Wollongong Group, Inc.
                     11:  *
                     12:  *
                     13:  * $Log:       acsapstub.c,v $
                     14:  * Revision 7.1  90/07/09  14:30:41  mrose
                     15:  * sync
                     16:  * 
                     17:  * Revision 7.0  89/11/23  21:22:00  mrose
                     18:  * Release 6.0
                     19:  * 
                     20:  */
                     21: 
                     22: /*
                     23:  *                               NOTICE
                     24:  *
                     25:  *    Acquisition, use, and distribution of this module and related
                     26:  *    materials are subject to the restrictions of a license agreement.
                     27:  *    Consult the Preface in the User's Manual for the full terms of
                     28:  *    this agreement.
                     29:  *
                     30:  */
                     31: 
                     32: 
                     33: /* LINTLIBRARY */
                     34: 
                     35: #include <ctype.h>
                     36: #include <stdio.h>
                     37: #include "psap.h"
                     38: #include "isoaddrs.h"
                     39: #include "internet.h"
                     40: #include "tailor.h"
                     41: 
                     42: 
                     43: #ifdef AETDBM
                     44: #define        fetch_aet       str2aet_dbm
                     45: #else
                     46: #define        fetch_aet       str2aet_seq
                     47: #endif
                     48: 
                     49: /*    DATA */
                     50: 
                     51: static struct isoentity ies;
                     52: 
                     53: /*  */
                     54: 
                     55: AEI    str2aei_stub (designator, qualifier)
                     56: char   *designator,
                     57:        *qualifier;
                     58: {
                     59: #ifdef LPP
                     60:     register int    n;
                     61:     int            tcp_port,
                     62:            udp_port;
                     63:     register struct servent *sp;
                     64: #endif
                     65:     register char  *cp;
                     66:     register struct NSAPaddr *na;
                     67:     register struct isoentity  *ie = &ies;
                     68: 
                     69:     if (fetch_aet (designator, qualifier, &ies) == NOTOK) {
                     70: #ifdef LPP
                     71:        if (lpp_aet (designator, qualifier, &ies) != NOTOK)
                     72:            goto found_it;
                     73: #endif
                     74: 
                     75:        return NULLAEI;
                     76:     }
                     77: 
                     78:     if (ie -> ie_addr.pa_addr.sa_addr.ta_naddr <= 0) {
                     79:        register int    i;
                     80:        register struct TSAPaddr *ta = &ie -> ie_addr.pa_addr.sa_addr;
                     81: 
                     82:        na = ta -> ta_addrs, ta -> ta_naddr = 1;
                     83:        bzero ((char *) na, sizeof *na);
                     84: 
                     85:        /* guess at what sort of address we have on our hands */
                     86: 
                     87:        if ((i = strlen (cp = designator)) > 6
                     88:                && cp[0] == '4' && cp[2] == '0' && cp[3] == '0') {
                     89:            na -> na_stack = NA_NSAP;
                     90:            na -> na_community = ts_comm_nsap_default;
                     91:            na -> na_addrlen = implode ((u_char *) na -> na_address,
                     92:                                        cp, strlen (cp));
                     93:            goto found_it;
                     94:        }
                     95: 
                     96:        if (i <= NSAP_DTELEN + 1)
                     97:           for (; *cp; cp++)
                     98:               if (!isxdigit (*cp))
                     99:                   break;
                    100:        if (*cp) {
                    101:            register struct hostent *hp = gethostbystring (designator);
                    102: 
                    103:            na -> na_stack = NA_TCP;
                    104:            na -> na_community = ts_comm_tcp_default;
                    105:            if (hp) {
                    106: #ifdef h_addr
                    107:                register char **ap;
                    108: #endif
                    109: 
                    110:                (void) strcpy (na -> na_domain,
                    111:                               inet_ntoa (*(struct in_addr *) hp -> h_addr));
                    112: #ifdef h_addr
                    113:                for (ap = hp -> h_addr_list + 1; *ap; ap++) {
                    114:                    ta -> ta_naddr++, na++;
                    115: 
                    116:                    if (ta -> ta_naddr >= NTADDR)
                    117:                        break;
                    118: 
                    119:                    bzero ((char *) na, sizeof *na);
                    120:                    na -> na_stack = NA_TCP;
                    121:                    na -> na_community = ts_comm_tcp_default;
                    122:                    (void) strcpy (na -> na_domain,
                    123:                                   inet_ntoa (*(struct in_addr *) *ap));
                    124:                }
                    125: #endif
                    126:            }
                    127:            else
                    128:                (void) strncpy (na -> na_domain, designator,
                    129:                                sizeof na -> na_domain);
                    130:        }
                    131:        else {
                    132:           (void) strcpy (na -> na_dte, designator);
                    133:           na -> na_dtelen = strlen (na -> na_dte);
                    134: #ifdef BRIDGE_X25
                    135:           na -> na_stack = bridgediscrim (na) ? NA_BRG : NA_X25;
                    136: #else
                    137:           na -> na_stack = NA_X25;
                    138: #endif
                    139:           na -> na_community = ts_comm_x25_default;
                    140:        }
                    141:     }
                    142: 
                    143: #ifdef LPP
                    144:     for (na = ie -> ie_addr.pa_addr.sa_addr.ta_addrs,
                    145:                n = ie -> ie_addr.pa_addr.sa_addr.ta_naddr;
                    146:             n > 0;
                    147:             na++, n--)
                    148:        if (na -> na_stack == NA_TCP && na -> na_port == 0) {
                    149:            cp = strncmp (qualifier, "isode ", 6) ? qualifier : qualifier + 6;
                    150:            if (sp = getservbyname (cp, "lpp"))
                    151:                tcp_port = udp_port = sp -> s_port;
                    152:            else {
                    153:                tcp_port = (sp = getservbyname (cp, "tcp")) ? sp -> s_port : 0;
                    154:                udp_port = (sp = getservbyname (cp, "udp")) ? sp -> s_port : 0;
                    155:            }
                    156:            break;
                    157:        }
                    158: 
                    159:     for (na = ie -> ie_addr.pa_addr.sa_addr.ta_addrs,
                    160:                n = ie -> ie_addr.pa_addr.sa_addr.ta_naddr;
                    161:             n > 0;
                    162:             na++, n--)
                    163:        if (na -> na_stack == NA_TCP && na -> na_port == 0) {
                    164:            register struct TSAPaddr *ta;
                    165: 
                    166:            if (tcp_port) {
                    167:                na -> na_port = (u_short) tcp_port;
                    168:                na -> na_tset = NA_TSET_TCP;
                    169: 
                    170:                if (udp_port
                    171:                        && (ta = &ie -> ie_addr.pa_addr.sa_addr) -> ta_naddr
                    172:                                    < NTADDR) {
                    173:                    register struct NSAPaddr *ua =
                    174:                                            ta -> ta_addrs + ta -> ta_naddr++;
                    175: 
                    176:                    bzero ((char *) ua, sizeof *ua);
                    177:                    ua -> na_stack = NA_TCP;
                    178:                    ua -> na_community = ts_comm_tcp_default;
                    179:                    (void) strncpy (ua -> na_domain, na -> na_domain,
                    180:                                    sizeof ua -> na_domain);
                    181:                    ua -> na_port = (u_short) udp_port;
                    182:                    ua -> na_tset = NA_TSET_UDP;
                    183:                }
                    184:            }
                    185:            else
                    186:                if (udp_port) {
                    187:                    na -> na_port = (u_short) udp_port;
                    188:                    na -> na_tset = NA_TSET_UDP;
                    189:                }
                    190:        }
                    191: #endif
                    192: 
                    193: found_it: ;
                    194:     if (addr_log -> ll_events & LLOG_DEBUG)
                    195:        _printent (ie);
                    196: 
                    197:     return oid2aei (&ie -> ie_identifier);
                    198: }
                    199: 
                    200: /*  */
                    201: 
                    202: #ifdef LPP
                    203: static unsigned int elements[NELEM + 1];
                    204: static char objent[BUFSIZ];
                    205: 
                    206: 
                    207: static int  lpp_aet (designator, qualifier, ie)
                    208: char   *designator,
                    209:        *qualifier;
                    210: register struct isoentity *ie;
                    211: {
                    212:     register int    nelem;
                    213:     int            tcp_port,
                    214:            udp_port;
                    215:     char   *cp;
                    216:     register struct servent *sp;
                    217:     register OID       oid = &ie -> ie_identifier;
                    218:     register struct PSAPaddr *pa = &ie -> ie_addr;
                    219:     register struct TSAPaddr *ta = &pa -> pa_addr.sa_addr;
                    220:     register struct NSAPaddr *na;
                    221: 
                    222:     cp = strncmp (qualifier, "isode ", 6) ? qualifier : qualifier + 6;
                    223:     if (sp = getservbyname (cp, "lpp"))
                    224:        tcp_port = udp_port = sp -> s_port;
                    225:     else
                    226:        if ((tcp_port = (sp = getservbyname (cp, "tcp")) ? sp -> s_port : 0)
                    227:                    == 0
                    228:                && (udp_port = (sp = getservbyname (cp, "udp")) ? sp -> s_port 
                    229:                                                                : 0) == 0)
                    230:            return NOTOK;
                    231: 
                    232:     nelem = 0;
                    233:     elements[nelem++] = 1, elements[nelem++] = 17, elements[nelem++] = 4,
                    234:     elements[nelem++] = 0, elements[nelem++] = 0;
                    235: 
                    236:     oid -> oid_elements = elements;
                    237:     oid -> oid_nelem = nelem;
                    238:     (void) sprintf (ie -> ie_descriptor = objent, "%s-%s", designator,
                    239:                    qualifier);
                    240: 
                    241:     (void) bzero ((char *) pa, sizeof *pa);
                    242:     na = ta -> ta_addrs;
                    243:     if (tcp_port) {
                    244:        na -> na_stack = NA_TCP;
                    245:        na -> na_community = ts_comm_tcp_default;
                    246:        (void) strncpy (na -> na_domain, designator, sizeof na -> na_domain);
                    247:        na -> na_port = (u_short) tcp_port;
                    248:        na -> na_tset = NA_TSET_TCP;
                    249:        na++;
                    250:     }
                    251:     if (udp_port) {
                    252:        na -> na_stack = NA_TCP;
                    253:        na -> na_community = ts_comm_tcp_default;
                    254:        (void) strncpy (na -> na_domain, designator, sizeof na -> na_domain);
                    255:        na -> na_port = (u_short) udp_port;
                    256:        na -> na_tset = NA_TSET_UDP;
                    257:        na++;
                    258:     }
                    259:     ta -> ta_naddr = na - ta -> ta_addrs;
                    260:     
                    261:     return OK;
                    262: }
                    263: #endif
                    264: 
                    265: /*  */
                    266: 
                    267: struct PSAPaddr *aei2addr_stub (aei)
                    268: AEI    aei;
                    269: {
                    270:     register struct isoentity  *ie = &ies;
                    271:     register struct PSAPaddr   *pa;
                    272: 
                    273:     if (aei -> aei_ap_title
                    274:            ? oid_cmp (&ie -> ie_identifier, prim2oid (aei -> aei_ap_title))
                    275:            : ie -> ie_identifier.oid_nelem > 0) {
                    276:        SLOG (addr_log, LLOG_EXCEPTIONS, NULLCP,
                    277:              ("aei2addr_stub cache miss on %s", sprintaei (aei)));
                    278: 
                    279:        return NULLPA;
                    280:     }
                    281:     pa = &ie -> ie_addr;
                    282:     if (addr_log -> ll_events & LLOG_DEBUG)
                    283:        _printent (ie);
                    284: 
                    285:     return (pa -> pa_addr.sa_addr.ta_naddr > 0 ? pa : NULLPA);
                    286: }
                    287: 
                    288: /*  */
                    289: 
                    290: #ifdef LPP
                    291: /* ARGSUSED */
                    292: 
                    293: AEI    str2aei_dse (designator, qualifier, context, interactive)
                    294: char   *designator,
                    295:        *qualifier,
                    296:        *context;
                    297: int    interactive;
                    298: {
                    299:     SLOG (addr_log, LLOG_EXCEPTIONS, NULLCP,
                    300:          ("DSE lookup not supported for LPP"));
                    301:     return NULLAEI;
                    302: }
                    303: 
                    304: 
                    305: /* ARGSUSED */
                    306: 
                    307: struct PSAPaddr *aei2addr_dse (aei)
                    308: AEI    aei;
                    309: {
                    310:     SLOG (addr_log, LLOG_EXCEPTIONS, NULLCP,
                    311:          ("DSE lookup not supported for LPP"));
                    312: 
                    313:     return NULLPA;
                    314: }
                    315: #endif

unix.superglobalmegacorp.com

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