|
|
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.