|
|
1.1 root 1: /* aetdbm.c - application entity titles -- dbm lookup */
2:
3: #ifndef lint
4: static char *rcsid = "$Header: /f/osi/acsap/RCS/aetdbm.c,v 7.0 89/11/23 21:22:05 mrose Rel $";
5: #endif
6:
7: /*
8: * $Header: /f/osi/acsap/RCS/aetdbm.c,v 7.0 89/11/23 21:22:05 mrose Rel $
9: *
10: *
11: * $Log: aetdbm.c,v $
12: * Revision 7.0 89/11/23 21:22:05 mrose
13: * Release 6.0
14: *
15: */
16:
17: /*
18: * NOTICE
19: *
20: * Acquisition, use, and distribution of this module and related
21: * materials are subject to the restrictions of a license agreement.
22: * Consult the Preface in the User's Manual for the full terms of
23: * this agreement.
24: *
25: */
26:
27:
28: /* LINTLIBRARY */
29:
30: #include <stdio.h>
31: #include "psap.h"
32: #include "isoaddrs.h"
33: #include "tailor.h"
34:
35: #ifdef AETDBM
36: #undef NULL
37: #include <dbm.h>
38:
39: /* DATA */
40:
41: struct dbm_entry {
42: struct isoentity dbm_entity;
43:
44: unsigned int dbm_elements[NELEM + 1];
45: };
46:
47:
48: static char *isoentities = "isoentities";
49:
50: static int inited = 0;
51:
52: static unsigned int elements[NELEM + 1];
53: static char objent[BUFSIZ];
54:
55: /* */
56:
57: int str2aet_dbm (designator, qualifier, iep)
58: char *designator,
59: *qualifier;
60: struct isoentity *iep;
61: {
62: char *cp,
63: defent[BUFSIZ];
64: register struct isoentity *ie;
65: struct isoentity ids,
66: ies;
67: register struct dbm_entry *entry;
68: datum key,
69: value;
70:
71: if (inited == 0) {
72: if (dbminit (cp = isodefile (isoentities, 0)) < 0) {
73: SLOG (addr_log, LLOG_EXCEPTIONS, NULLCP,
74: ("unable to initialize %s", cp));
75:
76: return str2aet_seq (designator, qualifier, iep);
77: }
78:
79: inited = 1;
80: }
81:
82: (void) sprintf (objent, "%s-%s", designator, qualifier);
83:
84: ie = &ies;
85:
86: key.dsize = strlen (key.dptr = objent) + 1;
87: value = fetch (key);
88: if (entry = (struct dbm_entry *) value.dptr) {
89: if (value.dsize != sizeof *entry) {
90: SLOG (addr_log, LLOG_EXCEPTIONS, NULLCP,
91: ("isoentities dbm corrupt!"));
92:
93: return str2aet_seq (designator, qualifier, iep);
94: }
95:
96: bcopy ((char *) &entry -> dbm_entity, (char *) ie, sizeof *ie);
97: bcopy ((char *) entry -> dbm_elements, (char *) elements,
98: sizeof elements);
99: ie -> ie_identifier.oid_elements = elements;
100: ie -> ie_descriptor = objent;
101: }
102: else {
103: (void) sprintf (defent, "%s-%s", "default", qualifier);
104: key.dsize = strlen (key.dptr = defent) + 1;
105: value = fetch (key);
106: if (entry = (struct dbm_entry *) value.dptr) {
107: if (value.dsize != sizeof *entry) {
108: SLOG (addr_log, LLOG_EXCEPTIONS, NULLCP,
109: ("isoentities dbm corrupt!"));
110:
111: return str2aet_seq (designator, qualifier, iep);
112: }
113:
114: bcopy ((char *) &entry -> dbm_entity, (char *) ie, sizeof *ie);
115: bcopy ((char *) entry -> dbm_elements, (char *) elements,
116: sizeof elements);
117: ie -> ie_identifier.oid_elements = elements;
118: ie -> ie_descriptor = objent;
119: }
120: else
121: return NOTOK;
122:
123: (void) sprintf (defent, "%s-%s", designator, "default");
124: key.dsize = strlen (key.dptr = defent) + 1;
125: value = fetch (key);
126: if (entry = (struct dbm_entry *) value.dptr) {
127: if (value.dsize != sizeof *entry) {
128: SLOG (addr_log, LLOG_EXCEPTIONS, NULLCP,
129: ("isoentities dbm corrupt!"));
130:
131: return str2aet_seq (designator, qualifier, iep);
132: }
133:
134: bcopy ((char *) &entry -> dbm_entity, (char *) &ids, sizeof ids);
135: ids.ie_identifier.oid_elements = entry -> dbm_elements;
136: ids.ie_descriptor = objent;
137:
138: bcopy ((char *) ids.ie_addr.pa_addr.sa_addr.ta_addrs,
139: (char *) ie -> ie_addr.pa_addr.sa_addr.ta_addrs,
140: sizeof ie -> ie_addr.pa_addr.sa_addr.ta_addrs);
141: ie -> ie_addr.pa_addr.sa_addr.ta_naddr =
142: ids.ie_addr.pa_addr.sa_addr.ta_naddr;
143: }
144: }
145:
146: *iep = *ie; /* struct copy */
147:
148: return OK;
149: }
150: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.