📄 slapi_ops.c
字号:
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 + -