]> git.sur5r.net Git - openldap/commitdiff
allow to glue local databases under dnssrv
authorPierangelo Masarati <ando@openldap.org>
Fri, 28 Jan 2005 21:38:02 +0000 (21:38 +0000)
committerPierangelo Masarati <ando@openldap.org>
Fri, 28 Jan 2005 21:38:02 +0000 (21:38 +0000)
servers/slapd/back-dnssrv/config.c
servers/slapd/back-dnssrv/referral.c
servers/slapd/overlays/glue.c

index 5ba68ff34ebb2d77273d1c7a1f5a5c4f4df9fe59..bf3370fb8119136256a31c46bd139bdbf18c67f1 100644 (file)
@@ -37,6 +37,7 @@ dnssrv_back_db_config(
     int                argc,
     char       **argv )
 {
+#if 0
        struct ldapinfo *li = (struct ldapinfo *) be->be_private;
 
        if ( li == NULL ) {
@@ -44,6 +45,7 @@ dnssrv_back_db_config(
                    fname, lineno );
                return( 1 );
        }
+#endif
 
        /* no configuration options (yet) */
        return SLAP_CONF_UNKNOWN;
index 76b3372227c2da0b17e263d2b57b795078c9347b..2a95d94a8c02658a25bd799a7025bbce2b48ea7e 100644 (file)
@@ -41,7 +41,18 @@ dnssrv_back_referrals(
        char **hosts = NULL;
        BerVarray urls = NULL;
 
-       if( op->o_req_dn.bv_len == 0 ) {
+       if ( BER_BVISEMPTY( &op->o_req_dn ) ) {
+#ifdef LDAP_DEVEL
+#if 0
+               /* FIXME: need some means to determine whether the database
+                * is a glue instance */
+               if ( SLAP_GLUE_INSTANCE( op->o_bd ) ) {
+                       return LDAP_SUCCESS;
+               }
+#endif
+               return LDAP_SUCCESS;
+#endif /* LDAP_DEVEL */
+
                rs->sr_text = "DNS SRV operation upon null (empty) DN disallowed";
                return LDAP_UNWILLING_TO_PERFORM;
        }
index c5852e8914bd1fbcde388114edfc553031f102ee..1686a905c67b4ae41b3423ab006e18dc54962121 100644 (file)
@@ -193,6 +193,28 @@ glue_op_func ( Operation *op, SlapReply *rs )
        return rc;
 }
 
+static int
+glue_chk_referrals ( Operation *op, SlapReply *rs )
+{
+       slap_overinst   *on = (slap_overinst *)op->o_bd->bd_info;
+       glueinfo                *gi = (glueinfo *)on->on_bi.bi_private;
+       BackendDB *b0 = op->o_bd;
+       BackendInfo *bi0 = op->o_bd->bd_info;
+       int rc;
+
+       op->o_bd = glue_back_select (b0, &op->o_req_ndn);
+       b0->bd_info = on->on_info->oi_orig;
+
+       if ( op->o_bd->bd_info->bi_chk_referrals )
+               rc = ( *op->o_bd->bd_info->bi_chk_referrals )( op, rs );
+       else
+               rc = SLAP_CB_CONTINUE;
+
+       op->o_bd = b0;
+       op->o_bd->bd_info = bi0;
+       return rc;
+}
+
 static int
 glue_op_search ( Operation *op, SlapReply *rs )
 {
@@ -767,6 +789,8 @@ glue_init()
        glue.on_bi.bi_op_add = glue_op_func;
        glue.on_bi.bi_op_delete = glue_op_func;
 
+       glue.on_bi.bi_chk_referrals = glue_chk_referrals;
+
        return overlay_register( &glue );
 }