DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T d

⟦a974acd2d⟧ TextFile

    Length: 63637 (0xf895)
    Types: TextFile
    Names: »das-dec.py«

Derivation

└─⟦3d0c2be1b⟧ Bits:30001254 ISODE-5.0 Tape
    └─⟦eba4602b1⟧ »./isode-5.0.tar.Z« 
        └─⟦d3ac74d73⟧ 
            └─⟦this⟧ »isode-5.0/dsap/x500as/das-dec.py« 

TextFile

-- das-dec.py - manually augmented DirectoryAbstractService module

-- $Header: /f/osi/dsap/x500as/RCS/das-dec.py,v 6.1 89/03/23 22:27:13 mrose Exp $
--
--
-- $Log:	das-dec.py,v $
-- Revision 6.1  89/03/23  22:27:13  mrose
-- out-the-door
-- 
-- Revision 6.0  89/03/18  23:29:16  mrose
-- Release 5.0
-- 

--
--				  NOTICE
--
--    Acquisition, use, and distribution of this module and related
--    materials are subject to the restrictions of a license agreement.
--    Consult the Preface in the User's Manual for the full terms of
--    this agreement.
--
--


DAS
	{
	joint-iso-ccitt
	ds(5)
	modules(1)
	directoryAbstractService(2)
	}

DEFINITIONS ::=

%{
#include "quipu/util.h"
#include "quipu/entry.h"
#include "quipu/common.h"

extern  LLog    * log_dsap;
%}

PREFIXES encode decode print

BEGIN

-- EXPORTS
-- 	DirectoryBindArgument ,
-- 	ReadArgument ,
-- 	ReadResult ,
-- 	AbandonArgument ,
-- 	AbandonResult ,
-- 	CompareArgument ,
-- 	CompareResult ,
-- 	ListArgument ,
-- 	ListResult ,
-- 	SearchArgument ,
-- 	SearchResult ,
-- 	AddEntryArgument ,
-- 	AddEntryResult ,
-- 	RemoveEntryArgument ,
-- 	RemoveEntryResult ,
-- 	ModifyEntryArgument ,
-- 	ModifyEntryResult ,
-- 	ModifyRDNArgument ,
-- 	ModifyRDNResult ,
-- 	AbandonedParm ,
-- 	AbandonFailedParm ,
-- 	AttributeErrorParm ,
-- 	NameErrorParm ,
-- 	ReferralParm ,
-- 	SecurityErrorParm ,
-- 	ServiceErrorParm ,
-- 	UpdateErrorParm;

IMPORTS
	Attribute ,
	AttributeType ,
	AttributeValue ,
	AttributeValueAssertion ,
	DistinguishedName ,
	Name ,
	RelativeDistinguishedName
		FROM IF
			{
			joint-iso-ccitt
			ds(5)
			modules(1)
			informationFramework(1)
			}

	OperationProgress ,
	ContinuationReference ,
	InvokeID
		FROM DO
			{
			joint-iso-ccitt
			ds(5)
			modules(1)
			distributedOperations(3)
			}

	Certificate ,
	CertificationPath ,
	AlgorithmIdentifier
		FROM AF
			{
			joint-iso-ccitt
			ds(5)
			modules(1)
			authenticationFramework(7)
			};

DECODER decode

SimpleCredentials [[P struct simple_creds *]]
%{
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode SimpleCredentials"));
                parm->usc_dn = NULLDN;
                parm->usc_passwd_len = 0;
                parm->usc_passwd = NULL;
        %}
        SEQUENCE
        {
        name
                [0] DistinguishedName [[p &(parm->usc_dn)]]
                %{
                %} ,
        validity
                [1] SET
                %{
                %}
                {
                time1
                        [0] UTCTime
                        %{
                        %} OPTIONAL ,
                time2
                        [1] UTCTime
                        %{
                        %} OPTIONAL ,
                random1
                        [2] BIT STRING
                           OPTIONAL ,
                random2
                        [3] BIT STRING
                           OPTIONAL
                }
                %{
                %} OPTIONAL ,
        password
                [2] OCTET STRING [[o parm->usc_passwd $ parm->usc_passwd_len]]
                %{
                %}
                    OPTIONAL
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode SimpleCredentials"));
        %}

TokenToSign
%{
DN	  dn_tmp = NULLDN;
%}
	::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("At decode TokenToSign"));
        %}
	SEQUENCE
	{
	algorithm
		[0] AlgorithmIdentifier ,
	name
		[1] DistinguishedName [[p &(dn_tmp)]]
		%{
		    if(dn_tmp != NULLDN)
			dn_free(dn_tmp);
		    dn_tmp = NULLDN;
		%} ,
	time
		[2] UTCTime ,
	random
		[3] BIT STRING
	}
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode TokenToSign"));
        %}

Token
	::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("At decode Token"));
        %}
	SEQUENCE
	{
		TokenToSign ,
		AlgorithmIdentifier ,
		BIT STRING
	}
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode Token"));
        %}

StrongCredentials
	::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("At decode StrongCredentials"));
        %}
	SET
	{
	certificationPath
		[0] CertificationPath
		    OPTIONAL ,
	bindToken
		[1] Token
	}
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode StrongCredentials"));
        %}

Credentials [[P struct simple_creds *]]
%{
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode Credentials"));
        %}
        CHOICE
	<<1>>
        {
        simple
                [0] SimpleCredentials [[p parm]]
                %{
                %} ,
	strong
	        [1] StrongCredentials ,
	externalProcedure
		[2] EXTERNAL
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode Credentials"));
        %}

Versions [[P int*]]
%{
        int     ver_len;
        char    *ver_bits;
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode Versions"));
        %}
        BIT STRING [[x ver_bits $ ver_len]]
        {
        v1988(0)
        }
        %{
                (*parm) = strb2int(ver_bits ,ver_len);
		free (ver_bits);
                DLOG(log_dsap, LLOG_TRACE, ("Done decode Versions"));
        %}

SecurityProblem [[P int*]]
%{
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode SecurityProblem"));
                (*parm) = 0;
        %}
        INTEGER [[i (*parm)]]
        {
        inappropriateAuthentication(1) ,
        invalidCredentials(2) ,
        insufficientAccessRights(3) ,
        invalidSignature(4) ,
        protectionRequired(5) ,
	noInformation(6)
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode SecurityProblem"));
        %}

ServiceProblem [[P int*]]
%{
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode ServiceProblem"));
                (*parm) = 0;
        %}
        INTEGER [[i (*parm)]]
        {
        busy(1) ,
        unavailable(2) ,
        unwillingToPerform(3) ,
        chainingRequired(4) ,
        unableToProceed(5) ,
        invalidReference(6) ,
        timeLimitExceeded(7) ,
	administrativeLimitExceeded(8) ,
        loopDetected(9) ,
	unavailableCriticalExtension(10) ,
	outOfScope(11) ,
	ditError(12)
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode ServiceProblem"));
        %}

EntryInformationSelection [[P struct entryinfoselection *]]
%{
        Attr_Sequence   *attr_link;
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode EntryInformationSelection"));
                parm->eis_allattributes = TRUE;
                parm->eis_select = NULLATTR;
                parm->eis_infotypes = EIS_ATTRIBUTESANDVALUES;
		attr_link = &(parm->eis_select);
        %}
        SET
        {
        attributeTypes
                CHOICE
                {
                allAttributes
                        [0] NULL
                        %{
                                parm->eis_allattributes = TRUE;
                        %} ,
                select
                        [1] SET OF
                        	%{
					(*attr_link) = as_comp_alloc();
					(*attr_link)->attr_value = NULLAV;
					(*attr_link)->attr_acl = NULLACL_INFO;
                        	%}
                                AttributeType [[p &((*attr_link)->attr_type)]]
                                %{
					attr_link = &((*attr_link)->attr_link);
                                %}
                        %{
				(*attr_link) = NULLATTR;
                                parm->eis_allattributes = FALSE;
                        %}
                }
                %{
                %}
                    -- DEFAULT allAttributes NULL ,
                    OPTIONAL ,
        infoTypes
                [2] INTEGER [[i parm->eis_infotypes]]
                {
                attributeTypesOnly(0) ,
                attributeTypesAndValues(1)
                }
                %{
                %}
                    -- DEFAULT attributeTypesAndValues
                    OPTIONAL
        }
        %{
        DLOG(log_dsap, LLOG_TRACE, ("Done decode EntryInformationSelection"));
        %}

ServiceControls [[P struct svccontrol *]]
%{
        char    *opt_bits;
        int     opt_len;
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode ServiceControls"));
                parm->svc_options = 0;
                parm->svc_prio = SVC_PRIO_MED;
                parm->svc_timelimit = SVC_NOTIMELIMIT;
                parm->svc_sizelimit = SVC_NOSIZELIMIT;
                parm->svc_scopeofreferral = SVC_REFSCOPE_NONE;
        %}
        SET
        {
        options
                [0] BIT STRING [[x opt_bits $ opt_len]]
                {
                preferChaining(0) ,
                chainingProhibited(1) ,
                localScope(2) ,
                dontUseCopy(3) ,
                dontDereferenceAliases(4)
                }
                %{
                        parm->svc_options = strb2int(opt_bits ,opt_len);
			free (opt_bits);
                %}
                    -- DEFAULT {} ,
                    OPTIONAL ,
        priority
                [1] INTEGER [[i parm->svc_prio]]
                {
                low(0) ,
                medium(1) ,
                high(2)
                }
                %{
                %}
                    -- DEFAULT medium ,
                    OPTIONAL ,
        timeLimit
                [2] INTEGER [[i parm->svc_timelimit]]
                %{
                %}
                    OPTIONAL ,
        sizeLimit
                [3] INTEGER [[i parm->svc_sizelimit]]
                %{
                %}
                    OPTIONAL ,
        scopeOfReferral
                [4] INTEGER [[i parm->svc_scopeofreferral]]
                {
                dmd(0) ,
                country(1)
                }
                    OPTIONAL
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode ServiceControls"));
        %}

ProtectionRequest
	::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("At decode ProtectionRequest"));
        %}
	INTEGER
	{
	none (0) ,
	signed (1)
	}
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode ProtectionRequest"));
        %}

SecurityParameters
%{
DN	  dn_tmp = NULLDN;
%}
	::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("At decode SecurityParameters"));
        %}
	SET
	{
	certificationPath
		[0] CertificationPath
		    OPTIONAL ,
	name
		[1] DistinguishedName [[p &(dn_tmp)]]
		%{
		    if(dn_tmp != NULLDN)
			dn_free(dn_tmp);
		    dn_tmp = NULLDN;
		%} 
		    OPTIONAL ,
	time
		[2] UTCTime
		    OPTIONAL ,
	random
		[3] BIT STRING
		    OPTIONAL ,
	target
		[4] ProtectionRequest
		    OPTIONAL
	}
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode SecurityParameters"));
        %}

Extension [[P struct extension *]]
	::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("At decode Extension"));
		LLOG(log_dsap, LLOG_FATAL, ("Some smartass Extension!!!"));
		parm->ext_critical = FALSE;
		parm->ext_item = NULLPE;
        %}
	SET
	{
	identifier
		[0] INTEGER [[i parm->ext_id]] ,
	critical
		[1] BOOLEAN [[b parm->ext_critical]]
		    -- DEFAULT FALSE ,
		    OPTIONAL ,
	item
		[2] ANY DEFINED BY identifier [[a parm->ext_item]]
	}
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode Extension"));
        %}

EntryInformation [[P struct entrystruct *]]
%{
        Attr_Sequence   *attr_link;
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode EntryInformation"));
                parm->ent_dn = NULLDN;
                parm->ent_attr = NULLATTR;
                parm->ent_iscopy = INFO_COPY;
                parm->ent_next = NULLENTRYINFO;
		attr_link = &(parm->ent_attr);
        %}
        SEQUENCE
        {
                DistinguishedName [[p &(parm->ent_dn)]]
                %{
                %} ,
        fromEntry
                BOOLEAN [[b parm->ent_iscopy]]
                %{
                %}
                    -- DEFAULT TRUE ,
                    OPTIONAL ,
                SET OF
                	%{
				(*attr_link) = as_comp_alloc();
				(*attr_link)->attr_value = NULLAV;
				(*attr_link)->attr_acl = NULLACL_INFO;
                	%}
                        CHOICE
                        {
                                AttributeType [[p &((*attr_link)->attr_type)]]
                                %{
                                %} ,
                                Attribute [[p (*attr_link)]]
                                %{
                                %}
                        }
                        %{
				attr_link = &((*attr_link)->attr_link);
                        %}
                %{
			(*attr_link) = NULLATTR;
                %}
                    OPTIONAL
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode EntryInformation"));
        %}

LimitProblem [[P int*]]
%{
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode LimitProblem"));
        %}
        INTEGER [[i (*parm)]]
        {
        timeLimitExceeded(0) ,
        sizeLimitExceeded(1) ,
        administrativeLimitExceeded(2)
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode LimitProblem"));
        %}

PartialOutcomeQualifier [[P struct part_outcome *]]
%{
        ContinuationRef *crefp;
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode PartialOutcomeQualifier"));
                parm->poq_limitproblem = LSR_NOLIMITPROBLEM;
                parm->poq_cref = NULLCONTINUATIONREF;
		crefp = &(parm->poq_cref);
        %}
        SET
        {
        limitProblem
                [0] LimitProblem [[p &(parm->poq_limitproblem)]]
                %{
                %}
                    OPTIONAL ,
        unexplored
                [1] SET OF
                	%{
                        	(*crefp) = (ContinuationRef) smalloc(sizeof(continuation_ref));
                	%}
                        ContinuationReference [[p (*crefp)]]
                        %{
				crefp = &((*crefp)->cr_next);
                        %}
                %{
			(*crefp) = NULLCONTINUATIONREF;
                %}
                            OPTIONAL ,
	unavailableCriticalExtensions
		[2] BOOLEAN [[b parm->poq_no_ext]]
		    -- DEFAULT FALSE
		    OPTIONAL
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode PartialOutcomeQualifier"));
        %}

FilterItem [[P struct filter_item *]]
%{
        AV_Sequence     * avs_initial;
        AV_Sequence     * avs_any;
        AV_Sequence     * avs_final;
        AttributeValue  av_next;
        Filter_Substrings       *subs_next;
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode FilterItem"));
        %}
        CHOICE
        {
        equality
                %{
                        parm->fi_type = FILTERITEM_EQUALITY;
                %}
                [0] AttributeValueAssertion [[p &(parm->fi_un.fi_un_ava)]]
                %{
                %} ,
        substrings
                %{
                        parm->fi_type = FILTERITEM_SUBSTRINGS;
                        subs_next = &(parm->fi_un.fi_un_substrings);
                        subs_next->fi_sub_type = NULLAttrT;
                        subs_next->fi_sub_initial = NULLAV;
                        subs_next->fi_sub_any = NULLAV;
                        subs_next->fi_sub_final = NULLAV;
			avs_initial = &(subs_next->fi_sub_initial);
			avs_any = &(subs_next->fi_sub_any);
			avs_final = &(subs_next->fi_sub_final);
                %}
                [1] SEQUENCE
                {
                type
                        AttributeType [[p &(subs_next->fi_sub_type)]]
                        %{
                        %} ,
                strings
                        SEQUENCE OF
                        %{
                        %}
                                CHOICE
                                {
                                initial
                                        [0] AttributeValue [[p &(av_next)]]
                                        %{
                                                (*avs_initial) = avs_comp_new(av_next);
						avs_initial = &((*avs_initial)->avseq_next);
						(*avs_initial) = NULLAV;
                                        %} ,
                                any
                                        [1] AttributeValue [[p &(av_next)]]
                                        %{
                                                (*avs_any) = avs_comp_new(av_next);
						avs_any = &((*avs_any)->avseq_next);
						(*avs_any) = NULLAV;
                                        %} ,
                                final
                                        [2] AttributeValue [[p &(av_next)]]
                                        %{
                                                (*avs_final) = avs_comp_new(av_next);
						avs_final = &((*avs_final)->avseq_next);
						(*avs_final) = NULLAV;
                                        %}
                                }
                                %{
                                %}
                        %{
                        %}
                }
                %{
                %} ,
        greaterOrEqual
                %{
                        parm->fi_type = FILTERITEM_GREATEROREQUAL;
                %}
                [2] AttributeValueAssertion [[p &(parm->fi_un.fi_un_ava)]]
                %{
                %} ,
        lessOrEqual
                %{
                        parm->fi_type = FILTERITEM_LESSOREQUAL;
                %}
                [3] AttributeValueAssertion [[p &(parm->fi_un.fi_un_ava)]]
                %{
                %} ,
        present
                %{
                        parm->fi_type = FILTERITEM_PRESENT;
                %}
                [4] AttributeType [[p &(parm->fi_un.fi_un_type)]]
                %{
                %} ,
        approximateMatch
                %{
                        parm->fi_type = FILTERITEM_APPROX;
                %}
                [5] AttributeValueAssertion [[p &(parm->fi_un.fi_un_ava)]]
                %{
                %}
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode FilterItem"));
        %}

Filter [[P struct filter *]]
%{
        Filter          *flt_next;
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode Filter"));
		parm->flt_next = NULLFILTER;
		flt_next = &(parm->flt_un.flt_un_filter);
		(*flt_next) = NULLFILTER;
        %}
        CHOICE
        {
        item
                %{
                        parm->flt_type = FILTER_ITEM;
                %}
                [0] FilterItem [[p &(parm->flt_un.flt_un_item)]]
                %{
                %} ,
        and
                %{
                        parm->flt_type = FILTER_AND;
                %}
                [1] SET OF
                %{
                	(*flt_next) = filter_alloc();
                %}
                        Filter [[p (*flt_next)]]
                        %{
				flt_next = &((*flt_next)->flt_next);
                        %}
                %{
			(*flt_next) = NULLFILTER;
                %} ,
        or
                %{
                        parm->flt_type = FILTER_OR;
                %}
                [2] SET OF
                %{
                	(*flt_next) = filter_alloc();
                %}
                        Filter [[p (*flt_next)]]
                        %{
				flt_next = &((*flt_next)->flt_next);
                        %}
                %{
			(*flt_next) = NULLFILTER;
                %} ,
        not
                %{
                        parm->flt_type = FILTER_NOT;
                        parm->flt_next = NULLFILTER;
                	(*flt_next) = filter_alloc();
                %}
                [3] Filter [[p (*flt_next)]]
                        %{
                        %}
                %{
			(*flt_next)->flt_next = NULLFILTER;
                %}
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode Filter"));
        %}

EntryModification [[P struct entrymod *]]
%{
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode EntryModification"));
                parm->em_type = 0;
                parm->em_what = NULLATTR;
                parm->em_next = NULL;
        %}
        CHOICE
        {
        addAttribute
                %{
                        parm->em_type = EM_ADDATTRIBUTE;
			parm->em_what = as_comp_alloc();
                %}
                [0] Attribute [[p parm->em_what]]
                %{
                %} ,
        removeAttribute
                %{
                        parm->em_type = EM_REMOVEATTRIBUTE;
                        parm->em_what = as_comp_new(NULLAttrT ,NULLAV ,NULLACL_INFO);
                %}
                [1] AttributeType [[p &(parm->em_what->attr_type)]]
                %{
                %} ,
        addValues
                %{
                        parm->em_type = EM_ADDVALUES;
			parm->em_what = as_comp_alloc();
                %}
                [2] Attribute [[p parm->em_what]]
                %{
                %} ,
        removeValues
                %{
                        parm->em_type = EM_REMOVEVALUES;
			parm->em_what = as_comp_alloc();
                %}
                [3] Attribute [[p parm->em_what]]
                %{
                %}
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode EntryModification"));
        %}

AbandonProblem [[P int*]]
%{
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode AbandonProblem"));
        %}
        INTEGER [[i (*parm)]]
        {
        noSuchOperation(1) ,
        tooLate(2) ,
        cannotAbandon(3)
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode AbandonProblem"));
        %}

AttributeProblem [[P int*]]
%{
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode AttributeProblem"));
        %}
        INTEGER [[i (*parm)]]
        {
        noSuchAttributeOrValue(1) ,
        invalidAttributeSyntax(2) ,
        undefinedAttributeType(3) ,
        inappropriateMatching(4) ,
        constraintViolation(5) ,
        attributeOrValueAlreadyExists(6)
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode AttributeProblem"));
        %}

NameProblem [[P int*]]
%{
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode NameProblem"));
        %}
        INTEGER [[i (*parm)]]
        {
        noSuchObject(1) ,
        aliasProblem(2) ,
        invalidAttributeSyntax(3) ,
        aliasDereferencingProblem(4)
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode NameProblem"));
        %}

UpdateProblem [[P int*]]
%{
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode UpdateProblem"));
        %}
        INTEGER [[i (*parm)]]
        {
        namingViolation(1) ,
        objectClassViolation(2) ,
        notAllowedOnLeaf(3) ,
        notAllowedOnRDN(4) ,
        entryAlreadyExists(5) ,
        affectsMultipleDSAs(6) ,
        objectClassModificationProhibited(7)
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode UpdateProblem"));
        %}

DirectoryBindArgument [[P struct ds_bind_arg *]]
%{
        struct simple_creds	  usc_s;
        struct simple_creds	* usc = &(usc_s);
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode DirectoryBindArgument"));
                parm->dba_dn = usc->usc_dn = NULLDN;
                parm->dba_passwd_len = usc->usc_passwd_len = 0;
                usc->usc_passwd = NULL;
                parm->dba_version = DBA_VERSION_V1988;
        %}
        SET
        {
        credentials
                [0] Credentials [[p usc]]
                %{
                        parm->dba_dn = usc->usc_dn;
                        if((parm->dba_passwd_len = usc->usc_passwd_len) != 0) {
                                (void) strcpy(parm->dba_passwd, usc->usc_passwd);
                                free(usc->usc_passwd);
                        }
                %}
                    OPTIONAL ,
        versions
                [1] Versions [[p &(parm->dba_version)]]
                %{
                %}
                    -- DEFAULT v1988
                    OPTIONAL
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode DirectoryBindArgument"));
        %}

DirectoryBindResult [[P struct ds_bind_arg *]]
%{
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode DirectoryBindResult"));
        %}
        DirectoryBindArgument [[p parm]]
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode DirectoryBindResult"));
        %}

ReadArgumentData [[P struct ds_read_arg *]]
%{
    struct extension	**extp;
    struct common_args	* ca;
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode ReadArgumentData"));
                parm->rda_object = NULLDN;
                eis_def(&(parm->rda_eis));
		ca = &(parm->rda_common);
                svc_def(&(ca->ca_servicecontrol));
                ca->ca_requestor = NULLDN;
                ca->ca_progress.op_resolution_phase = 0;
                ca->ca_progress.op_nextrdntoberesolved = 0;
		ca->ca_aliased_rdns = CA_NO_ALIASDEREFERENCED;
		ca->ca_extensions = NULLEXT;
		extp = &(ca->ca_extensions);
        %}
        SET
        {
        object
                [0] Name [[p &(parm->rda_object)]]
                %{
                %} ,
        selection
                [1] EntryInformationSelection [[p &(parm->rda_eis)]]
                %{
                %}
                    -- DEFAULT {} ,
                    OPTIONAL ,
                [30] ServiceControls [[p &(ca->ca_servicecontrol)]]
                %{
                %}
                    -- DEFAULT {} ,
                    OPTIONAL ,
		[29] SecurityParameters
		    -- DEFAULT {} ,
		    OPTIONAL ,
        requestor
                [28] DistinguishedName [[p &(ca->ca_requestor)]]
                %{
                %}
                    OPTIONAL ,
                [27] OperationProgress [[p &(ca->ca_progress)]]
                %{
                %}
		    OPTIONAL ,
	aliasedRDNs
		[26] INTEGER [[i ca->ca_aliased_rdns]]
		    OPTIONAL ,
	extensions
		[25] SET OF
			%{
				(*extp) = ext_alloc();
			%}
			Extension [[p (*extp)]]
			%{
				extp = &((*extp)->ext_next);
			%}
		%{
			(*extp) = NULLEXT;
		%}
		    OPTIONAL
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode ReadArgumentData"));
        %}

ReadArgument [[P struct ds_read_arg *]]
	::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("At decode ReadArgument"));
        %}
	CHOICE
	{
		ReadArgumentData [[p parm]] ,
		SEQUENCE
		{
			ReadArgumentData [[p parm]] ,
			AlgorithmIdentifier ,
			BIT STRING
		}
	}
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode ReadArgument"));
        %}

ReadResultData [[P struct ds_read_result *]]
%{
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode ReadResultData"));
                parm->rdr_entry.ent_dn = NULLDN;
                parm->rdr_entry.ent_attr = NULLATTR;
                parm->rdr_entry.ent_iscopy = 0;
                parm->rdr_entry.ent_next = NULLENTRYINFO;
                parm->rdr_common.cr_requestor = NULLDN;
                parm->rdr_common.cr_aliasdereferenced = FALSE;
        %}
        SET
        {
        entry
                [0] EntryInformation [[p &(parm->rdr_entry)]]
                %{
                %} ,
		[30] SecurityParameters
		    OPTIONAL ,
        performer
                [29] DistinguishedName [[p &(parm->rdr_common.cr_requestor)]]
                %{
                %}
                    OPTIONAL ,
        aliasDereferenced
                [28] BOOLEAN [[b parm->rdr_common.cr_aliasdereferenced]]
                %{
                %}
                    -- DEFAULT FALSE
                    OPTIONAL
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode ReadResultData"));
        %}

ReadResult [[P struct ds_read_result *]]
	::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("At decode ReadResult"));
        %}
	CHOICE
	{
		ReadResultData [[p parm]] ,
		SEQUENCE
		{
			ReadResultData [[p parm]] ,
			AlgorithmIdentifier ,
			BIT STRING
		}
	}
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode ReadResult"));
        %}

CompareArgumentData [[P struct ds_compare_arg *]]
%{
    struct extension	**extp;
    struct common_args	* ca;
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode CompareArgumentData"));
                parm->cma_object = NULLDN;
                parm->cma_purported.ava_type = NULLAttrT;
                parm->cma_purported.ava_value = NULLAttrV;
		ca = &(parm->cma_common);
                svc_def(&(ca->ca_servicecontrol));
                ca->ca_requestor = NULLDN;
                ca->ca_progress.op_resolution_phase = 0;
                ca->ca_progress.op_nextrdntoberesolved = 0;
		ca->ca_aliased_rdns = CA_NO_ALIASDEREFERENCED;
		ca->ca_extensions = NULLEXT;
		extp = &(ca->ca_extensions);
        %}
        SET
        {
        object
                [0] Name [[p &(parm->cma_object)]]
                %{
                %} ,
        purported
                [1] AttributeValueAssertion [[p &(parm->cma_purported)]]
                %{
                %} ,
                [30] ServiceControls [[p &(ca->ca_servicecontrol)]]
                %{
                %}
                    -- DEFAULT {} ,
                    OPTIONAL ,
		[29] SecurityParameters
		    -- DEFAULT {} ,
		    OPTIONAL ,
        requestor
                [28] DistinguishedName [[p &(ca->ca_requestor)]]
                %{
                %}
                    OPTIONAL ,
                [27] OperationProgress [[p &(ca->ca_progress)]]
                %{
                %}
		    OPTIONAL ,
	aliasedRDNs
		[26] INTEGER [[i ca->ca_aliased_rdns]]
		    OPTIONAL ,
	extensions
		[25] SET OF
			%{
				(*extp) = ext_alloc();
			%}
			Extension [[p (*extp)]]
			%{
				extp = &((*extp)->ext_next);
			%}
		%{
			(*extp) = NULLEXT;
		%}
		    OPTIONAL
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode CompareArgumentData"));
        %}

CompareArgument [[P struct ds_compare_arg *]]
	::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("At decode CompareArgument"));
        %}
	CHOICE
	{
		CompareArgumentData [[p parm]] ,
		SEQUENCE
		{
			CompareArgumentData [[p parm]] ,
			AlgorithmIdentifier ,
			BIT STRING
		}
	}
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode CompareArgument"));
        %}

CompareResultData [[P struct ds_compare_result *]]
%{
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode CompareResultData"));
                parm->cmr_object = NULLDN;
                parm->cmr_matched = 0;
                parm->cmr_iscopy = INFO_COPY;
                parm->cmr_common.cr_requestor = NULLDN;
                parm->cmr_common.cr_aliasdereferenced = FALSE;
        %}
        SET
        {
                DistinguishedName [[p &(parm->cmr_object)]]
                %{
                %}
                    OPTIONAL ,
        matched
                [0] BOOLEAN [[b parm->cmr_matched]]
                %{
                %} ,
        fromEntry
                [1] BOOLEAN [[b parm->cmr_iscopy]]
                %{
                %}
                    -- DEFAULT TRUE ,
                    OPTIONAL ,
		[30] SecurityParameters
		    OPTIONAL ,
        performer
                [29] DistinguishedName [[p &(parm->cmr_common.cr_requestor)]]
                %{
                %}
                    OPTIONAL ,
        aliasDereferenced
                [28] BOOLEAN [[b parm->cmr_common.cr_aliasdereferenced]]
                %{
                %}
                    -- DEFAULT FALSE
                    OPTIONAL
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode CompareResultData"));
        %}

CompareResult [[P struct ds_compare_result *]]
	::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("At decode CompareResult"));
        %}
	CHOICE
	{
		CompareResultData [[p parm]] ,
		SEQUENCE
		{
			CompareResultData [[p parm]] ,
			AlgorithmIdentifier ,
			BIT STRING
		}
	}
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode CompareResult"));
        %}

AbandonArgument [[P struct ds_abandon_arg *]]
%{
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode AbandonArgument"));
                parm->aba_invokeid = 0;
        %}
        SEQUENCE
        {
        invokeID
                [0] InvokeID [[p &(parm->aba_invokeid)]]
                %{
                %}
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode AbandonArgument"));
        %}

AbandonResult ::= NULL

ListArgumentData [[P struct ds_list_arg *]]
%{
    struct extension	**extp;
    struct common_args	* ca;
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode ListArgumentData"));
                parm->lsa_object = NULLDN;
		ca = &(parm->lsa_common);
                svc_def(&(ca->ca_servicecontrol));
                ca->ca_requestor = NULLDN;
                ca->ca_progress.op_resolution_phase = 0;
                ca->ca_progress.op_nextrdntoberesolved = 0;
		ca->ca_aliased_rdns = CA_NO_ALIASDEREFERENCED;
		ca->ca_extensions = NULLEXT;
		extp = &(ca->ca_extensions);
        %}
        SET
        {
        object
                [0] Name [[p &(parm->lsa_object)]]
                %{
                %} ,
                [30] ServiceControls [[p &(parm->lsa_common.ca_servicecontrol)]]
                %{
                %}
                    -- DEFAULT {} ,
                    OPTIONAL ,
		[29] SecurityParameters
		    -- DEFAULT {} ,
		    OPTIONAL ,
        requestor
                [28] DistinguishedName [[p &(ca->ca_requestor)]]
                %{
                %}
                    OPTIONAL ,
                [27] OperationProgress [[p &(ca->ca_progress)]]
                %{
                %}
		    OPTIONAL ,
	aliasedRDNs
		[26] INTEGER [[i ca->ca_aliased_rdns]]
		    OPTIONAL ,
	extensions
		[25] SET OF
			%{
				(*extp) = ext_alloc();
			%}
			Extension [[p (*extp)]]
			%{
				extp = &((*extp)->ext_next);
			%}
		%{
			(*extp) = NULLEXT;
		%}
		    OPTIONAL
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode ListArgumentData"));
        %}

ListArgument [[P struct ds_list_arg *]]
	::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("At decode ListArgument"));
        %}
	CHOICE
	{
		ListArgumentData [[p parm]] ,
		SEQUENCE
		{
			ListArgumentData [[p parm]] ,
			AlgorithmIdentifier ,
			BIT STRING
		}
	}
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode ListArgument"));
        %}

ListResultData [[P struct ds_list_result *]]
%{
        POQ             poq_next_s;
        POQ             * poq_next = &(poq_next_s);
        struct subordinate      **sub_next;
        struct subordinate      **subp;
        struct continuation_ref **crp;
	struct ds_list_result	  temp_list;
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode ListResultData"));
                parm->lsr_object = NULLDN;
                parm->lsr_subordinates = NULLSUBORD;
                parm->lsr_limitproblem = 0;
                parm->lsr_cr = NULLCONTINUATIONREF;
                parm->lsr_common.cr_requestor = NULLDN;
                parm->lsr_common.cr_aliasdereferenced = FALSE;
		sub_next = &(parm->lsr_subordinates);
        %}
        CHOICE
        {
        listInfo
                SET
                {
                        DistinguishedName [[p &(parm->lsr_object)]]
                        %{
                        %}
                            OPTIONAL ,
                subordinates
                        [1] SET OF
                        	%{
                                	(*sub_next) = (struct subordinate *) smalloc(sizeof(struct subordinate));
					(*sub_next)->sub_rdn = NULLRDN;
					(*sub_next)->sub_aliasentry = FALSE;
					(*sub_next)->sub_copy = TRUE;
                        	%}
                                SEQUENCE
                                {
                                        RelativeDistinguishedName [[p &((*sub_next)->sub_rdn)]]
                                        %{
                                        %} ,
                                aliasEntry
                                        [0] BOOLEAN [[b (*sub_next)->sub_aliasentry]]
                                        %{
                                        %}
                                            -- DEFAULT FALSE ,
                                            OPTIONAL ,
                                fromEntry
                                        [1] BOOLEAN [[b (*sub_next)->sub_copy]]
                                        %{
                                        %}
                                            -- DEFAULT TRUE
                                            OPTIONAL
                                }
                                %{
					sub_next = &((*sub_next)->sub_next);
                                %}
                        %{
				(*sub_next) = NULLSUBORD;
                        %} ,
                partialOutcomeQualifier
                        [2] PartialOutcomeQualifier [[p poq_next]]
                        %{
                                parm->lsr_limitproblem = poq_next->poq_limitproblem;
                                parm->lsr_cr = poq_next->poq_cref;
                        %}
                            OPTIONAL ,
			[30] SecurityParameters 
			    OPTIONAL ,
                performer
                        [29] DistinguishedName [[p &(parm->lsr_common.cr_requestor)]]
                        %{
                        %}
                        OPTIONAL ,
                aliasDereferenced
                        [28] BOOLEAN [[b parm->lsr_common.cr_aliasdereferenced]]
                        %{
                        %}
                            -- DEFAULT FALSE
                            OPTIONAL
                }
                %{
                %} ,
        uncorrelatedListInfo
                [0] SET OF
                %{
                %}
                        ListResult [[p &(temp_list)]]
                        %{
			    LLOG(log_dsap, LLOG_EXCEPTIONS, ("Uncorrelated ListInfo!"));
			    if(parm->lsr_object == NULLDN)
			    {
				parm->lsr_object = dn_cpy(temp_list.lsr_object);
				parm->lsr_common.cr_requestor = dn_cpy(temp_list.lsr_common.cr_requestor);
				parm->lsr_common.cr_aliasdereferenced = temp_list.lsr_common.cr_aliasdereferenced;
			    }
			    dn_free(temp_list.lsr_object);
			    dn_free(temp_list.lsr_common.cr_requestor);

			    if(parm->lsr_limitproblem == 0)
			    {
				parm->lsr_limitproblem = temp_list.lsr_limitproblem;
			    }

			    if(temp_list.lsr_cr != NULLCONTINUATIONREF)
			    {
				for(crp = &(parm->lsr_cr); (*crp) != NULLCONTINUATIONREF; crp = &((*crp)->cr_next));
				(*crp) = temp_list.lsr_cr;
				temp_list.lsr_cr = NULLCONTINUATIONREF;
			    }

			    if(temp_list.lsr_subordinates != NULLSUBORD)
			    {
				for(subp = &(parm->lsr_subordinates); (*subp) != NULLSUBORD; subp = &((*subp)->sub_next));
				(*subp) = temp_list.lsr_subordinates;
				temp_list.lsr_subordinates = NULLSUBORD;
			    }
                        %}
                %{
                %}
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode ListResultData"));
        %}

ListResult [[P struct ds_list_result *]]
	::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("At decode ListResult"));
        %}
	CHOICE
	{
		ListResultData [[p parm]] ,
		SEQUENCE
		{
			ListResultData [[p parm]] ,
			AlgorithmIdentifier ,
			BIT STRING
		}
	}
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode ListResult"));
        %}

SearchArgumentData [[P struct ds_search_arg *]]
%{
    struct extension	**extp;
    struct common_args	* ca;
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode SearchArgumentData"));
                parm->sra_baseobject = NULLDN;
                parm->sra_subset = SRA_BASEOBJECT;
                parm->sra_filter = NULLFILTER;
                eis_def(&(parm->sra_eis));
		ca = &(parm->sra_common);
                svc_def(&(ca->ca_servicecontrol));
                ca->ca_requestor = NULLDN;
                ca->ca_progress.op_resolution_phase = 0;
                ca->ca_progress.op_nextrdntoberesolved = 0;
		ca->ca_aliased_rdns = CA_NO_ALIASDEREFERENCED;
		ca->ca_extensions = NULLEXT;
		extp = &(ca->ca_extensions);
        %}
        SET
        {
        baseObject
                [0] Name [[p &(parm->sra_baseobject)]]
                %{
                %} ,
        subset
                [1] INTEGER [[i parm->sra_subset]]
                {
                baseObject(0) ,
                oneLevel(1) ,
                wholeSubtree(2)
                }
                %{
                %}
                    -- DEFAULT baseObject ,
                    OPTIONAL ,
        filter
		%{
			parm->sra_filter = filter_alloc();
		%}
                [2] Filter [[p parm->sra_filter]]
                %{
                %}
                    -- DEFAULT and {} ,
                    OPTIONAL ,
	searchAliases
		[3] BOOLEAN
		    -- DEFAULT TRUE ,
		    OPTIONAL ,
        selection
                [4] EntryInformationSelection [[p &(parm->sra_eis)]]
                %{
                %}
                    -- DEFAULT {} ,
                    OPTIONAL ,
                [30] ServiceControls [[p &(ca->ca_servicecontrol)]]
                %{
                %}
                    -- DEFAULT {} ,
                    OPTIONAL ,
		[29] SecurityParameters
		    -- DEFAULT {} ,
		    OPTIONAL ,
        requestor
                [28] DistinguishedName [[p &(ca->ca_requestor)]]
                %{
                %}
                    OPTIONAL ,
                [27] OperationProgress [[p &(ca->ca_progress)]]
                %{
                %}
		    OPTIONAL ,
	aliasedRDNs
		[26] INTEGER [[i ca->ca_aliased_rdns]]
		    OPTIONAL ,
	extensions
		[25] SET OF
			%{
				(*extp) = ext_alloc();
			%}
			Extension [[p (*extp)]]
			%{
				extp = &((*extp)->ext_next);
			%}
		%{
			(*extp) = NULLEXT;
		%}
		    OPTIONAL
        }
        %{
                if(parm->sra_filter == NULLFILTER)
                {
                        parm->sra_filter = filter_alloc();
                        flt_def(&(parm->sra_filter));
                }
                DLOG(log_dsap, LLOG_TRACE, ("Done decode SearchArgumentData"));
        %}

SearchArgument [[P struct ds_search_arg *]]
	::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("At decode SearchArgument"));
        %}
	CHOICE
	{
		SearchArgumentData [[p parm]] ,
		SEQUENCE
		{
			SearchArgumentData [[p parm]] ,
			AlgorithmIdentifier ,
			BIT STRING
		}
	}
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode SearchArgument"));
        %}

SearchResultData [[P struct ds_search_result *]]
%{
	struct ds_search_result	**srrp;
        EntryInfo       **ent_next;
        POQ             poq_next_s;
        POQ             * poq_next = &(poq_next_s);
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode SearchResultData"));
	%}
        CHOICE
        {
        searchInfo
	%{
		parm->srr_correlated = TRUE;
		parm->srr_un.srr_unit = (struct ds_search_unit *) malloc(sizeof(struct ds_search_unit));
                parm->CSR_object = NULLDN;
                parm->CSR_entries = NULLENTRYINFO;
                parm->CSR_limitproblem = 0;
                parm->CSR_cr = NULLCONTINUATIONREF;
                parm->CSR_common.cr_requestor = NULLDN;
                parm->CSR_common.cr_aliasdereferenced = FALSE;
		ent_next = &(parm->CSR_entries);
        %}
                SET
                {
                        DistinguishedName [[p &(parm->CSR_object)]]
                        %{
                        %}
                            OPTIONAL ,
                entries
                        [0] SET OF
                        	%{
					(*ent_next) = entryinfo_alloc();
                        	%}
                                EntryInformation [[p (*ent_next)]]
                                %{
					ent_next = &((*ent_next)->ent_next);
                                %}
                        %{
				(*ent_next) = NULLENTRYINFO;
                        %} ,
                partialOutcomeQualifier
                        [2] PartialOutcomeQualifier [[p poq_next]]
                        %{
                                parm->CSR_limitproblem = poq_next->poq_limitproblem;
                                parm->CSR_cr = poq_next->poq_cref;
                        %}
                            OPTIONAL ,
			[30] SecurityParameters
			    OPTIONAL ,
                performer
                        [29] DistinguishedName [[p &(parm->CSR_common.cr_requestor)]]
                        %{
                        %}
                            OPTIONAL ,
                aliasDereferenced
                        [28] BOOLEAN [[b parm->CSR_common.cr_aliasdereferenced]]
                        %{
                        %}
                            -- DEFAULT FALSE
                            OPTIONAL
                }
                %{
                %} ,
        uncorrelatedSearchInfo
	%{
		parm->srr_correlated = FALSE;
		srrp = &(parm->srr_un.srr_parts);
        %}
                [0] SET OF
                	%{
 				(*srrp) = (struct ds_search_result *) malloc(sizeof(struct ds_search_result));
                	%}
                        SearchResult [[p (*srrp)]]
                        %{
				srrp = &((*srrp)->srr_next);
                        %}
                %{
			(*srrp)->srr_next = NULLSRR;
                %}
        }
        %{
        DLOG(log_dsap, LLOG_TRACE, ("Done decode SearchResultData"));
        %}

SearchResult [[P struct ds_search_result *]]
	::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("At decode SearchResult"));
        %}
	CHOICE
	{
		SearchResultData [[p parm]] ,
		SEQUENCE
		{
			SearchResultData [[p parm]] ,
			AlgorithmIdentifier ,
			BIT STRING
		}
	}
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode SearchResult"));
        %}

AddEntryArgumentData [[P struct ds_addentry_arg *]]
%{
    struct extension	**extp;
    struct common_args	* ca;
        Attr_Sequence   *attr_link;
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode AddEntryArgumentData"));
                parm->ada_object = NULLDN;
                parm->ada_entry = NULLATTR;
		ca = &(parm->ada_common);
                svc_def(&(ca->ca_servicecontrol));
                ca->ca_requestor = NULLDN;
                ca->ca_progress.op_resolution_phase = 0;
                ca->ca_progress.op_nextrdntoberesolved = 0;
		ca->ca_aliased_rdns = CA_NO_ALIASDEREFERENCED;
		ca->ca_extensions = NULLEXT;
		extp = &(ca->ca_extensions);
		attr_link = &(parm->ada_entry);
        %}
        SET
        {
        object
                [0] DistinguishedName [[p &(parm->ada_object)]]
                %{
                %} ,
        entry
                [1] SET OF
                	%{
				(*attr_link) = as_comp_alloc();
                	%}
                        Attribute [[p (*attr_link)]]
                        %{
				attr_link = &((*attr_link)->attr_link);
                        %}
                %{
			(*attr_link) = NULLATTR;
                %} ,
                [30] ServiceControls [[p &(ca->ca_servicecontrol)]]
                %{
                %}
                    -- DEFAULT {} ,
                    OPTIONAL ,
		[29] SecurityParameters
		    -- DEFAULT {} ,
		    OPTIONAL ,
        requestor
                [28] DistinguishedName [[p &(ca->ca_requestor)]]
                %{
                %}
                    OPTIONAL ,
                [27] OperationProgress [[p &(ca->ca_progress)]]
                %{
                %}
		    OPTIONAL ,
	aliasedRDNs
		[26] INTEGER [[i ca->ca_aliased_rdns]]
		    OPTIONAL ,
	extensions
		[25] SET OF
			%{
				(*extp) = ext_alloc();
			%}
			Extension [[p (*extp)]]
			%{
				extp = &((*extp)->ext_next);
			%}
		%{
			(*extp) = NULLEXT;
		%}
		    OPTIONAL
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode AddEntryArgumentData"));
        %}

AddEntryArgument [[P struct ds_addentry_arg *]]
	::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("At decode AddEntryArgument"));
        %}
	CHOICE
	{
		AddEntryArgumentData [[p parm]] ,
		SEQUENCE
		{
			AddEntryArgumentData [[p parm]] ,
			AlgorithmIdentifier ,
			BIT STRING
		}
	}
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode AddEntryArgument"));
        %}

AddEntryResult ::= NULL

RemoveEntryArgumentData [[P struct ds_removeentry_arg *]]
%{
    struct extension	**extp;
    struct common_args	* ca;
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode RemoveEntryArgumentData"));
		ca = &(parm->rma_common);
                svc_def(&(ca->ca_servicecontrol));
                ca->ca_requestor = NULLDN;
                ca->ca_progress.op_resolution_phase = 0;
                ca->ca_progress.op_nextrdntoberesolved = 0;
		ca->ca_aliased_rdns = CA_NO_ALIASDEREFERENCED;
		ca->ca_extensions = NULLEXT;
		extp = &(ca->ca_extensions);
        %}
        SET
        {
        object
                [0] DistinguishedName [[p &(parm->rma_object)]]
                %{
                %} ,
                [30] ServiceControls [[p &(ca->ca_servicecontrol)]]
                %{
                %}
                    -- DEFAULT {} ,
                    OPTIONAL ,
		[29] SecurityParameters
		    -- DEFAULT {} ,
		    OPTIONAL ,
        requestor
                [28] DistinguishedName [[p &(ca->ca_requestor)]]
                %{
                %}
                    OPTIONAL ,
                [27] OperationProgress [[p &(ca->ca_progress)]]
                %{
                %}
		    OPTIONAL ,
	aliasedRDNs
		[26] INTEGER [[i ca->ca_aliased_rdns]]
		    OPTIONAL ,
	extensions
		[25] SET OF
			%{
				(*extp) = ext_alloc();
			%}
			Extension [[p (*extp)]]
			%{
				extp = &((*extp)->ext_next);
			%}
		%{
			(*extp) = NULLEXT;
		%}
		    OPTIONAL
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode RemoveEntryArgumentData"));
        %}

RemoveEntryArgument [[P struct ds_removeentry_arg *]]
	::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("At decode RemoveEntryArgument"));
        %}
	CHOICE
	{
		RemoveEntryArgumentData [[p parm]] ,
		SEQUENCE
		{
			RemoveEntryArgumentData [[p parm]] ,
			AlgorithmIdentifier ,
			BIT STRING
		}
	}
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode RemoveEntryArgument"));
        %}

RemoveEntryResult ::= NULL

ModifyEntryArgumentData [[P struct ds_modifyentry_arg *]]
%{
    struct extension	**extp;
    struct common_args	* ca;
        struct entrymod **em_next;
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode ModifyEntryArgumentData"));
                parm->mea_object = NULLDN;
                parm->mea_changes = NULLMOD;
		em_next = &(parm->mea_changes);
		ca = &(parm->mea_common);
                svc_def(&(ca->ca_servicecontrol));
                ca->ca_requestor = NULLDN;
                ca->ca_progress.op_resolution_phase = 0;
                ca->ca_progress.op_nextrdntoberesolved = 0;
		ca->ca_aliased_rdns = CA_NO_ALIASDEREFERENCED;
		ca->ca_extensions = NULLEXT;
		extp = &(ca->ca_extensions);
        %}
        SET
        {
        object
                [0] DistinguishedName [[p &(parm->mea_object)]]
                %{
                %} ,
        changes
                [1] SEQUENCE OF
                	%{
				(*em_next) = em_alloc();
                	%}
                        EntryModification [[p (*em_next)]]
                        %{
				em_next = &((*em_next)->em_next);
                        %}
                %{
			(*em_next) = NULLMOD;
                %} ,
                [30] ServiceControls [[p &(ca->ca_servicecontrol)]]
                %{
                %}
                    -- DEFAULT {} ,
                    OPTIONAL ,
		[29] SecurityParameters
		    -- DEFAULT {} ,
		    OPTIONAL ,
        requestor
                [28] DistinguishedName [[p &(ca->ca_requestor)]]
                %{
                %}
                    OPTIONAL ,
                [27] OperationProgress [[p &(ca->ca_progress)]]
                %{
                %}
		    OPTIONAL ,
	aliasedRDNs
		[26] INTEGER [[i ca->ca_aliased_rdns]]
		    OPTIONAL ,
	extensions
		[25] SET OF
			%{
				(*extp) = ext_alloc();
			%}
			Extension [[p (*extp)]]
			%{
				extp = &((*extp)->ext_next);
			%}
		%{
			(*extp) = NULLEXT;
		%}
		    OPTIONAL
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode ModifyEntryArgumentData"));
        %}

ModifyEntryArgument [[P struct ds_modifyentry_arg *]]
	::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("At decode ModifyEntryArgument"));
        %}
	CHOICE
	{
		ModifyEntryArgumentData [[p parm]] ,
		SEQUENCE
		{
			ModifyEntryArgumentData [[p parm]] ,
			AlgorithmIdentifier ,
			BIT STRING
		}
	}
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode ModifyEntryArgument"));
        %}

ModifyEntryResult ::= NULL

ModifyRDNArgumentData [[P struct ds_modifyrdn_arg *]]
%{
    struct extension	**extp;
    struct common_args	* ca;
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode ModifyRDNArgumentData"));
                parm->mra_object = NULLDN;
                parm->mra_newrdn = NULLRDN;
                parm->deleterdn = FALSE;
		ca = &(parm->mra_common);
                svc_def(&(ca->ca_servicecontrol));
                ca->ca_requestor = NULLDN;
                ca->ca_progress.op_resolution_phase = 0;
                ca->ca_progress.op_nextrdntoberesolved = 0;
		ca->ca_aliased_rdns = CA_NO_ALIASDEREFERENCED;
		ca->ca_extensions = NULLEXT;
		extp = &(ca->ca_extensions);
        %}
        SET
        {
        object
                [0] DistinguishedName [[p &(parm->mra_object)]]
                %{
                %} ,
        newRDN
                [1] RelativeDistinguishedName [[p &(parm->mra_newrdn)]]
                %{
                %} ,
        deleteRDN
                [2] BOOLEAN [[b parm->deleterdn]]
                %{
                %}
                    -- DEFAULT FALSE ,
                    OPTIONAL ,
                [30] ServiceControls [[p &(ca->ca_servicecontrol)]]
                %{
                %}
                    -- DEFAULT {} ,
                    OPTIONAL ,
		[29] SecurityParameters
		    -- DEFAULT {} ,
		    OPTIONAL ,
        requestor
                [28] DistinguishedName [[p &(ca->ca_requestor)]]
                %{
                %}
                    OPTIONAL ,
                [27] OperationProgress [[p &(ca->ca_progress)]]
                %{
                %}
		    OPTIONAL ,
	aliasedRDNs
		[26] INTEGER [[i ca->ca_aliased_rdns]]
		    OPTIONAL ,
	extensions
		[25] SET OF
			%{
				(*extp) = ext_alloc();
			%}
			Extension [[p (*extp)]]
			%{
				extp = &((*extp)->ext_next);
			%}
		%{
			(*extp) = NULLEXT;
		%}
		    OPTIONAL
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode ModifyRDNArgumentData"));
        %}

ModifyRDNArgument [[P struct ds_modifyrdn_arg *]]
	::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("At decode ModifyRDNArgument"));
        %}
	CHOICE
	{
		ModifyRDNArgumentData [[p parm]] ,
		SEQUENCE
		{
			ModifyRDNArgumentData [[p parm]] ,
			AlgorithmIdentifier ,
			BIT STRING
		}
	}
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode ModifyRDNArgument"));
        %}

ModifyRDNResult ::= NULL

DirectoryBindError [[P struct ds_bind_error *]]
%{
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode DirectoryBindError"));
                parm->dbe_version = DBA_VERSION_V1988;
        %}
        SET
        {
        versions
                [0] Versions [[p &(parm->dbe_version)]]
                %{
                %}
                    -- DEFAULT v1988 ,
                    OPTIONAL ,
                CHOICE
                {
                serviceError
                        [1] ServiceProblem [[p &(parm->dbe_value)]]
                        %{
                                parm->dbe_type = DBE_TYPE_SERVICE;
                        %} ,
                securityError
                        [2] SecurityProblem [[p &(parm->dbe_value)]]
                        %{
                                parm->dbe_type = DBE_TYPE_SECURITY;
                        %}
                }
                %{
                %}
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode DirectoryBindError"));
        %}

AbandonedParm ::= NULL

AbandonFailedParm [[P struct DSE_abandon_fail *]]
%{
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode AbandonFailedParm"));
                parm->DSE_ab_problem = 0;
                parm->DSE_ab_invokeid = 0;
        %}
        SET
        %{
        %}
        {
        problem
                [0] AbandonProblem [[p &(parm->DSE_ab_problem)]]
                %{
                %} ,
        operation
                [1] InvokeID [[p &(parm->DSE_ab_invokeid)]]
                %{
                %}
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode AbandonFailedParm"));
        %}

AttributeErrorParm [[P struct DSE_attribute *]]
%{
        struct DSE_at_problem   atp_next;
        struct DSE_at_problem   *atp;
        int             not_first_problem = FALSE;
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode AttributeErrorParm"));
                parm->DSE_at_name = NULLDN;
                parm->DSE_at_plist.DSE_at_what = 0;
                parm->DSE_at_plist.DSE_at_type = NULLAttrT;
                parm->DSE_at_plist.DSE_at_value = NULLAttrV;
                parm->DSE_at_plist.dse_at_next = DSE_AT_NOPROBLEM;
                atp = &(parm->DSE_at_plist);
        %}
        SET
        %{
        %}
        {
        object
                [0] Name [[p &(parm->DSE_at_name)]]
                %{
                %} ,
        problems
                [1] SET OF
                %{
                %}
                        SEQUENCE
                        %{
                                atp_next.DSE_at_value = NULLAttrV;
                                atp_next.DSE_at_type = NULLAttrT;
                        %}
                        {
                        problem
                                [0] AttributeProblem [[p &(atp_next.DSE_at_what)]]
                                %{
                                %} ,
                        type
                                [1] AttributeType [[p &(atp_next.DSE_at_type)]]
                                %{
                                %} ,
                        value
                                [2] AttributeValue [[p &(atp_next.DSE_at_value)]]
                                %{
                                %}
                                    OPTIONAL
                        }
                        %{
                                if(not_first_problem)
                                {
                                        atp->dse_at_next = (struct DSE_at_problem *) smalloc(sizeof(struct DSE_at_problem));
                                        atp = atp->dse_at_next;
                                }
                                atp->DSE_at_what = atp_next.DSE_at_what;
                                atp->DSE_at_type = atp_next.DSE_at_type;
                                atp->DSE_at_value = atp_next.DSE_at_value;
                                not_first_problem = TRUE;
                        %}
                %{
			atp->dse_at_next = DSE_AT_NOPROBLEM;
                %}
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode AttributeErrorParm"));
        %}

NameErrorParm [[P struct DSE_name *]]
%{
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode NameErrorParm"));
                parm->DSE_na_problem = 0;
                parm->DSE_na_matched = NULLDN;
        %}
        SET
        %{
        %}
        {
        problem
                [0] NameProblem [[p &(parm->DSE_na_problem)]]
                %{
                %} ,
        matched
                [1] Name [[p &(parm->DSE_na_matched)]]
                %{
                %}
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode NameErrorParm"));
        %}

ReferralParm [[P struct DSE_referral *]]
%{
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode ReferralParm"));
                parm->DSE_ref_prefix = NULLDN;
                parm->DSE_ref_candidates = (ContinuationRef) smalloc(sizeof(continuation_ref));
        %}
        SET
        %{
        %}
        {
        candidate
                [0] ContinuationReference [[p parm->DSE_ref_candidates]]
                %{
                %}
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode ReferralParm"));
        %}

SecurityErrorParm [[P struct DSE_security *]]
%{
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode SecurityErrorParm"));
                parm->DSE_sc_problem = 0;
        %}
        SET
        %{
        %}
        {
        problem
                [0] SecurityProblem [[p &(parm->DSE_sc_problem)]]
                %{
                %}
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode SecurityErrorParm"));
        %}

ServiceErrorParm [[P struct DSE_service *]]
%{
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode ServiceErrorParm"));
                parm->DSE_sv_problem = 0;
        %}
        SET
        %{
        %}
        {
        problem
                [0] ServiceProblem [[p &(parm->DSE_sv_problem)]]
                %{
                %}
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode ServiceErrorParm"));
        %}

UpdateErrorParm [[P struct DSE_update *]]
%{
%}
        ::=
        %{
                DLOG(log_dsap, LLOG_TRACE, ("About to decode UpdateErrorParm"));
                parm->DSE_up_problem = 0;
        %}
        SET
        %{
        %}
        {
        problem
                [0] UpdateProblem [[p &(parm->DSE_up_problem)]]
                %{
                %}
        }
        %{
                DLOG(log_dsap, LLOG_TRACE, ("Done decode UpdateErrorParm"));
        %}

END