]> git.sur5r.net Git - openldap/blobdiff - libraries/libldap/search.c
Fix ldap_send_initial_request() to open connection if not already
[openldap] / libraries / libldap / search.c
index a37e26884f6051b049ceadd7e0b575df2fa3eb5a..4aa78fb4f2cbffc4d958f4108160e422ddbec98e 100644 (file)
@@ -1,53 +1,33 @@
 /*
+ * Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
+ * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
+ */
+/*  Portions
  *  Copyright (c) 1990 Regents of the University of Michigan.
  *  All rights reserved.
  *
  *  search.c
  */
 
-#ifndef lint 
-static char copyright[] = "@(#) Copyright (c) 1990 Regents of the University of Michigan.\nAll rights reserved.\n";
-#endif
+#include "portable.h"
 
 #include <stdio.h>
-#include <string.h>
-#include <ctype.h>
 #include <stdlib.h>
 
-#ifdef MACOS
-#include "macos.h"
-#endif /* MACOS */
-
-#if defined( DOS ) || defined( _WIN32 )
-#include "msdos.h"
-#endif /* DOS */
-
-#if !defined(MACOS) && !defined(DOS) && !defined( _WIN32 )
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#endif
+#include <ac/ctype.h>
+#include <ac/socket.h>
+#include <ac/string.h>
+#include <ac/time.h>
 
-#include "lber.h"
-#include "ldap.h"
 #include "ldap-int.h"
 
-#ifdef NEEDPROTOS
-static char *find_right_paren( char *s );
-static char *put_complex_filter( BerElement *ber, char *str,
-       unsigned long tag, int not );
-static int put_filter( BerElement *ber, char *str );
-static int put_simple_filter( BerElement *ber, char *str );
-static int put_substring_filter( BerElement *ber, char *type, char *str );
-static int put_filter_list( BerElement *ber, char *str );
-#else
-static char *find_right_paren();
-static char *put_complex_filter();
-static int put_filter();
-static int put_simple_filter();
-static int put_substring_filter();
-static int put_filter_list();
-#endif /* NEEDPROTOS */
+static char *find_right_paren LDAP_P(( char *s ));
+static char *put_complex_filter LDAP_P(( BerElement *ber, char *str,
+       unsigned long tag, int not ));
+static int put_filter LDAP_P(( BerElement *ber, char *str ));
+static int put_simple_filter LDAP_P(( BerElement *ber, char *str ));
+static int put_substring_filter LDAP_P(( BerElement *ber, char *type, char *str ));
+static int put_filter_list LDAP_P(( BerElement *ber, char *str ));
 
 /*
  * ldap_search - initiate an ldap (and X.500) search operation.  Parameters:
@@ -79,7 +59,7 @@ ldap_search( LDAP *ld, char *base, int scope, char *filter,
                return( -1 );
        }
 
-#ifndef NO_CACHE
+#ifndef LDAP_NOCACHE
        if ( ld->ld_cache != NULL ) {
                if ( ldap_check_cache( ld, LDAP_REQ_SEARCH, ber ) == 0 ) {
                        ber_free( ber, 1 );
@@ -88,7 +68,7 @@ ldap_search( LDAP *ld, char *base, int scope, char *filter,
                }
                ldap_add_request_to_cache( ld, LDAP_REQ_SEARCH, ber );
        }
-#endif /* NO_CACHE */
+#endif /* LDAP_NOCACHE */
 
        /* send the message */
        return ( ldap_send_initial_request( ld, LDAP_REQ_SEARCH, base, ber ));
@@ -132,22 +112,28 @@ ldap_build_search_req( LDAP *ld, char *base, int scope, char *filter,
        }
 
        if ( base == NULL ) {
+               /* no base provided, use session default base */
+               base = ld->ld_options.ldo_defbase;
+       }
+
+       if ( base == NULL ) {
+               /* no session default base, use top */
            base = "";
        }
 
-#ifdef CLDAP
+#ifdef LDAP_CONNECTIONLESS
        if ( ld->ld_sb.sb_naddr > 0 ) {
            err = ber_printf( ber, "{ist{seeiib", ++ld->ld_msgid,
                ld->ld_cldapdn, LDAP_REQ_SEARCH, base, scope, ld->ld_deref,
                ld->ld_sizelimit, ld->ld_timelimit, attrsonly );
        } else {
-#endif /* CLDAP */
+#endif /* LDAP_CONNECTIONLESS */
                err = ber_printf( ber, "{it{seeiib", ++ld->ld_msgid,
                    LDAP_REQ_SEARCH, base, scope, ld->ld_deref,
                    ld->ld_sizelimit, ld->ld_timelimit, attrsonly );
-#ifdef CLDAP
+#ifdef LDAP_CONNECTIONLESS
        }
-#endif /* CLDAP */
+#endif /* LDAP_CONNECTIONLESS */
 
        if ( err == -1 ) {
                ld->ld_errno = LDAP_ENCODING_ERROR;