]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-dnssrv/search.c
notices
[openldap] / servers / slapd / back-dnssrv / search.c
index aa6123a9948ffdbd02720cfbc2821877187ef15a..f0077d5bd0c5777bfda958b2434791e975cbe2fa 100644 (file)
@@ -1,10 +1,23 @@
 /* search.c - DNS SRV backend search function */
 /* $OpenLDAP$ */
-/*
- * Copyright 2000-2003 The OpenLDAP Foundation, All Rights Reserved.
- * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
+/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
+ *
+ * Copyright 2000-2003 The OpenLDAP Foundation.
+ * Portions Copyright 2000-2003 Kurt D. Zeilenga.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted only as authorized by the OpenLDAP
+ * Public License.
+ *
+ * A copy of this license is available in the file LICENSE in the
+ * top-level directory of the distribution or, alternatively, at
+ * <http://www.OpenLDAP.org/license.html>.
+ */
+/* ACKNOWLEDGEMENTS:
+ * This work was originally developed by Kurt D. Zeilenga for inclusion
+ * in OpenLDAP Software.
  */
-
 
 #include "portable.h"
 
@@ -30,13 +43,25 @@ dnssrv_back_search(
        char *refdn;
        struct berval nrefdn = { 0, NULL };
        BerVarray urls = NULL;
+       int manageDSAit;
+
+       rs->sr_ref = NULL;
 
-       assert( get_manageDSAit( op ) );
+       manageDSAit = get_manageDSAit( op );
+       /*
+        * FIXME: we may return a referral if manageDSAit is not set
+        */
+       if ( ! manageDSAit ) {
+               send_ldap_error( op, rs, LDAP_UNWILLING_TO_PERFORM,
+                               "manageDSAit must be set" );
+               goto done;
+       }
 
        if( ldap_dn2domain( op->o_req_dn.bv_val, &domain ) || domain == NULL ) {
                rs->sr_err = LDAP_REFERRAL;
                rs->sr_ref = default_referral;
                send_ldap_result( op, rs );
+               rs->sr_ref = NULL;
                goto done;
        }
 
@@ -100,7 +125,7 @@ dnssrv_back_search(
                bv.bv_val = refdn;
                bv.bv_len = strlen( refdn );
 
-               rc = dnNormalize2( NULL, &bv, &nrefdn );
+               rc = dnNormalize( 0, NULL, NULL, &bv, &nrefdn, op->o_tmpmemctx );
                if( rc != LDAP_SUCCESS ) {
                        send_ldap_error( op, rs, LDAP_OTHER,
                                "DNS SRV problem processing manageDSAit control" );
@@ -120,6 +145,7 @@ dnssrv_back_search(
                rs->sr_matched = refdn;
                rs->sr_err = LDAP_NO_SUCH_OBJECT;
                send_ldap_result( op, rs );
+               rs->sr_matched = NULL;
 
        } else if ( op->oq_search.rs_scope == LDAP_SCOPE_ONELEVEL ) {
                send_ldap_error( op, rs, LDAP_SUCCESS, NULL );
@@ -196,6 +222,8 @@ dnssrv_back_search(
                        rs->sr_entry = e;
                        rs->sr_attrs = op->oq_search.rs_attrs;
                        send_search_entry( op, rs );
+                       rs->sr_entry = NULL;
+                       rs->sr_attrs = NULL;
                }
 
                entry_free( e );
@@ -214,3 +242,4 @@ done:
        if( urls != NULL ) ber_bvarray_free( urls );
        return 0;
 }
+