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

📄 slapi_pblock.c

📁 OpenLdap是LDAP的开源项目
💻 C
📖 第 1 页 / 共 3 页
字号:
	case SLAPI_RESULT_CODE:	case SLAPI_PLUGIN_INTOP_RESULT:		PBLOCK_ASSERT_OP( pb, 0 );		pb->pb_rs->sr_err = *((int *)value);		break;	case SLAPI_RESULT_TEXT:		PBLOCK_ASSERT_OP( pb, 0 );		snprintf( pb->pb_textbuf, sizeof( pb->pb_textbuf ), "%s", (char *)value );		pb->pb_rs->sr_text = pb->pb_textbuf;		break;	case SLAPI_RESULT_MATCHED:		PBLOCK_ASSERT_OP( pb, 0 );		pb->pb_rs->sr_matched = (char *)value; /* XXX should dup? */		break;	case SLAPI_ADD_ENTRY:		PBLOCK_ASSERT_OP( pb, 0 );		if ( pb->pb_op->o_tag == LDAP_REQ_ADD )			pb->pb_op->ora_e = (Slapi_Entry *)value;		else			rc = PBLOCK_ERROR;		break;	case SLAPI_MODIFY_MODS: {		Modifications **mlp;		Modifications *newmods;		PBLOCK_ASSERT_OP( pb, 0 );		rc = pblock_set_default( pb, param, value );		if ( rc != PBLOCK_SUCCESS ) {			break;		}		if ( pb->pb_op->o_tag == LDAP_REQ_MODIFY ) {			mlp = &pb->pb_op->orm_modlist;		} else if ( pb->pb_op->o_tag == LDAP_REQ_ADD ) {			mlp = &pb->pb_op->ora_modlist;		} else {			break;		}		newmods = slapi_int_ldapmods2modifications( (LDAPMod **)value );		if ( newmods != NULL ) {			slap_mods_free( *mlp, 1 );			*mlp = newmods;		}		break;	}	case SLAPI_MODRDN_NEWRDN:		PBLOCK_ASSERT_OP( pb, 0 );		PBLOCK_VALIDATE_IS_INTOP( pb );		if ( pb->pb_op->o_tag == LDAP_REQ_MODRDN ) {			rc = pblock_set_dn( value, &pb->pb_op->orr_newrdn, &pb->pb_op->orr_nnewrdn, pb->pb_op->o_tmpmemctx );			if ( rc == LDAP_SUCCESS )				rc = rdn_validate( &pb->pb_op->orr_nnewrdn );		} else {			rc = PBLOCK_ERROR;		}		break;	case SLAPI_MODRDN_NEWSUPERIOR:		PBLOCK_ASSERT_OP( pb, 0 );		PBLOCK_VALIDATE_IS_INTOP( pb );		if ( pb->pb_op->o_tag == LDAP_REQ_MODRDN ) {			if ( value == NULL ) {				if ( pb->pb_op->orr_newSup != NULL ) {					pb->pb_op->o_tmpfree( pb->pb_op->orr_newSup, pb->pb_op->o_tmpmemctx );					BER_BVZERO( pb->pb_op->orr_newSup );					pb->pb_op->orr_newSup = NULL;				}				if ( pb->pb_op->orr_newSup != NULL ) {					pb->pb_op->o_tmpfree( pb->pb_op->orr_nnewSup, pb->pb_op->o_tmpmemctx );					BER_BVZERO( pb->pb_op->orr_nnewSup );					pb->pb_op->orr_nnewSup = NULL;				}			} else {				if ( pb->pb_op->orr_newSup == NULL ) {					pb->pb_op->orr_newSup = (struct berval *)pb->pb_op->o_tmpalloc(						sizeof(struct berval), pb->pb_op->o_tmpmemctx );					BER_BVZERO( pb->pb_op->orr_newSup );				}				if ( pb->pb_op->orr_nnewSup == NULL ) {					pb->pb_op->orr_nnewSup = (struct berval *)pb->pb_op->o_tmpalloc(						sizeof(struct berval), pb->pb_op->o_tmpmemctx );					BER_BVZERO( pb->pb_op->orr_nnewSup );				}				rc = pblock_set_dn( value, pb->pb_op->orr_newSup, pb->pb_op->orr_nnewSup, pb->pb_op->o_tmpmemctx );			}		} else {			rc = PBLOCK_ERROR;		}		break;	case SLAPI_MODRDN_DELOLDRDN:		PBLOCK_ASSERT_OP( pb, 0 );		PBLOCK_VALIDATE_IS_INTOP( pb );		if ( pb->pb_op->o_tag == LDAP_REQ_MODRDN )			pb->pb_op->orr_deleteoldrdn = *((int *)value);		else			rc = PBLOCK_ERROR;		break;	case SLAPI_SEARCH_SCOPE: {		int scope = *((int *)value);		PBLOCK_ASSERT_OP( pb, 0 );		if ( pb->pb_op->o_tag == LDAP_REQ_SEARCH ) {			switch ( *((int *)value) ) {			case LDAP_SCOPE_BASE:			case LDAP_SCOPE_ONELEVEL:			case LDAP_SCOPE_SUBTREE:#ifdef LDAP_SCOPE_SUBORDINATE			case LDAP_SCOPE_SUBORDINATE:#endif				pb->pb_op->ors_scope = scope;				break;			default:				rc = PBLOCK_ERROR;				break;			}		} else {			rc = PBLOCK_ERROR;		}		break;	}	case SLAPI_SEARCH_DEREF:		PBLOCK_ASSERT_OP( pb, 0 );		if ( pb->pb_op->o_tag == LDAP_REQ_SEARCH )			pb->pb_op->ors_deref = *((int *)value);		else			rc = PBLOCK_ERROR;		break;	case SLAPI_SEARCH_SIZELIMIT:		PBLOCK_ASSERT_OP( pb, 0 );		if ( pb->pb_op->o_tag == LDAP_REQ_SEARCH )			pb->pb_op->ors_slimit = *((int *)value);		else			rc = PBLOCK_ERROR;		break;	case SLAPI_SEARCH_TIMELIMIT:		PBLOCK_ASSERT_OP( pb, 0 );		if ( pb->pb_op->o_tag == LDAP_REQ_SEARCH )			pb->pb_op->ors_tlimit = *((int *)value);		else			rc = PBLOCK_ERROR;		break;	case SLAPI_SEARCH_FILTER:		PBLOCK_ASSERT_OP( pb, 0 );		if ( pb->pb_op->o_tag == LDAP_REQ_SEARCH )			pb->pb_op->ors_filter = (Slapi_Filter *)value;		else			rc = PBLOCK_ERROR;		break;	case SLAPI_SEARCH_STRFILTER:		PBLOCK_ASSERT_OP( pb, 0 );		if ( pb->pb_op->o_tag == LDAP_REQ_SEARCH ) {			pb->pb_op->ors_filterstr.bv_val = (char *)value;			pb->pb_op->ors_filterstr.bv_len = strlen((char *)value);		} else {			rc = PBLOCK_ERROR;		}		break;	case SLAPI_SEARCH_ATTRS: {		AttributeName *an = NULL;		size_t i = 0;		char **attrs = (char **)value;		PBLOCK_ASSERT_OP( pb, 0 );		PBLOCK_VALIDATE_IS_INTOP( pb );		if ( pb->pb_op->o_tag != LDAP_REQ_SEARCH ) {			rc = PBLOCK_ERROR;			break;		}		/* also set mapped attrs */		rc = pblock_set_default( pb, param, value );		if ( rc != PBLOCK_SUCCESS ) {			break;		}		if ( pb->pb_op->ors_attrs != NULL ) {			pb->pb_op->o_tmpfree( pb->pb_op->ors_attrs, pb->pb_op->o_tmpmemctx );			pb->pb_op->ors_attrs = NULL;		}		if ( attrs != NULL ) {			for ( i = 0; attrs[i] != NULL; i++ )				;		}		if ( i ) {			an = (AttributeName *)pb->pb_op->o_tmpalloc( (i + 1) *				sizeof(AttributeName), pb->pb_op->o_tmpmemctx );			for ( i = 0; attrs[i] != NULL; i++ ) {				an[i].an_desc = NULL;				an[i].an_oc = NULL;				an[i].an_oc_exclude = 0;				an[i].an_name.bv_val = attrs[i];				an[i].an_name.bv_len = strlen( attrs[i] );				slap_bv2ad( &an[i].an_name, &an[i].an_desc, &pb->pb_rs->sr_text );			}			an[i].an_name.bv_val = NULL;			an[i].an_name.bv_len = 0;		}			pb->pb_op->ors_attrs = an;		break;	}	case SLAPI_SEARCH_ATTRSONLY:		PBLOCK_ASSERT_OP( pb, 0 );		PBLOCK_VALIDATE_IS_INTOP( pb );		if ( pb->pb_op->o_tag == LDAP_REQ_SEARCH )			pb->pb_op->ors_attrsonly = *((int *)value);		else			rc = PBLOCK_ERROR;		break;	case SLAPI_SEARCH_RESULT_ENTRY:		PBLOCK_ASSERT_OP( pb, 0 );		pb->pb_rs->sr_entry = (Slapi_Entry *)value;		break;	case SLAPI_BIND_RET_SASLCREDS:		PBLOCK_ASSERT_OP( pb, 0 );		pb->pb_rs->sr_sasldata = (struct berval *)value;		break;	case SLAPI_EXT_OP_REQ_OID:		PBLOCK_ASSERT_OP( pb, 0 );		PBLOCK_VALIDATE_IS_INTOP( pb );		if ( pb->pb_op->o_tag == LDAP_REQ_EXTENDED ) {			pb->pb_op->ore_reqoid.bv_val = (char *)value;			pb->pb_op->ore_reqoid.bv_len = strlen((char *)value);		} else {			rc = PBLOCK_ERROR;		}		break;	case SLAPI_EXT_OP_REQ_VALUE:		PBLOCK_ASSERT_OP( pb, 0 );		PBLOCK_VALIDATE_IS_INTOP( pb );		if ( pb->pb_op->o_tag == LDAP_REQ_EXTENDED )			pb->pb_op->ore_reqdata = (struct berval *)value;		else			rc = PBLOCK_ERROR;		break;	case SLAPI_EXT_OP_RET_OID:		PBLOCK_ASSERT_OP( pb, 0 );		pb->pb_rs->sr_rspoid = (char *)value;		break;	case SLAPI_EXT_OP_RET_VALUE:		PBLOCK_ASSERT_OP( pb, 0 );		pb->pb_rs->sr_rspdata = (struct berval *)value;		break;	case SLAPI_BIND_METHOD:		PBLOCK_ASSERT_OP( pb, 0 );		PBLOCK_VALIDATE_IS_INTOP( pb );		if ( pb->pb_op->o_tag == LDAP_REQ_BIND )			pb->pb_op->orb_method = *((int *)value);		else			rc = PBLOCK_ERROR;		break;	case SLAPI_BIND_CREDENTIALS:		PBLOCK_ASSERT_OP( pb, 0 );		PBLOCK_VALIDATE_IS_INTOP( pb );		if ( pb->pb_op->o_tag == LDAP_REQ_BIND )			pb->pb_op->orb_cred = *((struct berval *)value);		else			rc = PBLOCK_ERROR;		break;	case SLAPI_COMPARE_TYPE:		PBLOCK_ASSERT_OP( pb, 0 );		PBLOCK_VALIDATE_IS_INTOP( pb );		if ( pb->pb_op->o_tag == LDAP_REQ_COMPARE ) {			const char *text;			pb->pb_op->orc_ava->aa_desc = NULL;			rc = slap_str2ad( (char *)value, &pb->pb_op->orc_ava->aa_desc, &text );		} else {			rc = PBLOCK_ERROR;		}		break;	case SLAPI_COMPARE_VALUE:		PBLOCK_ASSERT_OP( pb, 0 );		PBLOCK_VALIDATE_IS_INTOP( pb );		if ( pb->pb_op->o_tag == LDAP_REQ_COMPARE )			pb->pb_op->orc_ava->aa_value = *((struct berval *)value);		else			rc = PBLOCK_ERROR;		break;	case SLAPI_ABANDON_MSGID:		PBLOCK_ASSERT_OP( pb, 0 );		PBLOCK_VALIDATE_IS_INTOP( pb );		if ( pb->pb_op->o_tag == LDAP_REQ_ABANDON)			pb->pb_op->orn_msgid = *((int *)value);		else			rc = PBLOCK_ERROR;		break;	case SLAPI_REQUESTOR_ISROOT:	case SLAPI_IS_REPLICATED_OPERATION:	case SLAPI_CONN_AUTHTYPE:	case SLAPI_CONN_AUTHMETHOD:	case SLAPI_X_CONN_IS_UDP:	case SLAPI_CONN_CLIENTIP:	case SLAPI_X_CONN_CLIENTPATH:	case SLAPI_CONN_SERVERIP:	case SLAPI_X_CONN_SERVERPATH:	case SLAPI_X_ADD_STRUCTURAL_CLASS:		/* These parameters cannot be set */		rc = PBLOCK_ERROR;		break;	default:		rc = pblock_set_default( pb, param, value );		break;	}	pblock_unlock( pb );	return rc;}static voidpblock_clear( Slapi_PBlock *pb ) {	pb->pb_nParams = 1;}static intpblock_delete_param( Slapi_PBlock *p, int param ) {	int i;	pblock_lock(p);	for ( i = 0; i < p->pb_nParams; i++ ) { 		if ( p->pb_params[i] == param ) {			break;		}	}    	if (i >= p->pb_nParams ) {		pblock_unlock( p );		return PBLOCK_ERROR;	}	/* move last parameter to index of deleted parameter */	if ( p->pb_nParams > 1 ) {		p->pb_params[i] = p->pb_params[p->pb_nParams - 1];		p->pb_values[i] = p->pb_values[p->pb_nParams - 1];	}	p->pb_nParams--;	pblock_unlock( p );		return PBLOCK_SUCCESS;}Slapi_PBlock *slapi_pblock_new(void) {	Slapi_PBlock *pb;	pb = (Slapi_PBlock *) ch_calloc( 1, sizeof(Slapi_PBlock) );	if ( pb != NULL ) {		ldap_pvt_thread_mutex_init( &pb->pb_mutex );		pb->pb_params[0] = SLAPI_IBM_PBLOCK;		pb->pb_values[0].pv_pointer = NULL;		pb->pb_nParams = 1;		pb->pb_conn = NULL;		pb->pb_op = NULL;		pb->pb_rs = NULL;		pb->pb_intop = 0;	}	return pb;}static voidpblock_destroy( Slapi_PBlock *pb ){	LDAPControl **controls = NULL;	LDAPMod **mods = NULL;	char **attrs = NULL;	assert( pb != NULL );	pblock_get_default( pb, SLAPI_RESCONTROLS, (void **)&controls );	if ( controls != NULL ) {		ldap_controls_free( controls );	}	if ( pb->pb_intop ) {		slapi_int_connection_done_pb( pb );	} else {		pblock_get_default( pb, SLAPI_MODIFY_MODS, (void **)&mods );		ldap_mods_free( mods, 1 );		pblock_get_default( pb, SLAPI_SEARCH_ATTRS, (void **)&attrs );		if ( attrs != NULL )			pb->pb_op->o_tmpfree( attrs, pb->pb_op->o_tmpmemctx );	}	ldap_pvt_thread_mutex_destroy( &pb->pb_mutex );	slapi_ch_free( (void **)&pb ); }void slapi_pblock_destroy( Slapi_PBlock *pb ) {	if ( pb != NULL ) {		pblock_destroy( pb );	}}int slapi_pblock_get( Slapi_PBlock *pb, int arg, void *value ) {	return pblock_get( pb, arg, (void **)value );}int slapi_pblock_set( Slapi_PBlock *pb, int arg, void *value ) {	return pblock_set( pb, arg, value );}voidslapi_pblock_clear( Slapi_PBlock *pb ) {	pblock_clear( pb );}int slapi_pblock_delete_param( Slapi_PBlock *p, int param ) {	return pblock_delete_param( p, param );}/* * OpenLDAP extension */intslapi_int_pblock_get_first( Backend *be, Slapi_PBlock **pb ){	assert( pb != NULL );	*pb = SLAPI_BACKEND_PBLOCK( be );	return (*pb == NULL ? LDAP_OTHER : LDAP_SUCCESS);}/* * OpenLDAP extension */intslapi_int_pblock_get_next( Slapi_PBlock **pb ){	assert( pb != NULL );	return slapi_pblock_get( *pb, SLAPI_IBM_PBLOCK, pb );}#endif /* LDAP_SLAPI */

⌨️ 快捷键说明

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