]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/result.c
Fixed last commit. gcc was complaining about defined behavior.
[openldap] / servers / slapd / result.c
index 27a9db887b09bc598c38c0a0e3476e0e1b0ea854..1e8d40622382ff2b8eb75f39e1a74b7039bd5725 100644 (file)
@@ -570,7 +570,8 @@ send_ldap_response(
        int             rc = LDAP_SUCCESS;
        long    bytes;
 
-       if (( rs->sr_err == SLAPD_ABANDON || op->o_abandon ) && !op->o_cancel ) {
+       /* op was actually aborted, bypass everything if client didn't Cancel */
+       if (( rs->sr_err == SLAPD_ABANDON ) && !op->o_cancel ) {
                rc = SLAPD_ABANDON;
                goto clean2;
        }
@@ -582,6 +583,12 @@ send_ldap_response(
                }
        }
 
+       /* op completed, connection aborted, bypass sending response */
+       if ( op->o_abandon && !op->o_cancel ) {
+               rc = SLAPD_ABANDON;
+               goto clean2;
+       }
+
 #ifdef LDAP_CONNECTIONLESS
        if (op->o_conn && op->o_conn->c_is_udp)
                ber = op->o_res_ber;
@@ -1687,15 +1694,16 @@ str2result(
                                continue;
                        }
 
-                       while ( isspace( (unsigned char) next[ 0 ] ) ) next++;
-                       if ( next[ 0 ] != '\0' ) {
+                       while ( isspace( (unsigned char) next[ 0 ] ) && next[ 0 ] != '\n' )
+                               next++;
+                       if ( next[ 0 ] != '\0' && next[ 0 ] != '\n' ) {
                                Debug( LDAP_DEBUG_ANY, "str2result (%s) extra cruft after value\n",
                                    s, 0, 0 );
                                rc = -1;
                                continue;
                        }
 
-                       /* FIXME: what if it's larger that max int? */
+                       /* FIXME: what if it's larger than max int? */
                        *code = (int)retcode;
 
                } else if ( strncasecmp( s, "matched", STRLENOF( "matched" ) ) == 0 ) {