]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/result.c
Per ITS#419, don't require SLAPD_RLOOKUPS when HAVE_TCPD
[openldap] / servers / slapd / result.c
index 3c142748d48182421ee4c4fb5f07a05b2e3b4c04..cd7c59e59807c5af68ff6a8a84de0e0139a776d2 100644 (file)
@@ -49,7 +49,9 @@ static char *v2ref( struct berval **ref, const char *text )
                v2 = ch_realloc( v2, len + ref[i]->bv_len + 1 );
                v2[len-1] = '\n';
                memcpy(&v2[len], ref[i]->bv_val, ref[i]->bv_len );
-               len += ref[i]->bv_len + 1;
+               len += ref[i]->bv_len;
+               if (ref[i]->bv_val[ref[i]->bv_len-1] != '/')
+                       ++len;
        }
 
        v2[len-1] = '\0';
@@ -241,7 +243,8 @@ send_ldap_response(
     const char *text,
        struct berval   **ref,
        const char      *resoid,
-       struct berval   *data,
+       struct berval   *resdata,
+       struct berval   *sasldata,
        LDAPControl **ctrls
 )
 {
@@ -277,12 +280,19 @@ send_ldap_response(
                        rc = ber_printf( ber, "{V}", ref );
                }
 
+               if( rc != -1 && sasldata != NULL ) {
+                       rc = ber_printf( ber, "tO",
+                               LDAP_TAG_SASL_RES_CREDS, sasldata );
+               }
+
                if( rc != -1 && resoid != NULL ) {
-                       rc = ber_printf( ber, "s", resoid );
+                       rc = ber_printf( ber, "ts",
+                               LDAP_TAG_EXOP_RES_OID, resoid );
                }
 
-               if( rc != -1 && data != NULL ) {
-                       rc = ber_printf( ber, "O", data );
+               if( rc != -1 && resdata != NULL ) {
+                       rc = ber_printf( ber, "tO",
+                               LDAP_TAG_EXOP_RES_VALUE, resdata );
                }
 
                if( rc != -1 ) {
@@ -359,9 +369,10 @@ send_ldap_disconnect(
                    0 );
        }
 #endif
+
        send_ldap_response( conn, op, tag, msgid,
                err, NULL, text, NULL,
-               reqoid, NULL, NULL );
+               reqoid, NULL, NULL, NULL );
 
        Statslog( LDAP_DEBUG_STATS,
            "conn=%ld op=%ld DISCONNECT err=%ld tag=%lu text=%s\n",
@@ -427,7 +438,7 @@ send_ldap_result(
 
        send_ldap_response( conn, op, tag, msgid,
                err, matched, text, ref,
-               NULL, NULL, ctrls );
+               NULL, NULL, NULL, ctrls );
 
        Statslog( LDAP_DEBUG_STATS,
            "conn=%ld op=%ld RESULT tag=%lu err=%ld text=%s\n",
@@ -446,6 +457,8 @@ send_ldap_sasl(
     ber_int_t  err,
     const char *matched,
     const char *text,
+       struct berval **ref,
+       LDAPControl **ctrls,
        struct berval *cred
 )
 {
@@ -470,8 +483,8 @@ send_ldap_sasl(
 #endif
 
        send_ldap_response( conn, op, tag, msgid,
-               err, matched, text, NULL,
-               NULL, cred, NULL );
+               err, matched, text, ref,
+               NULL, NULL, cred, ctrls  );
 }
 
 void
@@ -481,16 +494,20 @@ send_ldap_extended(
     ber_int_t  err,
     const char *matched,
     const char *text,
+    struct berval **refs,
     char               *rspoid,
-       struct berval *rspdata
+       struct berval *rspdata,
+       LDAPControl **ctrls
 )
 {
        ber_tag_t tag;
        ber_int_t msgid;
 
        Debug( LDAP_DEBUG_TRACE,
-               "send_ldap_extended %ld:%s\n",
-               (long) err, rspoid ? rspoid : "", NULL );
+               "send_ldap_extended %ld:%s (%ld)\n",
+               (long) err,
+               rspoid ? rspoid : "",
+               rspdata != NULL ? (long) rspdata->bv_len : (long) 0 );
 
        tag = req2res( op->o_tag );
        msgid = (tag != LBER_SEQUENCE) ? op->o_msgid : 0;
@@ -505,9 +522,10 @@ send_ldap_extended(
                    0 );
        }
 #endif
+
        send_ldap_response( conn, op, tag, msgid,
-               err, matched, text, NULL,
-               rspoid, rspdata, NULL );
+               err, matched, text, refs,
+               rspoid, rspdata, NULL, ctrls );
 }
 
 
@@ -570,7 +588,7 @@ send_search_result(
 
        send_ldap_response( conn, op, tag, msgid,
                err, matched, text, refs,
-               NULL, NULL, ctrls );
+               NULL, NULL, NULL, ctrls );
 
        Statslog( LDAP_DEBUG_STATS,
            "conn=%ld op=%ld SEARCH RESULT tag=%lu err=%ld text=%s\n",
@@ -867,7 +885,7 @@ send_search_reference(
 
        if( op->o_protocol < LDAP_VERSION3 ) {
                /* save the references for the result */
-               if( *refs == NULL ) {
+               if( *refs != NULL ) {
                        value_add( v2refs, refs );
                }
                return 0;