]> git.sur5r.net Git - openldap/blobdiff - libraries/libldap/abandon.c
moved rdn parsing in a dedicated routine, ldap_str2rdn(), that can be used directly...
[openldap] / libraries / libldap / abandon.c
index fbb184722a5357553da576b82ea5873972c6a6ca..80dadc325b23fe3f219ef0b649875b3e42ceb147 100644 (file)
@@ -56,8 +56,13 @@ ldap_abandon_ext(
        LDAPControl **sctrls,
        LDAPControl **cctrls )
 {
+       int rc;
        Debug( LDAP_DEBUG_TRACE, "ldap_abandon_ext %d\n", msgid, 0, 0 );
 
+       /* check client controls */
+       rc = ldap_int_client_controls( ld, cctrls );
+       if( rc != LDAP_SUCCESS ) return rc;
+
        return do_abandon( ld, msgid, msgid, sctrls, cctrls );
 }
 
@@ -77,7 +82,7 @@ int
 ldap_abandon( LDAP *ld, int msgid )
 {
        Debug( LDAP_DEBUG_TRACE, "ldap_abandon %d\n", msgid, 0, 0 );
-       return do_abandon( ld, msgid, msgid, NULL, NULL ) == LDAP_SUCCESS
+       return ldap_abandon_ext( ld, msgid, NULL, NULL ) == LDAP_SUCCESS
                ? 0 : -1;
 }
 
@@ -142,10 +147,26 @@ do_abandon(
                        ld->ld_errno = LDAP_NO_MEMORY;
 
                } else {
-                       /* create a message to send */
-                       err = ber_printf( ber, "{iti",  /* '}' */
+#ifdef LDAP_CONNECTIONLESS
+                       if ( LDAP_IS_UDP(ld) ) {
+                           err = ber_write( ber, ld->ld_options.ldo_peer,
+                               sizeof(struct sockaddr), 0);
+                       }
+                       if ( LDAP_IS_UDP(ld) && ld->ld_options.ldo_version ==
+                               LDAP_VERSION2) {
+                           char *dn = ld->ld_options.ldo_cldapdn;
+                           if (!dn) dn = "";
+                           err = ber_printf( ber, "{isti",  /* '}' */
+                               ++ld->ld_msgid, dn,
+                               LDAP_REQ_ABANDON, msgid );
+                       } else
+#endif
+                       {
+                           /* create a message to send */
+                           err = ber_printf( ber, "{iti",  /* '}' */
                                ++ld->ld_msgid,
-                           LDAP_REQ_ABANDON, msgid );
+                               LDAP_REQ_ABANDON, msgid );
+                       }
 
                        if( err == -1 ) {
                                /* encoding error */