]> git.sur5r.net Git - openldap/blobdiff - libraries/libldap/search.c
Add ber_bvstr and ber_bvstrdup string to berval allocators.
[openldap] / libraries / libldap / search.c
index 84228997741a983e55640fc2556a5509302f3c39..84a58f3b026fdc157cd3beabe85f7880fe7d750f 100644 (file)
@@ -1,3 +1,4 @@
+/* $OpenLDAP$ */
 /*
  * Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
@@ -97,12 +98,21 @@ ldap_search_ext(
        Debug( LDAP_DEBUG_TRACE, "ldap_search_ext\n", 0, 0, 0 );
 
        /*
-        * if timeout is provided, use only tv_sec as timelimit.
-        * otherwise, use default.
+        * if timeout is provided, both tv_sec and tv_usec must
+        * be non-zero
         */
-       timelimit = (timeout != NULL)
-                       ?  timeout->tv_sec
-                       : -1;
+       if( timeout != NULL ) {
+               if( timeout->tv_sec == 0 && timeout->tv_usec == 0 ) {
+                       return LDAP_PARAM_ERROR;
+               }
+
+               /* timelimit must be non-zero if timeout is provided */
+               timelimit = timeout->tv_sec != 0 ? timeout->tv_sec : 1;
+
+       } else {
+               /* no timeout, no timelimit */
+               timelimit = -1;
+       }
 
        ber = ldap_build_search_req( ld, base, scope, filter, attrs,
            attrsonly, sctrls, cctrls, timelimit, sizelimit ); 
@@ -156,8 +166,12 @@ ldap_search_ext_s(
                return( rc );
        }
 
-       if ( ldap_result( ld, msgid, 1, timeout, res ) == -1 )
+       rc = ldap_result( ld, msgid, 1, timeout, res );
+
+       if( rc <= 0 ) {
+               /* error(-1) or timeout(0) */
                return( ld->ld_errno );
+       }
 
        return( ldap_result2error( ld, *res, 0 ) );
 }
@@ -328,7 +342,7 @@ static int ldap_is_attr_oid ( const char *attr )
 {
        int i, c, digit=0;
 
-       for( i=0 ; c = attr[i] ; i++ ) {
+       for( i = 0; (c = attr[i]) != 0; i++ ) {
                if( c >= '0' && c <= '9' ) {
                        digit=1;
 
@@ -347,7 +361,6 @@ static int ldap_is_attr_oid ( const char *attr )
        }
 
        return digit;
-
 }
 
 static int ldap_is_attr_desc ( const char *attr )
@@ -355,7 +368,7 @@ static int ldap_is_attr_desc ( const char *attr )
        /* cheap attribute description check */
        int i, c;
 
-       for( i=0; c = attr[i]; i++ ) {
+       for( i = 0; (c = attr[i]) != 0; i++ ) {
                if (( c >= '0' && c <= '9' )
                        || ( c >= 'A' && c <= 'Z' )
                        || ( c >= 'a' && c <= 'z' )