]> git.sur5r.net Git - openldap/commitdiff
Add sendreference callback
authorLuke Howard <lukeh@openldap.org>
Sat, 1 Feb 2003 07:04:13 +0000 (07:04 +0000)
committerLuke Howard <lukeh@openldap.org>
Sat, 1 Feb 2003 07:04:13 +0000 (07:04 +0000)
servers/slapd/backglue.c
servers/slapd/proto-slap.h
servers/slapd/result.c
servers/slapd/saslauthz.c
servers/slapd/slap.h

index 591cff21a9dbfd4adb581ed8e9ecf0cdce547be4..69c102d231c8a2776d59fe7eb925bfa44b26a631 100644 (file)
@@ -275,6 +275,31 @@ glue_back_sendentry (
        return rc;
 }
 
+static int
+glue_back_sendreference (
+       BackendDB *be,
+       Connection *c,
+       Operation *op,
+       Entry *e,
+       BerVarray bv,
+       LDAPControl **ctrls,
+       BerVarray *v2
+)
+{
+       slap_callback *tmp = op->o_callback;
+       glue_state *gs = tmp->sc_private;
+       int rc;
+
+       op->o_callback = gs->prevcb;
+       if (op->o_callback && op->o_callback->sc_sendreference) {
+               rc = op->o_callback->sc_sendreference( be, c, op, e, bv, ctrls, v2 );
+       } else {
+               rc = send_search_reference( be, c, op, e, bv, ctrls, v2 );
+       }
+       op->o_callback = tmp;
+       return rc;
+}
+
 static int
 glue_back_search (
        BackendDB *b0,
index 51f1c1eb8617c56e122bbe7e94bcd84a125a2d5a..de11528d19406a89b6931559bbfe618efa171c53 100644 (file)
@@ -918,6 +918,7 @@ LDAP_SLAPD_F (int) slap_sasl_regexp_config LDAP_P((
 LDAP_SLAPD_F (int) slap_sasl_setpolicy LDAP_P(( const char * ));
 LDAP_SLAPD_F (slap_response) slap_cb_null_response;
 LDAP_SLAPD_F (slap_sresult) slap_cb_null_sresult;
+LDAP_SLAPD_F (slap_sendreference) slap_cb_null_sreference;
 
 
 /*
index 1d87d215067144083887ba7c21ac932005ef1c66..fcae73adf050c51f35d01e87643a6458f16ff932 100644 (file)
@@ -1299,6 +1299,10 @@ slap_send_search_reference(
        AttributeDescription *ad_ref = slap_schema.si_ad_ref;
        AttributeDescription *ad_entry = slap_schema.si_ad_entry;
 
+       if (op->o_callback && op->o_callback->sc_sendreference) {
+               return op->o_callback->sc_sendreference( be, conn, op, e, refs, ctrls, v2refs );
+       }
+
 #ifdef NEW_LOGGING
        LDAP_LOG( OPERATION, ENTRY, 
                "send_search_reference: conn %lu  dn=\"%s\"\n", 
index 23c5532b34e924bda53f794c9e5e3fcea9e37ec0..9980b79ab5cbc094b69fe380e2e2180d09450c8f 100644 (file)
@@ -341,6 +341,12 @@ void slap_cb_null_sresult( Connection *conn, Operation *o, ber_int_t err,
 {
 }
 
+int slap_cb_null_sreference( BackendDB *db, Connection *conn, Operation *o, 
+       Entry *e, BerVarray r, LDAPControl **c, BerVarray *v2)
+{
+       return 0;
+}
+
 /* This callback actually does some work...*/
 static int sasl_sc_sasl2dn( BackendDB *be, Connection *conn, Operation *o,
        Entry *e, AttributeName *an, int ao, LDAPControl **c)
@@ -564,7 +570,7 @@ void slap_sasl2dn( Connection *conn,
        int scope = LDAP_SCOPE_BASE;
        Filter *filter = NULL;
        slap_callback cb = { slap_cb_null_response,
-               slap_cb_null_sresult, sasl_sc_sasl2dn, NULL};
+               slap_cb_null_sresult, sasl_sc_sasl2dn, slap_cb_null_sreference, NULL};
        Operation op = {0};
        struct berval regout = { 0, NULL };
 
index 791f91f02f1cdf53b9c38b5bcf6a30892690b764..a0a1b920d6dc434df82f8f0d9ef55902c9f8a08e 100644 (file)
@@ -1593,10 +1593,14 @@ typedef void (slap_sresult)( struct slap_conn *, struct slap_op *,
 typedef int (slap_sendentry)( BackendDB *, struct slap_conn *,
        struct slap_op *, Entry *, AttributeName *, int, LDAPControl **);
 
+typedef int (slap_sendreference)( BackendDB *, struct slap_conn *,
+       struct slap_op *, Entry *, BerVarray, LDAPControl **, BerVarray * );
+
 typedef struct slap_callback {
        slap_response *sc_response;
        slap_sresult *sc_sresult;
        slap_sendentry *sc_sendentry;
+       slap_sendreference *sc_sendreference;
        void *sc_private;
 } slap_callback;
 
@@ -1880,11 +1884,11 @@ typedef struct slap_conn {
 
        void    *c_pb;                  /* Netscape plugin */
 
-    /*
+       /*
         * These are the "callbacks" that are available for back-ends to
         * supply data back to connected clients that are connected
         * through the "front-end".
-       */
+        */
        SEND_LDAP_RESULT c_send_ldap_result;
        SEND_SEARCH_ENTRY c_send_search_entry;
        SEND_SEARCH_RESULT c_send_search_result;