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

📄 slapi_pblock.c

📁 OpenLdap是LDAP的开源项目
💻 C
📖 第 1 页 / 共 3 页
字号:
/* $OpenLDAP: pkg/ldap/servers/slapd/slapi/slapi_pblock.c,v 1.27.2.8 2007/01/02 21:44:11 kurt Exp $ *//* This work is part of OpenLDAP Software <http://www.openldap.org/>. * * Copyright 2002-2007 The OpenLDAP Foundation. * Portions Copyright 1997,2002-2003 IBM Corporation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted only as authorized by the OpenLDAP * Public License. * * A copy of this license is available in the file LICENSE in the * top-level directory of the distribution or, alternatively, at * <http://www.OpenLDAP.org/license.html>. *//* ACKNOWLEDGEMENTS: * This work was initially developed by IBM Corporation for use in * IBM products and subsequently ported to OpenLDAP Software by * Steve Omrani.  Additional significant contributors include: *   Luke Howard */#include "portable.h"#include <slap.h>#include <slapi.h>#ifdef LDAP_SLAPI/* some parameters require a valid connection and operation */#define PBLOCK_LOCK_CONN( _pb )		do { \		ldap_pvt_thread_mutex_lock( &(_pb)->pb_conn->c_mutex ); \	} while (0)#define PBLOCK_UNLOCK_CONN( _pb )	do { \		ldap_pvt_thread_mutex_unlock( &(_pb)->pb_conn->c_mutex ); \	} while (0)/* some parameters are only settable for internal operations */#define PBLOCK_VALIDATE_IS_INTOP( _pb )	do { if ( (_pb)->pb_intop == 0 ) break; } while ( 0 )static slapi_pblock_class_t pblock_get_param_class( int param ) {	switch ( param ) {	case SLAPI_PLUGIN_TYPE:	case SLAPI_PLUGIN_ARGC:	case SLAPI_PLUGIN_OPRETURN:	case SLAPI_PLUGIN_INTOP_RESULT:	case SLAPI_CONFIG_LINENO:	case SLAPI_CONFIG_ARGC:	case SLAPI_BIND_METHOD:	case SLAPI_MODRDN_DELOLDRDN:	case SLAPI_SEARCH_SCOPE:	case SLAPI_SEARCH_DEREF:	case SLAPI_SEARCH_SIZELIMIT:	case SLAPI_SEARCH_TIMELIMIT:	case SLAPI_SEARCH_ATTRSONLY:	case SLAPI_NENTRIES:	case SLAPI_CHANGENUMBER:	case SLAPI_DBSIZE:	case SLAPI_REQUESTOR_ISROOT:	case SLAPI_BE_READONLY:	case SLAPI_BE_LASTMOD:	case SLAPI_DB2LDIF_PRINTKEY:	case SLAPI_LDIF2DB_REMOVEDUPVALS:	case SLAPI_MANAGEDSAIT:	case SLAPI_X_MANAGEDIT:	case SLAPI_X_OPERATION_NO_SCHEMA_CHECK:	case SLAPI_IS_REPLICATED_OPERATION:	case SLAPI_X_CONN_IS_UDP:	case SLAPI_X_CONN_SSF:	case SLAPI_RESULT_CODE:	case SLAPI_LOG_OPERATION:		return PBLOCK_CLASS_INTEGER;		break;	case SLAPI_CONN_ID:	case SLAPI_OPERATION_ID:	case SLAPI_OPINITIATED_TIME:	case SLAPI_ABANDON_MSGID:	case SLAPI_X_OPERATION_DELETE_GLUE_PARENT:		return PBLOCK_CLASS_LONG_INTEGER;		break;	case SLAPI_PLUGIN_DESTROY_FN:	case SLAPI_PLUGIN_DB_BIND_FN:	case SLAPI_PLUGIN_DB_UNBIND_FN:	case SLAPI_PLUGIN_DB_SEARCH_FN:	case SLAPI_PLUGIN_DB_COMPARE_FN:	case SLAPI_PLUGIN_DB_MODIFY_FN:	case SLAPI_PLUGIN_DB_MODRDN_FN:	case SLAPI_PLUGIN_DB_ADD_FN:	case SLAPI_PLUGIN_DB_DELETE_FN:	case SLAPI_PLUGIN_DB_ABANDON_FN:	case SLAPI_PLUGIN_DB_CONFIG_FN:	case SLAPI_PLUGIN_CLOSE_FN:	case SLAPI_PLUGIN_DB_FLUSH_FN:	case SLAPI_PLUGIN_START_FN:	case SLAPI_PLUGIN_DB_SEQ_FN:	case SLAPI_PLUGIN_DB_ENTRY_FN:	case SLAPI_PLUGIN_DB_REFERRAL_FN:	case SLAPI_PLUGIN_DB_RESULT_FN:	case SLAPI_PLUGIN_DB_LDIF2DB_FN:	case SLAPI_PLUGIN_DB_DB2LDIF_FN:	case SLAPI_PLUGIN_DB_BEGIN_FN:	case SLAPI_PLUGIN_DB_COMMIT_FN:	case SLAPI_PLUGIN_DB_ABORT_FN:	case SLAPI_PLUGIN_DB_ARCHIVE2DB_FN:	case SLAPI_PLUGIN_DB_DB2ARCHIVE_FN:	case SLAPI_PLUGIN_DB_NEXT_SEARCH_ENTRY_FN:	case SLAPI_PLUGIN_DB_FREE_RESULT_SET_FN:	case SLAPI_PLUGIN_DB_SIZE_FN:	case SLAPI_PLUGIN_DB_TEST_FN:	case SLAPI_PLUGIN_DB_NO_ACL:	case SLAPI_PLUGIN_EXT_OP_FN:	case SLAPI_PLUGIN_EXT_OP_OIDLIST:	case SLAPI_PLUGIN_PRE_BIND_FN:	case SLAPI_PLUGIN_PRE_UNBIND_FN:	case SLAPI_PLUGIN_PRE_SEARCH_FN:	case SLAPI_PLUGIN_PRE_COMPARE_FN:	case SLAPI_PLUGIN_PRE_MODIFY_FN:	case SLAPI_PLUGIN_PRE_MODRDN_FN:	case SLAPI_PLUGIN_PRE_ADD_FN:	case SLAPI_PLUGIN_PRE_DELETE_FN:	case SLAPI_PLUGIN_PRE_ABANDON_FN:	case SLAPI_PLUGIN_PRE_ENTRY_FN:	case SLAPI_PLUGIN_PRE_REFERRAL_FN:	case SLAPI_PLUGIN_PRE_RESULT_FN:	case SLAPI_PLUGIN_INTERNAL_PRE_ADD_FN:	case SLAPI_PLUGIN_INTERNAL_PRE_MODIFY_FN:	case SLAPI_PLUGIN_INTERNAL_PRE_MODRDN_FN:	case SLAPI_PLUGIN_INTERNAL_PRE_DELETE_FN:	case SLAPI_PLUGIN_BE_PRE_ADD_FN:	case SLAPI_PLUGIN_BE_PRE_MODIFY_FN:	case SLAPI_PLUGIN_BE_PRE_MODRDN_FN:	case SLAPI_PLUGIN_BE_PRE_DELETE_FN:	case SLAPI_PLUGIN_POST_BIND_FN:	case SLAPI_PLUGIN_POST_UNBIND_FN:	case SLAPI_PLUGIN_POST_SEARCH_FN:	case SLAPI_PLUGIN_POST_COMPARE_FN:	case SLAPI_PLUGIN_POST_MODIFY_FN:	case SLAPI_PLUGIN_POST_MODRDN_FN:	case SLAPI_PLUGIN_POST_ADD_FN:	case SLAPI_PLUGIN_POST_DELETE_FN:	case SLAPI_PLUGIN_POST_ABANDON_FN:	case SLAPI_PLUGIN_POST_ENTRY_FN:	case SLAPI_PLUGIN_POST_REFERRAL_FN:	case SLAPI_PLUGIN_POST_RESULT_FN:	case SLAPI_PLUGIN_INTERNAL_POST_ADD_FN:	case SLAPI_PLUGIN_INTERNAL_POST_MODIFY_FN:	case SLAPI_PLUGIN_INTERNAL_POST_MODRDN_FN:	case SLAPI_PLUGIN_INTERNAL_POST_DELETE_FN:	case SLAPI_PLUGIN_BE_POST_ADD_FN:	case SLAPI_PLUGIN_BE_POST_MODIFY_FN:	case SLAPI_PLUGIN_BE_POST_MODRDN_FN:	case SLAPI_PLUGIN_BE_POST_DELETE_FN:	case SLAPI_PLUGIN_MR_FILTER_CREATE_FN:	case SLAPI_PLUGIN_MR_INDEXER_CREATE_FN:	case SLAPI_PLUGIN_MR_FILTER_MATCH_FN:	case SLAPI_PLUGIN_MR_FILTER_INDEX_FN:	case SLAPI_PLUGIN_MR_FILTER_RESET_FN:	case SLAPI_PLUGIN_MR_INDEX_FN:	case SLAPI_PLUGIN_COMPUTE_EVALUATOR_FN:	case SLAPI_PLUGIN_COMPUTE_SEARCH_REWRITER_FN:	case SLAPI_PLUGIN_ACL_ALLOW_ACCESS:	case SLAPI_X_PLUGIN_PRE_GROUP_FN:	case SLAPI_X_PLUGIN_POST_GROUP_FN:	case SLAPI_PLUGIN_AUDIT_FN:		return PBLOCK_CLASS_FUNCTION_POINTER;		break;	case SLAPI_BACKEND:	case SLAPI_CONNECTION:	case SLAPI_OPERATION:	case SLAPI_OPERATION_PARAMETERS:	case SLAPI_OPERATION_TYPE:	case SLAPI_OPERATION_AUTHTYPE:	case SLAPI_BE_MONITORDN:	case SLAPI_BE_TYPE:	case SLAPI_REQUESTOR_DN:	case SLAPI_CONN_DN:	case SLAPI_CONN_CLIENTIP:	case SLAPI_CONN_SERVERIP:	case SLAPI_CONN_AUTHTYPE:	case SLAPI_CONN_AUTHMETHOD:	case SLAPI_CONN_CERT:	case SLAPI_X_CONN_CLIENTPATH:	case SLAPI_X_CONN_SERVERPATH:	case SLAPI_X_CONN_SASL_CONTEXT:	case SLAPI_X_CONFIG_ARGV:	case SLAPI_X_INTOP_FLAGS:	case SLAPI_X_INTOP_RESULT_CALLBACK:	case SLAPI_X_INTOP_SEARCH_ENTRY_CALLBACK:	case SLAPI_X_INTOP_REFERRAL_ENTRY_CALLBACK:	case SLAPI_X_INTOP_CALLBACK_DATA:	case SLAPI_PLUGIN_MR_OID:	case SLAPI_PLUGIN_MR_TYPE:	case SLAPI_PLUGIN_MR_VALUE:	case SLAPI_PLUGIN_MR_VALUES:	case SLAPI_PLUGIN_MR_KEYS:	case SLAPI_PLUGIN:	case SLAPI_PLUGIN_PRIVATE:	case SLAPI_PLUGIN_ARGV:	case SLAPI_PLUGIN_OBJECT:	case SLAPI_PLUGIN_DESCRIPTION:	case SLAPI_PLUGIN_IDENTITY:	case SLAPI_PLUGIN_INTOP_SEARCH_ENTRIES:	case SLAPI_PLUGIN_INTOP_SEARCH_REFERRALS:	case SLAPI_PLUGIN_MR_FILTER_REUSABLE:	case SLAPI_PLUGIN_MR_QUERY_OPERATOR:	case SLAPI_PLUGIN_MR_USAGE:	case SLAPI_OP_LESS:	case SLAPI_OP_LESS_OR_EQUAL:	case SLAPI_PLUGIN_MR_USAGE_INDEX:	case SLAPI_PLUGIN_SYNTAX_FILTER_AVA:	case SLAPI_PLUGIN_SYNTAX_FILTER_SUB:	case SLAPI_PLUGIN_SYNTAX_VALUES2KEYS:	case SLAPI_PLUGIN_SYNTAX_ASSERTION2KEYS_AVA:	case SLAPI_PLUGIN_SYNTAX_ASSERTION2KEYS_SUB:	case SLAPI_PLUGIN_SYNTAX_NAMES:	case SLAPI_PLUGIN_SYNTAX_OID:	case SLAPI_PLUGIN_SYNTAX_FLAGS:	case SLAPI_PLUGIN_SYNTAX_COMPARE:	case SLAPI_CONFIG_FILENAME:	case SLAPI_CONFIG_ARGV:	case SLAPI_TARGET_ADDRESS:	case SLAPI_TARGET_UNIQUEID:	case SLAPI_TARGET_DN:	case SLAPI_REQCONTROLS:	case SLAPI_ENTRY_PRE_OP:	case SLAPI_ENTRY_POST_OP:	case SLAPI_RESCONTROLS:	case SLAPI_X_OLD_RESCONTROLS:	case SLAPI_ADD_RESCONTROL:	case SLAPI_CONTROLS_ARG:	case SLAPI_ADD_ENTRY:	case SLAPI_ADD_EXISTING_DN_ENTRY:	case SLAPI_ADD_PARENT_ENTRY:	case SLAPI_ADD_PARENT_UNIQUEID:	case SLAPI_ADD_EXISTING_UNIQUEID_ENTRY:	case SLAPI_BIND_CREDENTIALS:	case SLAPI_BIND_SASLMECHANISM:	case SLAPI_BIND_RET_SASLCREDS:	case SLAPI_COMPARE_TYPE:	case SLAPI_COMPARE_VALUE:	case SLAPI_MODIFY_MODS:	case SLAPI_MODRDN_NEWRDN:	case SLAPI_MODRDN_NEWSUPERIOR:	case SLAPI_MODRDN_PARENT_ENTRY:	case SLAPI_MODRDN_NEWPARENT_ENTRY:	case SLAPI_MODRDN_TARGET_ENTRY:	case SLAPI_MODRDN_NEWSUPERIOR_ADDRESS:	case SLAPI_SEARCH_FILTER:	case SLAPI_SEARCH_STRFILTER:	case SLAPI_SEARCH_ATTRS:	case SLAPI_SEQ_TYPE:	case SLAPI_SEQ_ATTRNAME:	case SLAPI_SEQ_VAL:	case SLAPI_EXT_OP_REQ_OID:	case SLAPI_EXT_OP_REQ_VALUE:	case SLAPI_EXT_OP_RET_OID:	case SLAPI_EXT_OP_RET_VALUE:	case SLAPI_MR_FILTER_ENTRY:	case SLAPI_MR_FILTER_TYPE:	case SLAPI_MR_FILTER_VALUE:	case SLAPI_MR_FILTER_OID:	case SLAPI_MR_FILTER_DNATTRS:	case SLAPI_LDIF2DB_FILE:	case SLAPI_PARENT_TXN:	case SLAPI_TXN:	case SLAPI_SEARCH_RESULT_SET:	case SLAPI_SEARCH_RESULT_ENTRY:	case SLAPI_SEARCH_REFERRALS:	case SLAPI_RESULT_TEXT:	case SLAPI_RESULT_MATCHED:	case SLAPI_X_GROUP_ENTRY:	case SLAPI_X_GROUP_ATTRIBUTE:	case SLAPI_X_GROUP_OPERATION_DN:	case SLAPI_X_GROUP_TARGET_ENTRY:	case SLAPI_X_ADD_STRUCTURAL_CLASS:	case SLAPI_PLUGIN_AUDIT_DATA:	case SLAPI_IBM_PBLOCK:	case SLAPI_PLUGIN_VERSION:		return PBLOCK_CLASS_POINTER;		break;	default:		break;	}	return PBLOCK_CLASS_INVALID;}static voidpblock_lock( Slapi_PBlock *pb ){	ldap_pvt_thread_mutex_lock( &pb->pb_mutex );}static voidpblock_unlock( Slapi_PBlock *pb ){	ldap_pvt_thread_mutex_unlock( &pb->pb_mutex );}static int pblock_get_default( Slapi_PBlock *pb, int param, void **value ) {		int i;	slapi_pblock_class_t pbClass;	pbClass = pblock_get_param_class( param );	if ( pbClass == PBLOCK_CLASS_INVALID ) {		return PBLOCK_ERROR;	}		switch ( pbClass ) {	case PBLOCK_CLASS_INTEGER:		*((int *)value) = 0;		break;	case PBLOCK_CLASS_LONG_INTEGER:		*((long *)value) = 0L;		break;	case PBLOCK_CLASS_POINTER:	case PBLOCK_CLASS_FUNCTION_POINTER:		*value = NULL;		break;	case PBLOCK_CLASS_INVALID:		return PBLOCK_ERROR;	}	for ( i = 0; i < pb->pb_nParams; i++ ) {		if ( pb->pb_params[i] == param ) {			switch ( pbClass ) {			case PBLOCK_CLASS_INTEGER:				*((int *)value) = pb->pb_values[i].pv_integer;				break;			case PBLOCK_CLASS_LONG_INTEGER:				*((long *)value) = pb->pb_values[i].pv_long_integer;				break;			case PBLOCK_CLASS_POINTER:				*value = pb->pb_values[i].pv_pointer;				break;			case PBLOCK_CLASS_FUNCTION_POINTER:				*value = pb->pb_values[i].pv_function_pointer;				break;			default:				break;			}			break;	  	}	}	return PBLOCK_SUCCESS;}static char *pblock_get_authtype( AuthorizationInformation *authz, int is_tls ){	char *authType;	switch ( authz->sai_method ) {	case LDAP_AUTH_SASL:		authType = SLAPD_AUTH_SASL;		break;	case LDAP_AUTH_SIMPLE:		authType = SLAPD_AUTH_SIMPLE;		break;	case LDAP_AUTH_NONE:		authType = SLAPD_AUTH_NONE;		break;	default:		authType = NULL;		break;	}	if ( is_tls && authType == NULL ) {		authType = SLAPD_AUTH_SSL;	}	return authType;}static int pblock_set_default( Slapi_PBlock *pb, int param, void *value ) {	slapi_pblock_class_t pbClass;	size_t i;	pbClass = pblock_get_param_class( param );	if ( pbClass == PBLOCK_CLASS_INVALID ) {		return PBLOCK_ERROR;	}	if ( pb->pb_nParams == PBLOCK_MAX_PARAMS ) {		return PBLOCK_ERROR;	}	for ( i = 0; i < pb->pb_nParams; i++ ) {		if ( pb->pb_params[i] == param )			break;	}	if ( i >= pb->pb_nParams ) {		pb->pb_params[i] = param;	  	pb->pb_nParams++;	}	switch ( pbClass ) {	case PBLOCK_CLASS_INTEGER:		pb->pb_values[i].pv_integer = (*((int *)value));		break;	case PBLOCK_CLASS_LONG_INTEGER:		pb->pb_values[i].pv_long_integer = (*((long *)value));		break;	case PBLOCK_CLASS_POINTER:		pb->pb_values[i].pv_pointer = value;		break;	case PBLOCK_CLASS_FUNCTION_POINTER:		pb->pb_values[i].pv_function_pointer = value;		break;	default:		break;	}	return PBLOCK_SUCCESS;}static intpblock_be_call( Slapi_PBlock *pb, int (*bep)(Operation *) ){	BackendDB *be_orig;	Operation *op;	int rc;	PBLOCK_ASSERT_OP( pb, 0 );	op = pb->pb_op;	be_orig = op->o_bd;	op->o_bd = select_backend( &op->o_req_ndn, 0, 0 );	rc = (*bep)( op );	op->o_bd = be_orig;	return rc;}static int pblock_get( Slapi_PBlock *pb, int param, void **value ) {	int rc = PBLOCK_SUCCESS;	pblock_lock( pb );	switch ( param ) {	case SLAPI_OPERATION:		*value = pb->pb_op;		break;	case SLAPI_OPINITIATED_TIME:		PBLOCK_ASSERT_OP( pb, 0 );		*((long *)value) = pb->pb_op->o_time;		break;

⌨️ 快捷键说明

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