|
|
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.