/* V5.6-3 *%COPYRIGHT_START% * * Copyright Digital Equipment Corporation 1991, 1999. All rights reserved * * Restricted Rights: Use, duplication, or disclosure by the U.S Government is * subject to restrictions as set forth in subparagraph (C) (1) (ii) of DFARS * 252.227-7013, or in FAR 52.227-19, or in FAR 52.227-14 Alt, III, as * applicable. Unpublished rights reserved under applicable copyright laws. * * This software is proprietary to and embodies the confidential technology of * Digital Equipment Corporation. Possession, use, or copying of this software * and media is authorized only pursuant to a valid written license from * Digital or an authorized sublicensor. * *%COPYRIGHT_END% * * FACILITY: * Digital X.500 Directory Service * * ABSTRACT: * This is the OSI Directory User Agent low level API public include * file. It contains all of the symbols and definitions required by the * various low level API functions. * * All low level API functions accept two arguments, the request * parameter block and the response parameter block. All other * definitions support the use of these two structures. * * COMPILE TIME SWITCHES: * * DXD_INCLUDED: protects against multiple inclusion * DSA: compiles DSA support (otherwise low-level interface * support is assumed) * * WARNINGS: * The following data items and constants are used with OSAK and should * always match their equivalents within the OSAK header files: * * DXD.H OSAK_API.H * * DXD_Paddr osak_paddress * DXD_Desc osak_mem_descriptor * DXD_Nsap osak_nsap * DXD_Cep.cep_osak_port osak_port * DXD_Ie.ie_details.ie_comms osak_status_block * DXD_CLNS OSAK_C_CLNS * DXD_CONS OSAK_C_CONS * DXD_RFC1006 OSAK_C_RFC1006 * * ENVIRONMENT: * Any access mode, linked into any program requiring access to the * OSI Directory. */ #ifndef DXD_INCLUDED #define DXD_INCLUDED #if 0 #ifndef DXD_CDEFS_H #include "dxd_cdefs.h" #endif #endif /* VERSIONS * ======== * Low-Level Interface version numbers. Initialise the cep_version field of * the DXD_Cep structure to one of these to indicate the version of * functionality that your application is using. When upgrading your * application to use a higher version, read the documentation to ensure that * you initialise all the input data structures correctly and are prepared to * handle the outputs for that version. * * If the cep_version field is not initialised to one of the values below, * the low-level interface routines will behave as if it were set to the value * DXD_VERSION_1. */ #define DXD_VERSION_1 1 /* Original functionality */ #define DXD_VERSION_2 2 /* V2 extensions */ #define DXD_VERSION DXD_VERSION_2 /* Latest version */ /* * standard types * * These do NOT match the standard types from the Object Management API * Specification. */ typedef unsigned char DXD_Uint8; /* 8 bit unsigned int 0..0ff(16) */ typedef unsigned short DXD_Uint16; /* 16 bit unsigned int 0..0ffff(16) */ typedef unsigned int DXD_Uint32; /* 32 bit unsigned int 0..0ffffffff(16) */ typedef char DXD_Sint8; /* 8 bit signed int 0..+-0ff(16) */ typedef short DXD_Sint16; /* 16 bit signed int 0..+-0ffff(16) */ typedef int DXD_Sint32; /* 32 bit signed int 0..+-0ffffffff(16) */ typedef unsigned char DXD_Boolean; /* two valued int, 0 or not 0 */ typedef unsigned char * DXD_Ptrdef; /* pointer to any variable type */ /* * the following definitions are temporary */ typedef long int DXD_pointer_int; typedef unsigned long int DXD_buflen_int; #ifdef DSA #define DXD_Enum int #define OM_OBJ_FIELD #define _init_xds_om_class(class_field,class) #define _init_xds_obj_memory(memory_field,memory) #else #define DXD_Enum DXD_Sint16 typedef struct om_class_structure { void *private_header; unsigned short class_context; unsigned int top_level : 1; unsigned int modifiable : 1; } DXD_XDS_Om_Class; #define _init_xds_om_class(class_field,class)\ {\ DXD_XDS_Om_Class *om_ptr = (DXD_XDS_Om_Class *) (class_field);\ \ om_ptr->private_header = NULL;\ om_ptr->class_context = class;\ om_ptr->top_level = 0;\ om_ptr->modifiable = 0;\ } #define OM_OBJ_FIELD DXD_Obj xds_obj; #define _init_xds_obj_memory(memory_field,memory)\ {\ (memory_field) = (memory);\ } /* results returned from the LLAPI */ #define XDS_C_ACCESS_POINT 514 /* DXD_Acs */ #define XDS_C_COMMON_RESULTS 521 /* DXD_Com_res */ #define XDS_C_COMPARE_RESULT 523 /* DXD_Cr */ #define XDS_C_CONTINUATION_REF 525 /* DXD_Cref */ #define XDS_C_LIST_INFO_ITEM 538 /* DXD_Sub */ #define XDS_C_OPERATION_PROGRESS 542 /* DXD_Prog */ #define XDS_C_PARTIAL_OUTCOME_QUAL 543 /* DXD_Poq */ #define XDS_C_PRESENTATION_ADDRESS 544 /* DXD_Paddr */ #define XDS_C_READ_RESULT 545 /* DXD_Rr */ /* other data that may be returned from the LLAPI. */ #define XDS_C_DS_DN 526 /* DXD_Name */ #define XDS_C_ENTRY_INFO 528 /* DXD_Ei */ #define XDS_C_ATTRIBUTE 516 /* DXD_Attr */ #define XDS_C_AVA 520 /* DXD_Attr */ #define XDS_C_ATTRIBUTE_LIST 518 /* DXD_Alo */ #define XDS_C_DS_RDN 527 /* DXD_Rdn */ /* results that xds must put together from information returned by the LLAPI */ #define XDS_C_LIST_INFO 537 /* DXD_ */ #define XDS_C_LIST_RESULT 539 /* DXD_ */ #define XDS_C_SEARCH_INFO 548 /* DXD_ */ #define XDS_C_SEARCH_RESULT 549 /* DXD_ */ /* errors returned from the LLAPI */ /* changed use of XDS_C_ERROR to XDS_C_COMMUNICATIONS_ERROR */ /* #define XDS_C_ERROR 532 DXD_Ie */ #define XDS_C_COMMUNICATIONS_ERROR 522 /* DXD_Ie */ #define XDS_C_ABANDON_FAILED 513 /* DXD_Af */ #define XDS_C_ATTRIBUTE_ERROR 517 /* DXD_Ae */ #define XDS_C_ATTRIBUTE_PROBLEM 519 /* DXD_Ap */ #define XDS_C_NAME_ERROR 541 /* DXD_Ne */ #define XDS_C_REFERRAL 546 /* DXD_Ref */ #define XDS_C_SECURITY_ERROR 550 /* DXD_Sec */ #define XDS_C_SERVICE_ERROR 551 /* DXD_Svc */ #define XDS_C_SYSTEM_ERROR 553 /* DXD_Sys */ #define XDS_C_UPDATE_ERROR 554 /* DXD_Ue */ /* errors that xds interface must handle */ #define XDS_C_LIBRARY_ERROR 536 /* any other errors, including unexpected error values */ #endif /* buffer pointer - by default at top of allocated buffer */ typedef struct buf { struct buf *buf_next; /* next buf struct */ struct buf *buf_curr; /* buf struct currently in use */ DXD_Uint32 buf_length; /* buffer length */ DXD_Uint8 *buf_data; /* ptr to buffer */ } DXD_Buf; #ifndef DSA typedef struct xds_obj { struct om_class_structure obj_class; DXD_Buf *obj_seglist; DXD_Uint16 obj_primmask; } DXD_Obj; #endif /* * Various objects that deal with attributes and distinguished names */ /* attribute type (value) */ typedef struct at { #ifdef DSA DXD_buflen_int at_length; /* size in octets of objectid */ DXD_Uint8 *at_object_id; /* ASN.1 BER of objectid with * tag, length, and value */ #else DXD_Uint32 at_length; /* size in octets of objectid */ DXD_Uint8 *at_object_id; /* ASN.1 BER of objectid with * tag, length, and value */ #endif } DXD_At; /* * attribute value (value) * * In the DSA environment attribute values are represented by a length and * pointer combination. * * In the DUA environment (low-level API) the caller has the choice of * supplying attribute values as input already encoded or maintaining its own * representation of the value. The av_encoded flag must be set to indicate * that the value is already encoded. Otherwise the caller must initialise * av_unenc: av_routine is the address of a routine which is called to encode * the value in ASN.1 BER when the service request is encoded. av_param is * passed to the routine and may be used by the caller to supply the value * representation. The routine has the following calling sequence: * * status = av_routine(encode_context, av_param) * * The encode_context parameter describes the current state of the request * encoding and must be used by the called routine when it encoded the * attribute value. If the returned status is not DXD_SUCCESS, the calling * function will return an interface error to the application. * * In the DUA environment attribute values are always returned as output in * their encoded form; that is, they are returned in the av_enc structure. */ typedef struct av { #ifdef DSA DXD_buflen_int av_length; /* size in octets of value */ DXD_Uint8 *av_data; /* ASN.1 BER of value, includes * tag, length, and value */ #else DXD_Boolean av_encoded; /* Encoded representation? */ union { struct { DXD_Uint32 av_length; /* size in octets of value */ DXD_Uint8 *av_data; /* ASN.1 BER of value, includes * tag, length, and value */ } av_enc; struct { int (* av_routine)(); DXD_Ptrdef av_param; } av_unenc; } av_repr; #endif } DXD_Av; /* attribute type list (list) */ typedef struct atl { struct atl *atl_next; /* next atl structure */ DXD_At atl_type; /* this type */ } DXD_Atl; /* attribute value list (list) */ typedef struct avl { struct avl *avl_next; /* next avl structure */ DXD_Av avl_value; /* this value */ struct avl *avl_prev; /* previous avl structure */ } DXD_Avl; /* attribute or attribute value assertion (object) */ typedef struct attr { OM_OBJ_FIELD /* Used by low-level API only */ DXD_At attr_type; /* 1 type */ DXD_Uint32 attr_avl_count; /* count of values */ DXD_Avl *attr_avl; /* 0 or more values */ } DXD_Attr; /* attribute list (list) */ typedef struct al { struct al *al_next; /* next al structure */ DXD_Attr al_attr; /* this attribute */ } DXD_Al; /* attribute list (object) */ typedef struct alo { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Uint32 alo_attr_count; /* count of attrs */ DXD_Al *alo_attr; /* 1 or more attributes */ } DXD_Alo; /* relative distinguished name (object) */ typedef struct rdn { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Uint32 rdn_ava_count; /* count of avas */ DXD_Al *rdn_ava; /* 1 or more ava's */ } DXD_Rdn; /* rdn list (list) */ typedef struct rdnl { struct rdnl *rdnl_next; /* next rdnl structure */ DXD_Rdn rdnl_rdn; /* this rdn */ struct rdnl *rdnl_prev; /* previous rdnl structure */ } DXD_Rdnl; /* * distinguished name (object) * * In the DSA environment names are represented by a length and pointer * combination. * * In the DUA environment (low-level API) the caller has the choice of * supplying names as input already encoded or maintaining its own * representation of the name. The name_encoded flag must be set to indicate * that the name is already encoded. Otherwise the caller must initialise * name_unenc: name_routine is the address of a routine which is called to * encode the name in ASN.1 BER when the service request is encoded. * name_param is passed to the routine and may be used by the caller to supply * the name representation. The routine has the following calling sequence: * * status = name_routine(encode_context, name_param) * * The encode_context parameter describes the current state of the request * encoding and must be used by the called routine when it encoded the name. * If the returned status is not DXD_SUCCESS, the calling function will return * an interface error to the application. * * In the DUA environment names are always returned as output in their encoded * form; that is, they are returned in the name_enc structure. */ typedef struct name { #ifdef DSA DXD_buflen_int name_length; /* length of buffer */ DXD_Uint8 *name_buffer; /* ASN.1 BER name */ #else OM_OBJ_FIELD /* Used by low-level API only */ DXD_Boolean name_encoded; /* Encoded representation? */ union { struct { DXD_Uint32 name_length; /* length of buffer */ DXD_Uint8 *name_buffer; /* ASN.1 BER name */ } name_enc; struct { int (* name_routine)(); DXD_Rdnl *name_rdnl; } name_unenc; } name_repr; #endif } DXD_Name; /* * Objects that deal with requesting and returning attributes * and values from objects */ /* values for eis_infotypes */ #define DXD_TYPES_AND_VALUES 1 #define DXD_TYPES_ONLY 0 /* entry information selection (object) */ typedef struct eis { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Uint32 eis_types_count; /* count of types */ DXD_Boolean eis_all_types; /* all types */ DXD_Atl *eis_types; /* 0 or more types */ DXD_Enum eis_infotypes; /* want attrs or values? */ /* * V2 extension */ DXD_Uint32 eis_oper_types_count; /* count of operational types */ DXD_Boolean eis_all_oper_types; /* all operational types */ DXD_Atl *eis_oper_types; /* 0 or more operational types */ } DXD_Eis; /* * Objects that deal with the modify operation */ /* values for em_type */ #define DXD_ADD_ATTRIBUTE 0 /* These are the same values as */ #define DXD_REMOVE_ATTRIBUTE 1 /* the tags in the entryModification */ #define DXD_ADD_VALUES 2 #define DXD_REMOVE_VALUES 3 /* entry modification (object) */ typedef struct em { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Enum em_type; /* add/remove, attr/value? */ DXD_Attr em_attr; /* attribute */ #ifdef DSA int em_flags; #define EM_NOERROR 1 #define EM_SUPPRESS 2 #endif } DXD_Em; /* entry modification list (list) */ typedef struct eml { struct eml *eml_next; /* next entry mod struct */ DXD_Em eml_mod; /* this em object */ struct eml *eml_prev; /* previous mod struct */ } DXD_Eml; /* entry modification list (object) */ typedef struct emlo { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Uint32 emlo_mod_count; /* count of modifications */ DXD_Eml *emlo_mod; /* 1 or more eml's */ } DXD_Emlo; /* * Objects that deal with searching and search filters */ /* values for fi_type */ #define DXD_EQUAL 0 /* These are the same values as the tags */ #define DXD_SUBSTRINGS 1 /* in the FilterItem. */ #define DXD_GREATER_OR_EQUAL 2 #define DXD_LESS_OR_EQUAL 3 #define DXD_PRESENT 4 #define DXD_APPROXIMATE_MATCH 5 #define DXD_INITIAL_SUBSTRING 0 #define DXD_ANY_SUBSTRING 1 #define DXD_FINAL_SUBSTRING 2 /* substring filter item */ typedef struct substr { struct substr *substr_next; struct substr *substr_prev; DXD_Enum substr_type; DXD_Av substr_value; #ifdef DSA DXD_Av substr_norm_value; #endif } DXD_Substr; /* filter item (object) */ typedef struct fi { #ifdef DSA int fi_weight; /* Weight of this filter */ int (*fi_match)(); /* Matching function to use */ DXD_Enum fi_type; /* 1 filter item type */ union { DXD_Attr fi_ava; /* 1 attr value assertion */ struct { DXD_Uint32 substr_count; DXD_At substr_at; DXD_Substr *substr_substr; } fi_substr; } fi_item; #else OM_OBJ_FIELD /* Used by low-level API only */ DXD_Enum fi_type; /* 1 filter item type */ DXD_Attr fi_ava; DXD_Uint32 fi_initial_count; DXD_Avl *fi_initial; DXD_Uint32 fi_final_count; DXD_Avl *fi_final; #endif } DXD_Fi; /* filter item list (list) */ typedef struct fil { struct fil *fil_next; /* next filter item struct */ DXD_Fi fil_item; /* this fi object */ } DXD_Fil; /* values for fl_type */ #define DXD_ITEM 0 #define DXD_AND 1 #define DXD_OR 2 #define DXD_NOT 3 /* filter (object) */ typedef struct flt { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Enum flt_type; /* logical operator */ DXD_Uint32 flt_fil_count; /* count of filter items */ DXD_Fil *flt_fil; /* 0 or more filter items */ DXD_Uint32 flt_fl_count; /* count of filters */ struct fl *flt_fl; /* 0 or more filters */ } DXD_Flt; /* filter list (list) */ typedef struct fl { struct fl *fl_next; /* next filter struct */ DXD_Flt fl_filter; /* this flt object */ } DXD_Fl; /* Buffer descriptor - this is identical to the OSAK structure */ typedef struct desc { long int desc_size; /* no. of bytes in buffer */ unsigned char *desc_ptr; /* address of buffer */ } DXD_Desc; /* Network service access point - this is identical to the OSAK structure. The * nsap_type must be initialized with a constant to indicate the network type */ #define DXD_CLNS 1 /* Connectionless network */ #define DXD_CONS 2 /* Connection-oriented network */ #define DXD_RFC1006 3 /* RFC 1006 */ typedef struct dxd_nsap { struct dxd_nsap *nsap_next; /* Next nsap in list */ DXD_Desc nsap_id; /* Address */ long int nsap_type; /* N-protocol. */ } DXD_Nsap; /* Presentation address */ typedef struct paddr { #ifdef DSA DXD_Desc paddr_psel; /* presentation selector */ DXD_Desc paddr_ssel; /* session selector */ DXD_Desc paddr_tsel; /* transport selector */ DXD_Nsap paddr_nsap; /* NSAPs */ #else OM_OBJ_FIELD /* Used by low-level API only */ struct /* Identical to OSAK structure */ { DXD_Desc paddr_psel; /* presentation selector */ DXD_Desc paddr_ssel; /* session selector */ DXD_Desc paddr_tsel; /* transport selector */ DXD_Nsap paddr_nsap; /* NSAPs */ } paddress; #endif } DXD_Paddr; /* Application entity invocation identifier. */ typedef struct dxd_aeiid { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Desc aeiid_apiid; /* Application process Inv. Id */ DXD_Desc aeiid_aeiid; /* Application entity Inv. Id */ } DXD_Aeiid; /* * operation arguments */ /* DSA paddr list and ae_title list * * The dxd_bind routine will attempt to bind to each DSA identified in these * lists until a bind is successful. */ typedef struct paddrl { struct paddrl *paddr_next; /* next DSA in the list */ DXD_Paddr paddr; /* DSA's presentation address */ } DXD_Paddrl; typedef struct ae_titlel { struct ae_titlel *ae_title_next; /* next DSA in the list */ DXD_Name aetitle; /* DSA's AE-title */ } DXD_Ae_titlel; #define DXD_CRED_TYPE_SMPL 0 /* Values for cred_type. They */ #define DXD_CRED_TYPE_STRNG 1 /* are the same as the tags */ #define DXD_CRED_TYPE_EXT 2 /* used in the encoding. */ typedef struct cred { OM_OBJ_FIELD /* Used by low-level API only */ int cred_type; /* strong or weak? */ DXD_Name *cred_smpl_name; /* Simple - name */ DXD_Desc cred_smpl_pwd; /* Simple - password */ } DXD_Cred; /* bind argument (object) */ typedef struct ba { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Paddrl *ba_paddr_list; /* List of DSA paddr(s) */ DXD_Ae_titlel *ba_aetitle_list; /* List of DSA ae_title(s) */ DXD_Paddr *ba_dua_paddr; /* DUA's paddr */ DXD_Name *ba_dua_aetitle; /* DUA's AE-Title */ DXD_Aeiid *ba_dua_aeiid; /* DUA's AEIId */ DXD_Cred *ba_cred; /* authentication credentials */ } DXD_Ba; /* compare argument (object) */ typedef struct ca { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Name ca_object; /* name of object */ DXD_Attr ca_purported; /* purported value */ } DXD_Ca; /* read argument (object) */ typedef struct ra { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Name ra_object; /* name of object */ DXD_Eis *ra_eis; /* what should be returned? */ } DXD_Ra; /* abandon argument (object) */ typedef struct aa { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Uint32 aa_invoke_id; /* invoke id of operation */ } DXD_Aa; /* to abandon */ /* list argument (object) */ typedef struct la { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Name la_object; /* name of object */ } DXD_La; /* values for sa_subset - these are the same as the numeric values used in * the DAP encoding of the subsset component of SearchArgument. */ #define DXD_BASE_OBJECT 0 #define DXD_ONE_LEVEL 1 #define DXD_WHOLE_SUBTREE 2 /* additional subset specifier for local use, not supported in SearchArgument */ #define DXD_SUBTREE_EXCEPT_ROOT 3 #define DXD_SUBTREE_EXCEPT_ROOT_AND_CHILDREN 4 /* search argument (object) */ typedef struct sa { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Name sa_base_object; /* name of object */ DXD_Enum sa_subset; /* search depth in DIT */ DXD_Flt *sa_filter; /* search filter */ #ifdef DSA int sa_search_aliases; /* follow aliases? */ #else DXD_Boolean sa_search_aliases; /* follow aliases? */ #endif DXD_Eis *sa_selection; /* what should be returned? */ } DXD_Sa; /* add entry argument (object) */ typedef struct aea { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Name aea_object; /* name of object */ DXD_Uint32 aea_attr_count; /* count of attrs */ DXD_Al *aea_entry; /* what should be in object */ } DXD_Aea; /* remove entry argument (object) */ typedef struct rea { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Name rea_object; /* name of object to remove */ } DXD_Rea; /* modify entry argument (object) */ typedef struct mea { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Name mea_object; /* name of object to modify */ DXD_Uint32 mea_change_count; /* count of changes */ DXD_Eml *mea_changes; /* what to change in it */ } DXD_Mea; /* modify RDN argument (object) */ typedef struct mrdna { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Name mrdna_object; /* name of obj to modify */ DXD_Rdn *mrdna_newrdn; /* new rdn */ DXD_Boolean mrdna_delete_old_rdn; /* delete old rdn? */ } DXD_Mrdna; /* pdu buffer pointer */ typedef struct pdu { struct pdu *pdu_next; /* next pdu struct */ DXD_Buf *pdu_buffer; /* ptr to pdu buf ptr struct */ } DXD_Pdu; /* Memory management parameters. */ typedef struct memparm { DXD_Uint8 *(*mem_allocate)(); /* allocation routine */ void (*mem_deallocate)(); /* deallocation routine */ DXD_Uint32 mem_seg_size; /* size of new segments */ DXD_Buf *mem_free_list; /* list of free segments */ } DXD_Mem; /* * request an operation */ /* values for prog_phase - these are the same as the numeric values used in * the DAP encoding of nameResolutionPhase. */ #define DXD_PHASE_NOTSTARTED 1 #define DXD_PHASE_PROCEEDING 2 #define DXD_PHASE_COMPLETED 3 /* operation progress structure */ typedef struct progress { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Enum prog_phase; /* The phase of name resolution */ DXD_Uint32 prog_next_rdn; /* The next RDN to be resolved */ } DXD_Prog; /* values for the extension identifiers */ #define DXD_EXT_SUBENTRIES 1 #define DXD_EXT_COPY_SHALL_DO 2 #define DXD_EXT_ATTR_SIZE_LIMIT 3 #define DXD_EXT_EXTRA_ATTRIBUTES 4 #define DXD_EXT_MODIFY_RIGHTS_REQUEST 5 #define DXD_EXT_PAGED_RESULTS_REQUEST 6 #define DXD_EXT_MATCHED_VALUES_ONLY 7 #define DXD_EXT_EXTENDED_FILTER 8 #define DXD_EXT_TARGET_SYSTEM 9 #define DXD_EXT_USE_ALIAS_ON_UPDATE 10 #define DXD_EXT_NEW_SUPERIOR 11 #define DXD_EXT_MANAGE_DSAIT 12 /* extension structure */ typedef struct ext { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Uint32 ext_identifier; /* Identifies the extension */ DXD_Boolean ext_critical; /* True if extension is critical */ DXD_Av ext_item; /* The extension parameter if any */ } DXD_Ext; /* extension list */ typedef struct extl { struct extl *extl_next; /* Next extl structure in list. */ DXD_Ext extl_ext; /* extension. */ } DXD_Extl; /* trace item structure */ typedef struct traceinfo { DXD_Name trace_dsa; DXD_Rdnl *trace_target; /* NULL indicates a zero length DN */ DXD_Sint32 trace_target_count; /* -1 indicate no target */ DXD_Prog trace_progress; } DXD_Trace; /* trace item list */ typedef struct tracelist { struct tracelist *tracl_next; struct tracelist *tracl_prev; DXD_Trace tracl_trace; } DXD_Tracl; /* interface error - these are errors detected locally by the low level API * (such as communication problems or detection of badly encoded response * APDUs) rather than being transmitted in a ROSE ERROR APDU. */ typedef struct ie { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Enum ie_problem; union { struct /* Identical to the */ { /* OSAK structure */ unsigned long int ie_osak_status[2]; /* OSAK status */ unsigned long int ie_transport_status[2]; /* Transport status */ } ie_comms; struct { unsigned long int ie_abort_reason; /* OSAK abort reason code. */ } ie_abort; struct { unsigned long int ie_reject_reason; /* OSAK reject reason code. */ } ie_reject; struct { unsigned long int ie_unxevt_code; /* OSAK event code. */ } ie_unxevt; struct { DXD_Ptrdef ie_badpdu; /* Offending PDU. */ } ie_decode; struct { DXD_Uint32 ie_invoke_id; /* Offending invokeID. */ } ie_badid; } ie_details; } DXD_Ie; /* * connection end point (object) * * Note that more items will be required in this structure * to support binding to DSAs other than the pseudo DSA, such * as DSA address. These items will be defined in a future * baselevel. * * Also note that all items dealing with memory management in * this structure and others may be changed during development. */ typedef struct cep { DXD_Uint32 cep_version; /* interface version to use. */ struct resp *cep_ops; /* unclaimed non-blocking resps */ int cep_ops_count; /* count of above */ int cep_queued; /* count of queue OSAK pbs */ DXD_Ptrdef *cep_pdu; /* current pdu being received */ unsigned char *cep_osak_port; /* OSAK connection port - identical to the OSAK representation */ int cep_osak_fd; /* OSAK file descriptor */ DXD_Mem cep_mem_parm; /* Memory management parameters */ int cep_connected; /* Connection established? */ DXD_Ie cep_disconnect_reason; /* Reason for disconnection */ void *cep_internal; /* Opaque internal structure */ } DXD_Cep; /* values for req_scope_of_referral */ #define DXD_WORLD -1 #define DXD_DMD 0 #define DXD_COUNTRY 1 /* values for req_priority */ #define DXD_LOW 0 #define DXD_MEDIUM 1 #define DXD_HIGH 2 /* values for req_arg_type */ #define DXD_READ_OP 1 /* These are the same as the remote */ #define DXD_COMPARE_OP 2 /* operation values used in DAP. */ #define DXD_ABANDON_OP 3 #define DXD_LIST_OP 4 #define DXD_SEARCH_OP 5 #define DXD_ADD_ENTRY_OP 6 #define DXD_REMOVE_ENTRY_OP 7 #define DXD_MODIFY_ENTRY_OP 8 #define DXD_MODIFY_RDN_OP 9 #define DXD_MAX_REMOTE_OP DXD_MODIFY_RDN_OP #define DXD_BIND_OP 100 /* These operations do not have */ #define DXD_UNBIND_OP 101 /* corresponding ROSE operation values. */ /* * request parameter block (object, includes context object) * * note that a number of items have not been defined in this * block for this baselevel, such as security parameters. * * also, this struct must retain some API specific context * between calls. The nature of this context info has yet * to be specified. It will not be accessible by the caller. */ typedef struct req { DXD_Ptrdef req_context; /* pointer to dynamically allocated context */ DXD_Buf *req_memory; /* pointer to memory context */ DXD_Mem *req_mem_parm; /* Pointer to memory management parameters */ DXD_Cep *req_cep; /* cep for this req */ DXD_Uint32 req_invoke_id; /* invoke id */ DXD_Uint32 req_aliased_rdns; /* number aliased rdns */ DXD_Enum req_priority; /* priority */ DXD_Enum req_scope_of_referral; /* scope of referral */ DXD_Uint32 *req_size_limit; /* size limit */ DXD_Uint32 req_size_limit_int; /* size limit value */ DXD_Uint32 *req_time_limit; /* time limit */ DXD_Uint32 req_time_limit_int; /* time limit value */ DXD_Prog req_operation_progress; /* Operation progress paremeters */ DXD_Boolean req_non_blocking; /* blocking or non-blocking */ DXD_Boolean req_prefer_chaining; /* chaining preferred */ DXD_Boolean req_chaining_prohibited;/* chaining prohibited */ DXD_Boolean req_local_scope; /* local scope */ DXD_Boolean req_dont_use_copy; /* don't use copy */ DXD_Boolean req_dont_deref_alias; /* dont deref aliases */ DXD_Extl *req_extensions; /* list of extension used */ DXD_Uint16 req_arg_type; /* which operation is this */ union /* operation-specific argument */ { DXD_Aa req_aa; DXD_Ba req_ba; DXD_Ra req_ra; DXD_Ca req_ca; DXD_La req_la; DXD_Sa req_sa; DXD_Aea req_aea; DXD_Rea req_rea; DXD_Mea req_mea; DXD_Mrdna req_mrdna; DXD_Ptrdef req_reserved_space[30]; /* This reserves space in the union for future versions */ } req_arg; /* * V2 extensions */ DXD_Uint32 *req_attr_size_limit; /* attribute size limit */ DXD_Uint32 req_attr_size_limit_int; /* attribute size limit value */ DXD_Boolean req_subentries; /* search and list to return subentries */ DXD_Boolean req_copy_shall_do; /* copy shall do */ DXD_Boolean req_manage_dsa_it; /* manage the DSA information tree */ } DXD_Req; /* Structure to hold all the DUA default values. */ typedef struct _dua_defaults { DXD_Boolean defaults_read; /* flag which is set when the defaults have been read in from file(s). This flag should be set to zero when this structure is created. */ DXD_Enum dua_priority; /* priority */ DXD_Enum dua_scope_of_referral; /* scope of referral */ DXD_Uint32 *dua_size_limit; /* size limit */ DXD_Uint32 dua_size_limit_int; /* size limit integer */ DXD_Uint32 *dua_time_limit; /* time limit */ DXD_Uint32 dua_time_limit_int; /* time limit integer */ DXD_Boolean dua_prefer_chaining; /* chaining preferred */ DXD_Boolean dua_chaining_prohibited;/* chaining prohibited */ DXD_Boolean dua_local_scope; /* local scope */ DXD_Boolean dua_dont_use_copy; /* don't use copy */ DXD_Boolean dua_dont_deref_alias; /* dont deref aliases */ DXD_Name *dua_requestor; /* DN of the user in ASN.1 */ DXD_Paddrl *dua_paddr_list; /* List of DSA paddr(s) */ DXD_Ae_titlel *dua_aetitle_list; /* List of DSA ae_title(s) */ DXD_Desc dua_domain_root; /* strings containing the */ DXD_Desc dua_initial_entry; /* external representation of these defaults. */ void (*dealloc_rtn)(); /* Last deallocation routine */ void *alloc_param; /* Last allocation parameter */ /* * V2 extensions */ DXD_Uint32 *dua_attr_size_limit; /* attribute size limit */ DXD_Uint32 dua_attr_size_limit_int;/* attribute size limit integer */ DXD_Boolean dua_subentries; /* List or search returns subentries */ DXD_Boolean dua_copy_shall_do; /* Copy Shall do */ DXD_Boolean dua_manage_dsa_it; /* Manage the DSA information tree */ } dsP_dua_defaults; /* * Macro for setting the default service controls in a request */ #define dsP_lli_set_service_controls(req, alloc_rtn, dealloc_rtn, alloc_param )\ dsP_lli_set_req_service_contr((req), (alloc_rtn), (dealloc_rtn), (alloc_param), DXD_VERSION) /* * error codes */ /* values for *_problem - these have the same values as the the abstract errors * in the X.511 standard. */ #define DXD_NO_SUCH_OPERATION 1 /* AbandonProblem codes */ #define DXD_TOO_LATE 2 #define DXD_CANNOT_ABANDON 3 #define DXD_NO_SUCH_ATTRIBUTE_OR_VALUE 1 /* AttributeProblem codes */ #define DXD_INVALID_ATTRIBUTE_SYNTAX 2 #define DXD_UNDEFINED_ATTRIBUTE_TYPE 3 #define DXD_INAPPROPRIATE_MATCHING 4 #define DXD_CONSTRAINT_VIOLATION 5 #define DXD_ATTRIBUTE_OR_VALUE_EXISTS 6 #define DXD_NO_SUCH_OBJECT 1 /* NameProblem codes */ #define DXD_ALIAS_PROBLEM 2 #define DXD_INVALID_ATTRIBUTE_VALUE 3 #define DXD_ALIAS_DEREFERENCING_PROBLEM 4 #define DXD_INAPPROPRIATE_AUTHENTICATE 1 /* SecurityProblem codes */ #define DXD_INVALID_CREDENTIALS 2 #define DXD_INSUFFICIENT_ACCESS_RIGHTS 3 #define DXD_INVALID_SIGNATURE 4 #define DXD_PROTECTION_REQUIRED 5 #define DXD_NO_INFORMATION 6 #define DXD_BUSY 1 /* ServiceProblem codes */ #define DXD_UNAVAILABLE 2 #define DXD_UNWILLING_TO_PERFORM 3 #define DXD_CHAINING_REQUIRED 4 #define DXD_UNABLE_TO_PROCEED 5 #define DXD_INVALID_REFERENCE 6 #define DXD_TIME_LIMIT_EXCEEDED 7 #define DXD_ADMIN_LIMIT_EXCEEDED 8 #define DXD_LOOP_DETECTED 9 #define DXD_UNAVAILABLE_CRITICAL_EXT 10 #define DXD_OUT_OF_SCOPE 11 #define DXD_DIT_ERROR 12 #define DXD_NAMING_VIOLATION 1 /* UpdateProblem codes */ #define DXD_OBJECT_CLASS_VIOLATION 2 #define DXD_NOT_ALLOWED_ON_NON_LEAF 3 #define DXD_NOT_ALLOWED_ON_RDN 4 #define DXD_ENTRY_ALREADY_EXISTS 5 #define DXD_AFFECTS_MULTIPLE_DSAS 6 #define DXD_OBJ_CLASS_MOD_PROHIBITED 7 /* Problem values for interface errors - these are locally detected errors and * are not covered by the X.511 standard. The value is placed in the ie_problem * member of the DXD_Ie structure, and indicates which member of the ie_details * union carries further details of the error. */ #define DXD_IE_COMMS 0 /* Selects ie_comms member of ie_details */ #define DXD_IE_COMMS_XMIT 1 /* Selects ie_comms member of ie_details */ #define DXD_IE_COMMS_RECV 2 /* Selects ie_comms member of ie_details */ #define DXD_IE_ABORT 3 /* Selects ie_abort member of ie_details */ #define DXD_IE_REJECT 4 /* Selects ie_reject member of ie_details */ #define DXD_IE_UNXEVT 5 /* Selects ie_unxevt member of ie_details */ #define DXD_IE_DECODE 6 /* Selects ie_decode member of ie_details */ #define DXD_IE_BADID 7 /* Selects ie_badid member of ie_details */ #define DXD_IE_MEM_REQ 8 /* These two statuses are no longer used. */ #define DXD_IE_MEM_RESP 9 /* DXD_NO_MEMORY is used instead. */ /* errors */ /* abandon failed (object) */ typedef struct af { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Enum af_problem; /* enum problem */ DXD_Uint32 af_invoke_id; /* which one failed */ } DXD_Af; /* attribute problem (object) */ typedef struct ap { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Enum ap_problem; /* enum problem */ DXD_At ap_type; /* types obj id */ DXD_Uint32 ap_avl_count; /* count of values (always = 1) */ DXD_Avl *ap_avl; /* list containing a single value */ } DXD_Ap; /* attribute problem list (list) */ typedef struct apl { struct apl *apl_next; /* next apl struct */ DXD_Ap apl_problem; /* this AP object */ } DXD_Apl; /* attribute error (object) */ typedef struct ae { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Name *ae_object; /* associated object */ DXD_Uint32 ae_attr_count; /* count of attr probs */ DXD_Apl *ae_attr; /* the attribute prob */ } DXD_Ae; /* name error (object) */ typedef struct ne { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Enum ne_problem; /* enum problem */ DXD_Name *ne_matched; /* */ } DXD_Ne; /* * Continuation reference (object) */ /* Access Point */ typedef struct acs { #ifdef DSA DXD_buflen_int acs_paddr_length; /* Length of encoded Address */ DXD_buflen_int acs_proto_length; /* Length of Protocol Info */ DXD_Uint8 *acs_paddr_buffer; /* Encoded P-Address buffer */ DXD_Uint8 *acs_proto_buffer; /* Encoded Protocol Info */ DXD_Name acs_aetitle; /* Application Entity Title */ DXD_Uint16 acs_category; /* Master or Shadow */ /* To be removed when operator threads have been altered. */ DXD_Uint16 acs_knowledge; /* Knowledge info type */ DXD_Uint32 acs_identifier; /* Operational Binding. */ DXD_Uint32 acs_version; /* Operational Binding. */ #else OM_OBJ_FIELD /* Used by low-level API only */ DXD_Paddr *acs_paddr; /* P-address */ DXD_Name *acs_aetitle; /* Application Entity Title */ #endif } DXD_Acs; /* Access Point list */ typedef struct acsl { struct acsl *acsl_next; /* Next access point structure */ DXD_Acs acsl_access_point; /* This access point structure */ } DXD_Acsl; #define DXD_ACS_MASTER 0 #define DXD_ACS_SHADOW 1 /* Exclusion */ typedef struct exc { DXD_Name exc_rdn_seq; /* An RDN sequence */ } DXD_Exc; /* Exclusion list */ typedef struct excl { struct excl *excl_next; /* Next exclusion */ DXD_Exc exc; } DXD_Excl; /* Continuation reference */ typedef struct cref { #ifdef DSA DXD_Rdnl *cref_target_rdnl; /* target object */ DXD_Uint32 cref_target_rdnl_count; /* target object rdnl count */ DXD_Prog cref_operation_progress; /* operation progress */ int cref_trusted; /* is reference from trusted source ? */ DXD_Sint32 cref_aliased_rdns; /* aliased rdns */ DXD_Sint32 cref_rdns_resolved; /* rdns resolved */ DXD_Sint32 cref_access_points_count; /* count of access points */ #else OM_OBJ_FIELD /* Used by low-level API only */ DXD_Name *cref_target_object; /* target object */ DXD_Prog *cref_operation_progress; /* operation progress */ DXD_Uint32 cref_aliased_rdns; /* aliased rdns */ DXD_Uint32 cref_rdns_resolved; /* rdns resolved */ DXD_Uint32 cref_access_points_count; /* count of access points */ #endif DXD_Acsl *cref_access_points; /* set of access points */ /* * V2 extensions */ DXD_Enum cref_reference_type; /* reference type */ DXD_Boolean cref_entry_only; /* entry only */ DXD_Boolean cref_return_to_dua; /* return to DUA */ DXD_Boolean cref_name_resolve_on_master; /* name resolve on master */ DXD_Excl *cref_excl; /* List of exclusions */ } DXD_Cref; #define DXD_CREF_SUPERIOR 1 #define DXD_CREF_SUBORDINATE 2 #define DXD_CREF_CROSS 3 #define DXD_CREF_NON_SPECIFIC_SUBORDINATE 4 #define DXD_CREF_SUPPLIER_KNOWLEDGE 5 #define DXD_CREF_MASTER_KNOWLEDGE 6 #define DXD_CREF_IMMEDIATE_SUPERIOR 7 #define DXD_CREF_SELF 8 #define DXD_CREF_CONSUMER_KNOWLEDGE 11 #define DXD_CREF_MYACCESSPOINT 13 /* Masks to be used with requesting the above attributes from the database. */ #define DXD_M_CREF_SUPERIOR (1 << DXD_CREF_SUPERIOR) #define DXD_M_CREF_SUBORDINATE (1 << DXD_CREF_SUBORDINATE) #define DXD_M_CREF_CROSS (1 << DXD_CREF_CROSS) #define DXD_M_CREF_NON_SPECIFIC_SUBORDINATE (1 << DXD_CREF_NON_SPECIFIC_SUBORDINATE) #define DXD_M_CREF_SUPPLIER_KNOWLEDGE (1 << DXD_CREF_SUPPLIER_KNOWLEDGE) #define DXD_M_CREF_CONSUMER_KNOWLEDGE (1 << DXD_CREF_CONSUMER_KNOWLEDGE) #define DXD_M_CREF_MASTER_KNOWLEDGE (1 << DXD_CREF_MASTER_KNOWLEDGE) #define DXD_M_CREF_MYACCESSPOINT (1 << DXD_CREF_MYACCESSPOINT) #define DXD_M_CREF_MASTER_ONLY (1 << 15) #define DXD_M_CREF_SHADOW_ONLY (1 << 16) #define DXD_M_CREF_IDENTIFIER (1 << 17) /* continuation reference list (list) */ typedef struct crefl { struct crefl *crefl_next; /* next crefl struct */ DXD_Cref crefl_cont_ref; /* this CREF object */ } DXD_Crefl; /* referral (object) */ typedef struct ref { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Cref *ref_cont_ref; /* continuation ref */ } DXD_Ref; /* security error (object) */ typedef struct sec { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Enum sec_problem; /* enum problem */ } DXD_Sec; /* service error (object) */ typedef struct svc { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Enum svc_problem; /* enum problem */ } DXD_Svc; /* update error (object) */ typedef struct ue { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Enum ue_problem; /* enum problem */ } DXD_Ue; /* directory bind error (object) */ #define DXD_BIND_VERS_UNK 0 /* Unknown directory version */ #define DXD_BIND_VERS_1988 1 /* v1988 directory version */ typedef struct dbe { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Uint32 dbe_versions; /* supported versions */ DXD_Uint16 dbe_error_type; /* what kind of error? */ union { DXD_Svc *dbe_svc; DXD_Sec *dbe_sec; } dbe_error; } DXD_Dbe; /* Reject replies. */ #define DXD_GENERAL_PROBLEM 0 #define DXD_INVOKE_PROBLEM 1 #define DXD_RETURN_RESULTS_PROBLEM 2 #define DXD_RETURN_ERROR_PROBLEM 3 #define DXD_UNRECOGNIZED_APDU 0 #define DXD_MISTYPED_APDU 1 #define DXD_BADLY_STRUCTURED_APDU 2 #define DXD_DUPLICATE_INVOCATION 0 #define DXD_UNRECOGNIZED_OPERATION 1 #define DXD_MISTYPED_ARGUMENT 2 #define DXD_RESOURCE_LIMITATION 3 #define DXD_INITIATOR_RELEASING 4 #define DXD_UNRECOGNIZED_LINKEDID 5 #define DXD_LINKEDRESPONSE_UNEXP 6 #define DXD_UNEXP_CHILDOPERATION 7 #define DXD_UNRECOGNIZED_INVOCATION 0 #define DXD_RESULT_RESPONSE_UNEXP 1 #define DXD_MISTYPED_RESULT 2 /* DXD_UNRECOGNIZED_INVOCATION 0 - already defined above */ #define DXD_ERROR_RESPONSE_UNEXP 1 #define DXD_UNRECOGNIZED_ERROR 2 #define DXD_UNEXPECTED_ERROR 3 #define DXD_MISTYPED_PARAMETER 4 typedef struct rj { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Enum rj_problem_type; /* what kind of reject? */ DXD_Uint32 rj_problem; /* reason for reject */ } DXD_Rj; /* * results of operations */ /* * common results (object) * * Note that security parameters are not included in this * baselevel, such as performer's distinguished name, etc. */ typedef struct com_res { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Boolean com_res_alias_deref; /* alias was dereferenced */ } DXD_Com_res; /* entry information (object) */ typedef struct ei { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Name *ei_name; /* the returned dn */ DXD_Boolean ei_from_entry; /* from entry or copy? */ DXD_Uint32 ei_attr_count; /* count of attributes */ DXD_Al *ei_attr; /* 0 or more returned attrs */ } DXD_Ei; /* entry list (list) */ typedef struct eil { struct eil * eil_next; /* next eil structure */ DXD_Ei eil_ei; /* this entry information */ } DXD_Eil; /* compare result (object) */ typedef struct cr { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Com_res *cr_com_res; /* common results */ DXD_Name *cr_object; /* name of object */ DXD_Boolean cr_from_entry; /* from entry or copy? */ DXD_Boolean cr_matched; /* did it match? */ } DXD_Cr; /* read result (object) */ typedef struct rr { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Com_res *rr_com_res; /* common results */ DXD_Ei *rr_ei; /* the entry itself */ } DXD_Rr; /* * Remember that list and search results are returned by * repeated calls to dxd_receive_result. Any one of a number * of different objects can be returned. */ /* * list or search result - signature (object) * * Note that this baselevel doesn't support any sort of * security service. As a result, the signature object is * sort of useless without a signature in it. */ typedef struct sig { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Boolean sig_of_set; /* sig of one result or set? */ } DXD_Sig; /* list result - a subordinate (object) */ typedef struct sub { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Rdn *sub_rdn; /* returned rdn */ DXD_Boolean sub_alias_entry; /* is it an alias? */ DXD_Boolean sub_from_entry; /* from entry or copy? */ } DXD_Sub; typedef struct subl { struct subl *next; /* pointer to the next subl structure */ DXD_Sub subl_sub; /* this subordinate */ } DXD_Subl; /* list or search result - partial outcome qualifier (object) */ /* Values for poq_limit_problem - these have the same values as the * LimitProblem type in the X.511 standard. */ #define DXD_POQ_OMITTED -1 #define DXD_POQ_TIME_LIMIT_EXCEEDED 0 #define DXD_POQ_SIZE_LIMIT_EXCEEDED 1 #define DXD_POQ_ADMIN_LIMIT_EXCEEDED 2 typedef struct poq { OM_OBJ_FIELD /* Used by low-level API only */ DXD_Enum poq_limit_problem; /* limit problem */ DXD_Uint32 poq_dsa_count; /* count of unexplored dsas */ DXD_Crefl *poq_unexplored; /* unexplored dsa's */ #ifdef DSA int poq_unavailable_critical_ext; /* */ #else DXD_Boolean poq_unavailable_critical_ext; /* */ #endif } DXD_Poq; /* values for resp_result_type */ #define DXD_ATTRIBUTE_ERROR 1 /* These are the same as the remote error */ #define DXD_NAME_ERROR 2 /* values used in DAP. */ #define DXD_SERVICE_ERROR 3 #define DXD_REFERRAL 4 #define DXD_ABANDONED 5 #define DXD_SECURITY_ERROR 6 #define DXD_ABANDON_FAILED 7 #define DXD_UPDATE_ERROR 8 #define DXD_DSA_REFERRAL 9 #define DXD_INTERFACE_ERROR 50 /* These three are not...*/ #define DXD_REJECT 60 #define DXD_NO_MEMORY 70 #define DXD_NOT_SUPPORTED 80 #define DXD_MIN_ERROR DXD_ATTRIBUTE_ERROR #define DXD_MAX_ERROR DXD_REJECT #define DXD_NULL_RES 0 #define DXD_ABANDON_RES DXD_NULL_RES #define DXD_ADD_ENTRY_RES DXD_NULL_RES #define DXD_MODIFY_ENTRY_RES DXD_NULL_RES #define DXD_MODIFY_RDN_RES DXD_NULL_RES #define DXD_REMOVE_RES DXD_NULL_RES #define DXD_DIRECTORY_BIND_ERROR 100 #define DXD_READ_RES 101 #define DXD_COMPARE_RES 102 #define DXD_SIG_RES 103 #define DXD_OBJ_RES 104 #define DXD_SUB_RES 105 #define DXD_ENTRY_RES 106 #define DXD_POQ_RES 107 #define DXD_LS_CR_RES 108 /* response parameter block (object) */ typedef struct resp { OM_OBJ_FIELD /* Used by low-level API only */ struct resp *resp_next; /* next response pb in chain */ DXD_Buf *resp_pdu; /* buf list for low-level API use */ DXD_Cep *resp_cep; /* CEP for this response */ DXD_Ptrdef resp_context; /* Search/List context */ DXD_Buf *resp_memory; /* buf list for result struct */ DXD_Uint32 resp_invoke_id; /* invoke id */ DXD_Uint16 resp_result_type; /* what kind of result? */ union /* operation specific results */ { DXD_Cr *resp_cr; DXD_Rr *resp_rr; DXD_Sig *resp_sig; DXD_Name *resp_obj; DXD_Subl *resp_sub; DXD_Eil *resp_entry; DXD_Poq *resp_poq; DXD_Com_res *resp_ls_cr; DXD_Af *resp_af; DXD_Ae *resp_ae; DXD_Dbe *resp_dbe; DXD_Ie *resp_ie; DXD_Ne *resp_ne; DXD_Ref *resp_ref; DXD_Rj *resp_rj; DXD_Sec *resp_sec; DXD_Svc *resp_svc; DXD_Ue *resp_ue; } resp_result; } DXD_Resp; /* Return codes. */ #define DXD_SUCCESS 0 #define DXD_ERROR -1 #define DXD_NOMORE 1 #define DXD_EOE 2 /* End of List or Search element. */ #define DXD_NORESULT 3 /* Return by dxd_receive_result. */ #define DXD_NOTFINISHED 4 /* Unbind failed because there are * operations in progress. */ /* Name parsing return error codes. */ #define DXD_AMBIGALIAS 1 #define DXD_NOSUCHALIAS 2 #define DXD_INVEXTDN 3 #define DXD_BUFOVF 4 #define DXD_BADENCODING 5 #define DXD_ALLOCFAIL 6 /* Internal problem codes. */ #define DXD_INTERR_SUCCESS 0 /* Not really an error. Default initialisation */ #endif /* DXD_INCLUDED */