|
|
1.1 root 1: -- quipu-dec.py - additional QUIPU directory type definitions module
2:
3: -- $Header: /f/osi/dsap/x500as/RCS/qu-dec.py,v 7.0 89/11/23 21:50:45 mrose Rel $
4: --
5: --
6: -- $Log: qu-dec.py,v $
7: -- Revision 7.0 89/11/23 21:50:45 mrose
8: -- Release 6.0
9: --
10:
11: --
12: -- NOTICE
13: --
14: -- Acquisition, use, and distribution of this module and related
15: -- materials are subject to the restrictions of a license agreement.
16: -- Consult the Preface in the User's Manual for the full terms of
17: -- this agreement.
18: --
19: --
20:
21:
22: Quipu
23: {
24: ccitt
25: data(9)
26: pss(2342)
27: ucl(19200300)
28: quipu(99)
29: directoryDefinitions(1)
30: }
31:
32: DEFINITIONS ::=
33:
34: %{
35: #include <stdio.h>
36: #include "quipu/util.h"
37: #include "quipu/entry.h"
38: #include "quipu/authen.h"
39:
40: extern LLog * log_dsap;
41: #define decode_UNIV_PrintableString parse_UNIV_PrintableString
42: #define decode_UNIV_UTCTime parse_UNIV_UTCTime
43: %}
44:
45: PREFIXES encode decode print
46:
47: BEGIN
48:
49: IMPORTS
50: NameError ,
51: ServiceError ,
52: SecurityError
53: FROM DAS
54: {
55: joint-iso-ccitt
56: ds(5)
57: modules(1)
58: directoryAbstractService(2)
59: }
60:
61: DistinguishedName ,
62: RelativeDistinguishedName ,
63: Attribute ,
64: AttributeType
65: FROM IF
66: {
67: joint-iso-ccitt
68: ds(5)
69: modules(1)
70: informationFramework(1)
71: }
72:
73: AlgorithmIdentifier
74: FROM AF {
75: joint-iso-ccitt
76: ds(5)
77: modules(1)
78: authenticationFramework(7)
79: };
80:
81: -- ReliableROSData
82: -- ::=
83: -- SEQUENCE
84: -- {
85: -- rosOperation
86: -- INTEGER ,
87: -- the operation being applied
88: -- data
89: -- ANY ,
90: -- the Operation Argument
91: -- oldVersion
92: -- ANY ,
93: -- data version to which operation should be applied
94: -- newVersion
95: -- ANY
96: -- version number which results from operation
97: -- }
98:
99: DECODER decode
100:
101: AccessSelector [[P struct acl_info *]]
102: ::=
103: %{
104: DLOG(log_dsap, LLOG_PDUS, ("About to decode AccessSelector"));
105: parm->acl_name = NULLDNSEQ;
106: %}
107: CHOICE
108: {
109: entry
110: [0] NULL
111: %{
112: parm->acl_selector_type = ACL_ENTRY;
113: %} ,
114: other
115: [2] NULL
116: %{
117: parm->acl_selector_type = ACL_OTHER;
118: %} ,
119: prefix
120: [3] NameList [[p &(parm->acl_name)]]
121: %{
122: parm->acl_selector_type = ACL_PREFIX;
123: %} ,
124: group
125: [4] NameList [[p &(parm->acl_name)]]
126: %{
127: parm->acl_selector_type = ACL_GROUP;
128: %}
129: }
130: %{
131: DLOG(log_dsap, LLOG_PDUS, ("Done decode AccessSelector"));
132: %}
133:
134: AccessCategories [[P u_char *]]
135: ::=
136: %{
137: DLOG(log_dsap, LLOG_PDUS, ("About to decode AccessCategories"));
138: %}
139: ENUMERATED [[i (*parm)]]
140: {
141: none (0) ,
142: detect (1) ,
143: compare (2) ,
144: read (3) ,
145: add (4) ,
146: write (5)
147: }
148: %{
149: DLOG(log_dsap, LLOG_PDUS, ("Done decode AccessCategories"));
150: %}
151:
152: ACLInfo [[P struct acl_info * *]]
153: %{
154: %}
155: ::=
156: %{
157: DLOG(log_dsap, LLOG_PDUS, ("About to decode ACLInfo"));
158: %}
159: SET OF
160: %{
161: (*parm) = (struct acl_info *) malloc(sizeof(struct acl_info));
162: %}
163: SEQUENCE
164: {
165: AccessSelector [[p (*parm)]] ,
166: AccessCategories [[p &((*parm)->acl_categories)]]
167: }
168: %{
169: parm = &((*parm)->acl_next);
170: %}
171: %{
172: (*parm) = NULLACL_INFO;
173: DLOG(log_dsap, LLOG_PDUS, ("Done decode ACLInfo"));
174: %}
175:
176: AttributeACL [[P struct acl_attr *]]
177: %{
178: struct oid_seq * osp;
179: %}
180: ::=
181: %{
182: DLOG(log_dsap, LLOG_PDUS, ("About to decode AttributeACL"));
183: parm->aa_types = NULLOIDSEQ;
184: parm->aa_acl = acl_dflt();
185: parm->aa_next = NULLACL_ATTR;
186: %}
187: SEQUENCE
188: {
189: SET OF
190: %{
191: osp = (struct oid_seq *) malloc(sizeof(struct oid_seq));
192: osp->oid_oid = NULLOID;
193: osp->oid_next = NULLOIDSEQ;
194: %}
195: -- AttributeType
196: OBJECT IDENTIFIER [[O osp->oid_oid]]
197: %{
198: parm->aa_types = oid_seq_merge(parm->aa_types, osp);
199: %} ,
200: ACLInfo [[p &(parm->aa_acl)]]
201: -- DEFAULT {{other , read}, {entry, write}}
202: OPTIONAL
203: }
204: %{
205: DLOG(log_dsap, LLOG_PDUS, ("Done decode AttributeACL"));
206: %}
207:
208: ACLSyntax [[P struct acl *]]
209: %{
210: struct acl_attr **aap;
211: %}
212: ::=
213: %{
214: DLOG(log_dsap, LLOG_PDUS, ("About to decode ACLSyntax"));
215: parm->ac_child = acl_dflt();
216: parm->ac_entry = acl_dflt();
217: parm->ac_default = acl_dflt();
218: parm->ac_attributes = NULLACL_ATTR;
219: aap = &(parm->ac_attributes);
220: %}
221: SEQUENCE
222: {
223: childACL
224: [0] ACLInfo [[p &(parm->ac_child)]]
225: -- DEFAULT {{other , read}, {entry, write}} ,
226: OPTIONAL ,
227: entryACL
228: [1] ACLInfo [[p &(parm->ac_entry)]]
229: -- DEFAULT {{other , read}, {entry, write}} ,
230: OPTIONAL ,
231: defaultAttributeACL
232: [2] ACLInfo [[p &(parm->ac_default)]]
233: -- DEFAULT {{other , read}, {entry, write}} ,
234: OPTIONAL ,
235: [3] SET OF
236: %{
237: (*aap) = (struct acl_attr *) malloc(sizeof(struct acl_attr));
238: %}
239: AttributeACL [[p (*aap)]]
240: %{
241: aap = &((*aap)->aa_next);
242: %}
243: %{
244: (*aap) = NULLACL_ATTR;
245: %}
246: }
247: %{
248: DLOG(log_dsap, LLOG_PDUS, ("Done decode ACLSyntax"));
249: %}
250:
251: NameList [[P struct dn_seq **]]
252: ::=
253: %{
254: DLOG(log_dsap, LLOG_PDUS, ("About to decode NameList"));
255: *parm = NULLDNSEQ;
256: %}
257: SET OF
258: %{
259: *parm = (struct dn_seq *) malloc(sizeof(struct dn_seq));
260: %}
261: DistinguishedName [[p &((*parm)->dns_dn)]]
262: %{
263: parm = &((*parm)->dns_next);
264: %}
265: %{
266: (*parm) = NULLDNSEQ;
267: DLOG(log_dsap, LLOG_PDUS, ("Done decode NameList"));
268: %}
269:
270: EDBInfoSyntax [[P struct edb_info *]]
271: ::=
272: %{
273: DLOG(log_dsap, LLOG_PDUS, ("About to decode EDBInfoSyntax"));
274: parm->edb_name = NULLDN;
275: parm->edb_getfrom = NULLDN;
276: parm->edb_sendto = NULLDNSEQ;
277: parm->edb_allowed = NULLDNSEQ;
278: %}
279: SEQUENCE
280: {
281: edb
282: DistinguishedName [[p &(parm->edb_name)]] ,
283: getFromDSA
284: DistinguishedName [[p &(parm->edb_getfrom)]]
285: OPTIONAL ,
286: sendToDSAs
287: %{
288: DLOG(log_dsap, LLOG_PDUS, ("decode sendToDSAs"));
289: %}
290: NameList [[p &(parm->edb_sendto)]] ,
291: getEDBAllowed
292: %{
293: DLOG(log_dsap, LLOG_PDUS, ("decode getEDBAllowed"));
294: %}
295: NameList [[p &(parm->edb_allowed)]]
296: }
297: %{
298: DLOG(log_dsap, LLOG_PDUS, ("Done decode EDBInfoSyntax"));
299: %}
300:
301: TreeStructureSyntax [[P struct tree_struct **]]
302: %{
303: AttributeType at_tmp;
304: OID oid_tmp;
305: int is_first;
306: objectclass * oc_add();
307: %}
308: ::=
309: %{
310: DLOG(log_dsap, LLOG_PDUS, ("About to decode TreeStructureSyntax"));
311: is_first = 1;
312: %}
313: SET
314: {
315: mandatoryObjectClasses
316: [1] SET OF
317: OBJECT IDENTIFIER [[O oid_tmp]]
318: %{
319: if(is_first != 0)
320: {
321: (*parm) = tree_struct_alloc();
322: if (((*parm)->tree_object = oid2oc(oid_tmp)) == NULLOBJECTCLASS)
323: (*parm)->tree_object = oc_add (oid_tmp);
324: is_first = 0;
325: }
326: else
327: {
328: LLOG(log_dsap, LLOG_EXCEPTIONS, ("Multiple mandatory object classes"));
329: }
330: %} ,
331: optionalObjectClasses
332: [2] SET OF
333: OBJECT IDENTIFIER
334: OPTIONAL ,
335: permittedRDNs
336: [3] SET OF
337: SET OF
338: AttributeType [[p & at_tmp]]
339: %{
340: %}
341: }
342: %{
343: DLOG(log_dsap, LLOG_PDUS, ("Done decode TreeStructureSyntax"));
344: %}
345:
346: EntryDataBlock [[P struct entry **]]
347: %{
348: struct entry **ent_tmp;
349: %}
350: ::=
351: %{
352: DLOG(log_dsap, LLOG_TRACE, ("About to decode EntryDataBlock"));
353: (*parm) = NULLENTRY;
354: ent_tmp = parm;
355: %}
356: SEQUENCE OF
357: %{
358: (*ent_tmp) = entry_alloc();
359: (*ent_tmp)->e_leaf = TRUE;
360: (*ent_tmp)->e_complete = TRUE;
361: (*ent_tmp)->e_data = E_TYPE_SLAVE;
362: %}
363: RelativeEntry [[p (*ent_tmp)]]
364: %{
365: ent_tmp = &((*ent_tmp)->e_sibling);
366: %}
367: %{
368: (*ent_tmp) = NULLENTRY;
369: DLOG(log_dsap, LLOG_TRACE, ("Done decode EntryDataBlock"));
370: %}
371:
372: RelativeEntry [[P struct entry *]]
373: %{
374: Attr_Sequence as_tmp;
375: %}
376: ::=
377: %{
378: DLOG(log_dsap, LLOG_PDUS, ("About to decode RelativeEntry"));
379: parm->e_name = NULLRDN;
380: parm->e_attributes = NULLATTR;
381: %}
382: SEQUENCE
383: {
384: RelativeDistinguishedName [[p &(parm->e_name)]] ,
385: SET OF
386: %{
387: as_tmp = as_comp_alloc();
388: as_tmp->attr_value = NULLAV;
389: as_tmp->attr_acl = NULLACL_INFO;
390: as_tmp->attr_link = NULLATTR;
391: %}
392: Attribute [[p as_tmp]]
393: %{
394: parm->e_attributes = as_merge(parm->e_attributes, as_tmp);
395: %}
396: }
397: %{
398: DLOG(log_dsap, LLOG_PDUS, ("Done decode RelativeEntry"));
399: %}
400:
401: EDBVersion [[P char **]]
402: %{
403: %}
404: ::=
405: %{
406: DLOG(log_dsap, LLOG_PDUS, ("About to decode EDBVersion"));
407: (*parm) = NULLCP;
408: %}
409: UTCTime [[s (*parm)]]
410: %{
411: if((*parm) == NULLCP)
412: LLOG(log_dsap, LLOG_EXCEPTIONS, ("NULL CP Version!"));
413:
414: DLOG(log_dsap, LLOG_PDUS, ("Done decode EDBVersion"));
415: %}
416:
417: GetEntryDataBlockArgument [[P struct getedb_arg *]]
418: ::=
419: %{
420: DLOG(log_dsap, LLOG_TRACE, ("About to decode GetEntryDataBlockArgument"));
421: parm->ga_entry = NULLDN;
422: parm->ga_version = NULL;
423: parm->get_next = NULL_GETARG;
424: %}
425: SET
426: {
427: entry
428: [0] DistinguishedName [[p &(parm->ga_entry)]] ,
429: sendIfMoreRecentThan
430: [1] EDBVersion [[p &(parm->ga_version)]]
431: OPTIONAL
432: -- if omitted, send in any case
433: }
434: %{
435: DLOG(log_dsap, LLOG_TRACE, ("Done decode GetEntryDataBlockArgument"));
436: %}
437:
438: GetEntryDataBlockResult [[P struct getedb_result *]]
439: ::=
440: %{
441: DLOG(log_dsap, LLOG_TRACE, ("About to decode GetEntryDataBlockResult"));
442: parm->gr_version = NULL;
443: parm->gr_edb = NULLENTRY;
444: parm->gr_next = NULL_GETRESULT;
445: %}
446: SEQUENCE
447: {
448: versionHeld
449: [0] EDBVersion [[p &(parm->gr_version)]] ,
450: [1] EntryDataBlock [[p &(parm->gr_edb)]]
451: OPTIONAL
452: }
453: %{
454: DLOG(log_dsap, LLOG_TRACE, ("Done decode GetEntryDataBlockResult"));
455: %}
456:
457: ProtectedPassword [[P struct protected_password **]]
458: %{
459: struct alg_id alg;
460: %}
461: ::=
462: %{
463: DLOG(log_dsap, LLOG_TRACE, ("About to decode ProtectedPassword"));
464: (*parm) = (struct protected_password *)
465: calloc(1, sizeof(**parm));
466: if ((*parm) == (struct protected_password *) 0)
467: return (NOTOK);
468: (*parm)->protected = (char) 0;
469: (*parm)->time1 = NULLCP;
470: (*parm)->time2 = NULLCP;
471: (*parm)->random1 = (struct random_number *) 0;
472: (*parm)->random2 = (struct random_number *) 0;
473: %}
474: SEQUENCE
475: {
476: algorithm [0] AlgorithmIdentifier [[p &alg]]
477: OPTIONAL,
478: salt [1] SET
479: {
480: time1 [0] UTCTime [[s (*parm)->time1]] OPTIONAL,
481: time2 [1] UTCTime [[s (*parm)->time2]] OPTIONAL,
482: random1 [2] BIT STRING OPTIONAL,
483: random2 [3] BIT STRING OPTIONAL
484: }
485: %{
486: (*parm)->protected = (char) 1;
487: %}
488: OPTIONAL,
489: password [2] OCTET STRING [[o (*parm)->passwd $ (*parm)->n_octets]]
490: }
491: %{
492: DLOG(log_dsap, LLOG_TRACE, ("Done decode ProtectedPassword"));
493: %}
494: END
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.