• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.10/OpenLDAP-499.27/OpenLDAP/servers/slapd/

Lines Matching refs:rs

42 int slap_null_cb( Operation *op, SlapReply *rs )
47 int slap_freeself_cb( Operation *op, SlapReply *rs )
170 (rs_assert_ok)( const SlapReply *rs )
172 const slap_mask_t flags = rs->sr_flags;
177 RS_ASSERT( rs->sr_entry != NULL );
178 RS_ASSERT( (1 << rs->sr_type) &
184 RS_ASSERT( !(flags & REP_MATCHED_MASK) || rs->sr_matched );
185 RS_ASSERT( !(flags & REP_CTRLS_MASK ) || rs->sr_ctrls );
189 if ( rs->sr_err == LDAP_SUCCESS ) {
190 RS_ASSERT( rs->sr_text == NULL );
191 RS_ASSERT( rs->sr_matched == NULL );
199 (rs_assert_ready)( const SlapReply *rs )
201 RS_ASSERT( !rs->sr_entry );
203 RS_ASSERT( !rs->sr_text );
204 RS_ASSERT( !rs->sr_ref );
205 RS_ASSERT( !rs->sr_matched );
206 RS_ASSERT( !rs->sr_ctrls );
207 RS_ASSERT( !rs->sr_flags );
209 RS_ASSERT( rs->sr_err == LDAP_SUCCESS );
212 RS_ASSERT( !(rs->sr_flags & REP_ENTRY_MASK) );
218 (rs_assert_done)( const SlapReply *rs )
221 RS_ASSERT( !(rs->sr_flags & ~(REP_ENTRY_MODIFIABLE|REP_NO_OPERATIONALS)) );
222 rs_assert_ok( rs );
224 RS_ASSERT( !(rs->sr_flags & REP_ENTRY_MUSTFLUSH) );
232 (rs_reinit)( SlapReply *rs, slap_reply_t type )
234 rs_reinit( rs, type ); /* proto-slap.h macro */
237 /* Obey and clear rs->sr_flags & REP_ENTRY_MASK. Clear sr_entry if freed. */
239 rs_flush_entry( Operation *op, SlapReply *rs, slap_overinst *on )
241 rs_assert_ok( rs );
243 if ( (rs->sr_flags & REP_ENTRY_MUSTFLUSH) && rs->sr_entry != NULL ) {
244 if ( !(rs->sr_flags & REP_ENTRY_MUSTRELEASE) ) {
245 entry_free( rs->sr_entry );
247 overlay_entry_release_ov( op, rs->sr_entry, 0, on );
249 be_entry_release_rw( op, rs->sr_entry, 0 );
251 rs->sr_entry = NULL;
254 rs->sr_flags &= ~REP_ENTRY_MASK;
257 /* Set rs->sr_entry after obeying and clearing sr_flags & REP_ENTRY_MASK. */
259 rs_replace_entry( Operation *op, SlapReply *rs, slap_overinst *on, Entry *e )
261 rs_flush_entry( op, rs, on );
262 rs->sr_entry = e;
266 * Ensure rs->sr_entry is modifiable, by duplicating it if necessary.
268 * Return nonzero if rs->sr_entry was replaced.
271 rs_entry2modifiable( Operation *op, SlapReply *rs, slap_overinst *on )
273 if ( rs->sr_flags & REP_ENTRY_MODIFIABLE ) {
274 rs_assert_ok( rs );
277 rs_replace_entry( op, rs, on, entry_dup( rs->sr_entry ));
278 rs->sr_flags |= REP_ENTRY_MODIFIABLE | REP_ENTRY_MUSTBEFREED;
493 SlapReply *rs )
505 rc = op->o_callback->sc_response( op, rs );
530 SlapReply *rs )
539 (void)op->o_callback->sc_cleanup( op, rs );
566 SlapReply *rs )
574 if (( rs->sr_err == SLAPD_ABANDON ) && !op->o_cancel ) {
580 rc = slap_response_play( op, rs );
602 rc = rs->sr_err;
608 rs->sr_msgid, rs->sr_tag, rc );
610 if( rs->sr_ref ) {
612 rs->sr_ref[0].bv_val ? rs->sr_ref[0].bv_val : "NULL",
621 rs->sr_tag, rc,
622 rs->sr_matched == NULL ? "" : rs->sr_matched,
623 rs->sr_text == NULL ? "" : rs->sr_text );
626 if ( rs->sr_type == REP_INTERMEDIATE ) {
628 rs->sr_msgid, rs->sr_tag );
632 rs->sr_msgid, rs->sr_tag, rc,
633 rs->sr_matched == NULL ? "" : rs->sr_matched,
634 rs->sr_text == NULL ? "" : rs->sr_text );
638 if ( rs->sr_ref != NULL ) {
639 assert( rs->sr_err == LDAP_REFERRAL );
641 LDAP_TAG_REFERRAL, rs->sr_ref );
643 assert( rs->sr_err != LDAP_REFERRAL );
647 if( rc != -1 && rs->sr_type == REP_SASL && rs->sr_sasldata != NULL ) {
649 LDAP_TAG_SASL_RES_CREDS, rs->sr_sasldata );
653 ( rs->sr_type == REP_EXTENDED || rs->sr_type == REP_INTERMEDIATE ))
655 if ( rs->sr_rspoid != NULL ) {
657 rs->sr_type == REP_EXTENDED
659 rs->sr_rspoid );
661 if( rc != -1 && rs->sr_rspdata != NULL ) {
663 rs->sr_type == REP_EXTENDED
665 rs->sr_rspdata );
674 rc = send_ldap_controls( op, ber, rs->sr_ctrls );
731 (void)slap_cleanup_play( op, rs );
734 if ( rs->sr_flags & REP_MATCHED_MUSTBEFREED ) {
735 rs->sr_flags ^= REP_MATCHED_MUSTBEFREED; /* paranoia */
736 if ( rs->sr_matched ) {
737 free( (char *)rs->sr_matched );
738 rs->sr_matched = NULL;
742 if ( rs->sr_flags & REP_REF_MUSTBEFREED ) {
743 rs->sr_flags ^= REP_REF_MUSTBEFREED; /* paranoia */
744 if ( rs->sr_ref ) {
745 ber_bvarray_free( rs->sr_ref );
746 rs->sr_ref = NULL;
750 if ( rs->sr_flags & REP_CTRLS_MUSTBEFREED ) {
751 rs->sr_flags ^= REP_CTRLS_MUSTBEFREED; /* paranoia */
752 if ( rs->sr_ctrls ) {
753 slap_free_ctrls( op, rs->sr_ctrls );
754 rs->sr_ctrls = NULL;
763 send_ldap_disconnect( Operation *op, SlapReply *rs )
772 rs->sr_err, rs->sr_text ? rs->sr_text : "", NULL );
773 assert( LDAP_UNSOLICITED_ERROR( rs->sr_err ) );
776 RS_ASSERT( !(rs->sr_flags & REP_ENTRY_MASK) );
777 rs->sr_flags &= ~REP_ENTRY_MASK; /* paranoia */
779 rs->sr_type = REP_EXTENDED;
780 rs->sr_rspdata = NULL;
783 rs->sr_rspoid = NULL;
784 rs->sr_tag = slap_req2res( op->o_tag );
785 rs->sr_msgid = (rs->sr_tag != LBER_SEQUENCE) ? op->o_msgid : 0;
788 rs->sr_rspoid = LDAP_NOTICE_DISCONNECT;
789 rs->sr_tag = LDAP_RES_EXTENDED;
790 rs->sr_msgid = LDAP_RES_UNSOLICITED;
793 if ( send_ldap_response( op, rs ) == SLAP_CB_CONTINUE ) {
796 op->o_log_prefix, rs->sr_tag, rs->sr_err,
797 rs->sr_text ? rs->sr_text : "", 0 );
802 slap_send_ldap_result( Operation *op, SlapReply *rs )
805 const char *otext = rs->sr_text;
806 BerVarray oref = rs->sr_ref;
808 rs->sr_type = REP_RESULT;
811 if ( rs->sr_err == SLAPD_ABANDON || op->o_abandon )
819 rs->sr_err, rs->sr_matched ? rs->sr_matched : "",
820 rs->sr_text ? rs->sr_text : "" );
821 if( rs->sr_ref ) {
824 rs->sr_ref[0].bv_val ? rs->sr_ref[0].bv_val : "NULL",
827 assert( !LDAP_API_ERROR( rs->sr_err ) );
828 assert( rs->sr_err != LDAP_PARTIAL_RESULTS );
830 if ( rs->sr_err == LDAP_REFERRAL ) {
831 if( op->o_domain_scope ) rs->sr_ref = NULL;
833 if( rs->sr_ref == NULL ) {
834 rs->sr_err = LDAP_NO_SUCH_OBJECT;
836 rs->sr_err = LDAP_PARTIAL_RESULTS;
841 tmp = v2ref( rs->sr_ref, rs->sr_text );
842 rs->sr_text = tmp;
843 rs->sr_ref = NULL;
847 rs->sr_tag = slap_req2res( op->o_tag );
848 rs->sr_msgid = (rs->sr_tag != LBER_SEQUENCE) ? op->o_msgid : 0;
850 if ( rs->sr_flags & REP_REF_MUSTBEFREED ) {
851 if ( rs->sr_ref == NULL ) {
852 rs->sr_flags ^= REP_REF_MUSTBEFREED;
855 oref = NULL; /* send_ldap_response() will free rs->sr_ref if != NULL */
858 if ( send_ldap_response( op, rs ) == SLAP_CB_CONTINUE ) {
862 op->o_log_prefix, rs->sr_tag, rs->sr_err,
863 rs->sr_nentries, rs->sr_text ? rs->sr_text : "" );
867 op->o_log_prefix, rs->sr_tag, rs->sr_err,
868 rs->sr_text ? rs->sr_text : "", 0 );
873 rs->sr_text = otext;
874 rs->sr_ref = oref;
878 send_ldap_sasl( Operation *op, SlapReply *rs )
881 rs->sr_err,
882 rs->sr_sasldata ? (long) rs->sr_sasldata->bv_len : -1, NULL );
884 RS_ASSERT( !(rs->sr_flags & REP_ENTRY_MASK) );
885 rs->sr_flags &= ~REP_ENTRY_MASK; /* paranoia */
887 rs->sr_type = REP_SASL;
888 rs->sr_tag = slap_req2res( op->o_tag );
889 rs->sr_msgid = (rs->sr_tag != LBER_SEQUENCE) ? op->o_msgid : 0;
891 if ( send_ldap_response( op, rs ) == SLAP_CB_CONTINUE ) {
894 op->o_log_prefix, rs->sr_tag, rs->sr_err,
895 rs->sr_text ? rs->sr_text : "", 0 );
900 slap_send_ldap_extended( Operation *op, SlapReply *rs )
904 rs->sr_err,
905 rs->sr_rspoid ? rs->sr_rspoid : "",
906 rs->sr_rspdata != NULL ? rs->sr_rspdata->bv_len : 0 );
908 RS_ASSERT( !(rs->sr_flags & REP_ENTRY_MASK) );
909 rs->sr_flags &= ~REP_ENTRY_MASK; /* paranoia */
911 rs->sr_type = REP_EXTENDED;
912 rs->sr_tag = slap_req2res( op->o_tag );
913 rs->sr_msgid = (rs->sr_tag != LBER_SEQUENCE) ? op->o_msgid : 0;
915 if ( send_ldap_response( op, rs ) == SLAP_CB_CONTINUE ) {
918 op->o_log_prefix, rs->sr_rspoid ? rs->sr_rspoid : "",
919 rs->sr_err, rs->sr_text ? rs->sr_text : "", 0 );
924 slap_send_ldap_intermediate( Operation *op, SlapReply *rs )
928 rs->sr_err,
929 rs->sr_rspoid ? rs->sr_rspoid : "",
930 rs->sr_rspdata != NULL ? rs->sr_rspdata->bv_len : 0 );
932 RS_ASSERT( !(rs->sr_flags & REP_ENTRY_MASK) );
933 rs->sr_flags &= ~REP_ENTRY_MASK; /* paranoia */
935 rs->sr_type = REP_INTERMEDIATE;
936 rs->sr_tag = LDAP_RES_INTERMEDIATE;
937 rs->sr_msgid = op->o_msgid;
938 if ( send_ldap_response( op, rs ) == SLAP_CB_CONTINUE ) {
942 rs->sr_rspoid ? rs->sr_rspoid : "", 0, 0, 0 );
957 slap_send_search_entry( Operation *op, SlapReply *rs )
974 rs->sr_type = REP_SEARCH;
976 if ( op->ors_slimit >= 0 && rs->sr_nentries >= op->ors_slimit ) {
982 if ( ( ( rs->sr_nentries & 0x3f ) == 0x3f ) &&
993 * they may modify entry and other stuff in rs */
998 rs->sr_attr_flags = slap_attr_flags( rs->sr_attrs );
1000 rc = backend_operational( op, rs );
1006 rc = slap_response_play( op, rs );
1013 op->o_connid, rs->sr_entry->e_name.bv_val,
1018 if ( !access_allowed( op, rs->sr_entry, ad_entry, NULL, ACL_READ, NULL )) {
1021 op->o_connid, rs->sr_entry->e_name.bv_val, 0 );
1033 bv.bv_len = entry_flatsize( rs->sr_entry, 0 );
1045 LDAP_RES_SEARCH_ENTRY, &rs->sr_entry->e_name );
1048 LDAP_RES_SEARCH_ENTRY, &rs->sr_entry->e_name );
1055 LDAP_RES_SEARCH_ENTRY, &rs->sr_entry->e_name );
1058 LDAP_RES_SEARCH_ENTRY, &rs->sr_entry->e_name );
1067 send_ldap_error( op, rs, LDAP_OTHER, "encoding DN error" );
1068 rc = rs->sr_err;
1073 userattrs = SLAP_USERATTRS( rs->sr_attr_flags );
1083 for ( a = rs->sr_entry->e_attrs, i=0; a != NULL; a = a->a_next, i++ ) {
1097 send_ldap_error( op, rs, LDAP_OTHER, "out of memory" );
1102 for ( a=rs->sr_entry->e_attrs, i=0; a != NULL; a=a->a_next, i++ ) {
1108 rc = filter_matched_values(op, rs->sr_entry->e_attrs, &e_flags) ;
1114 send_ldap_error( op, rs, LDAP_OTHER,
1116 rc = rs->sr_err;
1122 for ( a = rs->sr_entry->e_attrs, j = 0; a != NULL; a = a->a_next, j++ ) {
1126 if ( rs->sr_attrs == NULL ) {
1136 if ( !ad_inlist( desc, rs->sr_attrs )) {
1138 if ( !SLAP_OPATTRS( rs->sr_attr_flags ))
1146 if ( !userattrs && !ad_inlist( desc, rs->sr_attrs ) ) {
1153 if ( ! access_allowed( op, rs->sr_entry, desc, NULL,
1168 send_ldap_error( op, rs, LDAP_OTHER,
1170 rc = rs->sr_err;
1178 if ( ! access_allowed( op, rs->sr_entry,
1202 send_ldap_error( op, rs, LDAP_OTHER,
1204 rc = rs->sr_err;
1214 send_ldap_error( op, rs, LDAP_OTHER,
1216 rc = rs->sr_err;
1228 send_ldap_error( op, rs, LDAP_OTHER, "encode end error" );
1229 rc = rs->sr_err;
1235 * they may modify entry and other stuff in rs */
1236 if ( rs->sr_operational_attrs != NULL && op->o_vrFilter != NULL ) {
1240 for ( a = rs->sr_operational_attrs, i=0; a != NULL; a = a->a_next, i++ ) {
1261 send_ldap_error( op, rs, LDAP_OTHER,
1268 for ( a = rs->sr_operational_attrs, i=0; a != NULL; a = a->a_next, i++ ) {
1273 rc = filter_matched_values(op, rs->sr_operational_attrs, &e_flags) ;
1281 send_ldap_error( op, rs, LDAP_OTHER,
1283 rc = rs->sr_err;
1289 for (a = rs->sr_operational_attrs, j=0; a != NULL; a = a->a_next, j++ ) {
1292 if ( rs->sr_attrs == NULL ) {
1301 if ( !SLAP_OPATTRS( rs->sr_attr_flags ) &&
1302 !ad_inlist( desc, rs->sr_attrs ) )
1311 if ( !userattrs && !ad_inlist( desc, rs->sr_attrs ) ) {
1317 if ( ! access_allowed( op, rs->sr_entry, desc, NULL,
1335 send_ldap_error( op, rs, LDAP_OTHER,
1337 rc = rs->sr_err;
1343 if ( ! access_allowed( op, rs->sr_entry,
1364 send_ldap_error( op, rs, LDAP_OTHER,
1366 rc = rs->sr_err;
1378 send_ldap_error( op, rs, LDAP_OTHER, "encode end error" );
1379 rc = rs->sr_err;
1393 rc = send_ldap_controls( op, ber, rs->sr_ctrls );
1413 send_ldap_error( op, rs, LDAP_OTHER, "encode entry end error" );
1414 rc = rs->sr_err;
1419 op->o_log_prefix, rs->sr_entry->e_nname.bv_val, 0, 0, 0 );
1421 rs_flush_entry( op, rs, NULL );
1435 rs->sr_nentries++;
1451 (void)slap_cleanup_play( op, rs );
1458 /* FIXME: Can break if rs now contains an extended response */
1459 if ( rs->sr_operational_attrs ) {
1460 attrs_free( rs->sr_operational_attrs );
1461 rs->sr_operational_attrs = NULL;
1463 rs->sr_attr_flags = SLAP_ATTRS_UNDEFINED;
1465 if ( op->o_tag == LDAP_REQ_SEARCH && rs->sr_type == REP_SEARCH ) {
1466 rs_flush_entry( op, rs, NULL );
1468 RS_ASSERT( (rs->sr_flags & REP_ENTRY_MASK) == 0 );
1471 if ( rs->sr_flags & REP_CTRLS_MUSTBEFREED ) {
1472 rs->sr_flags ^= REP_CTRLS_MUSTBEFREED; /* paranoia */
1473 if ( rs->sr_ctrls ) {
1474 slap_free_ctrls( op, rs->sr_ctrls );
1475 rs->sr_ctrls = NULL;
1483 slap_send_search_reference( Operation *op, SlapReply *rs )
1489 char *edn = rs->sr_entry ? rs->sr_entry->e_name.bv_val : "(null)";
1494 rs->sr_type = REP_SEARCHREF;
1496 rc = slap_response_play( op, rs );
1506 if ( rs->sr_entry && ! access_allowed( op, rs->sr_entry,
1516 if ( rs->sr_entry && ! access_allowed( op, rs->sr_entry,
1535 if( rs->sr_ref == NULL ) {
1546 if( rs->sr_ref[0].bv_val != NULL ) {
1547 if( value_add( &rs->sr_v2ref, rs->sr_ref ) )
1564 LDAP_RES_SEARCH_REFERENCE, rs->sr_ref );
1567 rc = send_ldap_controls( op, ber, rs->sr_ctrls );
1582 send_ldap_error( op, rs, LDAP_OTHER, "encode DN error" );
1587 rs_flush_entry( op, rs, NULL );
1607 if ( rs->sr_ref != NULL ) {
1610 for ( r = 0; !BER_BVISNULL( &rs->sr_ref[ r ] ); r++ ) {
1612 op->o_log_prefix, r, rs->sr_ref[0].bv_val,
1625 rs_flush_entry( op, rs, NULL );
1629 (void)slap_cleanup_play( op, rs );
1632 if ( rs->sr_flags & REP_CTRLS_MUSTBEFREED ) {
1633 rs->sr_flags ^= REP_CTRLS_MUSTBEFREED; /* paranoia */
1634 if ( rs->sr_ctrls ) {
1635 slap_free_ctrls( op, rs->sr_ctrls );
1636 rs->sr_ctrls = NULL;
1734 SlapReply *rs,
1749 rs->sr_entry = e;
1750 rs->sr_attrs = ( oid == &slap_pre_read_bv ) ?
1753 bv.bv_len = entry_flatsize( rs->sr_entry, 0 );
1768 rc = slap_send_search_entry( &myop, rs );
1792 slap_map_api2result( SlapReply *rs )
1794 switch(rs->sr_err) {
1807 rs->sr_text = "Filter error";
1810 rs->sr_text = "User cancelled";
1825 rs->sr_text = "More results to return";
1831 if ( LDAP_API_ERROR(rs->sr_err) ) return LDAP_OTHER;
1832 return rs->sr_err;