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

📄 slapi_ops.c

📁 ldap服务器源码
💻 C
📖 第 1 页 / 共 2 页
字号:
		1, 0, &rs->sr_text, pb->pb_textbuf, sizeof( pb->pb_textbuf ) );	if ( rs->sr_err != LDAP_SUCCESS ) {		goto cleanup;	}	if ( slapi_int_func_internal_pb( pb, op_add ) == 0 ) {		if ( pb->pb_op->ora_e != NULL && pb->pb_op->o_private != NULL ) {			BackendDB	*bd = pb->pb_op->o_bd;			pb->pb_op->o_bd = (BackendDB *)pb->pb_op->o_private;			pb->pb_op->o_private = NULL;			be_entry_release_w( pb->pb_op, pb->pb_op->ora_e );			pb->pb_op->ora_e = NULL;			pb->pb_op->o_bd = bd;			pb->pb_op->o_private = NULL;		}	}cleanup:	if ( pb->pb_op->ora_e != NULL ) {		slapi_entry_free( pb->pb_op->ora_e );		pb->pb_op->ora_e = NULL;	}	if ( entry_orig != NULL ) {		pb->pb_op->ora_e = entry_orig;		slap_mods_free( pb->pb_op->ora_modlist, 1 );		pb->pb_op->ora_modlist = NULL;	}	return 0;}intslapi_modrdn_internal_pb( Slapi_PBlock *pb ){	if ( pb == NULL ) {		return -1;	}	PBLOCK_ASSERT_INTOP( pb, LDAP_REQ_MODRDN );	if ( BER_BVISEMPTY( &pb->pb_op->o_req_ndn ) ) {		pb->pb_rs->sr_err = LDAP_UNWILLING_TO_PERFORM;		goto cleanup;	}	slapi_int_func_internal_pb( pb, op_modrdn );cleanup:	return 0;}intslapi_modify_internal_pb( Slapi_PBlock *pb ){	SlapReply		*rs;	if ( pb == NULL ) {		return -1;	}	PBLOCK_ASSERT_INTOP( pb, LDAP_REQ_MODIFY );	rs = pb->pb_rs;	if ( pb->pb_op->orm_modlist == NULL ) {		rs->sr_err = LDAP_PARAM_ERROR;		goto cleanup;	}	if ( BER_BVISEMPTY( &pb->pb_op->o_req_ndn ) ) {		rs->sr_err = LDAP_UNWILLING_TO_PERFORM;		goto cleanup;	}	rs->sr_err = slap_mods_check( pb->pb_op->orm_modlist,		&rs->sr_text, pb->pb_textbuf, sizeof( pb->pb_textbuf ), NULL );	if ( rs->sr_err != LDAP_SUCCESS ) {                goto cleanup;        }	slapi_int_func_internal_pb( pb, op_modify );cleanup:	return 0;}static intslapi_int_search_entry_callback( Slapi_Entry *entry, void *callback_data ){	int		nentries = 0, i = 0;	Slapi_Entry	**head = NULL, **tp;	Slapi_PBlock	*pb = (Slapi_PBlock *)callback_data;	PBLOCK_ASSERT_INTOP( pb, LDAP_REQ_SEARCH );	entry = slapi_entry_dup( entry );	if ( entry == NULL ) {		return LDAP_NO_MEMORY;	}	slapi_pblock_get( pb, SLAPI_NENTRIES, &nentries );	slapi_pblock_get( pb, SLAPI_PLUGIN_INTOP_SEARCH_ENTRIES, &head );		i = nentries + 1;	if ( nentries == 0 ) {		tp = (Slapi_Entry **)slapi_ch_malloc( 2 * sizeof(Slapi_Entry *) );		if ( tp == NULL ) {			slapi_entry_free( entry );			return LDAP_NO_MEMORY;		}		tp[0] = entry;	} else {		tp = (Slapi_Entry **)slapi_ch_realloc( (char *)head,				sizeof(Slapi_Entry *) * ( i + 1 ) );		if ( tp == NULL ) {			slapi_entry_free( entry );			return LDAP_NO_MEMORY;		}		tp[i - 1] = entry;	}	tp[i] = NULL;	          	slapi_pblock_set( pb, SLAPI_PLUGIN_INTOP_SEARCH_ENTRIES, (void *)tp );	slapi_pblock_set( pb, SLAPI_NENTRIES, (void *)&i );	return LDAP_SUCCESS;}intslapi_search_internal_pb( Slapi_PBlock *pb ){	return slapi_search_internal_callback_pb( pb,		(void *)pb,		NULL,		slapi_int_search_entry_callback,		NULL );}intslapi_search_internal_callback_pb( Slapi_PBlock *pb,	void *callback_data,	plugin_result_callback prc,	plugin_search_entry_callback psec,	plugin_referral_entry_callback prec ){	int			free_filter = 0;	SlapReply		*rs;	if ( pb == NULL ) {		return -1;	}	PBLOCK_ASSERT_INTOP( pb, LDAP_REQ_SEARCH );	rs = pb->pb_rs;	/* search callback and arguments */	slapi_pblock_set( pb, SLAPI_X_INTOP_RESULT_CALLBACK,         (void *)prc );	slapi_pblock_set( pb, SLAPI_X_INTOP_SEARCH_ENTRY_CALLBACK,   (void *)psec );	slapi_pblock_set( pb, SLAPI_X_INTOP_REFERRAL_ENTRY_CALLBACK, (void *)prec );	slapi_pblock_set( pb, SLAPI_X_INTOP_CALLBACK_DATA,           (void *)callback_data );	if ( BER_BVISEMPTY( &pb->pb_op->ors_filterstr )) {		rs->sr_err = LDAP_PARAM_ERROR;		goto cleanup;	}	if ( pb->pb_op->ors_filter == NULL ) {		pb->pb_op->ors_filter = slapi_str2filter( pb->pb_op->ors_filterstr.bv_val );		if ( pb->pb_op->ors_filter == NULL ) {			rs->sr_err = LDAP_PROTOCOL_ERROR;			goto cleanup;		}		free_filter = 1;	}	slapi_int_func_internal_pb( pb, op_search );cleanup:	if ( free_filter ) {		slapi_filter_free( pb->pb_op->ors_filter, 1 );		pb->pb_op->ors_filter = NULL;	}	slapi_pblock_delete_param( pb, SLAPI_X_INTOP_RESULT_CALLBACK );	slapi_pblock_delete_param( pb, SLAPI_X_INTOP_SEARCH_ENTRY_CALLBACK );	slapi_pblock_delete_param( pb, SLAPI_X_INTOP_REFERRAL_ENTRY_CALLBACK );	slapi_pblock_delete_param( pb, SLAPI_X_INTOP_CALLBACK_DATA );	return 0;}/* Wrappers for old API */voidslapi_search_internal_set_pb( Slapi_PBlock *pb,	const char *base,	int scope,	const char *filter,	char **attrs,	int attrsonly,	LDAPControl **controls,	const char *uniqueid,	Slapi_ComponentId *plugin_identity,	int operation_flags ){	int no_limit = SLAP_NO_LIMIT;	int deref = LDAP_DEREF_NEVER;	slapi_int_connection_init_pb( pb, LDAP_REQ_SEARCH );	slapi_pblock_set( pb, SLAPI_SEARCH_TARGET,    (void *)base );	slapi_pblock_set( pb, SLAPI_SEARCH_SCOPE,     (void *)&scope );	slapi_pblock_set( pb, SLAPI_SEARCH_FILTER,    (void *)0 );	slapi_pblock_set( pb, SLAPI_SEARCH_STRFILTER, (void *)filter );	slapi_pblock_set( pb, SLAPI_SEARCH_ATTRS,     (void *)attrs );	slapi_pblock_set( pb, SLAPI_SEARCH_ATTRSONLY, (void *)&attrsonly );	slapi_pblock_set( pb, SLAPI_REQCONTROLS,      (void *)controls );	slapi_pblock_set( pb, SLAPI_TARGET_UNIQUEID,  (void *)uniqueid );	slapi_pblock_set( pb, SLAPI_PLUGIN_IDENTITY,  (void *)plugin_identity );	slapi_pblock_set( pb, SLAPI_X_INTOP_FLAGS,    (void *)&operation_flags );	slapi_pblock_set( pb, SLAPI_SEARCH_DEREF,     (void *)&deref );	slapi_pblock_set( pb, SLAPI_SEARCH_SIZELIMIT, (void *)&no_limit );	slapi_pblock_set( pb, SLAPI_SEARCH_TIMELIMIT, (void *)&no_limit );	slapi_int_set_operation_dn( pb );}Slapi_PBlock *slapi_search_internal(	char *ldn, 	int scope, 	char *filStr, 	LDAPControl **controls, 	char **attrs, 	int attrsonly ) {	Slapi_PBlock *pb;	pb = slapi_pblock_new();	slapi_search_internal_set_pb( pb, ldn, scope, filStr,		attrs, attrsonly,		controls, NULL, NULL, 0 );	slapi_search_internal_pb( pb );	return pb;}voidslapi_modify_internal_set_pb( Slapi_PBlock *pb,	const char *dn,	LDAPMod **mods,	LDAPControl **controls,	const char *uniqueid,	Slapi_ComponentId *plugin_identity,	int operation_flags ){	slapi_int_connection_init_pb( pb, LDAP_REQ_MODIFY );	slapi_pblock_set( pb, SLAPI_MODIFY_TARGET,   (void *)dn );	slapi_pblock_set( pb, SLAPI_MODIFY_MODS,     (void *)mods );	slapi_pblock_set( pb, SLAPI_REQCONTROLS,     (void *)controls );	slapi_pblock_set( pb, SLAPI_TARGET_UNIQUEID, (void *)uniqueid );	slapi_pblock_set( pb, SLAPI_PLUGIN_IDENTITY, (void *)plugin_identity );	slapi_pblock_set( pb, SLAPI_X_INTOP_FLAGS,   (void *)&operation_flags );	slapi_int_set_operation_dn( pb );}/* Function : slapi_modify_internal * * Description:	Plugin functions call this routine to modify an entry  *				in the backend directly * Return values : LDAP_SUCCESS *                 LDAP_PARAM_ERROR *                 LDAP_NO_MEMORY *                 LDAP_OTHER *                 LDAP_UNWILLING_TO_PERFORM*/Slapi_PBlock *slapi_modify_internal(	char *ldn, 		LDAPMod **mods, 	LDAPControl **controls, 	int log_change ){	Slapi_PBlock *pb;	pb = slapi_pblock_new();	slapi_modify_internal_set_pb( pb, ldn, mods, controls, NULL, NULL, 0 );	slapi_pblock_set( pb, SLAPI_LOG_OPERATION, (void *)&log_change );	slapi_modify_internal_pb( pb );	return pb;}intslapi_add_internal_set_pb( Slapi_PBlock *pb,	const char *dn,	LDAPMod **attrs,	LDAPControl **controls,	Slapi_ComponentId *plugin_identity,	int operation_flags ){	slapi_int_connection_init_pb( pb, LDAP_REQ_ADD );	slapi_pblock_set( pb, SLAPI_ADD_TARGET,      (void *)dn );	slapi_pblock_set( pb, SLAPI_MODIFY_MODS,     (void *)attrs );	slapi_pblock_set( pb, SLAPI_REQCONTROLS,     (void *)controls );	slapi_pblock_set( pb, SLAPI_PLUGIN_IDENTITY, (void *)plugin_identity );	slapi_pblock_set( pb, SLAPI_X_INTOP_FLAGS,   (void *)&operation_flags );	slapi_int_set_operation_dn( pb );	return 0;}Slapi_PBlock *slapi_add_internal(	char * dn,	LDAPMod **attrs,	LDAPControl **controls,	int log_change ){	Slapi_PBlock *pb;	pb = slapi_pblock_new();	slapi_add_internal_set_pb( pb, dn, attrs, controls, NULL, 0);	slapi_pblock_set( pb, SLAPI_LOG_OPERATION, (void *)&log_change );	slapi_add_internal_pb( pb );	return pb;}voidslapi_add_entry_internal_set_pb( Slapi_PBlock *pb,	Slapi_Entry *e,	LDAPControl **controls,	Slapi_ComponentId *plugin_identity,	int operation_flags ){	slapi_int_connection_init_pb( pb, LDAP_REQ_ADD );	slapi_pblock_set( pb, SLAPI_ADD_ENTRY,       (void *)e );	slapi_pblock_set( pb, SLAPI_REQCONTROLS,     (void *)controls );	slapi_pblock_set( pb, SLAPI_PLUGIN_IDENTITY, (void *)plugin_identity );	slapi_pblock_set( pb, SLAPI_X_INTOP_FLAGS,   (void *)&operation_flags );	slapi_int_set_operation_dn( pb );}Slapi_PBlock * slapi_add_entry_internal(	Slapi_Entry *e, 	LDAPControl **controls, 	int log_change ){	Slapi_PBlock *pb;	pb = slapi_pblock_new();	slapi_add_entry_internal_set_pb( pb, e, controls, NULL, 0 );	slapi_pblock_set( pb, SLAPI_LOG_OPERATION, (void *)&log_change );	slapi_add_internal_pb( pb );	return pb;}voidslapi_rename_internal_set_pb( Slapi_PBlock *pb,	const char *olddn,	const char *newrdn,	const char *newsuperior,	int deloldrdn,	LDAPControl **controls,	const char *uniqueid,	Slapi_ComponentId *plugin_identity,	int operation_flags ){	slapi_int_connection_init_pb( pb, LDAP_REQ_MODRDN );	slapi_pblock_set( pb, SLAPI_MODRDN_TARGET,      (void *)olddn );	slapi_pblock_set( pb, SLAPI_MODRDN_NEWRDN,      (void *)newrdn );	slapi_pblock_set( pb, SLAPI_MODRDN_NEWSUPERIOR, (void *)newsuperior );	slapi_pblock_set( pb, SLAPI_MODRDN_DELOLDRDN,   (void *)&deloldrdn );	slapi_pblock_set( pb, SLAPI_REQCONTROLS,        (void *)controls );	slapi_pblock_set( pb, SLAPI_TARGET_UNIQUEID,    (void *)uniqueid );	slapi_pblock_set( pb, SLAPI_PLUGIN_IDENTITY,    (void *)plugin_identity );	slapi_pblock_set( pb, SLAPI_X_INTOP_FLAGS,      (void *)&operation_flags );	slapi_int_set_operation_dn( pb );}/* Function : slapi_modrdn_internal * * Description : Plugin functions call this routine to modify the rdn  *				 of an entry in the backend directly * Return values : LDAP_SUCCESS *                 LDAP_PARAM_ERROR *                 LDAP_NO_MEMORY *                 LDAP_OTHER *                 LDAP_UNWILLING_TO_PERFORM * * NOTE: This function does not support the "newSuperior" option from LDAP V3. */Slapi_PBlock *slapi_modrdn_internal(	char *olddn, 	char *lnewrdn, 	int deloldrdn, 	LDAPControl **controls, 	int log_change ){	Slapi_PBlock *pb;	pb = slapi_pblock_new ();	slapi_rename_internal_set_pb( pb, olddn, lnewrdn, NULL,		deloldrdn, controls, NULL, NULL, 0 );	slapi_pblock_set( pb, SLAPI_LOG_OPERATION, (void *)&log_change );	slapi_modrdn_internal_pb( pb );	return pb;}voidslapi_delete_internal_set_pb( Slapi_PBlock *pb,	const char *dn,	LDAPControl **controls,	const char *uniqueid,	Slapi_ComponentId *plugin_identity,	int operation_flags ){	slapi_int_connection_init_pb( pb, LDAP_REQ_DELETE );	slapi_pblock_set( pb, SLAPI_TARGET_DN,       (void *)dn );	slapi_pblock_set( pb, SLAPI_REQCONTROLS,     (void *)controls );	slapi_pblock_set( pb, SLAPI_TARGET_UNIQUEID, (void *)uniqueid );	slapi_pblock_set( pb, SLAPI_PLUGIN_IDENTITY, (void *)plugin_identity );	slapi_pblock_set( pb, SLAPI_X_INTOP_FLAGS,   (void *)&operation_flags );	slapi_int_set_operation_dn( pb );}/* Function : slapi_delete_internal * * Description : Plugin functions call this routine to delete an entry  *               in the backend directly * Return values : LDAP_SUCCESS *                 LDAP_PARAM_ERROR *                 LDAP_NO_MEMORY *                 LDAP_OTHER *                 LDAP_UNWILLING_TO_PERFORM*/Slapi_PBlock *slapi_delete_internal(	char *ldn, 	LDAPControl **controls, 	int log_change ){	Slapi_PBlock *pb;	pb = slapi_pblock_new();	slapi_delete_internal_set_pb( pb, ldn, controls, NULL, NULL, 0 );	slapi_pblock_set( pb, SLAPI_LOG_OPERATION, (void *)&log_change );	slapi_delete_internal_pb( pb );	return pb;}#endif /* LDAP_SLAPI */

⌨️ 快捷键说明

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