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

📄 slapi_pblock.c

📁 OpenLdap是LDAP的开源项目
💻 C
📖 第 1 页 / 共 3 页
字号:
	case SLAPI_OPERATION_ID:		PBLOCK_ASSERT_OP( pb, 0 );		*((long *)value) = pb->pb_op->o_opid;		break;	case SLAPI_OPERATION_TYPE:		PBLOCK_ASSERT_OP( pb, 0 );		*((ber_tag_t *)value) = pb->pb_op->o_tag;		break;	case SLAPI_X_OPERATION_DELETE_GLUE_PARENT:		PBLOCK_ASSERT_OP( pb, 0 );		*((ber_tag_t *)value) = pb->pb_op->o_delete_glue_parent;		break;	case SLAPI_X_OPERATION_NO_SCHEMA_CHECK:		PBLOCK_ASSERT_OP( pb, 0 );		*((int *)value) = get_no_schema_check( pb->pb_op );		break;	case SLAPI_X_ADD_STRUCTURAL_CLASS:		PBLOCK_ASSERT_OP( pb, 0 );		if ( pb->pb_op->o_tag == LDAP_REQ_ADD ) {			struct berval tmpval = BER_BVNULL;			rc = mods_structural_class( pb->pb_op->ora_modlist,				&tmpval, &pb->pb_rs->sr_text,				pb->pb_textbuf, sizeof( pb->pb_textbuf ));			*((char **)value) = tmpval.bv_val;		} else {			rc = PBLOCK_ERROR;		}		break;	case SLAPI_REQCONTROLS:		PBLOCK_ASSERT_OP( pb, 0 );		*((LDAPControl ***)value) = pb->pb_op->o_ctrls;		break;	case SLAPI_REQUESTOR_DN:		PBLOCK_ASSERT_OP( pb, 0 );		*((char **)value) = pb->pb_op->o_dn.bv_val;		break;	case SLAPI_MANAGEDSAIT:		PBLOCK_ASSERT_OP( pb, 0 );		*((int *)value) = get_manageDSAit( pb->pb_op );		break;	case SLAPI_X_MANAGEDIT:		PBLOCK_ASSERT_OP( pb, 0 );		*((int *)value) = get_manageDIT( pb->pb_op );		break;	case SLAPI_BACKEND:		PBLOCK_ASSERT_OP( pb, 0 );		*((BackendDB **)value) = select_backend( &pb->pb_op->o_req_ndn, 0, 0 );		break;	case SLAPI_BE_TYPE:		PBLOCK_ASSERT_OP( pb, 0 );		if ( pb->pb_op->o_bd != NULL )			*((char **)value) = pb->pb_op->o_bd->bd_info->bi_type;		else			*value = NULL;		break;	case SLAPI_CONNECTION:		*value = pb->pb_conn;		break;	case SLAPI_X_CONN_SSF:		PBLOCK_ASSERT_OP( pb, 0 );		*((slap_ssf_t *)value) = pb->pb_conn->c_ssf;		break;	case SLAPI_X_CONN_SASL_CONTEXT:		PBLOCK_ASSERT_CONN( pb );		if ( pb->pb_conn->c_sasl_authctx != NULL )			*value = pb->pb_conn->c_sasl_authctx;		else			*value = pb->pb_conn->c_sasl_sockctx;		break;	case SLAPI_TARGET_DN:		PBLOCK_ASSERT_OP( pb, 0 );		*((char **)value) = pb->pb_op->o_req_dn.bv_val;		break;	case SLAPI_REQUESTOR_ISROOT:		*((int *)value) = pblock_be_call( pb, be_isroot );		break;	case SLAPI_IS_REPLICATED_OPERATION:		*((int *)value) = pblock_be_call( pb, be_slurp_update );		break;	case SLAPI_CONN_AUTHTYPE:	case SLAPI_CONN_AUTHMETHOD: /* XXX should return SASL mech */		PBLOCK_ASSERT_CONN( pb );		*((char **)value) = pblock_get_authtype( &pb->pb_conn->c_authz,#ifdef HAVE_TLS							 pb->pb_conn->c_is_tls#else							 0#endif							 );		break;	case SLAPI_X_CONN_IS_UDP:		PBLOCK_ASSERT_CONN( pb );#ifdef LDAP_CONNECTIONLESS		*((int *)value) = pb->pb_conn->c_is_udp;#else		*((int *)value) = 0;#endif		break;	case SLAPI_CONN_ID:		PBLOCK_ASSERT_CONN( pb );		*((long *)value) = pb->pb_conn->c_connid;		break;	case SLAPI_CONN_DN:		PBLOCK_ASSERT_CONN( pb );		*((char **)value) = pb->pb_conn->c_dn.bv_val;		break;	case SLAPI_CONN_CLIENTIP:		PBLOCK_ASSERT_CONN( pb );		if ( strncmp( pb->pb_conn->c_peer_name.bv_val, "IP=", 3 ) == 0 )			*((char **)value) = &pb->pb_conn->c_peer_name.bv_val[3];		else			*value = NULL;		break;	case SLAPI_X_CONN_CLIENTPATH:		PBLOCK_ASSERT_CONN( pb );		if ( strncmp( pb->pb_conn->c_peer_name.bv_val, "PATH=", 3 ) == 0 )			*((char **)value) = &pb->pb_conn->c_peer_name.bv_val[5];		else			*value = NULL;		break;	case SLAPI_CONN_SERVERIP:		PBLOCK_ASSERT_CONN( pb );		if ( strncmp( pb->pb_conn->c_peer_name.bv_val, "IP=", 3 ) == 0 )			*((char **)value) = &pb->pb_conn->c_sock_name.bv_val[3];		else			*value = NULL;		break;	case SLAPI_X_CONN_SERVERPATH:		PBLOCK_ASSERT_CONN( pb );		if ( strncmp( pb->pb_conn->c_peer_name.bv_val, "PATH=", 3 ) == 0 )			*((char **)value) = &pb->pb_conn->c_sock_name.bv_val[5];		else			*value = NULL;		break;	case SLAPI_RESULT_CODE:	case SLAPI_PLUGIN_INTOP_RESULT:		PBLOCK_ASSERT_OP( pb, 0 );		*((int *)value) = pb->pb_rs->sr_err;		break;        case SLAPI_RESULT_TEXT:		PBLOCK_ASSERT_OP( pb, 0 );		*((const char **)value) = pb->pb_rs->sr_text;		break;        case SLAPI_RESULT_MATCHED:		PBLOCK_ASSERT_OP( pb, 0 );		*((const char **)value) = pb->pb_rs->sr_matched;		break;	case SLAPI_ADD_ENTRY:		PBLOCK_ASSERT_OP( pb, 0 );		if ( pb->pb_op->o_tag == LDAP_REQ_ADD )			*((Slapi_Entry **)value) = pb->pb_op->ora_e;		else			*value = NULL;		break;	case SLAPI_MODIFY_MODS: {		LDAPMod **mods = NULL;		pblock_get_default( pb, param, (void **)&mods );		if ( mods == NULL && pb->pb_intop == 0 ) {			if ( pb->pb_op->o_tag != LDAP_REQ_MODIFY ) {				rc = PBLOCK_ERROR;				break;			}			mods = slapi_int_modifications2ldapmods( pb->pb_op->orm_modlist );			pblock_set_default( pb, param, (void *)mods );		}		*((LDAPMod ***)value) = mods;		break;	}	case SLAPI_MODRDN_NEWRDN:		PBLOCK_ASSERT_OP( pb, 0 );		if ( pb->pb_op->o_tag == LDAP_REQ_MODRDN )			*((char **)value) = pb->pb_op->orr_newrdn.bv_val;		else			*value = NULL;		break;	case SLAPI_MODRDN_NEWSUPERIOR:		PBLOCK_ASSERT_OP( pb, 0 );		if ( pb->pb_op->o_tag == LDAP_REQ_MODRDN && pb->pb_op->orr_newSup != NULL )			*((char **)value) = pb->pb_op->orr_newSup->bv_val;		else			*value = NULL;		break;	case SLAPI_MODRDN_DELOLDRDN:		PBLOCK_ASSERT_OP( pb, 0 );		if ( pb->pb_op->o_tag == LDAP_REQ_MODRDN )			*((int *)value) = pb->pb_op->orr_deleteoldrdn;		else			*((int *)value) = 0;		break;	case SLAPI_SEARCH_SCOPE:		PBLOCK_ASSERT_OP( pb, 0 );		if ( pb->pb_op->o_tag == LDAP_REQ_SEARCH )			*((int *)value) = pb->pb_op->ors_scope;		else			*((int *)value) = 0;		break;	case SLAPI_SEARCH_DEREF:		PBLOCK_ASSERT_OP( pb, 0 );		if ( pb->pb_op->o_tag == LDAP_REQ_SEARCH )			*((int *)value) = pb->pb_op->ors_deref;		else			*((int *)value) = 0;		break;	case SLAPI_SEARCH_SIZELIMIT:		PBLOCK_ASSERT_OP( pb, 0 );		if ( pb->pb_op->o_tag == LDAP_REQ_SEARCH )			*((int *)value) = pb->pb_op->ors_slimit;		else			*((int *)value) = 0;		break;	case SLAPI_SEARCH_TIMELIMIT:		PBLOCK_ASSERT_OP( pb, 0 );		if ( pb->pb_op->o_tag == LDAP_REQ_SEARCH )			*((int *)value) = pb->pb_op->ors_tlimit;		else			*((int *)value) = 0;		break;	case SLAPI_SEARCH_FILTER:		PBLOCK_ASSERT_OP( pb, 0 );		if ( pb->pb_op->o_tag == LDAP_REQ_SEARCH )			*((Slapi_Filter **)value) = pb->pb_op->ors_filter;		else			*((Slapi_Filter **)value) = NULL;		break;	case SLAPI_SEARCH_STRFILTER:		PBLOCK_ASSERT_OP( pb, 0 );		if ( pb->pb_op->o_tag == LDAP_REQ_SEARCH )			*((char **)value) = pb->pb_op->ors_filterstr.bv_val;		else			*((char **)value) = NULL;		break;	case SLAPI_SEARCH_ATTRS: {		char **attrs = NULL;		PBLOCK_ASSERT_OP( pb, 0 );		if ( pb->pb_op->o_tag != LDAP_REQ_SEARCH ) {			rc = PBLOCK_ERROR;			break;		}		pblock_get_default( pb, param, (void **)&attrs );		if ( attrs == NULL && pb->pb_intop == 0 ) {			attrs = anlist2charray_x( pb->pb_op->ors_attrs, 0, pb->pb_op->o_tmpmemctx );			pblock_set_default( pb, param, (void *)attrs );		}		*((char ***)value) = attrs;		break;	}	case SLAPI_SEARCH_ATTRSONLY:		PBLOCK_ASSERT_OP( pb, 0 );		if ( pb->pb_op->o_tag == LDAP_REQ_SEARCH )			*((int *)value) = pb->pb_op->ors_attrsonly;		else			*((int *)value) = 0;		break;	case SLAPI_SEARCH_RESULT_ENTRY:		PBLOCK_ASSERT_OP( pb, 0 );		*((Slapi_Entry **)value) = pb->pb_rs->sr_entry;		break;	case SLAPI_BIND_RET_SASLCREDS:		PBLOCK_ASSERT_OP( pb, 0 );		*((struct berval **)value) = pb->pb_rs->sr_sasldata;		break;	case SLAPI_EXT_OP_REQ_OID:		*((const char **)value) = pb->pb_op->ore_reqoid.bv_val;		break;	case SLAPI_EXT_OP_REQ_VALUE:		*((struct berval **)value) = pb->pb_op->ore_reqdata;		break;	case SLAPI_EXT_OP_RET_OID:		PBLOCK_ASSERT_OP( pb, 0 );		*((const char **)value) = pb->pb_rs->sr_rspoid;		break;	case SLAPI_EXT_OP_RET_VALUE:		PBLOCK_ASSERT_OP( pb, 0 );		*((struct berval **)value) = pb->pb_rs->sr_rspdata;		break;	case SLAPI_BIND_METHOD:		if ( pb->pb_op->o_tag == LDAP_REQ_BIND )			*((int *)value) = pb->pb_op->orb_method;		else			*((int *)value) = 0;		break;	case SLAPI_BIND_CREDENTIALS:		if ( pb->pb_op->o_tag == LDAP_REQ_BIND )			*((struct berval **)value) = &pb->pb_op->orb_cred;		else			*value = NULL;		break;	case SLAPI_COMPARE_TYPE:		if ( pb->pb_op->o_tag == LDAP_REQ_COMPARE )			*((char **)value) = pb->pb_op->orc_ava->aa_desc->ad_cname.bv_val;		else			*value = NULL;		break;	case SLAPI_COMPARE_VALUE:		if ( pb->pb_op->o_tag == LDAP_REQ_COMPARE )			*((struct berval **)value) = &pb->pb_op->orc_ava->aa_value;		else			*value = NULL;		break;	case SLAPI_ABANDON_MSGID:		if ( pb->pb_op->o_tag == LDAP_REQ_ABANDON )			*((int *)value) = pb->pb_op->orn_msgid;		else			*((int *)value) = 0;		break;	default:		rc = pblock_get_default( pb, param, value );		break;	}	pblock_unlock( pb );	return rc;}static intpblock_add_control( Slapi_PBlock *pb, LDAPControl *control ){	LDAPControl **controls = NULL;	size_t i;	pblock_get_default( pb, SLAPI_RESCONTROLS, (void **)&controls );	if ( controls != NULL ) {		for ( i = 0; controls[i] != NULL; i++ )			;	} else {		i = 0;	}	controls = (LDAPControl **)slapi_ch_realloc( (char *)controls,		( i + 2 ) * sizeof(LDAPControl *));	controls[i++] = slapi_dup_control( control );	controls[i] = NULL;	return pblock_set_default( pb, SLAPI_RESCONTROLS, (void *)controls );}static intpblock_set_dn( void *value, struct berval *dn, struct berval *ndn, void *memctx ){	struct berval bv;	if ( !BER_BVISNULL( dn )) {		slap_sl_free( dn->bv_val, memctx );		BER_BVZERO( dn );	}	if ( !BER_BVISNULL( ndn )) {		slap_sl_free( ndn->bv_val, memctx );		BER_BVZERO( ndn );	}	bv.bv_val = (char *)value;	bv.bv_len = ( value != NULL ) ? strlen( bv.bv_val ) : 0;	return dnPrettyNormal( NULL, &bv, dn, ndn, memctx );}static int pblock_set( Slapi_PBlock *pb, int param, void *value ) {	int rc = PBLOCK_SUCCESS;	pblock_lock( pb );		switch ( param ) {	case SLAPI_OPERATION:		pb->pb_op = (Operation *)value;		break;	case SLAPI_OPINITIATED_TIME:		PBLOCK_ASSERT_OP( pb, 0 );		pb->pb_op->o_time = *((long *)value);		break;	case SLAPI_OPERATION_ID:		PBLOCK_ASSERT_OP( pb, 0 );		pb->pb_op->o_opid = *((long *)value);		break;	case SLAPI_OPERATION_TYPE:		PBLOCK_ASSERT_OP( pb, 0 );		pb->pb_op->o_tag = *((ber_tag_t *)value);		break;	case SLAPI_X_OPERATION_DELETE_GLUE_PARENT:		PBLOCK_ASSERT_OP( pb, 0 );		pb->pb_op->o_delete_glue_parent = *((int *)value);		break;	case SLAPI_X_OPERATION_NO_SCHEMA_CHECK:		PBLOCK_ASSERT_OP( pb, 0 );		pb->pb_op->o_no_schema_check = *((int *)value);		break;	case SLAPI_REQCONTROLS:		PBLOCK_ASSERT_OP( pb, 0 );		pb->pb_op->o_ctrls = (LDAPControl **)value;		break;	case SLAPI_RESCONTROLS: {		LDAPControl **ctrls = NULL;		pblock_get_default( pb, param, (void **)&ctrls );		if ( ctrls != NULL ) {			/* free old ones first */			ldap_controls_free( ctrls );		}		rc = pblock_set_default( pb, param, value );		break;	}	case SLAPI_ADD_RESCONTROL:		PBLOCK_ASSERT_OP( pb, 0 );		rc = pblock_add_control( pb, (LDAPControl *)value );		break;	case SLAPI_REQUESTOR_DN:		PBLOCK_ASSERT_OP( pb, 0 );		rc = pblock_set_dn( value, &pb->pb_op->o_dn, &pb->pb_op->o_ndn, pb->pb_op->o_tmpmemctx );		break;	case SLAPI_MANAGEDSAIT:		PBLOCK_ASSERT_OP( pb, 0 );		pb->pb_op->o_managedsait = *((int *)value);		break;	case SLAPI_X_MANAGEDIT:		PBLOCK_ASSERT_OP( pb, 0 );		pb->pb_op->o_managedit = *((int *)value);		break;	case SLAPI_BACKEND:		PBLOCK_ASSERT_OP( pb, 0 );		pb->pb_op->o_bd = (BackendDB *)value;		break;	case SLAPI_CONNECTION:		pb->pb_conn = (Connection *)value;		break;	case SLAPI_X_CONN_SSF:		PBLOCK_ASSERT_CONN( pb );		PBLOCK_LOCK_CONN( pb );		pb->pb_conn->c_ssf = (slap_ssf_t)(long)value;		PBLOCK_UNLOCK_CONN( pb );		break;	case SLAPI_X_CONN_SASL_CONTEXT:		PBLOCK_ASSERT_CONN( pb );		PBLOCK_LOCK_CONN( pb );		pb->pb_conn->c_sasl_authctx = value;		PBLOCK_UNLOCK_CONN( pb );		break;	case SLAPI_TARGET_DN:		PBLOCK_ASSERT_OP( pb, 0 );		rc = pblock_set_dn( value, &pb->pb_op->o_req_dn, &pb->pb_op->o_req_ndn, pb->pb_op->o_tmpmemctx );		break;	case SLAPI_CONN_ID:		PBLOCK_ASSERT_CONN( pb );		PBLOCK_LOCK_CONN( pb );		pb->pb_conn->c_connid = *((long *)value);		PBLOCK_UNLOCK_CONN( pb );		break;	case SLAPI_CONN_DN:		PBLOCK_ASSERT_CONN( pb );		PBLOCK_LOCK_CONN( pb );		rc = pblock_set_dn( value, &pb->pb_conn->c_dn, &pb->pb_conn->c_ndn, NULL );		PBLOCK_UNLOCK_CONN( pb );		break;

⌨️ 快捷键说明

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