Home | History | Annotate | Line # | Download | only in comp_match
      1 /*	$NetBSD: authorityKeyIdentifier.c,v 1.2 2021/08/14 16:14:51 christos Exp $	*/
      2 
      3 /*
      4  *    authorityKeyIdentifier.c
      5  *    "AuthorityKeyIdentifierDefinition" ASN.1 module encode/decode/extracting/matching/free C src.
      6  *    This file was generated by modified eSMACC compiler Wed Dec  8 22:22:49 2004
      7  *    The generated files are supposed to be compiled as a module for OpenLDAP Software
      8  */
      9 
     10 #include "authorityKeyIdentifier.h"
     11 
     12 BDecComponentAuthorityKeyIdentifierTop( void* mem_op, GenBuf* b, void *v, AsnLen* bytesDecoded,int mode) {
     13 	AsnTag tag;
     14 	AsnLen elmtLen;
     15 
     16 	tag = BDecTag ( b, bytesDecoded );
     17 	elmtLen = BDecLen ( b, bytesDecoded );
     18 	if ( elmtLen <= 0 ) return (-1);
     19 	if ( tag != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE) ) {
     20 		return (-1);
     21 	}
     22 
     23 	return BDecComponentAuthorityKeyIdentifier( mem_op, b, tag, elmtLen, ( ComponentAuthorityKeyIdentifier**)v, (AsnLen*)bytesDecoded, mode );
     24 }
     25 
     26 
     27 void init_module_AuthorityKeyIdentifierDefinition() {
     28 	InstallOidDecoderMapping( "2.5.29.35", NULL,
     29 				GDecComponentAuthorityKeyIdentifier,
     30 				BDecComponentAuthorityKeyIdentifierTop,
     31 				ExtractingComponentAuthorityKeyIdentifier,
     32 				MatchingComponentAuthorityKeyIdentifier	);
     33 }
     34 
     35 int
     36 MatchingComponentOtherName ( char* oid, ComponentSyntaxInfo* csi_attr, ComponentSyntaxInfo* csi_assert ) {
     37 	int rc;
     38 	MatchingRule* mr;
     39 
     40 	if ( oid ) {
     41 		mr = retrieve_matching_rule( oid, csi_attr->csi_comp_desc->cd_type_id);
     42 		if ( mr ) return component_value_match( mr, csi_attr, csi_assert );
     43 	}
     44 
     45 	rc = 1;
     46 	rc =	MatchingComponentOid ( oid, (ComponentSyntaxInfo*)&((ComponentOtherName*)csi_attr)->type_id, (ComponentSyntaxInfo*)&((ComponentOtherName*)csi_assert)->type_id );
     47 	if ( rc != LDAP_COMPARE_TRUE )
     48 		return rc;
     49 	rc =	SetAnyTypeByComponentOid ((ComponentSyntaxInfo*)&((ComponentOtherName*)csi_attr)->value, (&((ComponentOtherName*)csi_attr)->type_id));
     50 	rc = MatchingComponentAnyDefinedBy ( oid, (ComponentAny*)&((ComponentOtherName*)csi_attr)->value, (ComponentAny*)&((ComponentOtherName*)csi_assert)->value);
     51 	if ( rc != LDAP_COMPARE_TRUE )
     52 		return rc;
     53 	return LDAP_COMPARE_TRUE;
     54 }  /* BMatchingComponentOtherName */
     55 
     56 void*
     57 ExtractingComponentOtherName ( void* mem_op, ComponentReference* cr, ComponentOtherName *comp )
     58 {
     59 
     60 	if ( ( comp->type_id.identifier.bv_val && strncmp(comp->type_id.identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) || ( strncmp(comp->type_id.id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) ) {
     61 		if ( cr->cr_curr->ci_next == NULL )
     62 		return &comp->type_id;
     63 		else
     64 		return NULL;
     65 	}
     66 	if ( ( comp->value.identifier.bv_val && strncmp(comp->value.identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) || ( strncmp(comp->value.id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) ) {
     67 		if ( cr->cr_curr->ci_next == NULL )
     68 		return &comp->value;
     69 		else
     70 		return NULL;
     71 	}
     72 	return NULL;
     73 }  /* ExtractingComponentOtherName */
     74 
     75 int
     76 BDecComponentOtherName PARAMS ((b, tagId0, elmtLen0, v, bytesDecoded, mode),
     77 void* mem_op _AND_
     78 GenBuf * b _AND_
     79 AsnTag tagId0 _AND_
     80 AsnLen elmtLen0 _AND_
     81 ComponentOtherName **v _AND_
     82 AsnLen *bytesDecoded _AND_
     83 int mode)
     84 {
     85 	int seqDone = FALSE;
     86 	AsnLen totalElmtsLen1 = 0;
     87 	AsnLen elmtLen1;
     88 	AsnTag tagId1;
     89 	int mandatoryElmtCount1 = 0;
     90 	AsnLen totalElmtsLen2 = 0;
     91 	AsnLen elmtLen2;
     92 	AsnTag tagId2;
     93 	int old_mode = mode;
     94 	int rc;
     95 	ComponentOtherName *k, *t, c_temp;
     96 
     97 
     98 	if ( !(mode & DEC_ALLOC_MODE_1) ) {
     99 		memset(&c_temp,0,sizeof(c_temp));
    100 		 k = &c_temp;
    101 	} else
    102 		 k = t = *v;
    103 	mode = DEC_ALLOC_MODE_2;
    104     tagId1 = BDecTag (b, &totalElmtsLen1 );
    105 
    106     if (((tagId1 == MAKE_TAG_ID (UNIV, PRIM, OID_TAG_CODE))))
    107     {
    108     elmtLen1 = BDecLen (b, &totalElmtsLen1 );
    109 		rc = 	BDecComponentOid (mem_op, b, tagId1, elmtLen1, (&k->type_id), &totalElmtsLen1, mode);
    110 		if ( rc != LDAP_SUCCESS ) return rc;
    111 		(&k->type_id)->identifier.bv_val = (&k->type_id)->id_buf;
    112 		(&k->type_id)->identifier.bv_len = strlen("type_id");
    113 		strcpy( (&k->type_id)->identifier.bv_val, "type_id");
    114     tagId1 = BDecTag (b, &totalElmtsLen1);
    115     }
    116     else
    117         return -1;
    118 
    119 
    120 
    121     if (((tagId1 == MAKE_TAG_ID (CNTX, CONS, 0))))
    122     {
    123     elmtLen1 = BDecLen (b, &totalElmtsLen1 );
    124 		rc = SetAnyTypeByComponentOid ((&k->value), (&k->type_id));
    125  	rc = BDecComponentAnyDefinedBy (mem_op,b, (&k->value), &totalElmtsLen1, mode );
    126 		if ( rc != LDAP_SUCCESS ) return rc;
    127 		(&k->value)->identifier.bv_val = (&k->value)->id_buf;
    128 		(&k->value)->identifier.bv_len = strlen("value");
    129 		strcpy( (&k->value)->identifier.bv_val, "value");
    130 	if (elmtLen1 == INDEFINITE_LEN)
    131         BDecEoc (b, &totalElmtsLen1 );
    132         seqDone = TRUE;
    133         if (elmtLen0 == INDEFINITE_LEN)
    134             BDecEoc (b, &totalElmtsLen1 );
    135         else if (totalElmtsLen1 != elmtLen0)
    136         return -1;
    137 
    138     }
    139     else
    140         return -1;
    141 
    142 
    143 
    144     if (!seqDone)
    145         return -1;
    146 
    147 	if( !(old_mode & DEC_ALLOC_MODE_1) ) {
    148 	*v = t = (ComponentOtherName*) CompAlloc( mem_op, sizeof(ComponentOtherName) );
    149 	if ( !t ) return -1;
    150 	*t = *k;
    151 	}
    152 	t->syntax = (Syntax*)NULL;
    153 	t->comp_desc = CompAlloc( mem_op, sizeof( ComponentDesc ) );
    154 	if ( !t->comp_desc ) {
    155 		free ( t );
    156 		return -1;
    157 	}
    158 	t->comp_desc->cd_gser_decoder = (gser_decoder_func*)GDecComponentOtherName ;
    159 	t->comp_desc->cd_ber_decoder = (ber_decoder_func*)BDecComponentOtherName ;
    160 	t->comp_desc->cd_free = (comp_free_func*)NULL;
    161 	t->comp_desc->cd_extract_i = (extract_component_from_id_func*)ExtractingComponentOtherName;
    162 	t->comp_desc->cd_type = ASN_COMPOSITE;
    163 	t->comp_desc->cd_type_id = COMPOSITE_ASN1_TYPE;
    164 	t->comp_desc->cd_all_match = (allcomponent_matching_func*)MatchingComponentOtherName;
    165     (*bytesDecoded) += totalElmtsLen1;
    166 	return LDAP_SUCCESS;
    167 }  /* BDecOtherName*/
    168 
    169 int
    170 GDecComponentOtherName PARAMS (( mem_op,b, v, bytesDecoded, mode),
    171 void* mem_op _AND_
    172 GenBuf * b _AND_
    173 ComponentOtherName **v _AND_
    174 AsnLen *bytesDecoded _AND_
    175 int mode)
    176 {
    177 	char* peek_head,*peek_head2;
    178 	int i, strLen,strLen2, rc, old_mode = mode;
    179 	ComponentOtherName *k,*t, c_temp;
    180 
    181 
    182 	if ( !(mode & DEC_ALLOC_MODE_1) ) {
    183 		memset(&c_temp,0,sizeof(c_temp));
    184 		 k = &c_temp;
    185 	} else
    186 		 k = t = *v;
    187 	mode = DEC_ALLOC_MODE_2;
    188 	*bytesDecoded = 0;
    189 	if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){
    190 		Asn1Error("Error during Reading { in encoded data");
    191 		return LDAP_PROTOCOL_ERROR;
    192 	}
    193 	if(*peek_head != '{'){
    194 		Asn1Error("Missing { in encoded data");
    195 		return LDAP_PROTOCOL_ERROR;
    196 	}
    197 
    198 	if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){
    199 		Asn1Error("Error during Reading identifier");
    200 		return LDAP_PROTOCOL_ERROR;
    201 	}
    202 	if ( strncmp( peek_head, "type_id", strlen("type_id") ) == 0 ) {
    203 		rc = 	GDecComponentOid (mem_op, b, (&k->type_id), bytesDecoded, mode);
    204 		if ( rc != LDAP_SUCCESS ) return rc;
    205 	(&k->type_id)->identifier.bv_val = peek_head;
    206 	(&k->type_id)->identifier.bv_len = strLen;
    207 	if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){
    208 		Asn1Error("Error during Reading , ");
    209 		return LDAP_PROTOCOL_ERROR;
    210 	}
    211 	if(*peek_head != ','){
    212 		Asn1Error("Missing , in encoding");
    213 		return LDAP_PROTOCOL_ERROR;
    214 	}
    215 	if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){
    216 	  Asn1Error("Error during Reading identifier");
    217 		return LDAP_PROTOCOL_ERROR;
    218 	}
    219 	}
    220 	if ( strncmp( peek_head, "value", strlen("value") ) == 0 ) {
    221 		rc = SetAnyTypeByComponentOid ((&k->value), (&k->type_id));
    222 	rc = GDecComponentAnyDefinedBy (mem_op, b, (&k->value), bytesDecoded, mode );
    223 		if ( rc != LDAP_SUCCESS ) return rc;
    224 	(&k->value)->identifier.bv_val = peek_head;
    225 	(&k->value)->identifier.bv_len = strLen;
    226 	}
    227 	if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ) {
    228 		Asn1Error("Error during Reading } in encoding");
    229 		return LDAP_PROTOCOL_ERROR;
    230 	}
    231 	if(*peek_head != '}'){
    232 		Asn1Error("Missing } in encoding");
    233 		return LDAP_PROTOCOL_ERROR;
    234 	}
    235 	if( !(old_mode & DEC_ALLOC_MODE_1) ) {
    236 	*v = t = (ComponentOtherName*) CompAlloc( mem_op, sizeof(ComponentOtherName) );
    237 	if ( !t ) return -1;
    238 	*t = *k;
    239 	}
    240 	t->syntax = (Syntax*)NULL;
    241 	t->comp_desc = CompAlloc( mem_op, sizeof( ComponentDesc ) );
    242 	if ( !t->comp_desc ) {
    243 		free ( t );
    244 		return -1;
    245 	}
    246 	t->comp_desc->cd_gser_decoder = (gser_decoder_func*)GDecComponentOtherName ;
    247 	t->comp_desc->cd_ber_decoder = (ber_decoder_func*)BDecComponentOtherName ;
    248 	t->comp_desc->cd_free = (comp_free_func*)NULL;
    249 	t->comp_desc->cd_extract_i = (extract_component_from_id_func*)ExtractingComponentOtherName;
    250 	t->comp_desc->cd_type = ASN_COMPOSITE;
    251 	t->comp_desc->cd_type_id = COMPOSITE_ASN1_TYPE;
    252 	t->comp_desc->cd_all_match = (allcomponent_matching_func*)MatchingComponentOtherName;
    253 	return LDAP_SUCCESS;
    254 }  /* GDecOtherName*/
    255 
    256 
    257 int
    258 MatchingComponentORAddress ( char* oid, ComponentSyntaxInfo* csi_attr, ComponentSyntaxInfo* csi_assert ) {
    259 	int rc;
    260 	MatchingRule* mr;
    261 
    262 	if ( oid ) {
    263 		mr = retrieve_matching_rule( oid, csi_attr->csi_comp_desc->cd_type_id);
    264 		if ( mr ) return component_value_match( mr, csi_attr, csi_assert );
    265 	}
    266 
    267 	rc = 1;
    268 	rc =	MatchingComponentOid ( oid, (ComponentSyntaxInfo*)&((ComponentORAddress*)csi_attr)->type_id, (ComponentSyntaxInfo*)&((ComponentORAddress*)csi_assert)->type_id );
    269 	if ( rc != LDAP_COMPARE_TRUE )
    270 		return rc;
    271 	rc =	SetAnyTypeByComponentOid ((ComponentSyntaxInfo*)&((ComponentORAddress*)csi_attr)->value, (&((ComponentORAddress*)csi_attr)->type_id));
    272 	rc = MatchingComponentAnyDefinedBy ( oid, (ComponentAny*)&((ComponentORAddress*)csi_attr)->value, (ComponentAny*)&((ComponentORAddress*)csi_assert)->value);
    273 	if ( rc != LDAP_COMPARE_TRUE )
    274 		return rc;
    275 	rc =	MatchingComponentOcts ( oid, (ComponentSyntaxInfo*)&((ComponentORAddress*)csi_attr)->extension, (ComponentSyntaxInfo*)&((ComponentORAddress*)csi_assert)->extension );
    276 	if ( rc != LDAP_COMPARE_TRUE )
    277 		return rc;
    278 	return LDAP_COMPARE_TRUE;
    279 }  /* BMatchingComponentORAddress */
    280 
    281 void*
    282 ExtractingComponentORAddress ( void* mem_op, ComponentReference* cr, ComponentORAddress *comp )
    283 {
    284 
    285 	if ( ( comp->type_id.identifier.bv_val && strncmp(comp->type_id.identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) || ( strncmp(comp->type_id.id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) ) {
    286 		if ( cr->cr_curr->ci_next == NULL )
    287 		return &comp->type_id;
    288 		else
    289 		return NULL;
    290 	}
    291 	if ( ( comp->value.identifier.bv_val && strncmp(comp->value.identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) || ( strncmp(comp->value.id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) ) {
    292 		if ( cr->cr_curr->ci_next == NULL )
    293 		return &comp->value;
    294 		else
    295 		return NULL;
    296 	}
    297 	if ( ( comp->extension.identifier.bv_val && strncmp(comp->extension.identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) || ( strncmp(comp->extension.id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) ) {
    298 		if ( cr->cr_curr->ci_next == NULL )
    299 		return &comp->extension;
    300 		else
    301 		return NULL;
    302 	}
    303 	return NULL;
    304 }  /* ExtractingComponentORAddress */
    305 
    306 int
    307 BDecComponentORAddress PARAMS ((b, tagId0, elmtLen0, v, bytesDecoded, mode),
    308 void* mem_op _AND_
    309 GenBuf * b _AND_
    310 AsnTag tagId0 _AND_
    311 AsnLen elmtLen0 _AND_
    312 ComponentORAddress **v _AND_
    313 AsnLen *bytesDecoded _AND_
    314 int mode)
    315 {
    316 	int seqDone = FALSE;
    317 	AsnLen totalElmtsLen1 = 0;
    318 	AsnLen elmtLen1;
    319 	AsnTag tagId1;
    320 	int mandatoryElmtCount1 = 0;
    321 	int old_mode = mode;
    322 	int rc;
    323 	ComponentORAddress *k, *t, c_temp;
    324 
    325 
    326 	if ( !(mode & DEC_ALLOC_MODE_1) ) {
    327 		memset(&c_temp,0,sizeof(c_temp));
    328 		 k = &c_temp;
    329 	} else
    330 		 k = t = *v;
    331 	mode = DEC_ALLOC_MODE_2;
    332     tagId1 = BDecTag (b, &totalElmtsLen1 );
    333 
    334     if (((tagId1 == MAKE_TAG_ID (UNIV, PRIM, OID_TAG_CODE))))
    335     {
    336     elmtLen1 = BDecLen (b, &totalElmtsLen1 );
    337 		rc = 	BDecComponentOid (mem_op, b, tagId1, elmtLen1, (&k->type_id), &totalElmtsLen1, mode);
    338 		if ( rc != LDAP_SUCCESS ) return rc;
    339 		(&k->type_id)->identifier.bv_val = (&k->type_id)->id_buf;
    340 		(&k->type_id)->identifier.bv_len = strlen("type_id");
    341 		strcpy( (&k->type_id)->identifier.bv_val, "type_id");
    342     }
    343     else
    344         return -1;
    345 
    346 
    347 
    348     {
    349 		rc = SetAnyTypeByComponentOid ((&k->value), (&k->type_id));
    350  	rc = BDecComponentAnyDefinedBy (mem_op,b, (&k->value), &totalElmtsLen1, mode );
    351 		if ( rc != LDAP_SUCCESS ) return rc;
    352 		(&k->value)->identifier.bv_val = (&k->value)->id_buf;
    353 		(&k->value)->identifier.bv_len = strlen("value");
    354 		strcpy( (&k->value)->identifier.bv_val, "value");
    355     if ((elmtLen0 != INDEFINITE_LEN) && (totalElmtsLen1 == elmtLen0))
    356         seqDone = TRUE;
    357     else
    358     {
    359         tagId1 = BDecTag (b, &totalElmtsLen1 );
    360 
    361          if ((elmtLen0 == INDEFINITE_LEN) && (tagId1 == EOC_TAG_ID))
    362         {
    363             BDEC_2ND_EOC_OCTET (b, &totalElmtsLen1 )
    364             seqDone = TRUE;
    365         }
    366     }
    367     }
    368 
    369 
    370     if ((!seqDone) && ((tagId1 == MAKE_TAG_ID (UNIV, PRIM, OCTETSTRING_TAG_CODE)) ||
    371 (tagId1 == MAKE_TAG_ID (UNIV, CONS, OCTETSTRING_TAG_CODE))))
    372     {
    373     elmtLen1 = BDecLen (b, &totalElmtsLen1 );
    374 		rc = 	BDecComponentOcts (mem_op, b, tagId1, elmtLen1, (&k->extension), &totalElmtsLen1, mode);
    375 		if ( rc != LDAP_SUCCESS ) return rc;
    376 		(&k->extension)->identifier.bv_val = (&k->extension)->id_buf;
    377 		(&k->extension)->identifier.bv_len = strlen("extension");
    378 		strcpy( (&k->extension)->identifier.bv_val, "extension");
    379         seqDone = TRUE;
    380         if (elmtLen0 == INDEFINITE_LEN)
    381             BDecEoc (b, &totalElmtsLen1 );
    382         else if (totalElmtsLen1 != elmtLen0)
    383         return -1;
    384 
    385     }
    386 
    387 
    388     if (!seqDone)
    389         return -1;
    390 
    391 	if( !(old_mode & DEC_ALLOC_MODE_1) ) {
    392 	*v = t = (ComponentORAddress*) CompAlloc( mem_op, sizeof(ComponentORAddress) );
    393 	if ( !t ) return -1;
    394 	*t = *k;
    395 	}
    396 	t->syntax = (Syntax*)NULL;
    397 	t->comp_desc = CompAlloc( mem_op, sizeof( ComponentDesc ) );
    398 	if ( !t->comp_desc ) {
    399 		free ( t );
    400 		return -1;
    401 	}
    402 	t->comp_desc->cd_gser_decoder = (gser_decoder_func*)GDecComponentORAddress ;
    403 	t->comp_desc->cd_ber_decoder = (ber_decoder_func*)BDecComponentORAddress ;
    404 	t->comp_desc->cd_free = (comp_free_func*)NULL;
    405 	t->comp_desc->cd_extract_i = (extract_component_from_id_func*)ExtractingComponentORAddress;
    406 	t->comp_desc->cd_type = ASN_COMPOSITE;
    407 	t->comp_desc->cd_type_id = COMPOSITE_ASN1_TYPE;
    408 	t->comp_desc->cd_all_match = (allcomponent_matching_func*)MatchingComponentORAddress;
    409     (*bytesDecoded) += totalElmtsLen1;
    410 	return LDAP_SUCCESS;
    411 }  /* BDecORAddress*/
    412 
    413 int
    414 GDecComponentORAddress PARAMS (( mem_op,b, v, bytesDecoded, mode),
    415 void* mem_op _AND_
    416 GenBuf * b _AND_
    417 ComponentORAddress **v _AND_
    418 AsnLen *bytesDecoded _AND_
    419 int mode)
    420 {
    421 	char* peek_head,*peek_head2;
    422 	int i, strLen,strLen2, rc, old_mode = mode;
    423 	ComponentORAddress *k,*t, c_temp;
    424 
    425 
    426 	if ( !(mode & DEC_ALLOC_MODE_1) ) {
    427 		memset(&c_temp,0,sizeof(c_temp));
    428 		 k = &c_temp;
    429 	} else
    430 		 k = t = *v;
    431 	mode = DEC_ALLOC_MODE_2;
    432 	*bytesDecoded = 0;
    433 	if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){
    434 		Asn1Error("Error during Reading { in encoded data");
    435 		return LDAP_PROTOCOL_ERROR;
    436 	}
    437 	if(*peek_head != '{'){
    438 		Asn1Error("Missing { in encoded data");
    439 		return LDAP_PROTOCOL_ERROR;
    440 	}
    441 
    442 	if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){
    443 		Asn1Error("Error during Reading identifier");
    444 		return LDAP_PROTOCOL_ERROR;
    445 	}
    446 	if ( strncmp( peek_head, "type_id", strlen("type_id") ) == 0 ) {
    447 		rc = 	GDecComponentOid (mem_op, b, (&k->type_id), bytesDecoded, mode);
    448 		if ( rc != LDAP_SUCCESS ) return rc;
    449 	(&k->type_id)->identifier.bv_val = peek_head;
    450 	(&k->type_id)->identifier.bv_len = strLen;
    451 	if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){
    452 		Asn1Error("Error during Reading , ");
    453 		return LDAP_PROTOCOL_ERROR;
    454 	}
    455 	if(*peek_head != ','){
    456 		Asn1Error("Missing , in encoding");
    457 		return LDAP_PROTOCOL_ERROR;
    458 	}
    459 	if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){
    460 	  Asn1Error("Error during Reading identifier");
    461 		return LDAP_PROTOCOL_ERROR;
    462 	}
    463 	}
    464 	if ( strncmp( peek_head, "value", strlen("value") ) == 0 ) {
    465 		rc = SetAnyTypeByComponentOid ((&k->value), (&k->type_id));
    466 	rc = GDecComponentAnyDefinedBy (mem_op, b, (&k->value), bytesDecoded, mode );
    467 		if ( rc != LDAP_SUCCESS ) return rc;
    468 	(&k->value)->identifier.bv_val = peek_head;
    469 	(&k->value)->identifier.bv_len = strLen;
    470 	if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){
    471 		Asn1Error("Error during Reading , ");
    472 		return LDAP_PROTOCOL_ERROR;
    473 	}
    474 	if(*peek_head != ','){
    475 		Asn1Error("Missing , in encoding");
    476 		return LDAP_PROTOCOL_ERROR;
    477 	}
    478 	if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){
    479 	  Asn1Error("Error during Reading identifier");
    480 		return LDAP_PROTOCOL_ERROR;
    481 	}
    482 	}
    483 	if ( strncmp( peek_head, "extension", strlen("extension") ) == 0 ) {
    484 		rc = 	GDecComponentOcts (mem_op, b, (&k->extension), bytesDecoded, mode);
    485 		if ( rc != LDAP_SUCCESS ) return rc;
    486 	(&k->extension)->identifier.bv_val = peek_head;
    487 	(&k->extension)->identifier.bv_len = strLen;
    488 	}
    489 	if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ) {
    490 		Asn1Error("Error during Reading } in encoding");
    491 		return LDAP_PROTOCOL_ERROR;
    492 	}
    493 	if(*peek_head != '}'){
    494 		Asn1Error("Missing } in encoding");
    495 		return LDAP_PROTOCOL_ERROR;
    496 	}
    497 	if( !(old_mode & DEC_ALLOC_MODE_1) ) {
    498 	*v = t = (ComponentORAddress*) CompAlloc( mem_op, sizeof(ComponentORAddress) );
    499 	if ( !t ) return -1;
    500 	*t = *k;
    501 	}
    502 	t->syntax = (Syntax*)NULL;
    503 	t->comp_desc = CompAlloc( mem_op, sizeof( ComponentDesc ) );
    504 	if ( !t->comp_desc ) {
    505 		free ( t );
    506 		return -1;
    507 	}
    508 	t->comp_desc->cd_gser_decoder = (gser_decoder_func*)GDecComponentORAddress ;
    509 	t->comp_desc->cd_ber_decoder = (ber_decoder_func*)BDecComponentORAddress ;
    510 	t->comp_desc->cd_free = (comp_free_func*)NULL;
    511 	t->comp_desc->cd_extract_i = (extract_component_from_id_func*)ExtractingComponentORAddress;
    512 	t->comp_desc->cd_type = ASN_COMPOSITE;
    513 	t->comp_desc->cd_type_id = COMPOSITE_ASN1_TYPE;
    514 	t->comp_desc->cd_all_match = (allcomponent_matching_func*)MatchingComponentORAddress;
    515 	return LDAP_SUCCESS;
    516 }  /* GDecORAddress*/
    517 
    518 
    519 int
    520 MatchingComponentDirectoryString ( char* oid, ComponentSyntaxInfo* csi_attr, ComponentSyntaxInfo* csi_assert ) {
    521 	int rc;
    522 	MatchingRule* mr;
    523 	ComponentDirectoryString *v1, *v2;
    524 
    525 
    526 	v1 = (ComponentDirectoryString*)csi_attr;
    527 	v2 = (ComponentDirectoryString*)csi_assert;
    528 	if ( oid ) {
    529 		mr = retrieve_matching_rule( oid, csi_attr->csi_comp_desc->cd_type_id);
    530 		if ( mr ) return component_value_match( mr, csi_attr, csi_assert );
    531 	}
    532 
    533 	if( (v1->choiceId != v2->choiceId ) )
    534 		return LDAP_COMPARE_FALSE;
    535 	switch( v1->choiceId )
    536 	{
    537 	   case DIRECTORYSTRING_TELETEXSTRING :
    538 		rc = 	MatchingComponentTeletexString ( oid, (ComponentSyntaxInfo*)(v1->a.teletexString), (ComponentSyntaxInfo*)(v2->a.teletexString) );
    539 		break;
    540 	   case DIRECTORYSTRING_PRINTABLESTRING :
    541 		rc = 	MatchingComponentPrintableString ( oid, (ComponentSyntaxInfo*)(v1->a.printableString), (ComponentSyntaxInfo*)(v2->a.printableString) );
    542 		break;
    543 	   case DIRECTORYSTRING_UNIVERSALSTRING :
    544 		rc = 	MatchingComponentUniversalString ( oid, (ComponentSyntaxInfo*)(v1->a.universalString), (ComponentSyntaxInfo*)(v2->a.universalString) );
    545 		break;
    546 	   case DIRECTORYSTRING_UTF8STRING :
    547 		rc = 	MatchingComponentUTF8String ( oid, (ComponentSyntaxInfo*)(v1->a.utf8String), (ComponentSyntaxInfo*)(v2->a.utf8String) );
    548 		break;
    549 	   case DIRECTORYSTRING_BMPSTRING :
    550 		rc = 	MatchingComponentBMPString ( oid, (ComponentSyntaxInfo*)(v1->a.bmpString), (ComponentSyntaxInfo*)(v2->a.bmpString) );
    551 		break;
    552 	default :
    553 		 return LDAP_PROTOCOL_ERROR;
    554 	}
    555 	return rc;
    556 }  /* BMatchingComponentDirectoryStringContent */
    557 
    558 void*
    559 ExtractingComponentDirectoryString ( void* mem_op, ComponentReference* cr, ComponentDirectoryString *comp )
    560 {
    561 
    562 
    563 	if( (comp->choiceId) ==  DIRECTORYSTRING_TELETEXSTRING &&
    564 		 (( comp->a.teletexString->identifier.bv_val && strncmp(comp->a.teletexString->identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0) ||
    565 		 ( strncmp(comp->a.teletexString->id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0))) {
    566 		if ( cr->cr_curr->ci_next == NULL )
    567 			return (comp->a.teletexString);
    568 		else {
    569 			cr->cr_curr = cr->cr_curr->ci_next;
    570 			return 	ExtractingComponentTeletexString ( mem_op, cr, (comp->a.teletexString) );
    571 		};
    572 	}
    573 	if( (comp->choiceId) ==  DIRECTORYSTRING_PRINTABLESTRING &&
    574 		 (( comp->a.printableString->identifier.bv_val && strncmp(comp->a.printableString->identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0) ||
    575 		 ( strncmp(comp->a.printableString->id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0))) {
    576 		if ( cr->cr_curr->ci_next == NULL )
    577 			return (comp->a.printableString);
    578 		else {
    579 			cr->cr_curr = cr->cr_curr->ci_next;
    580 			return 	ExtractingComponentPrintableString ( mem_op, cr, (comp->a.printableString) );
    581 		};
    582 	}
    583 	if( (comp->choiceId) ==  DIRECTORYSTRING_UNIVERSALSTRING &&
    584 		 (( comp->a.universalString->identifier.bv_val && strncmp(comp->a.universalString->identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0) ||
    585 		 ( strncmp(comp->a.universalString->id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0))) {
    586 		if ( cr->cr_curr->ci_next == NULL )
    587 			return (comp->a.universalString);
    588 		else {
    589 			cr->cr_curr = cr->cr_curr->ci_next;
    590 			return 	ExtractingComponentUniversalString ( mem_op, cr, (comp->a.universalString) );
    591 		};
    592 	}
    593 	if( (comp->choiceId) ==  DIRECTORYSTRING_UTF8STRING &&
    594 		 (( comp->a.utf8String->identifier.bv_val && strncmp(comp->a.utf8String->identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0) ||
    595 		 ( strncmp(comp->a.utf8String->id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0))) {
    596 		if ( cr->cr_curr->ci_next == NULL )
    597 			return (comp->a.utf8String);
    598 		else {
    599 			cr->cr_curr = cr->cr_curr->ci_next;
    600 			return 	ExtractingComponentUTF8String ( mem_op, cr, (comp->a.utf8String) );
    601 		};
    602 	}
    603 	if( (comp->choiceId) ==  DIRECTORYSTRING_BMPSTRING &&
    604 		 (( comp->a.bmpString->identifier.bv_val && strncmp(comp->a.bmpString->identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0) ||
    605 		 ( strncmp(comp->a.bmpString->id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0))) {
    606 		if ( cr->cr_curr->ci_next == NULL )
    607 			return (comp->a.bmpString);
    608 		else {
    609 			cr->cr_curr = cr->cr_curr->ci_next;
    610 			return 	ExtractingComponentBMPString ( mem_op, cr, (comp->a.bmpString) );
    611 		};
    612 	}
    613 	return NULL;
    614 }  /* ExtractingComponentDirectoryString */
    615 
    616 int
    617 BDecComponentDirectoryString PARAMS ((b, tagId0, elmtLen0, v, bytesDecoded, mode),
    618 void* mem_op _AND_
    619 GenBuf * b _AND_
    620 AsnTag tagId0 _AND_
    621 AsnLen elmtLen0 _AND_
    622 ComponentDirectoryString **v _AND_
    623 AsnLen *bytesDecoded _AND_
    624 int mode)
    625 {
    626 	int seqDone = FALSE;
    627 	AsnLen totalElmtsLen1 = 0;
    628 	AsnLen elmtLen1;
    629 	AsnTag tagId1;
    630 	int mandatoryElmtCount1 = 0;
    631 	int old_mode = mode;
    632 	int rc;
    633 	ComponentDirectoryString *k, *t, c_temp;
    634 
    635 
    636 	if ( !(mode & DEC_ALLOC_MODE_1) ) {
    637 		memset(&c_temp,0,sizeof(c_temp));
    638 		 k = &c_temp;
    639 	} else
    640 		 k = t = *v;
    641 	mode = DEC_ALLOC_MODE_2;
    642     switch (tagId0)
    643     {
    644        case MAKE_TAG_ID (UNIV, PRIM, TELETEXSTRING_TAG_CODE):
    645        case MAKE_TAG_ID (UNIV, CONS, TELETEXSTRING_TAG_CODE):
    646         (k->choiceId) = DIRECTORYSTRING_TELETEXSTRING;
    647 		rc = 	BDecComponentTeletexString (mem_op, b, tagId0, elmtLen0, (&k->a.teletexString), &totalElmtsLen1, DEC_ALLOC_MODE_0 );
    648 		if ( rc != LDAP_SUCCESS ) return rc;
    649 		(k->a.teletexString)->identifier.bv_val = (k->a.teletexString)->id_buf;
    650 		(k->a.teletexString)->identifier.bv_len = strlen("teletexString");
    651 		strcpy( (k->a.teletexString)->identifier.bv_val, "teletexString");
    652     break;
    653 
    654        case MAKE_TAG_ID (UNIV, PRIM, PRINTABLESTRING_TAG_CODE):
    655        case MAKE_TAG_ID (UNIV, CONS, PRINTABLESTRING_TAG_CODE):
    656         (k->choiceId) = DIRECTORYSTRING_PRINTABLESTRING;
    657 		rc = 	BDecComponentPrintableString (mem_op, b, tagId0, elmtLen0, (&k->a.printableString), &totalElmtsLen1, DEC_ALLOC_MODE_0 );
    658 		if ( rc != LDAP_SUCCESS ) return rc;
    659 		(k->a.printableString)->identifier.bv_val = (k->a.printableString)->id_buf;
    660 		(k->a.printableString)->identifier.bv_len = strlen("printableString");
    661 		strcpy( (k->a.printableString)->identifier.bv_val, "printableString");
    662     break;
    663 
    664        case MAKE_TAG_ID (UNIV, PRIM, UNIVERSALSTRING_TAG_CODE):
    665        case MAKE_TAG_ID (UNIV, CONS, UNIVERSALSTRING_TAG_CODE):
    666         (k->choiceId) = DIRECTORYSTRING_UNIVERSALSTRING;
    667 		rc = 	BDecComponentUniversalString (mem_op, b, tagId0, elmtLen0, (&k->a.universalString), &totalElmtsLen1, DEC_ALLOC_MODE_0 );
    668 		if ( rc != LDAP_SUCCESS ) return rc;
    669 		(k->a.universalString)->identifier.bv_val = (k->a.universalString)->id_buf;
    670 		(k->a.universalString)->identifier.bv_len = strlen("universalString");
    671 		strcpy( (k->a.universalString)->identifier.bv_val, "universalString");
    672     break;
    673 
    674        case MAKE_TAG_ID (UNIV, PRIM, UTF8STRING_TAG_CODE):
    675        case MAKE_TAG_ID (UNIV, CONS, UTF8STRING_TAG_CODE):
    676         (k->choiceId) = DIRECTORYSTRING_UTF8STRING;
    677 		rc = 	BDecComponentUTF8String (mem_op, b, tagId0, elmtLen0, (&k->a.utf8String), &totalElmtsLen1, DEC_ALLOC_MODE_0 );
    678 		if ( rc != LDAP_SUCCESS ) return rc;
    679 		(k->a.utf8String)->identifier.bv_val = (k->a.utf8String)->id_buf;
    680 		(k->a.utf8String)->identifier.bv_len = strlen("utf8String");
    681 		strcpy( (k->a.utf8String)->identifier.bv_val, "utf8String");
    682     break;
    683 
    684        case MAKE_TAG_ID (UNIV, PRIM, BMPSTRING_TAG_CODE):
    685        case MAKE_TAG_ID (UNIV, CONS, BMPSTRING_TAG_CODE):
    686         (k->choiceId) = DIRECTORYSTRING_BMPSTRING;
    687 		rc = 	BDecComponentBMPString (mem_op, b, tagId0, elmtLen0, (&k->a.bmpString), &totalElmtsLen1, DEC_ALLOC_MODE_0 );
    688 		if ( rc != LDAP_SUCCESS ) return rc;
    689 		(k->a.bmpString)->identifier.bv_val = (k->a.bmpString)->id_buf;
    690 		(k->a.bmpString)->identifier.bv_len = strlen("bmpString");
    691 		strcpy( (k->a.bmpString)->identifier.bv_val, "bmpString");
    692     break;
    693 
    694     default:
    695         Asn1Error ("ERROR - unexpected tag in CHOICE\n");
    696         return -1;
    697         break;
    698     } /* end switch */
    699 	if( !(old_mode & DEC_ALLOC_MODE_1) ) {
    700 	*v = t = (ComponentDirectoryString*) CompAlloc( mem_op, sizeof(ComponentDirectoryString) );
    701 	if ( !t ) return -1;
    702 	*t = *k;
    703 	}
    704 	t->syntax = (Syntax*)NULL;
    705 	t->comp_desc = CompAlloc( mem_op, sizeof( ComponentDesc ) );
    706 	if ( !t->comp_desc ) {
    707 		free ( t );
    708 		return -1;
    709 	}
    710 	t->comp_desc->cd_gser_decoder = (gser_decoder_func*)GDecComponentDirectoryString ;
    711 	t->comp_desc->cd_ber_decoder = (ber_decoder_func*)BDecComponentDirectoryString ;
    712 	t->comp_desc->cd_free = (comp_free_func*)NULL;
    713 	t->comp_desc->cd_extract_i = (extract_component_from_id_func*)ExtractingComponentDirectoryString;
    714 	t->comp_desc->cd_type = ASN_COMPOSITE;
    715 	t->comp_desc->cd_type_id = COMPOSITE_ASN1_TYPE;
    716 	t->comp_desc->cd_all_match = (allcomponent_matching_func*)MatchingComponentDirectoryString;
    717     (*bytesDecoded) += totalElmtsLen1;
    718 	return LDAP_SUCCESS;
    719 }  /* BDecDirectoryStringContent */
    720 
    721 int
    722 GDecComponentDirectoryString PARAMS (( mem_op,b, v, bytesDecoded, mode),
    723 void* mem_op _AND_
    724 GenBuf * b _AND_
    725 ComponentDirectoryString **v _AND_
    726 AsnLen *bytesDecoded _AND_
    727 int mode)
    728 {
    729 	char* peek_head,*peek_head2;
    730 	int i, strLen,strLen2, rc, old_mode = mode;
    731 	ComponentDirectoryString *k,*t, c_temp;
    732 
    733 
    734 	if ( !(mode & DEC_ALLOC_MODE_1) ) {
    735 		memset(&c_temp,0,sizeof(c_temp));
    736 		 k = &c_temp;
    737 	} else
    738 		 k = t = *v;
    739 	mode = DEC_ALLOC_MODE_2;
    740 	if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){
    741 		Asn1Error("Error during Reading identifier");
    742 		return LDAP_PROTOCOL_ERROR;
    743 	}
    744 	if( !(strLen2 = LocateNextGSERToken(mem_op,b,&peek_head2,GSER_NO_COPY)) ){
    745 		Asn1Error("Error during Reading identifier");
    746 		return LDAP_PROTOCOL_ERROR;
    747 	}
    748 	if(*peek_head2 != ':'){
    749 		Asn1Error("Missing : in encoded data");
    750 		return LDAP_PROTOCOL_ERROR;
    751 	}
    752 	if( strncmp("teletexString",peek_head, strlen("teletexString")) == 0){
    753 		(k->choiceId) = DIRECTORYSTRING_TELETEXSTRING;
    754 		rc = 	GDecComponentTeletexString (mem_op, b, (&k->a.teletexString), bytesDecoded, DEC_ALLOC_MODE_0 );
    755 		if ( rc != LDAP_SUCCESS ) return rc;
    756 		(k->a.teletexString)->identifier.bv_val = peek_head;
    757 		(k->a.teletexString)->identifier.bv_len = strLen;
    758 	}
    759 	else if( strncmp("printableString",peek_head,strlen("printableString")) == 0){
    760 		(k->choiceId) = DIRECTORYSTRING_PRINTABLESTRING;
    761 		rc = 	GDecComponentPrintableString (mem_op, b, (&k->a.printableString), bytesDecoded, DEC_ALLOC_MODE_0 );
    762 		if ( rc != LDAP_SUCCESS ) return rc;
    763 		(k->a.printableString)->identifier.bv_val = peek_head;
    764 		(k->a.printableString)->identifier.bv_len = strLen;
    765 	}
    766 	else if( strncmp("universalString",peek_head,strlen("universalString")) == 0){
    767 		(k->choiceId) = DIRECTORYSTRING_UNIVERSALSTRING;
    768 		rc = 	GDecComponentUniversalString (mem_op, b, (&k->a.universalString), bytesDecoded, DEC_ALLOC_MODE_0 );
    769 		if ( rc != LDAP_SUCCESS ) return rc;
    770 		(k->a.universalString)->identifier.bv_val = peek_head;
    771 		(k->a.universalString)->identifier.bv_len = strLen;
    772 	}
    773 	else if( strncmp("utf8String",peek_head,strlen("utf8String")) == 0){
    774 		(k->choiceId) = DIRECTORYSTRING_UTF8STRING;
    775 		rc = 	GDecComponentUTF8String (mem_op, b, (&k->a.utf8String), bytesDecoded, DEC_ALLOC_MODE_0 );
    776 		if ( rc != LDAP_SUCCESS ) return rc;
    777 		(k->a.utf8String)->identifier.bv_val = peek_head;
    778 		(k->a.utf8String)->identifier.bv_len = strLen;
    779 	}
    780 	else if( strncmp("bmpString",peek_head,strlen("bmpString")) == 0){
    781 		(k->choiceId) = DIRECTORYSTRING_BMPSTRING;
    782 		rc = 	GDecComponentBMPString (mem_op, b, (&k->a.bmpString), bytesDecoded, DEC_ALLOC_MODE_0 );
    783 		if ( rc != LDAP_SUCCESS ) return rc;
    784 		(k->a.bmpString)->identifier.bv_val = peek_head;
    785 		(k->a.bmpString)->identifier.bv_len = strLen;
    786 	}
    787 	else {
    788 		Asn1Error("Undefined Identifier");
    789 		return LDAP_PROTOCOL_ERROR;
    790 	}
    791 	if( !(old_mode & DEC_ALLOC_MODE_1) ) {
    792 	*v = t = (ComponentDirectoryString*) CompAlloc( mem_op, sizeof(ComponentDirectoryString) );
    793 	if ( !t ) return -1;
    794 	*t = *k;
    795 	}
    796 	t->syntax = (Syntax*)NULL;
    797 	t->comp_desc = CompAlloc( mem_op, sizeof( ComponentDesc ) );
    798 	if ( !t->comp_desc ) {
    799 		free ( t );
    800 		return -1;
    801 	}
    802 	t->comp_desc->cd_gser_decoder = (gser_decoder_func*)GDecComponentDirectoryString ;
    803 	t->comp_desc->cd_ber_decoder = (ber_decoder_func*)BDecComponentDirectoryString ;
    804 	t->comp_desc->cd_free = (comp_free_func*)NULL;
    805 	t->comp_desc->cd_extract_i = (extract_component_from_id_func*)ExtractingComponentDirectoryString;
    806 	t->comp_desc->cd_type = ASN_COMPOSITE;
    807 	t->comp_desc->cd_type_id = COMPOSITE_ASN1_TYPE;
    808 	t->comp_desc->cd_all_match = (allcomponent_matching_func*)MatchingComponentDirectoryString;
    809 	return LDAP_SUCCESS;
    810 }  /* GDecDirectoryStringContent */
    811 
    812 
    813 int
    814 MatchingComponentEDIPartyName ( char* oid, ComponentSyntaxInfo* csi_attr, ComponentSyntaxInfo* csi_assert ) {
    815 	int rc;
    816 	MatchingRule* mr;
    817 
    818 	if ( oid ) {
    819 		mr = retrieve_matching_rule( oid, csi_attr->csi_comp_desc->cd_type_id);
    820 		if ( mr ) return component_value_match( mr, csi_attr, csi_assert );
    821 	}
    822 
    823 	rc = 1;
    824 	if(COMPONENTNOT_NULL( ((ComponentEDIPartyName*)csi_attr)->nameAssigner ) ) {
    825 	rc =	MatchingComponentDirectoryString ( oid, (ComponentSyntaxInfo*)((ComponentEDIPartyName*)csi_attr)->nameAssigner, (ComponentSyntaxInfo*)((ComponentEDIPartyName*)csi_assert)->nameAssigner );
    826 	if ( rc != LDAP_COMPARE_TRUE )
    827 		return rc;
    828 	}
    829 	rc =	MatchingComponentDirectoryString ( oid, (ComponentSyntaxInfo*)((ComponentEDIPartyName*)csi_attr)->partyName, (ComponentSyntaxInfo*)((ComponentEDIPartyName*)csi_assert)->partyName );
    830 	if ( rc != LDAP_COMPARE_TRUE )
    831 		return rc;
    832 	return LDAP_COMPARE_TRUE;
    833 }  /* BMatchingComponentEDIPartyName */
    834 
    835 void*
    836 ExtractingComponentEDIPartyName ( void* mem_op, ComponentReference* cr, ComponentEDIPartyName *comp )
    837 {
    838 
    839 	if ( ( comp->nameAssigner->identifier.bv_val && strncmp(comp->nameAssigner->identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) || ( strncmp(comp->nameAssigner->id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) ) {
    840 		if ( cr->cr_curr->ci_next == NULL )
    841 			return comp->nameAssigner;
    842 		else {
    843 			cr->cr_curr = cr->cr_curr->ci_next;
    844 			return 	ExtractingComponentDirectoryString ( mem_op, cr, comp->nameAssigner );
    845 		}
    846 	}
    847 	if ( ( comp->partyName->identifier.bv_val && strncmp(comp->partyName->identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) || ( strncmp(comp->partyName->id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) ) {
    848 		if ( cr->cr_curr->ci_next == NULL )
    849 			return comp->partyName;
    850 		else {
    851 			cr->cr_curr = cr->cr_curr->ci_next;
    852 			return 	ExtractingComponentDirectoryString ( mem_op, cr, comp->partyName );
    853 		}
    854 	}
    855 	return NULL;
    856 }  /* ExtractingComponentEDIPartyName */
    857 
    858 int
    859 BDecComponentEDIPartyName PARAMS ((b, tagId0, elmtLen0, v, bytesDecoded, mode),
    860 void* mem_op _AND_
    861 GenBuf * b _AND_
    862 AsnTag tagId0 _AND_
    863 AsnLen elmtLen0 _AND_
    864 ComponentEDIPartyName **v _AND_
    865 AsnLen *bytesDecoded _AND_
    866 int mode)
    867 {
    868 	int seqDone = FALSE;
    869 	AsnLen totalElmtsLen1 = 0;
    870 	AsnLen elmtLen1;
    871 	AsnTag tagId1;
    872 	int mandatoryElmtCount1 = 0;
    873 	AsnLen totalElmtsLen2 = 0;
    874 	AsnLen elmtLen2;
    875 	AsnTag tagId2;
    876 	AsnLen totalElmtsLen3 = 0;
    877 	AsnLen elmtLen3;
    878 	AsnTag tagId3;
    879 	int old_mode = mode;
    880 	int rc;
    881 	ComponentEDIPartyName *k, *t, c_temp;
    882 
    883 
    884 	if ( !(mode & DEC_ALLOC_MODE_1) ) {
    885 		memset(&c_temp,0,sizeof(c_temp));
    886 		 k = &c_temp;
    887 	} else
    888 		 k = t = *v;
    889 	mode = DEC_ALLOC_MODE_2;
    890     tagId1 = BDecTag (b, &totalElmtsLen1 );
    891 
    892     if (((tagId1 == MAKE_TAG_ID (CNTX, CONS, 0))))
    893     {
    894     elmtLen1 = BDecLen (b, &totalElmtsLen1 );
    895 		rc =     tagId2 = BDecTag (b, &totalElmtsLen1 );
    896     elmtLen2 = BDecLen (b, &totalElmtsLen1 );
    897 	BDecComponentDirectoryString (mem_op, b, tagId2, elmtLen2, (&k->nameAssigner), &totalElmtsLen1, mode);
    898     if (elmtLen1 == INDEFINITE_LEN)
    899         BDecEoc(b, &totalElmtsLen1 );
    900 		if ( rc != LDAP_SUCCESS ) return rc;
    901 		(k->nameAssigner)->identifier.bv_val = (k->nameAssigner)->id_buf;
    902 		(k->nameAssigner)->identifier.bv_len = strlen("nameAssigner");
    903 		strcpy( (k->nameAssigner)->identifier.bv_val, "nameAssigner");
    904 	if (elmtLen1 == INDEFINITE_LEN)
    905         BDecEoc (b, &totalElmtsLen1 );
    906     tagId1 = BDecTag (b, &totalElmtsLen1);
    907     }
    908 
    909 
    910     if (((tagId1 == MAKE_TAG_ID (CNTX, CONS, 1))))
    911     {
    912     elmtLen1 = BDecLen (b, &totalElmtsLen1 );
    913 		rc =     tagId2 = BDecTag (b, &totalElmtsLen1 );
    914     elmtLen2 = BDecLen (b, &totalElmtsLen1 );
    915 	BDecComponentDirectoryString (mem_op, b, tagId2, elmtLen2, (&k->partyName), &totalElmtsLen1, mode);
    916     if (elmtLen1 == INDEFINITE_LEN)
    917         BDecEoc(b, &totalElmtsLen1 );
    918 		if ( rc != LDAP_SUCCESS ) return rc;
    919 		(k->partyName)->identifier.bv_val = (k->partyName)->id_buf;
    920 		(k->partyName)->identifier.bv_len = strlen("partyName");
    921 		strcpy( (k->partyName)->identifier.bv_val, "partyName");
    922 	if (elmtLen1 == INDEFINITE_LEN)
    923         BDecEoc (b, &totalElmtsLen1 );
    924         seqDone = TRUE;
    925         if (elmtLen0 == INDEFINITE_LEN)
    926             BDecEoc (b, &totalElmtsLen1 );
    927         else if (totalElmtsLen1 != elmtLen0)
    928         return -1;
    929 
    930     }
    931     else
    932         return -1;
    933 
    934 
    935 
    936     if (!seqDone)
    937         return -1;
    938 
    939 	if( !(old_mode & DEC_ALLOC_MODE_1) ) {
    940 	*v = t = (ComponentEDIPartyName*) CompAlloc( mem_op, sizeof(ComponentEDIPartyName) );
    941 	if ( !t ) return -1;
    942 	*t = *k;
    943 	}
    944 	t->syntax = (Syntax*)NULL;
    945 	t->comp_desc = CompAlloc( mem_op, sizeof( ComponentDesc ) );
    946 	if ( !t->comp_desc ) {
    947 		free ( t );
    948 		return -1;
    949 	}
    950 	t->comp_desc->cd_gser_decoder = (gser_decoder_func*)GDecComponentEDIPartyName ;
    951 	t->comp_desc->cd_ber_decoder = (ber_decoder_func*)BDecComponentEDIPartyName ;
    952 	t->comp_desc->cd_free = (comp_free_func*)NULL;
    953 	t->comp_desc->cd_extract_i = (extract_component_from_id_func*)ExtractingComponentEDIPartyName;
    954 	t->comp_desc->cd_type = ASN_COMPOSITE;
    955 	t->comp_desc->cd_type_id = COMPOSITE_ASN1_TYPE;
    956 	t->comp_desc->cd_all_match = (allcomponent_matching_func*)MatchingComponentEDIPartyName;
    957     (*bytesDecoded) += totalElmtsLen1;
    958 	return LDAP_SUCCESS;
    959 }  /* BDecEDIPartyName*/
    960 
    961 int
    962 GDecComponentEDIPartyName PARAMS (( mem_op,b, v, bytesDecoded, mode),
    963 void* mem_op _AND_
    964 GenBuf * b _AND_
    965 ComponentEDIPartyName **v _AND_
    966 AsnLen *bytesDecoded _AND_
    967 int mode)
    968 {
    969 	char* peek_head,*peek_head2;
    970 	int i, strLen,strLen2, rc, old_mode = mode;
    971 	ComponentEDIPartyName *k,*t, c_temp;
    972 
    973 
    974 	if ( !(mode & DEC_ALLOC_MODE_1) ) {
    975 		memset(&c_temp,0,sizeof(c_temp));
    976 		 k = &c_temp;
    977 	} else
    978 		 k = t = *v;
    979 	mode = DEC_ALLOC_MODE_2;
    980 	*bytesDecoded = 0;
    981 	if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){
    982 		Asn1Error("Error during Reading { in encoded data");
    983 		return LDAP_PROTOCOL_ERROR;
    984 	}
    985 	if(*peek_head != '{'){
    986 		Asn1Error("Missing { in encoded data");
    987 		return LDAP_PROTOCOL_ERROR;
    988 	}
    989 
    990 	if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){
    991 		Asn1Error("Error during Reading identifier");
    992 		return LDAP_PROTOCOL_ERROR;
    993 	}
    994 	if ( strncmp( peek_head, "nameAssigner", strlen("nameAssigner") ) == 0 ) {
    995 		rc = 	GDecComponentDirectoryString (mem_op, b, (&k->nameAssigner), bytesDecoded, mode);
    996 		if ( rc != LDAP_SUCCESS ) return rc;
    997 	( k->nameAssigner)->identifier.bv_val = peek_head;
    998 	( k->nameAssigner)->identifier.bv_len = strLen;
    999 	if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){
   1000 		Asn1Error("Error during Reading , ");
   1001 		return LDAP_PROTOCOL_ERROR;
   1002 	}
   1003 	if(*peek_head != ','){
   1004 		Asn1Error("Missing , in encoding");
   1005 		return LDAP_PROTOCOL_ERROR;
   1006 	}
   1007 	if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){
   1008 	  Asn1Error("Error during Reading identifier");
   1009 		return LDAP_PROTOCOL_ERROR;
   1010 	}
   1011 	}
   1012 	if ( strncmp( peek_head, "partyName", strlen("partyName") ) == 0 ) {
   1013 		rc = 	GDecComponentDirectoryString (mem_op, b, (&k->partyName), bytesDecoded, mode);
   1014 		if ( rc != LDAP_SUCCESS ) return rc;
   1015 	( k->partyName)->identifier.bv_val = peek_head;
   1016 	( k->partyName)->identifier.bv_len = strLen;
   1017 	}
   1018 	if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ) {
   1019 		Asn1Error("Error during Reading } in encoding");
   1020 		return LDAP_PROTOCOL_ERROR;
   1021 	}
   1022 	if(*peek_head != '}'){
   1023 		Asn1Error("Missing } in encoding");
   1024 		return LDAP_PROTOCOL_ERROR;
   1025 	}
   1026 	if( !(old_mode & DEC_ALLOC_MODE_1) ) {
   1027 	*v = t = (ComponentEDIPartyName*) CompAlloc( mem_op, sizeof(ComponentEDIPartyName) );
   1028 	if ( !t ) return -1;
   1029 	*t = *k;
   1030 	}
   1031 	t->syntax = (Syntax*)NULL;
   1032 	t->comp_desc = CompAlloc( mem_op, sizeof( ComponentDesc ) );
   1033 	if ( !t->comp_desc ) {
   1034 		free ( t );
   1035 		return -1;
   1036 	}
   1037 	t->comp_desc->cd_gser_decoder = (gser_decoder_func*)GDecComponentEDIPartyName ;
   1038 	t->comp_desc->cd_ber_decoder = (ber_decoder_func*)BDecComponentEDIPartyName ;
   1039 	t->comp_desc->cd_free = (comp_free_func*)NULL;
   1040 	t->comp_desc->cd_extract_i = (extract_component_from_id_func*)ExtractingComponentEDIPartyName;
   1041 	t->comp_desc->cd_type = ASN_COMPOSITE;
   1042 	t->comp_desc->cd_type_id = COMPOSITE_ASN1_TYPE;
   1043 	t->comp_desc->cd_all_match = (allcomponent_matching_func*)MatchingComponentEDIPartyName;
   1044 	return LDAP_SUCCESS;
   1045 }  /* GDecEDIPartyName*/
   1046 
   1047 
   1048 
   1049 int
   1050 MatchingComponentGeneralName ( char* oid, ComponentSyntaxInfo* csi_attr, ComponentSyntaxInfo* csi_assert ) {
   1051 	int rc;
   1052 	MatchingRule* mr;
   1053 	ComponentGeneralName *v1, *v2;
   1054 
   1055 
   1056 	v1 = (ComponentGeneralName*)csi_attr;
   1057 	v2 = (ComponentGeneralName*)csi_assert;
   1058 	if ( oid ) {
   1059 		mr = retrieve_matching_rule( oid, csi_attr->csi_comp_desc->cd_type_id);
   1060 		if ( mr ) return component_value_match( mr, csi_attr, csi_assert );
   1061 	}
   1062 
   1063 	if( (v1->choiceId != v2->choiceId ) )
   1064 		return LDAP_COMPARE_FALSE;
   1065 	switch( v1->choiceId )
   1066 	{
   1067 	   case GENERALNAME_OTHERNAME :
   1068 		rc = 	MatchingComponentOtherName ( oid, (ComponentSyntaxInfo*)(v1->a.otherName), (ComponentSyntaxInfo*)(v2->a.otherName) );
   1069 		break;
   1070 	   case GENERALNAME_RFC822NAME :
   1071 		rc = 	MatchingComponentIA5String ( oid, (ComponentSyntaxInfo*)(v1->a.rfc822Name), (ComponentSyntaxInfo*)(v2->a.rfc822Name) );
   1072 		break;
   1073 	   case GENERALNAME_DNSNAME :
   1074 		rc = 	MatchingComponentIA5String ( oid, (ComponentSyntaxInfo*)(v1->a.dNSName), (ComponentSyntaxInfo*)(v2->a.dNSName) );
   1075 		break;
   1076 	   case GENERALNAME_X400ADDRESS :
   1077 		rc = 	MatchingComponentORAddress ( oid, (ComponentSyntaxInfo*)(v1->a.x400Address), (ComponentSyntaxInfo*)(v2->a.x400Address) );
   1078 		break;
   1079 	   case GENERALNAME_DIRECTORYNAME :
   1080 		rc = 	MatchingComponentName ( oid, (ComponentSyntaxInfo*)(v1->a.directoryName), (ComponentSyntaxInfo*)(v2->a.directoryName) );
   1081 		break;
   1082 	   case GENERALNAME_EDIPARTYNAME :
   1083 		rc = 	MatchingComponentEDIPartyName ( oid, (ComponentSyntaxInfo*)(v1->a.ediPartyName), (ComponentSyntaxInfo*)(v2->a.ediPartyName) );
   1084 		break;
   1085 	   case GENERALNAME_UNIFORMRESOURCEIDENTIFIER :
   1086 		rc = 	MatchingComponentIA5String ( oid, (ComponentSyntaxInfo*)(v1->a.uniformResourceIdentifier), (ComponentSyntaxInfo*)(v2->a.uniformResourceIdentifier) );
   1087 		break;
   1088 	   case GENERALNAME_IPADDRESS :
   1089 		rc = 	MatchingComponentOcts ( oid, (ComponentSyntaxInfo*)(v1->a.iPAddress), (ComponentSyntaxInfo*)(v2->a.iPAddress) );
   1090 		break;
   1091 	   case GENERALNAME_REGISTEREDID :
   1092 		rc = 	MatchingComponentOid ( oid, (ComponentSyntaxInfo*)(v1->a.registeredID), (ComponentSyntaxInfo*)(v2->a.registeredID) );
   1093 		break;
   1094 	default :
   1095 		 return LDAP_PROTOCOL_ERROR;
   1096 	}
   1097 	return rc;
   1098 }  /* BMatchingComponentGeneralNameContent */
   1099 
   1100 void*
   1101 ExtractingComponentGeneralName ( void* mem_op, ComponentReference* cr, ComponentGeneralName *comp )
   1102 {
   1103 
   1104 
   1105 	if( (comp->choiceId) ==  GENERALNAME_OTHERNAME &&
   1106 		 (( comp->a.otherName->identifier.bv_val && strncmp(comp->a.otherName->identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0) ||
   1107 		 ( strncmp(comp->a.otherName->id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0))) {
   1108 		if ( cr->cr_curr->ci_next == NULL )
   1109 			return (comp->a.otherName);
   1110 		else {
   1111 			cr->cr_curr = cr->cr_curr->ci_next;
   1112 			return 	ExtractingComponentOtherName ( mem_op, cr, (comp->a.otherName) );
   1113 		};
   1114 	}
   1115 	if( (comp->choiceId) ==  GENERALNAME_RFC822NAME &&
   1116 		 (( comp->a.rfc822Name->identifier.bv_val && strncmp(comp->a.rfc822Name->identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0) ||
   1117 		 ( strncmp(comp->a.rfc822Name->id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0))) {
   1118 		if ( cr->cr_curr->ci_next == NULL )
   1119 			return (comp->a.rfc822Name);
   1120 		else {
   1121 			cr->cr_curr = cr->cr_curr->ci_next;
   1122 			return 	ExtractingComponentIA5String ( mem_op, cr, (comp->a.rfc822Name) );
   1123 		};
   1124 	}
   1125 	if( (comp->choiceId) ==  GENERALNAME_DNSNAME &&
   1126 		 (( comp->a.dNSName->identifier.bv_val && strncmp(comp->a.dNSName->identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0) ||
   1127 		 ( strncmp(comp->a.dNSName->id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0))) {
   1128 		if ( cr->cr_curr->ci_next == NULL )
   1129 			return (comp->a.dNSName);
   1130 		else {
   1131 			cr->cr_curr = cr->cr_curr->ci_next;
   1132 			return 	ExtractingComponentIA5String ( mem_op, cr, (comp->a.dNSName) );
   1133 		};
   1134 	}
   1135 	if( (comp->choiceId) ==  GENERALNAME_X400ADDRESS &&
   1136 		 (( comp->a.x400Address->identifier.bv_val && strncmp(comp->a.x400Address->identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0) ||
   1137 		 ( strncmp(comp->a.x400Address->id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0))) {
   1138 		if ( cr->cr_curr->ci_next == NULL )
   1139 			return (comp->a.x400Address);
   1140 		else {
   1141 			cr->cr_curr = cr->cr_curr->ci_next;
   1142 			return 	ExtractingComponentORAddress ( mem_op, cr, (comp->a.x400Address) );
   1143 		};
   1144 	}
   1145 	if( (comp->choiceId) ==  GENERALNAME_DIRECTORYNAME &&
   1146 		 (( comp->a.directoryName->identifier.bv_val && strncmp(comp->a.directoryName->identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0) ||
   1147 		 ( strncmp(comp->a.directoryName->id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0))) {
   1148 		if ( cr->cr_curr->ci_next == NULL )
   1149 			return (comp->a.directoryName);
   1150 		else {
   1151 			cr->cr_curr = cr->cr_curr->ci_next;
   1152 			return 	ExtractingComponentName ( mem_op, cr, (comp->a.directoryName) );
   1153 		};
   1154 	}
   1155 	if( (comp->choiceId) ==  GENERALNAME_EDIPARTYNAME &&
   1156 		 (( comp->a.ediPartyName->identifier.bv_val && strncmp(comp->a.ediPartyName->identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0) ||
   1157 		 ( strncmp(comp->a.ediPartyName->id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0))) {
   1158 		if ( cr->cr_curr->ci_next == NULL )
   1159 			return (comp->a.ediPartyName);
   1160 		else {
   1161 			cr->cr_curr = cr->cr_curr->ci_next;
   1162 			return 	ExtractingComponentEDIPartyName ( mem_op, cr, (comp->a.ediPartyName) );
   1163 		};
   1164 	}
   1165 	if( (comp->choiceId) ==  GENERALNAME_UNIFORMRESOURCEIDENTIFIER &&
   1166 		 (( comp->a.uniformResourceIdentifier->identifier.bv_val && strncmp(comp->a.uniformResourceIdentifier->identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0) ||
   1167 		 ( strncmp(comp->a.uniformResourceIdentifier->id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0))) {
   1168 		if ( cr->cr_curr->ci_next == NULL )
   1169 			return (comp->a.uniformResourceIdentifier);
   1170 		else {
   1171 			cr->cr_curr = cr->cr_curr->ci_next;
   1172 			return 	ExtractingComponentIA5String ( mem_op, cr, (comp->a.uniformResourceIdentifier) );
   1173 		};
   1174 	}
   1175 	if( (comp->choiceId) ==  GENERALNAME_IPADDRESS &&
   1176 		 (( comp->a.iPAddress->identifier.bv_val && strncmp(comp->a.iPAddress->identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0) ||
   1177 		 ( strncmp(comp->a.iPAddress->id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0))) {
   1178 		if ( cr->cr_curr->ci_next == NULL )
   1179 			return (comp->a.iPAddress);
   1180 		else {
   1181 			cr->cr_curr = cr->cr_curr->ci_next;
   1182 			return 	ExtractingComponentOcts ( mem_op, cr, (comp->a.iPAddress) );
   1183 		};
   1184 	}
   1185 	if( (comp->choiceId) ==  GENERALNAME_REGISTEREDID &&
   1186 		 (( comp->a.registeredID->identifier.bv_val && strncmp(comp->a.registeredID->identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0) ||
   1187 		 ( strncmp(comp->a.registeredID->id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0))) {
   1188 		if ( cr->cr_curr->ci_next == NULL )
   1189 			return (comp->a.registeredID);
   1190 		else {
   1191 			cr->cr_curr = cr->cr_curr->ci_next;
   1192 			return 	ExtractingComponentOid ( mem_op, cr, (comp->a.registeredID) );
   1193 		};
   1194 	}
   1195 	return NULL;
   1196 }  /* ExtractingComponentGeneralName */
   1197 
   1198 int
   1199 BDecComponentGeneralName PARAMS ((b, tagId0, elmtLen0, v, bytesDecoded, mode),
   1200 void* mem_op _AND_
   1201 GenBuf * b _AND_
   1202 AsnTag tagId0 _AND_
   1203 AsnLen elmtLen0 _AND_
   1204 ComponentGeneralName **v _AND_
   1205 AsnLen *bytesDecoded _AND_
   1206 int mode)
   1207 {
   1208 	int seqDone = FALSE;
   1209 	AsnLen totalElmtsLen1 = 0;
   1210 	AsnLen elmtLen1;
   1211 	AsnTag tagId1;
   1212 	int mandatoryElmtCount1 = 0;
   1213 	AsnLen totalElmtsLen2 = 0;
   1214 	AsnLen elmtLen2;
   1215 	AsnTag tagId2;
   1216 	AsnLen totalElmtsLen3 = 0;
   1217 	AsnLen elmtLen3;
   1218 	AsnTag tagId3;
   1219 	int old_mode = mode;
   1220 	int rc;
   1221 	ComponentGeneralName *k, *t, c_temp;
   1222 
   1223 
   1224 	if ( !(mode & DEC_ALLOC_MODE_1) ) {
   1225 		memset(&c_temp,0,sizeof(c_temp));
   1226 		 k = &c_temp;
   1227 	} else
   1228 		 k = t = *v;
   1229 	mode = DEC_ALLOC_MODE_2;
   1230     switch (tagId0)
   1231     {
   1232        case MAKE_TAG_ID (CNTX, CONS, 0):
   1233 if (BDecTag (b, &totalElmtsLen1 ) != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE))
   1234     {
   1235          Asn1Error ("Unexpected Tag\n");
   1236          return -1;
   1237     }
   1238 
   1239     elmtLen1 = BDecLen (b, &totalElmtsLen1 );
   1240         (k->choiceId) = GENERALNAME_OTHERNAME;
   1241 		rc = 	BDecComponentOtherName (mem_op, b, tagId1, elmtLen1, (&k->a.otherName), &totalElmtsLen1, mode);
   1242 		if ( rc != LDAP_SUCCESS ) return rc;
   1243 		(k->a.otherName)->identifier.bv_val = (k->a.otherName)->id_buf;
   1244 		(k->a.otherName)->identifier.bv_len = strlen("otherName");
   1245 		strcpy( (k->a.otherName)->identifier.bv_val, "otherName");
   1246 	if (elmtLen0 == INDEFINITE_LEN)
   1247         BDecEoc (b, &totalElmtsLen1 );
   1248     break;
   1249 
   1250        case MAKE_TAG_ID (CNTX, CONS, 1):
   1251     tagId1 = BDecTag (b, &totalElmtsLen1 );
   1252 if ((tagId1 != MAKE_TAG_ID (UNIV, PRIM, IA5STRING_TAG_CODE)) &&
   1253    (tagId1 != MAKE_TAG_ID (UNIV, CONS, IA5STRING_TAG_CODE)))
   1254     {
   1255          Asn1Error ("Unexpected Tag\n");
   1256          return -1;
   1257     }
   1258 
   1259     elmtLen1 = BDecLen (b, &totalElmtsLen1 );
   1260         (k->choiceId) = GENERALNAME_RFC822NAME;
   1261 		rc = 	BDecComponentIA5String (mem_op, b, tagId1, elmtLen1, (&k->a.rfc822Name), &totalElmtsLen1, DEC_ALLOC_MODE_0 );
   1262 		if ( rc != LDAP_SUCCESS ) return rc;
   1263 		(k->a.rfc822Name)->identifier.bv_val = (k->a.rfc822Name)->id_buf;
   1264 		(k->a.rfc822Name)->identifier.bv_len = strlen("rfc822Name");
   1265 		strcpy( (k->a.rfc822Name)->identifier.bv_val, "rfc822Name");
   1266 	if (elmtLen0 == INDEFINITE_LEN)
   1267         BDecEoc (b, &totalElmtsLen1 );
   1268     break;
   1269 
   1270        case MAKE_TAG_ID (CNTX, CONS, 2):
   1271     tagId1 = BDecTag (b, &totalElmtsLen1 );
   1272 if ((tagId1 != MAKE_TAG_ID (UNIV, PRIM, IA5STRING_TAG_CODE)) &&
   1273    (tagId1 != MAKE_TAG_ID (UNIV, CONS, IA5STRING_TAG_CODE)))
   1274     {
   1275          Asn1Error ("Unexpected Tag\n");
   1276          return -1;
   1277     }
   1278 
   1279     elmtLen1 = BDecLen (b, &totalElmtsLen1 );
   1280         (k->choiceId) = GENERALNAME_DNSNAME;
   1281 		rc = 	BDecComponentIA5String (mem_op, b, tagId1, elmtLen1, (&k->a.dNSName), &totalElmtsLen1, DEC_ALLOC_MODE_0 );
   1282 		if ( rc != LDAP_SUCCESS ) return rc;
   1283 		(k->a.dNSName)->identifier.bv_val = (k->a.dNSName)->id_buf;
   1284 		(k->a.dNSName)->identifier.bv_len = strlen("dNSName");
   1285 		strcpy( (k->a.dNSName)->identifier.bv_val, "dNSName");
   1286 	if (elmtLen0 == INDEFINITE_LEN)
   1287         BDecEoc (b, &totalElmtsLen1 );
   1288     break;
   1289 
   1290        case MAKE_TAG_ID (CNTX, CONS, 3):
   1291 if (BDecTag (b, &totalElmtsLen1 ) != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE))
   1292     {
   1293          Asn1Error ("Unexpected Tag\n");
   1294          return -1;
   1295     }
   1296 
   1297     elmtLen1 = BDecLen (b, &totalElmtsLen1 );
   1298         (k->choiceId) = GENERALNAME_X400ADDRESS;
   1299 		rc = 	BDecComponentORAddress (mem_op, b, tagId1, elmtLen1, (&k->a.x400Address), &totalElmtsLen1, mode);
   1300 		if ( rc != LDAP_SUCCESS ) return rc;
   1301 		(k->a.x400Address)->identifier.bv_val = (k->a.x400Address)->id_buf;
   1302 		(k->a.x400Address)->identifier.bv_len = strlen("x400Address");
   1303 		strcpy( (k->a.x400Address)->identifier.bv_val, "x400Address");
   1304 	if (elmtLen0 == INDEFINITE_LEN)
   1305         BDecEoc (b, &totalElmtsLen1 );
   1306     break;
   1307 
   1308        case MAKE_TAG_ID (CNTX, CONS, 4):
   1309         (k->choiceId) = GENERALNAME_DIRECTORYNAME;
   1310 		tagId1 = BDecTag (b, &totalElmtsLen1 );
   1311     elmtLen1 = BDecLen (b, &totalElmtsLen1 );
   1312 	rc = BDecComponentName (mem_op, b, tagId1, elmtLen1, (&k->a.directoryName), &totalElmtsLen1, mode);
   1313     if (elmtLen0 == INDEFINITE_LEN)
   1314         BDecEoc(b, &totalElmtsLen1 );
   1315 		if ( rc != LDAP_SUCCESS ) return rc;
   1316 		(k->a.directoryName)->identifier.bv_val = (k->a.directoryName)->id_buf;
   1317 		(k->a.directoryName)->identifier.bv_len = strlen("directoryName");
   1318 		strcpy( (k->a.directoryName)->identifier.bv_val, "directoryName");
   1319 	if (elmtLen0 == INDEFINITE_LEN)
   1320         BDecEoc (b, &totalElmtsLen1 );
   1321     break;
   1322 
   1323        case MAKE_TAG_ID (CNTX, CONS, 5):
   1324 if (BDecTag (b, &totalElmtsLen1 ) != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE))
   1325     {
   1326          Asn1Error ("Unexpected Tag\n");
   1327          return -1;
   1328     }
   1329 
   1330     elmtLen1 = BDecLen (b, &totalElmtsLen1 );
   1331         (k->choiceId) = GENERALNAME_EDIPARTYNAME;
   1332 		rc = 	BDecComponentEDIPartyName (mem_op, b, tagId1, elmtLen1, (&k->a.ediPartyName), &totalElmtsLen1, mode);
   1333 		if ( rc != LDAP_SUCCESS ) return rc;
   1334 		(k->a.ediPartyName)->identifier.bv_val = (k->a.ediPartyName)->id_buf;
   1335 		(k->a.ediPartyName)->identifier.bv_len = strlen("ediPartyName");
   1336 		strcpy( (k->a.ediPartyName)->identifier.bv_val, "ediPartyName");
   1337 	if (elmtLen0 == INDEFINITE_LEN)
   1338         BDecEoc (b, &totalElmtsLen1 );
   1339     break;
   1340 
   1341        case MAKE_TAG_ID (CNTX, CONS, 6):
   1342     tagId1 = BDecTag (b, &totalElmtsLen1 );
   1343 if ((tagId1 != MAKE_TAG_ID (UNIV, PRIM, IA5STRING_TAG_CODE)) &&
   1344    (tagId1 != MAKE_TAG_ID (UNIV, CONS, IA5STRING_TAG_CODE)))
   1345     {
   1346          Asn1Error ("Unexpected Tag\n");
   1347          return -1;
   1348     }
   1349 
   1350     elmtLen1 = BDecLen (b, &totalElmtsLen1 );
   1351         (k->choiceId) = GENERALNAME_UNIFORMRESOURCEIDENTIFIER;
   1352 		rc = 	BDecComponentIA5String (mem_op, b, tagId1, elmtLen1, (&k->a.uniformResourceIdentifier), &totalElmtsLen1, DEC_ALLOC_MODE_0 );
   1353 		if ( rc != LDAP_SUCCESS ) return rc;
   1354 		(k->a.uniformResourceIdentifier)->identifier.bv_val = (k->a.uniformResourceIdentifier)->id_buf;
   1355 		(k->a.uniformResourceIdentifier)->identifier.bv_len = strlen("uniformResourceIdentifier");
   1356 		strcpy( (k->a.uniformResourceIdentifier)->identifier.bv_val, "uniformResourceIdentifier");
   1357 	if (elmtLen0 == INDEFINITE_LEN)
   1358         BDecEoc (b, &totalElmtsLen1 );
   1359     break;
   1360 
   1361        case MAKE_TAG_ID (CNTX, CONS, 7):
   1362     tagId1 = BDecTag (b, &totalElmtsLen1 );
   1363 if ((tagId1 != MAKE_TAG_ID (UNIV, PRIM, OCTETSTRING_TAG_CODE)) &&
   1364    (tagId1 != MAKE_TAG_ID (UNIV, CONS, OCTETSTRING_TAG_CODE)))
   1365     {
   1366          Asn1Error ("Unexpected Tag\n");
   1367          return -1;
   1368     }
   1369 
   1370     elmtLen1 = BDecLen (b, &totalElmtsLen1 );
   1371         (k->choiceId) = GENERALNAME_IPADDRESS;
   1372 		rc = 	BDecComponentOcts (mem_op, b, tagId1, elmtLen1, (&k->a.iPAddress), &totalElmtsLen1, DEC_ALLOC_MODE_0 );
   1373 		if ( rc != LDAP_SUCCESS ) return rc;
   1374 		(k->a.iPAddress)->identifier.bv_val = (k->a.iPAddress)->id_buf;
   1375 		(k->a.iPAddress)->identifier.bv_len = strlen("iPAddress");
   1376 		strcpy( (k->a.iPAddress)->identifier.bv_val, "iPAddress");
   1377 	if (elmtLen0 == INDEFINITE_LEN)
   1378         BDecEoc (b, &totalElmtsLen1 );
   1379     break;
   1380 
   1381        case MAKE_TAG_ID (CNTX, CONS, 8):
   1382 if (BDecTag (b, &totalElmtsLen1 ) != MAKE_TAG_ID (UNIV, PRIM, OID_TAG_CODE))
   1383     {
   1384          Asn1Error ("Unexpected Tag\n");
   1385          return -1;
   1386     }
   1387 
   1388     elmtLen1 = BDecLen (b, &totalElmtsLen1 );
   1389         (k->choiceId) = GENERALNAME_REGISTEREDID;
   1390 		rc = 	BDecComponentOid (mem_op, b, tagId1, elmtLen1, (&k->a.registeredID), &totalElmtsLen1, DEC_ALLOC_MODE_0 );
   1391 		if ( rc != LDAP_SUCCESS ) return rc;
   1392 		(k->a.registeredID)->identifier.bv_val = (k->a.registeredID)->id_buf;
   1393 		(k->a.registeredID)->identifier.bv_len = strlen("registeredID");
   1394 		strcpy( (k->a.registeredID)->identifier.bv_val, "registeredID");
   1395 	if (elmtLen0 == INDEFINITE_LEN)
   1396         BDecEoc (b, &totalElmtsLen1 );
   1397     break;
   1398 
   1399     default:
   1400         Asn1Error ("ERROR - unexpected tag in CHOICE\n");
   1401         return -1;
   1402         break;
   1403     } /* end switch */
   1404 	if( !(old_mode & DEC_ALLOC_MODE_1) ) {
   1405 	*v = t = (ComponentGeneralName*) CompAlloc( mem_op, sizeof(ComponentGeneralName) );
   1406 	if ( !t ) return -1;
   1407 	*t = *k;
   1408 	}
   1409 	t->syntax = (Syntax*)NULL;
   1410 	t->comp_desc = CompAlloc( mem_op, sizeof( ComponentDesc ) );
   1411 	if ( !t->comp_desc ) {
   1412 		free ( t );
   1413 		return -1;
   1414 	}
   1415 	t->comp_desc->cd_gser_decoder = (gser_decoder_func*)GDecComponentGeneralName ;
   1416 	t->comp_desc->cd_ber_decoder = (ber_decoder_func*)BDecComponentGeneralName ;
   1417 	t->comp_desc->cd_free = (comp_free_func*)NULL;
   1418 	t->comp_desc->cd_extract_i = (extract_component_from_id_func*)ExtractingComponentGeneralName;
   1419 	t->comp_desc->cd_type = ASN_COMPOSITE;
   1420 	t->comp_desc->cd_type_id = COMPOSITE_ASN1_TYPE;
   1421 	t->comp_desc->cd_all_match = (allcomponent_matching_func*)MatchingComponentGeneralName;
   1422     (*bytesDecoded) += totalElmtsLen1;
   1423 	return LDAP_SUCCESS;
   1424 }  /* BDecGeneralNameContent */
   1425 
   1426 int
   1427 GDecComponentGeneralName PARAMS (( mem_op,b, v, bytesDecoded, mode),
   1428 void* mem_op _AND_
   1429 GenBuf * b _AND_
   1430 ComponentGeneralName **v _AND_
   1431 AsnLen *bytesDecoded _AND_
   1432 int mode)
   1433 {
   1434 	char* peek_head,*peek_head2;
   1435 	int i, strLen,strLen2, rc, old_mode = mode;
   1436 	ComponentGeneralName *k,*t, c_temp;
   1437 
   1438 
   1439 	if ( !(mode & DEC_ALLOC_MODE_1) ) {
   1440 		memset(&c_temp,0,sizeof(c_temp));
   1441 		 k = &c_temp;
   1442 	} else
   1443 		 k = t = *v;
   1444 	mode = DEC_ALLOC_MODE_2;
   1445 	if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){
   1446 		Asn1Error("Error during Reading identifier");
   1447 		return LDAP_PROTOCOL_ERROR;
   1448 	}
   1449 	if( !(strLen2 = LocateNextGSERToken(mem_op,b,&peek_head2,GSER_NO_COPY)) ){
   1450 		Asn1Error("Error during Reading identifier");
   1451 		return LDAP_PROTOCOL_ERROR;
   1452 	}
   1453 	if(*peek_head2 != ':'){
   1454 		Asn1Error("Missing : in encoded data");
   1455 		return LDAP_PROTOCOL_ERROR;
   1456 	}
   1457 	if( strncmp("otherName",peek_head, strlen("otherName")) == 0){
   1458 		(k->choiceId) = GENERALNAME_OTHERNAME;
   1459 		rc = 	GDecComponentOtherName (mem_op, b, (&k->a.otherName), bytesDecoded, mode);
   1460 		if ( rc != LDAP_SUCCESS ) return rc;
   1461 		(k->a.otherName)->identifier.bv_val = peek_head;
   1462 		(k->a.otherName)->identifier.bv_len = strLen;
   1463 	}
   1464 	else if( strncmp("rfc822Name",peek_head,strlen("rfc822Name")) == 0){
   1465 		(k->choiceId) = GENERALNAME_RFC822NAME;
   1466 		rc = 	GDecComponentIA5String (mem_op, b, (&k->a.rfc822Name), bytesDecoded, DEC_ALLOC_MODE_0 );
   1467 		if ( rc != LDAP_SUCCESS ) return rc;
   1468 		(k->a.rfc822Name)->identifier.bv_val = peek_head;
   1469 		(k->a.rfc822Name)->identifier.bv_len = strLen;
   1470 	}
   1471 	else if( strncmp("dNSName",peek_head,strlen("dNSName")) == 0){
   1472 		(k->choiceId) = GENERALNAME_DNSNAME;
   1473 		rc = 	GDecComponentIA5String (mem_op, b, (&k->a.dNSName), bytesDecoded, DEC_ALLOC_MODE_0 );
   1474 		if ( rc != LDAP_SUCCESS ) return rc;
   1475 		(k->a.dNSName)->identifier.bv_val = peek_head;
   1476 		(k->a.dNSName)->identifier.bv_len = strLen;
   1477 	}
   1478 	else if( strncmp("x400Address",peek_head,strlen("x400Address")) == 0){
   1479 		(k->choiceId) = GENERALNAME_X400ADDRESS;
   1480 		rc = 	GDecComponentORAddress (mem_op, b, (&k->a.x400Address), bytesDecoded, mode);
   1481 		if ( rc != LDAP_SUCCESS ) return rc;
   1482 		(k->a.x400Address)->identifier.bv_val = peek_head;
   1483 		(k->a.x400Address)->identifier.bv_len = strLen;
   1484 	}
   1485 	else if( strncmp("directoryName",peek_head,strlen("directoryName")) == 0){
   1486 		(k->choiceId) = GENERALNAME_DIRECTORYNAME;
   1487 		rc = 	GDecComponentName (mem_op, b, (&k->a.directoryName), bytesDecoded, mode);
   1488 		if ( rc != LDAP_SUCCESS ) return rc;
   1489 		(k->a.directoryName)->identifier.bv_val = peek_head;
   1490 		(k->a.directoryName)->identifier.bv_len = strLen;
   1491 	}
   1492 	else if( strncmp("ediPartyName",peek_head,strlen("ediPartyName")) == 0){
   1493 		(k->choiceId) = GENERALNAME_EDIPARTYNAME;
   1494 		rc = 	GDecComponentEDIPartyName (mem_op, b, (&k->a.ediPartyName), bytesDecoded, mode);
   1495 		if ( rc != LDAP_SUCCESS ) return rc;
   1496 		(k->a.ediPartyName)->identifier.bv_val = peek_head;
   1497 		(k->a.ediPartyName)->identifier.bv_len = strLen;
   1498 	}
   1499 	else if( strncmp("uniformResourceIdentifier",peek_head,strlen("uniformResourceIdentifier")) == 0){
   1500 		(k->choiceId) = GENERALNAME_UNIFORMRESOURCEIDENTIFIER;
   1501 		rc = 	GDecComponentIA5String (mem_op, b, (&k->a.uniformResourceIdentifier), bytesDecoded, DEC_ALLOC_MODE_0 );
   1502 		if ( rc != LDAP_SUCCESS ) return rc;
   1503 		(k->a.uniformResourceIdentifier)->identifier.bv_val = peek_head;
   1504 		(k->a.uniformResourceIdentifier)->identifier.bv_len = strLen;
   1505 	}
   1506 	else if( strncmp("iPAddress",peek_head,strlen("iPAddress")) == 0){
   1507 		(k->choiceId) = GENERALNAME_IPADDRESS;
   1508 		rc = 	GDecComponentOcts (mem_op, b, (&k->a.iPAddress), bytesDecoded, DEC_ALLOC_MODE_0 );
   1509 		if ( rc != LDAP_SUCCESS ) return rc;
   1510 		(k->a.iPAddress)->identifier.bv_val = peek_head;
   1511 		(k->a.iPAddress)->identifier.bv_len = strLen;
   1512 	}
   1513 	else if( strncmp("registeredID",peek_head,strlen("registeredID")) == 0){
   1514 		(k->choiceId) = GENERALNAME_REGISTEREDID;
   1515 		rc = 	GDecComponentOid (mem_op, b, (&k->a.registeredID), bytesDecoded, DEC_ALLOC_MODE_0 );
   1516 		if ( rc != LDAP_SUCCESS ) return rc;
   1517 		(k->a.registeredID)->identifier.bv_val = peek_head;
   1518 		(k->a.registeredID)->identifier.bv_len = strLen;
   1519 	}
   1520 	else {
   1521 		Asn1Error("Undefined Identifier");
   1522 		return LDAP_PROTOCOL_ERROR;
   1523 	}
   1524 	if( !(old_mode & DEC_ALLOC_MODE_1) ) {
   1525 	*v = t = (ComponentGeneralName*) CompAlloc( mem_op, sizeof(ComponentGeneralName) );
   1526 	if ( !t ) return -1;
   1527 	*t = *k;
   1528 	}
   1529 	t->syntax = (Syntax*)NULL;
   1530 	t->comp_desc = CompAlloc( mem_op, sizeof( ComponentDesc ) );
   1531 	if ( !t->comp_desc ) {
   1532 		free ( t );
   1533 		return -1;
   1534 	}
   1535 	t->comp_desc->cd_gser_decoder = (gser_decoder_func*)GDecComponentGeneralName ;
   1536 	t->comp_desc->cd_ber_decoder = (ber_decoder_func*)BDecComponentGeneralName ;
   1537 	t->comp_desc->cd_free = (comp_free_func*)NULL;
   1538 	t->comp_desc->cd_extract_i = (extract_component_from_id_func*)ExtractingComponentGeneralName;
   1539 	t->comp_desc->cd_type = ASN_COMPOSITE;
   1540 	t->comp_desc->cd_type_id = COMPOSITE_ASN1_TYPE;
   1541 	t->comp_desc->cd_all_match = (allcomponent_matching_func*)MatchingComponentGeneralName;
   1542 	return LDAP_SUCCESS;
   1543 }  /* GDecGeneralNameContent */
   1544 
   1545 
   1546 int
   1547 MatchingComponentGeneralNames ( char* oid, ComponentSyntaxInfo* csi_attr, ComponentSyntaxInfo* csi_assert ) {
   1548 	int rc;
   1549 	MatchingRule* mr;
   1550 	void* component1, *component2;
   1551 	AsnList *v1, *v2, t_list;
   1552 
   1553 
   1554 	if ( oid ) {
   1555 		mr = retrieve_matching_rule( oid, csi_attr->csi_comp_desc->cd_type_id);
   1556 		if ( mr ) return component_value_match( mr, csi_attr, csi_assert );
   1557 	}
   1558 
   1559 	v1 = &((ComponentGeneralNames*)csi_attr)->comp_list;
   1560 	v2 = &((ComponentGeneralNames*)csi_assert)->comp_list;
   1561 	FOR_EACH_LIST_PAIR_ELMT(component1, component2, v1, v2)
   1562 	{
   1563 		if( MatchingComponentGeneralName(oid, (ComponentSyntaxInfo*)component1, (ComponentSyntaxInfo*)component2) == LDAP_COMPARE_FALSE) {
   1564 			return LDAP_COMPARE_FALSE;
   1565 		}
   1566 	} /* end of for */
   1567 
   1568 	AsnListFirst( v1 );
   1569 	AsnListFirst( v2 );
   1570 	if( (!component1 && component2) || (component1 && !component2))
   1571 		return LDAP_COMPARE_FALSE;
   1572 	else
   1573 		return LDAP_COMPARE_TRUE;
   1574 }  /* BMatchingComponentGeneralNamesContent */
   1575 
   1576 void*
   1577 ExtractingComponentGeneralNames ( void* mem_op, ComponentReference* cr, ComponentGeneralNames *comp )
   1578 {
   1579 	int count = 0;
   1580 	int total;
   1581 	AsnList *v = &comp->comp_list;
   1582 	ComponentInt *k;
   1583 	ComponentGeneralName *component;
   1584 
   1585 
   1586 	switch ( cr->cr_curr->ci_type ) {
   1587 	case LDAP_COMPREF_FROM_BEGINNING :
   1588 		count = cr->cr_curr->ci_val.ci_from_beginning;
   1589 		FOR_EACH_LIST_ELMT( component , v ) {
   1590 			if( --count == 0 ) {
   1591 				if( cr->cr_curr->ci_next == NULL )
   1592 					return component;
   1593 				else {
   1594 					cr->cr_curr = cr->cr_curr->ci_next;
   1595 					return 	ExtractingComponentGeneralName ( mem_op, cr, component );
   1596 				}
   1597 			}
   1598 		}
   1599 		break;
   1600 	case LDAP_COMPREF_FROM_END :
   1601 		total = AsnListCount ( v );
   1602 		count = cr->cr_curr->ci_val.ci_from_end;
   1603 		count = total + count +1;
   1604 		FOR_EACH_LIST_ELMT ( component, v ) {
   1605 			if( --count == 0 ) {
   1606 				if( cr->cr_curr->ci_next == NULL )
   1607 					return component;
   1608 				else {
   1609 					cr->cr_curr = cr->cr_curr->ci_next;
   1610 					return 	ExtractingComponentGeneralName ( mem_op, cr, component );
   1611 				}
   1612 			}
   1613 		}
   1614 		break;
   1615 	case LDAP_COMPREF_ALL :
   1616 		return comp;
   1617 	case LDAP_COMPREF_COUNT :
   1618 		k = (ComponentInt*)CompAlloc( mem_op, sizeof(ComponentInt));
   1619 		k->comp_desc = CompAlloc( mem_op, sizeof( ComponentDesc ) );
   1620 		k->comp_desc->cd_tag = (-1);
   1621 		k->comp_desc->cd_gser_decoder = (gser_decoder_func*)GDecComponentInt;
   1622 		k->comp_desc->cd_ber_decoder = (ber_decoder_func*)BDecComponentInt;
   1623 		k->comp_desc->cd_extract_i = (extract_component_from_id_func*)NULL;
   1624 		k->comp_desc->cd_type = ASN_BASIC;
   1625 		k->comp_desc->cd_type_id = BASICTYPE_INTEGER;
   1626 		k->comp_desc->cd_all_match = (allcomponent_matching_func*)MatchingComponentInt;
   1627 		k->value = AsnListCount(v);
   1628 		return k;
   1629 	default :
   1630 		return NULL;
   1631 	}
   1632 }  /* ExtractingComponentGeneralNames */
   1633 
   1634 int
   1635 BDecComponentGeneralNames PARAMS ((b, tagId0, elmtLen0, v, bytesDecoded, mode),
   1636 void* mem_op _AND_
   1637 GenBuf * b _AND_
   1638 AsnTag tagId0 _AND_
   1639 AsnLen elmtLen0 _AND_
   1640 ComponentGeneralNames **v _AND_
   1641 AsnLen *bytesDecoded _AND_
   1642 int mode)
   1643 {
   1644 	int seqDone = FALSE;
   1645 	AsnLen totalElmtsLen1 = 0;
   1646 	AsnLen elmtLen1;
   1647 	AsnTag tagId1;
   1648 	int mandatoryElmtCount1 = 0;
   1649 	int old_mode = mode;
   1650 	int rc;
   1651 	ComponentGeneralNames *k, *t, c_temp;
   1652 
   1653 
   1654 	if ( !(mode & DEC_ALLOC_MODE_1) ) {
   1655 		memset(&c_temp,0,sizeof(c_temp));
   1656 		 k = &c_temp;
   1657 	} else
   1658 		 k = t = *v;
   1659 	mode = DEC_ALLOC_MODE_2;
   1660 	AsnListInit(&k->comp_list,sizeof(ComponentGeneralName));
   1661     for (totalElmtsLen1 = 0; (totalElmtsLen1 < elmtLen0) || (elmtLen0 == INDEFINITE_LEN);)
   1662     {
   1663         ComponentGeneralName **tmpVar;
   1664     tagId1 = BDecTag (b, &totalElmtsLen1 );
   1665 
   1666     if ((tagId1 == EOC_TAG_ID) && (elmtLen0 == INDEFINITE_LEN))
   1667     {
   1668         BDEC_2ND_EOC_OCTET (b, &totalElmtsLen1 )
   1669         break; /* got EOC so can exit this SET OF/SEQ OF's for loop*/
   1670     }
   1671         elmtLen1 = BDecLen (b, &totalElmtsLen1);
   1672     tmpVar = (ComponentGeneralName**) CompAsnListAppend (mem_op,&k->comp_list);
   1673 		rc = 	BDecComponentGeneralName (mem_op, b, tagId1, elmtLen1, tmpVar, &totalElmtsLen1, mode);
   1674 		if ( rc != LDAP_SUCCESS ) return rc;
   1675     } /* end of for */
   1676 
   1677 	if( !(old_mode & DEC_ALLOC_MODE_1) ) {
   1678 	*v = t = (ComponentGeneralNames*) CompAlloc( mem_op, sizeof(ComponentGeneralNames) );
   1679 	if ( !t ) return -1;
   1680 	*t = *k;
   1681 	}
   1682 	t->syntax = (Syntax*)NULL;
   1683 	t->comp_desc = CompAlloc( mem_op, sizeof( ComponentDesc ) );
   1684 	if ( !t->comp_desc ) {
   1685 		free ( t );
   1686 		return -1;
   1687 	}
   1688 	t->comp_desc->cd_gser_decoder = (gser_decoder_func*)GDecComponentGeneralNames ;
   1689 	t->comp_desc->cd_ber_decoder = (ber_decoder_func*)BDecComponentGeneralNames ;
   1690 	t->comp_desc->cd_free = (comp_free_func*)NULL;
   1691 	t->comp_desc->cd_extract_i = (extract_component_from_id_func*)ExtractingComponentGeneralNames;
   1692 	t->comp_desc->cd_type = ASN_COMPOSITE;
   1693 	t->comp_desc->cd_type_id = COMPOSITE_ASN1_TYPE;
   1694 	t->comp_desc->cd_all_match = (allcomponent_matching_func*)MatchingComponentGeneralNames;
   1695     (*bytesDecoded) += totalElmtsLen1;
   1696 	return LDAP_SUCCESS;
   1697 }  /* BDecGeneralNamesContent */
   1698 
   1699 int
   1700 GDecComponentGeneralNames PARAMS (( mem_op,b, v, bytesDecoded, mode),
   1701 void* mem_op _AND_
   1702 GenBuf * b _AND_
   1703 ComponentGeneralNames **v _AND_
   1704 AsnLen *bytesDecoded _AND_
   1705 int mode)
   1706 {
   1707 	char* peek_head,*peek_head2;
   1708 	int i, strLen,strLen2, rc, old_mode = mode;
   1709 	ComponentGeneralNames *k,*t, c_temp;
   1710 
   1711 
   1712 	int ElmtsLen1;
   1713 	if ( !(mode & DEC_ALLOC_MODE_1) ) {
   1714 		memset(&c_temp,0,sizeof(c_temp));
   1715 		 k = &c_temp;
   1716 	} else
   1717 		 k = t = *v;
   1718 	mode = DEC_ALLOC_MODE_2;
   1719 	AsnListInit( &k->comp_list, sizeof( ComponentGeneralName ) );
   1720 	*bytesDecoded = 0;
   1721 	if( !(strLen = LocateNextGSERToken(mem_op,b, &peek_head, GSER_PEEK)) ){
   1722 		Asn1Error("Error during Reading { in encoding");
   1723 		return LDAP_PROTOCOL_ERROR;
   1724 	}
   1725 	if(*peek_head != '{'){
   1726 		Asn1Error("Missing { in encoded data");
   1727 		return LDAP_PROTOCOL_ERROR;
   1728 	}
   1729 
   1730 	for (ElmtsLen1 = 0; ElmtsLen1 >= INDEFINITE_LEN; ElmtsLen1++)
   1731 	{
   1732 		ComponentGeneralName **tmpVar;
   1733 		if( !(strLen = LocateNextGSERToken(mem_op,b, &peek_head, GSER_NO_COPY)) ){
   1734 			Asn1Error("Error during Reading{ in encoding");
   1735 			return LDAP_PROTOCOL_ERROR;
   1736 		}
   1737 		if(*peek_head == '}') break;
   1738 		if( !(*peek_head == '{' || *peek_head ==',') ) {
   1739 			return LDAP_PROTOCOL_ERROR;
   1740 		}
   1741 		tmpVar = (ComponentGeneralName**) CompAsnListAppend (mem_op, &k->comp_list);
   1742 		if ( tmpVar == NULL ) {
   1743 			Asn1Error("Error during Reading{ in encoding");
   1744 			return LDAP_PROTOCOL_ERROR;
   1745 		}
   1746 		rc = 	GDecComponentGeneralName (mem_op, b, tmpVar, bytesDecoded, mode);
   1747 		if ( rc != LDAP_SUCCESS ) return rc;
   1748 	} /* end of for */
   1749 
   1750 	if( !(old_mode & DEC_ALLOC_MODE_1) ) {
   1751 	*v = t = (ComponentGeneralNames*) CompAlloc( mem_op, sizeof(ComponentGeneralNames) );
   1752 	if ( !t ) return -1;
   1753 	*t = *k;
   1754 	}
   1755 	t->syntax = (Syntax*)NULL;
   1756 	t->comp_desc = CompAlloc( mem_op, sizeof( ComponentDesc ) );
   1757 	if ( !t->comp_desc ) {
   1758 		free ( t );
   1759 		return -1;
   1760 	}
   1761 	t->comp_desc->cd_gser_decoder = (gser_decoder_func*)GDecComponentGeneralNames ;
   1762 	t->comp_desc->cd_ber_decoder = (ber_decoder_func*)BDecComponentGeneralNames ;
   1763 	t->comp_desc->cd_free = (comp_free_func*)NULL;
   1764 	t->comp_desc->cd_extract_i = (extract_component_from_id_func*)ExtractingComponentGeneralNames;
   1765 	t->comp_desc->cd_type = ASN_COMPOSITE;
   1766 	t->comp_desc->cd_type_id = COMPOSITE_ASN1_TYPE;
   1767 	t->comp_desc->cd_all_match = (allcomponent_matching_func*)MatchingComponentGeneralNames;
   1768 	return LDAP_SUCCESS;
   1769 }  /* GDecGeneralNamesContent */
   1770 
   1771 
   1772 int
   1773 MatchingComponentAuthorityKeyIdentifier ( char* oid, ComponentSyntaxInfo* csi_attr, ComponentSyntaxInfo* csi_assert ) {
   1774 	int rc;
   1775 	MatchingRule* mr;
   1776 
   1777 	if ( oid ) {
   1778 		mr = retrieve_matching_rule( oid, csi_attr->csi_comp_desc->cd_type_id);
   1779 		if ( mr ) return component_value_match( mr, csi_attr, csi_assert );
   1780 	}
   1781 
   1782 	rc = 1;
   1783 	rc =	MatchingComponentKeyIdentifier ( oid, (ComponentSyntaxInfo*)&((ComponentAuthorityKeyIdentifier*)csi_attr)->keyIdentifier, (ComponentSyntaxInfo*)&((ComponentAuthorityKeyIdentifier*)csi_assert)->keyIdentifier );
   1784 	if ( rc != LDAP_COMPARE_TRUE )
   1785 		return rc;
   1786 	if(COMPONENTNOT_NULL( ((ComponentAuthorityKeyIdentifier*)csi_attr)->authorityCertIssuer ) ) {
   1787 	rc =	MatchingComponentGeneralNames ( oid, (ComponentSyntaxInfo*)((ComponentAuthorityKeyIdentifier*)csi_attr)->authorityCertIssuer, (ComponentSyntaxInfo*)((ComponentAuthorityKeyIdentifier*)csi_assert)->authorityCertIssuer );
   1788 	if ( rc != LDAP_COMPARE_TRUE )
   1789 		return rc;
   1790 	}
   1791 	if(COMPONENTNOT_NULL( ((ComponentAuthorityKeyIdentifier*)csi_attr)->authorityCertSerialNumber ) ) {
   1792 	rc =	MatchingComponentCertificateSerialNumber ( oid, (ComponentSyntaxInfo*)((ComponentAuthorityKeyIdentifier*)csi_attr)->authorityCertSerialNumber, (ComponentSyntaxInfo*)((ComponentAuthorityKeyIdentifier*)csi_assert)->authorityCertSerialNumber );
   1793 	if ( rc != LDAP_COMPARE_TRUE )
   1794 		return rc;
   1795 	}
   1796 	return LDAP_COMPARE_TRUE;
   1797 }  /* BMatchingComponentAuthorityKeyIdentifier */
   1798 
   1799 void*
   1800 ExtractingComponentAuthorityKeyIdentifier ( void* mem_op, ComponentReference* cr, ComponentAuthorityKeyIdentifier *comp )
   1801 {
   1802 
   1803 	if ( ( comp->keyIdentifier.identifier.bv_val && strncmp(comp->keyIdentifier.identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) || ( strncmp(comp->keyIdentifier.id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) ) {
   1804 		if ( cr->cr_curr->ci_next == NULL )
   1805 		return &comp->keyIdentifier;
   1806 		else
   1807 		return NULL;
   1808 	}
   1809 	if ( ( comp->authorityCertIssuer->identifier.bv_val && strncmp(comp->authorityCertIssuer->identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) || ( strncmp(comp->authorityCertIssuer->id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) ) {
   1810 		if ( cr->cr_curr->ci_next == NULL )
   1811 			return comp->authorityCertIssuer;
   1812 		else {
   1813 			cr->cr_curr = cr->cr_curr->ci_next;
   1814 			return 	ExtractingComponentGeneralNames ( mem_op, cr, comp->authorityCertIssuer );
   1815 		}
   1816 	}
   1817 	if ( ( comp->authorityCertSerialNumber->identifier.bv_val && strncmp(comp->authorityCertSerialNumber->identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) || ( strncmp(comp->authorityCertSerialNumber->id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) ) {
   1818 		if ( cr->cr_curr->ci_next == NULL )
   1819 			return comp->authorityCertSerialNumber;
   1820 		else {
   1821 			cr->cr_curr = cr->cr_curr->ci_next;
   1822 			return 	ExtractingComponentCertificateSerialNumber ( mem_op, cr, comp->authorityCertSerialNumber );
   1823 		}
   1824 	}
   1825 	return NULL;
   1826 }  /* ExtractingComponentAuthorityKeyIdentifier */
   1827 
   1828 int
   1829 BDecComponentAuthorityKeyIdentifier PARAMS ((b, tagId0, elmtLen0, v, bytesDecoded, mode),
   1830 void* mem_op _AND_
   1831 GenBuf * b _AND_
   1832 AsnTag tagId0 _AND_
   1833 AsnLen elmtLen0 _AND_
   1834 ComponentAuthorityKeyIdentifier **v _AND_
   1835 AsnLen *bytesDecoded _AND_
   1836 int mode)
   1837 {
   1838 	int seqDone = FALSE;
   1839 	AsnLen totalElmtsLen1 = 0;
   1840 	AsnLen elmtLen1;
   1841 	AsnTag tagId1;
   1842 	int mandatoryElmtCount1 = 0;
   1843 	AsnLen totalElmtsLen2 = 0;
   1844 	AsnLen elmtLen2;
   1845 	AsnTag tagId2;
   1846 	int old_mode = mode;
   1847 	int rc;
   1848 	ComponentAuthorityKeyIdentifier *k, *t, c_temp;
   1849 
   1850 
   1851 	if ( !(mode & DEC_ALLOC_MODE_1) ) {
   1852 		memset(&c_temp,0,sizeof(c_temp));
   1853 		 k = &c_temp;
   1854 	} else
   1855 		 k = t = *v;
   1856 	mode = DEC_ALLOC_MODE_2;
   1857     if ((elmtLen0 != INDEFINITE_LEN) && (totalElmtsLen1 == elmtLen0))
   1858         seqDone = TRUE;
   1859     else
   1860     {
   1861         tagId1 = BDecTag (b, &totalElmtsLen1 );
   1862 
   1863          if ((elmtLen0 == INDEFINITE_LEN) && (tagId1 == EOC_TAG_ID))
   1864         {
   1865             BDEC_2ND_EOC_OCTET (b, &totalElmtsLen1 )
   1866             seqDone = TRUE;
   1867         }
   1868     }
   1869 
   1870     if ((!seqDone) && ((tagId1 == MAKE_TAG_ID (CNTX, PRIM, 0)) ||
   1871 (tagId1 == MAKE_TAG_ID (CNTX, CONS, 0))))
   1872     {
   1873     elmtLen1 = BDecLen (b, &totalElmtsLen1 );
   1874                 rc =    BDecComponentKeyIdentifier (mem_op, b, tagId1, elmtLen1, (&k->keyIdentifier), &totalElmtsLen1, mode);
   1875                 if ( rc != LDAP_SUCCESS ) return rc;
   1876                 (&k->keyIdentifier)->identifier.bv_val = (&k->keyIdentifier)->id_buf;
   1877                 (&k->keyIdentifier)->identifier.bv_len = strlen("keyIdentifier");
   1878                 strcpy( (&k->keyIdentifier)->identifier.bv_val, "keyIdentifier");
   1879     if ((elmtLen0 != INDEFINITE_LEN) && (totalElmtsLen1 == elmtLen0))
   1880         seqDone = TRUE;
   1881     else
   1882     {
   1883         tagId1 = BDecTag (b, &totalElmtsLen1 );
   1884 
   1885          if ((elmtLen0 == INDEFINITE_LEN) && (tagId1 == EOC_TAG_ID))
   1886         {
   1887             BDEC_2ND_EOC_OCTET (b, &totalElmtsLen1 )
   1888             seqDone = TRUE;
   1889         }
   1890     }
   1891     }
   1892 
   1893     if ((!seqDone) && ((tagId1 == MAKE_TAG_ID (CNTX, CONS, 1))))
   1894     {
   1895     elmtLen1 = BDecLen (b, &totalElmtsLen1 );
   1896                 rc =    BDecComponentGeneralNames (mem_op, b, tagId1, elmtLen1,
   1897 (&k->authorityCertIssuer), &totalElmtsLen1, mode);
   1898                 if ( rc != LDAP_SUCCESS ) return rc;
   1899                 (k->authorityCertIssuer)->identifier.bv_val = (k->authorityCertIssuer)->id_buf;
   1900                 (k->authorityCertIssuer)->identifier.bv_len = strlen("authorityCertIssuer");
   1901                 strcpy( (k->authorityCertIssuer)->identifier.bv_val, "authorityCertIssuer");
   1902     if ((elmtLen0 != INDEFINITE_LEN) && (totalElmtsLen1 == elmtLen0))
   1903         seqDone = TRUE;
   1904     else
   1905     {
   1906         tagId1 = BDecTag (b, &totalElmtsLen1 );
   1907 
   1908          if ((elmtLen0 == INDEFINITE_LEN) && (tagId1 == EOC_TAG_ID))
   1909         {
   1910             BDEC_2ND_EOC_OCTET (b, &totalElmtsLen1 )
   1911             seqDone = TRUE;
   1912         }
   1913     }
   1914     }
   1915 
   1916     if ((!seqDone) && ((tagId1 == MAKE_TAG_ID (CNTX, PRIM, 2))))
   1917     {
   1918     elmtLen1 = BDecLen (b, &totalElmtsLen1 );
   1919                 rc =    BDecComponentCertificateSerialNumber (mem_op, b, tagId1, elmtLen1, (&k->authorityCertSerialNumber), &totalElmtsLen1, DEC_ALLOC_MODE_0 );                if ( rc != LDAP_SUCCESS ) return rc;
   1920                 (k->authorityCertSerialNumber)->identifier.bv_val = (k->authorityCertSerialNumber)->id_buf;
   1921                 (k->authorityCertSerialNumber)->identifier.bv_len = strlen("authorityCertSerialNumber");
   1922                 strcpy( (k->authorityCertSerialNumber)->identifier.bv_val, "authorityCertSerialNumber");
   1923         seqDone = TRUE;
   1924         if (elmtLen0 == INDEFINITE_LEN)
   1925             BDecEoc (b, &totalElmtsLen1 );
   1926         else if (totalElmtsLen1 != elmtLen0)
   1927         return -1;
   1928 
   1929     }
   1930 
   1931     if (!seqDone)
   1932         return -1;
   1933 
   1934 	if( !(old_mode & DEC_ALLOC_MODE_1) ) {
   1935 	*v = t = (ComponentAuthorityKeyIdentifier*) CompAlloc( mem_op, sizeof(ComponentAuthorityKeyIdentifier) );
   1936 	if ( !t ) return -1;
   1937 	*t = *k;
   1938 	}
   1939 	t->syntax = (Syntax*)NULL;
   1940 	t->comp_desc = CompAlloc( mem_op, sizeof( ComponentDesc ) );
   1941 	if ( !t->comp_desc ) {
   1942 		free ( t );
   1943 		return -1;
   1944 	}
   1945 	t->comp_desc->cd_gser_decoder = (gser_decoder_func*)GDecComponentAuthorityKeyIdentifier ;
   1946 	t->comp_desc->cd_ber_decoder = (ber_decoder_func*)BDecComponentAuthorityKeyIdentifier ;
   1947 	t->comp_desc->cd_free = (comp_free_func*)NULL;
   1948 	t->comp_desc->cd_extract_i = (extract_component_from_id_func*)ExtractingComponentAuthorityKeyIdentifier;
   1949 	t->comp_desc->cd_type = ASN_COMPOSITE;
   1950 	t->comp_desc->cd_type_id = COMPOSITE_ASN1_TYPE;
   1951 	t->comp_desc->cd_all_match = (allcomponent_matching_func*)MatchingComponentAuthorityKeyIdentifier;
   1952     (*bytesDecoded) += totalElmtsLen1;
   1953 	return LDAP_SUCCESS;
   1954 }  /* BDecAuthorityKeyIdentifier*/
   1955 
   1956 int
   1957 GDecComponentAuthorityKeyIdentifier PARAMS (( mem_op,b, v, bytesDecoded, mode),
   1958 void* mem_op _AND_
   1959 GenBuf * b _AND_
   1960 ComponentAuthorityKeyIdentifier **v _AND_
   1961 AsnLen *bytesDecoded _AND_
   1962 int mode)
   1963 {
   1964 	char* peek_head,*peek_head2;
   1965 	int i, strLen,strLen2, rc, old_mode = mode;
   1966 	ComponentAuthorityKeyIdentifier *k,*t, c_temp;
   1967 
   1968 
   1969 	if ( !(mode & DEC_ALLOC_MODE_1) ) {
   1970 		memset(&c_temp,0,sizeof(c_temp));
   1971 		 k = &c_temp;
   1972 	} else
   1973 		 k = t = *v;
   1974 	mode = DEC_ALLOC_MODE_2;
   1975 	*bytesDecoded = 0;
   1976 	if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){
   1977 		Asn1Error("Error during Reading { in encoded data");
   1978 		return LDAP_PROTOCOL_ERROR;
   1979 	}
   1980 	if(*peek_head != '{'){
   1981 		Asn1Error("Missing { in encoded data");
   1982 		return LDAP_PROTOCOL_ERROR;
   1983 	}
   1984 
   1985 	if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){
   1986 		Asn1Error("Error during Reading identifier");
   1987 		return LDAP_PROTOCOL_ERROR;
   1988 	}
   1989 	if ( strncmp( peek_head, "keyIdentifier", strlen("keyIdentifier") ) == 0 ) {
   1990 		rc = 	GDecComponentKeyIdentifier (mem_op, b, (&k->keyIdentifier), bytesDecoded, mode);
   1991 		if ( rc != LDAP_SUCCESS ) return rc;
   1992 	(&k->keyIdentifier)->identifier.bv_val = peek_head;
   1993 	(&k->keyIdentifier)->identifier.bv_len = strLen;
   1994 	if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){
   1995 		Asn1Error("Error during Reading , ");
   1996 		return LDAP_PROTOCOL_ERROR;
   1997 	}
   1998 	if(*peek_head != ','){
   1999 		Asn1Error("Missing , in encoding");
   2000 		return LDAP_PROTOCOL_ERROR;
   2001 	}
   2002 	if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){
   2003 	  Asn1Error("Error during Reading identifier");
   2004 		return LDAP_PROTOCOL_ERROR;
   2005 	}
   2006 	}
   2007 	if ( strncmp( peek_head, "authorityCertIssuer", strlen("authorityCertIssuer") ) == 0 ) {
   2008 		rc = 	GDecComponentGeneralNames (mem_op, b, (&k->authorityCertIssuer), bytesDecoded, mode);
   2009 		if ( rc != LDAP_SUCCESS ) return rc;
   2010 	( k->authorityCertIssuer)->identifier.bv_val = peek_head;
   2011 	( k->authorityCertIssuer)->identifier.bv_len = strLen;
   2012 	if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){
   2013 		Asn1Error("Error during Reading , ");
   2014 		return LDAP_PROTOCOL_ERROR;
   2015 	}
   2016 	if(*peek_head != ','){
   2017 		Asn1Error("Missing , in encoding");
   2018 		return LDAP_PROTOCOL_ERROR;
   2019 	}
   2020 	if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){
   2021 	  Asn1Error("Error during Reading identifier");
   2022 		return LDAP_PROTOCOL_ERROR;
   2023 	}
   2024 	}
   2025 	if ( strncmp( peek_head, "authorityCertSerialNumber", strlen("authorityCertSerialNumber") ) == 0 ) {
   2026 		rc = 	GDecComponentCertificateSerialNumber (mem_op, b, (&k->authorityCertSerialNumber), bytesDecoded, DEC_ALLOC_MODE_0 );
   2027 		if ( rc != LDAP_SUCCESS ) return rc;
   2028 	( k->authorityCertSerialNumber)->identifier.bv_val = peek_head;
   2029 	( k->authorityCertSerialNumber)->identifier.bv_len = strLen;
   2030 	}
   2031 	if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ) {
   2032 		Asn1Error("Error during Reading } in encoding");
   2033 		return LDAP_PROTOCOL_ERROR;
   2034 	}
   2035 	if(*peek_head != '}'){
   2036 		Asn1Error("Missing } in encoding");
   2037 		return LDAP_PROTOCOL_ERROR;
   2038 	}
   2039 	if( !(old_mode & DEC_ALLOC_MODE_1) ) {
   2040 	*v = t = (ComponentAuthorityKeyIdentifier*) CompAlloc( mem_op, sizeof(ComponentAuthorityKeyIdentifier) );
   2041 	if ( !t ) return -1;
   2042 	*t = *k;
   2043 	}
   2044 	t->syntax = (Syntax*)NULL;
   2045 	t->comp_desc = CompAlloc( mem_op, sizeof( ComponentDesc ) );
   2046 	if ( !t->comp_desc ) {
   2047 		free ( t );
   2048 		return -1;
   2049 	}
   2050 	t->comp_desc->cd_gser_decoder = (gser_decoder_func*)GDecComponentAuthorityKeyIdentifier ;
   2051 	t->comp_desc->cd_ber_decoder = (ber_decoder_func*)BDecComponentAuthorityKeyIdentifier ;
   2052 	t->comp_desc->cd_free = (comp_free_func*)NULL;
   2053 	t->comp_desc->cd_extract_i = (extract_component_from_id_func*)ExtractingComponentAuthorityKeyIdentifier;
   2054 	t->comp_desc->cd_type = ASN_COMPOSITE;
   2055 	t->comp_desc->cd_type_id = COMPOSITE_ASN1_TYPE;
   2056 	t->comp_desc->cd_all_match = (allcomponent_matching_func*)MatchingComponentAuthorityKeyIdentifier;
   2057 	return LDAP_SUCCESS;
   2058 }  /* GDecAuthorityKeyIdentifier*/
   2059 
   2060 
   2061