⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 componentlib.c

📁 ldap服务器源码
💻 C
📖 第 1 页 / 共 5 页
字号:
	if ( !k->comp_desc )  {		if ( k ) CompFree ( mem_op, k );		return LDAP_DECODING_ERROR;	}	k->comp_desc->cd_gser_encoder = (encoder_func*)GEncComponentNull;	k->comp_desc->cd_gser_decoder = (gser_decoder_func*)GDecComponentNull;	k->comp_desc->cd_ber_decoder = (ber_decoder_func*)BDecComponentNull;	k->comp_desc->cd_free = (comp_free_func*)FreeComponentNull;	k->comp_desc->cd_extract_i = NULL;	k->comp_desc->cd_type = ASN_BASIC;	k->comp_desc->cd_type_id = BASICTYPE_NULL;	k->comp_desc->cd_all_match = (allcomponent_matching_func*)MatchingComponentNull;	return LDAP_SUCCESS;}/* * Component BER Decoder : NULL */intBDecComponentNullTag ( void* mem_op, GenBuf *b, void *v, AsnLen *bytesDecoded, int mode ){	return BDecComponentNull ( mem_op, b, 0, 0, v,bytesDecoded, mode|CALL_TAG_DECODER );}intBDecComponentNull ( void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *v,			AsnLen *bytesDecoded, int mode ){        char* peek_head;        int i, strLen, rc;        void* component_values;        ComponentNull* k, **k2;	AsnNull result;        k = (ComponentNull*) v;                                                                                 if ( mode & DEC_ALLOC_MODE_0 ) {                k2 = (ComponentNull**) v;                *k2 = (ComponentNull*) CompAlloc( mem_op, sizeof( ComponentNull ) );		if ( !*k2 ) return LDAP_DECODING_ERROR;                k = *k2;        }	if ( mode & CALL_TAG_DECODER ){		mode = mode & CALL_CONTENT_DECODER;		rc = BDecAsnNull ( mem_op, b, &result, bytesDecoded );	}	else {		rc = BDecAsnNullContent ( mem_op, b, tagId, len, &result, bytesDecoded);	}	if ( rc < 0 ) {		if ( k ) CompFree ( mem_op, k );		return LDAP_DECODING_ERROR;	}	k->value = result;	k->comp_desc = CompAlloc( mem_op, sizeof( ComponentDesc ) );	if ( !k->comp_desc )  {		if ( k ) CompFree ( mem_op, k );		return LDAP_DECODING_ERROR;	}	k->comp_desc->cd_gser_encoder = (encoder_func*)GEncComponentNull;	k->comp_desc->cd_gser_decoder = (gser_decoder_func*)GDecComponentNull;	k->comp_desc->cd_ber_decoder = (ber_decoder_func*)BDecComponentNull;	k->comp_desc->cd_free = (comp_free_func*)FreeComponentNull;	k->comp_desc->cd_extract_i = NULL;	k->comp_desc->cd_type = ASN_BASIC;	k->comp_desc->cd_type_id = BASICTYPE_NULL;	k->comp_desc->cd_all_match = (allcomponent_matching_func*)MatchingComponentNull;	return LDAP_SUCCESS;}/* * Component BER Decoder : NumericString */intBDecComponentNumericStringTag ( void* mem_op, GenBuf *b, void *v, AsnLen *bytesDecoded, int mode ) {	return BDecComponentNumericString ( mem_op, b, 0, 0, v, bytesDecoded, mode|CALL_TAG_DECODER );}intBDecComponentNumericString ( void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *v, AsnLen *bytesDecoded, int mode ){        char* peek_head;        int i, strLen, rc;        void* component_values;        ComponentNumericString* k, **k2;	NumericString result;        k = (ComponentNumericString*) v;                                                                                  if ( mode & DEC_ALLOC_MODE_0 ) {                k2 = (ComponentNumericString**) v;                *k2 = (ComponentNumericString*) CompAlloc( mem_op, sizeof( ComponentNumericString ) );		if ( !*k2 ) return LDAP_DECODING_ERROR;                k = *k2;        }	if ( mode & CALL_TAG_DECODER ){		mode = mode & CALL_CONTENT_DECODER;		rc = BDecNumericString ( mem_op, b, &result, bytesDecoded );	} else {		rc = BDecNumericStringContent ( mem_op, b, tagId, len, &result, bytesDecoded);	}	if ( rc < 0 ) {		if ( k ) CompFree ( mem_op, k );		return LDAP_DECODING_ERROR;	}	k->value = result;        k->comp_desc = CompAlloc( mem_op, sizeof( ComponentDesc ) );	if ( !k->comp_desc )  {		if ( k ) CompFree ( mem_op, k );		return LDAP_DECODING_ERROR;	}	k->comp_desc->cd_gser_encoder = (encoder_func*)GEncComponentNumericString;        k->comp_desc->cd_gser_decoder = (gser_decoder_func*)GDecComponentNumericString;        k->comp_desc->cd_ber_decoder = (ber_decoder_func*)BDecComponentNumericString;	k->comp_desc->cd_free = (comp_free_func*)FreeComponentNumericString;        k->comp_desc->cd_extract_i = NULL;        k->comp_desc->cd_type = ASN_BASIC;        k->comp_desc->cd_type_id = BASICTYPE_NUMERIC_STR;        k->comp_desc->cd_all_match = (allcomponent_matching_func*)MatchingComponentNumericString;	return LDAP_SUCCESS;}/* * Free function : OCTET STRING */voidFreeComponentOcts ( ComponentOcts* v) {	FreeAsnOcts( &v->value );}/* * Matching function : OCTET STRING */intMatchingComponentOcts ( char* oid, ComponentSyntaxInfo* csi_attr,			ComponentSyntaxInfo* csi_assert ){        int rc;        MatchingRule* mr;        ComponentOcts *a, *b;                                                                                  if( oid ) {                mr = retrieve_matching_rule(oid, csi_attr->csi_comp_desc->cd_type_id );                if ( mr )                        return component_value_match( mr, csi_attr , csi_assert );        }        a = (ComponentOcts*) csi_attr;        b = (ComponentOcts*) csi_assert;	/* Assume that both of OCTET string has end of string character */	if ( (a->value.octetLen == b->value.octetLen) &&		strncmp ( a->value.octs, b->value.octs, a->value.octetLen ) == 0 )        	return LDAP_COMPARE_TRUE;	else		return LDAP_COMPARE_FALSE;}/* * GSER Encoder : OCTET STRING */intGEncComponentOcts ( GenBuf* b, ComponentOcts *in ){	GAsnOcts t = {0};	if ( !in || in->value.octetLen <= 0 )		return (-1);	t.value = in->value;	return GEncAsnOctsContent ( b, &t );}/* * GSER Decoder : OCTET STRING */intGDecComponentOcts ( void* mem_op, GenBuf *b, void *v, AsnLen *bytesDecoded, int mode ){        char *peek_head, *data;        int i, j, strLen;        void* component_values;        ComponentOcts* k, **k2;	GAsnOcts result;                                                                                  k = (ComponentOcts*) v;                                                                                  if ( mode & DEC_ALLOC_MODE_0 ) {                k2 = (ComponentOcts**) v;                *k2 = (ComponentOcts*) CompAlloc( mem_op, sizeof( ComponentOcts ) );		if ( !*k2 ) return LDAP_DECODING_ERROR;                k = *k2;        }	if ( GDecAsnOctsContent ( mem_op, b, &result, bytesDecoded ) < 0 ) {		if ( k ) CompFree ( mem_op, k );		return LDAP_DECODING_ERROR;	}	k->value = result.value;	k->comp_desc = CompAlloc( mem_op, sizeof( ComponentDesc ) );	if ( !k->comp_desc )  {		if ( k ) CompFree ( mem_op, k );		return LDAP_DECODING_ERROR;	}	k->comp_desc->cd_gser_encoder = (encoder_func*)GEncComponentOcts;	k->comp_desc->cd_gser_decoder = (gser_decoder_func*)GDecComponentOcts;	k->comp_desc->cd_ber_decoder = (ber_decoder_func*)BDecComponentOcts;	k->comp_desc->cd_free = (comp_free_func*)FreeComponentOcts;	k->comp_desc->cd_extract_i = NULL;	k->comp_desc->cd_type = ASN_BASIC;	k->comp_desc->cd_type_id = BASICTYPE_OCTETSTRING;	k->comp_desc->cd_all_match = (allcomponent_matching_func*)MatchingComponentOcts;	return LDAP_SUCCESS;}/* * Component BER Decoder : OCTET STRING */intBDecComponentOctsTag ( void* mem_op, GenBuf *b, void *v, AsnLen *bytesDecoded, int mode ) {	return BDecComponentOcts ( mem_op, b, 0, 0, v, bytesDecoded, mode|CALL_TAG_DECODER );}intBDecComponentOcts ( void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *v,			AsnLen *bytesDecoded, int mode ){        char *peek_head, *data;        int i, strLen, rc;        void* component_values;        ComponentOcts* k, **k2;	AsnOcts result;                                                                                  k = (ComponentOcts*) v;                                                                                  if ( mode & DEC_ALLOC_MODE_0 ) {                k2 = (ComponentOcts**) v;                *k2 = (ComponentOcts*) CompAlloc( mem_op, sizeof( ComponentOcts ) );		if ( !*k2 ) return LDAP_DECODING_ERROR;                k = *k2;        }	if ( mode & CALL_TAG_DECODER ){		mode = mode & CALL_CONTENT_DECODER;		rc = BDecAsnOcts ( mem_op, b, &result, bytesDecoded );	} else {		rc = BDecAsnOctsContent ( mem_op, b, tagId, len, &result, bytesDecoded );	}	if ( rc < 0 ) {		if ( k ) CompFree ( mem_op, k );		return LDAP_DECODING_ERROR;	}	k->value = result;        k->comp_desc = CompAlloc( mem_op, sizeof( ComponentDesc ) );	if ( !k->comp_desc )  {		if ( k ) CompFree ( mem_op, k );		return LDAP_DECODING_ERROR;	}	k->comp_desc->cd_gser_encoder = (encoder_func*)GEncComponentOcts;        k->comp_desc->cd_gser_decoder = (gser_decoder_func*)GDecComponentOcts;        k->comp_desc->cd_ber_decoder = (ber_decoder_func*)BDecComponentOcts;	k->comp_desc->cd_free = (comp_free_func*)FreeComponentOcts;        k->comp_desc->cd_extract_i = NULL;        k->comp_desc->cd_type = ASN_BASIC;        k->comp_desc->cd_type_id = BASICTYPE_OCTETSTRING;        k->comp_desc->cd_all_match = (allcomponent_matching_func*)MatchingComponentOcts;	return LDAP_SUCCESS;}/* * Matching function : OBJECT IDENTIFIER */intMatchingComponentOid ( char *oid, ComponentSyntaxInfo *csi_attr ,			ComponentSyntaxInfo *csi_assert ){        int rc;        MatchingRule* mr;        ComponentOid *a, *b;                                                                                  if( oid ) {                mr = retrieve_matching_rule(oid, csi_attr->csi_comp_desc->cd_type_id );                if ( mr )                        return component_value_match( mr, csi_attr , csi_assert );        }        a = (ComponentOid*)csi_attr;        b = (ComponentOid*)csi_assert;	if ( a->value.octetLen != b->value.octetLen )		return LDAP_COMPARE_FALSE;        rc = ( strncmp( a->value.octs, b->value.octs, a->value.octetLen ) == 0 );                                                                                  return rc ? LDAP_COMPARE_TRUE:LDAP_COMPARE_FALSE;}/* * GSER Encoder : OID */GEncComponentOid ( GenBuf *b, ComponentOid *in ){	GAsnOid t = {0};	if ( !in || in->value.octetLen <= 0 )		return (-1);	t.value = in->value;	return GEncAsnOidContent( b, (GAsnOcts*)&t );}/* * GSER Decoder : OID */intGDecAsnDescOidContent ( void* mem_op, GenBuf *b, GAsnOid *result, AsnLen *bytesDecoded ){	AttributeType *ad_type;	struct berval name;	char* peek_head;	int strLen;	strLen = LocateNextGSERToken ( mem_op, b, &peek_head, GSER_NO_COPY );	name.bv_val = peek_head;	name.bv_len = strLen;	ad_type = at_bvfind( &name );	if ( !ad_type )		return LDAP_DECODING_ERROR;	peek_head = ad_type->sat_atype.at_oid;	strLen = strlen ( peek_head );	result->value.octs = (char*)EncodeComponentOid ( mem_op, peek_head , &strLen );	result->value.octetLen = strLen;	return LDAP_SUCCESS;}intIsNumericOid ( char* peek_head , int strLen ) {	int i;	int num_dot;	for ( i = 0, num_dot = 0 ; i < strLen ; i++ ) {		if ( peek_head[i] == '.' ) num_dot++;		else if ( peek_head[i] > '9' || peek_head[i] < '0' )			return (-1);	}	if ( num_dot )		return (1);	else		return (-1);}intGDecComponentOid ( void* mem_op, GenBuf *b, void *v, AsnLen *bytesDecoded, int mode ){        char* peek_head;        int i, strLen, rc;        void* component_values;        ComponentOid* k, **k2;	GAsnOid result;                                                                                  k = (ComponentOid*) v;                                                                                  if ( mode & DEC_ALLOC_MODE_0 ) {                k2 = (ComponentOid**) v;                *k2 = (ComponentOid*) CompAlloc( mem_op, sizeof( ComponentOid ) );		if ( !*k2 ) return LDAP_DECODING_ERROR;                k = *k2;        }	strLen = LocateNextGSERToken ( mem_op, b, &peek_head, GSER_PEEK );	if ( IsNumericOid ( peek_head , strLen ) >= 1 ) {		/* numeric-oid */		if ( GDecAsnOidContent ( mem_op, b, &result, bytesDecoded ) < 0 ) {			if ( k ) CompFree ( mem_op, k );			return LDAP_DECODING_ERROR;		}	}	else {		/*descr*/		if ( GDecAsnDescOidContent ( mem_op, b, &result, bytesDecoded ) < 0 ){			if ( k ) CompFree ( mem_op, k );			return LDAP_DECODING_ERROR;		}	}	k->value = result.value;	k->comp_desc = get_component_description (BASICTYPE_OID);	return LDAP_SUCCESS;}/* * Component BER Decoder : OID */intBDecComponentOidTag ( void* mem_op, GenBuf *b, void *v, AsnLen *bytesDecoded, int mode ) {	return BDecComponentOid ( mem_op, b, 0, 0, v, bytesDecoded, mode|CALL_TAG_DECODER );}intBDecComponentOid ( void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *v,			AsnLen *bytesDecoded, int mode ){        char* peek_head;        int i, strLen, rc;        void* component_values;        ComponentOid* k, **k2;	AsnOid result;                                                                                  k = (ComponentOid*) v;                                                                                  if ( mode & DEC_ALLOC_MODE_0 ) {                k2 = (ComponentOid**) v;                *k2 = (ComponentOid*) CompAlloc( mem_op, sizeof( ComponentOid ) );		if ( !*k2 ) return LDAP_DECODING_ERROR;                k = *k2;        }		if ( mode & CALL_TAG_DECODER ){		mode = mode & CALL_CONTENT_DECODER;		rc = BDecAsnOid ( mem_op, b, &result, bytesDecoded );	} else {		rc = BDecAsnOidContent ( mem_op, b, tagId, len, &result, bytesDecoded );	}	if ( rc < 0 ) {		if ( k ) CompFree ( mem_op, k );		return LDAP_DECODING_ERROR;	}	k->value = result;	k->comp_desc = get_component_description (BASICTYPE_OID);	return LDAP_SUCCESS;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -