]> git.sur5r.net Git - openldap/commitdiff
Patch: Non-unique msgid for abandon in back-<shell,tcl> (ITS#1793)
authorKurt Zeilenga <kurt@openldap.org>
Thu, 9 May 2002 02:11:39 +0000 (02:11 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Thu, 9 May 2002 02:11:39 +0000 (02:11 +0000)
================
Written by Hallvard B. Furuseth and placed into the public domain.
This software is not subject to any license of the University of Oslo.
================

Here is a patch which does what I described.  Of course, someone has
to decide if that is the right solution:-)
- Add an "opid:" line to the input to back-shell commands.
- Add an "abandonid: <opid> line to back-shell/abandon input.
- Replace message id with opid in back-tcl arguments.
- Add an abandonid = <opid> argument to back-tcl/abandon.
An opid (operation ID) is a "connection ID/message ID" string.  I
would have liked to use another name to avoid confusion with struct
slap_op->o_opid, but I could not think of another apt word.

This also fixes ITS#1784 and ITS#1792.  Since calling conventions
changed anyway, I fixed back-shell by adding abandonid: and making
opid: always be the ID of the current operation.

Hallvard B. Furuseth <h.b.furuseth@usit.uio.no>, May 2002.

20 files changed:
doc/man/man5/slapd-shell.5
doc/man/man5/slapd-tcl.5
servers/slapd/back-shell/abandon.c
servers/slapd/back-shell/add.c
servers/slapd/back-shell/bind.c
servers/slapd/back-shell/compare.c
servers/slapd/back-shell/delete.c
servers/slapd/back-shell/modify.c
servers/slapd/back-shell/modrdn.c
servers/slapd/back-shell/search.c
servers/slapd/back-shell/unbind.c
servers/slapd/back-tcl/tcl_abandon.c
servers/slapd/back-tcl/tcl_add.c
servers/slapd/back-tcl/tcl_bind.c
servers/slapd/back-tcl/tcl_compare.c
servers/slapd/back-tcl/tcl_delete.c
servers/slapd/back-tcl/tcl_modify.c
servers/slapd/back-tcl/tcl_modrdn.c
servers/slapd/back-tcl/tcl_search.c
servers/slapd/back-tcl/tcl_unbind.c

index 737f27736565c042be316c8a40cfcea1591d1045..0beee6d65781911b3c1ea7457c2c91e5e9d55250 100644 (file)
@@ -13,6 +13,12 @@ executes external programs to implement operations, and is designed to
 make it easy to tie an existing database to the
 .B slapd
 front-end.
+.SH WARNING
+.B "This backend's calling conventions have changed since OpenLDAP 2.0."
+The operations receive a new "opid:" (operation ID) line, to be used
+instead of "msgid:".
+The "msgid:" line will be removed in a future version.
+Also, abandon now gets a new "abandonid:" line.
 .SH CONFIGURATION
 These
 .B slapd.conf
@@ -30,14 +36,17 @@ Each option is followed by the input lines that the program receives:
 .B abandon  <pathname> <argument>...
 .nf
 ABANDON
-msgid: <message id>
+opid: <operation ID>
+msgid: <message ID of operation to abandon>
 <repeat { "suffix:" <database suffix DN> }>
+abandonid: <operation ID of operation to abandon>
 .fi
 .TP
 .B add      <pathname> <argument>...
 .nf
 ADD
-msgid: <message id>
+opid: <operation ID>
+msgid: <message ID>
 <repeat { "suffix:" <database suffix DN> }>
 <entry in LDIF format>
 .fi
@@ -45,7 +54,8 @@ msgid: <message id>
 .B bind     <pathname> <argument>...
 .nf
 BIND
-msgid: <message id>
+opid: <operation ID>
+msgid: <message ID>
 <repeat { "suffix:" <database suffix DN> }>
 dn: <DN>
 method: <method number>
@@ -56,7 +66,8 @@ cred: <credentials>
 .B compare  <pathname> <argument>...
 .nf
 COMPARE
-msgid: <message id>
+opid: <operation ID>
+msgid: <message ID>
 <repeat { "suffix:" <database suffix DN> }>
 dn: <DN>
 <attribute>: <value>
@@ -65,7 +76,8 @@ dn: <DN>
 .B delete   <pathname> <argument>...
 .nf
 DELETE
-msgid: <message id>
+opid: <operation ID>
+msgid: <message ID>
 <repeat { "suffix:" <database suffix DN> }>
 dn: <DN>
 .fi
@@ -73,7 +85,8 @@ dn: <DN>
 .B modify   <pathname> <argument>...
 .nf
 MODIFY
-msgid: <message id>
+opid: <operation ID>
+msgid: <message ID>
 <repeat { "suffix:" <database suffix DN> }>
 dn: <DN>
 <repeat {
@@ -86,7 +99,8 @@ dn: <DN>
 .B modrdn   <pathname> <argument>...
 .nf
 MODRDN
-msgid: <message id>
+opid: <operation ID>
+msgid: <message ID>
 <repeat { "suffix:" <database suffix DN> }>
 dn: <DN>
 newrdn: <new RDN>
@@ -97,7 +111,8 @@ deleteoldrdn: <0 or 1>
 .B search   <pathname> <argument>...
 .nf
 SEARCH
-msgid: <message id>
+opid: <operation ID>
+msgid: <message ID>
 <repeat { "suffix:" <database suffix DN> }>
 base: <base DN>
 scope: <0-2, see ldap.h>
@@ -112,11 +127,16 @@ attrs: <"all" or space-separated attribute list>
 .B unbind   <pathname> <argument>...
 .nf
 UNBIND
-msgid: <message id>
+opid: <operation ID>
+msgid: <message ID>
 <repeat { "suffix:" <database suffix DN> }>
 dn: <bound DN>
 .fi
 .LP
+An
+.I operation ID
+is a "connection ID/message ID" string identifying an operation.
+.LP
 Note that you need only supply configuration lines for those commands you
 want the backend to handle.
 Operations for which a command is not supplied will be refused with an
index bf45a49d3549d292750ab7cc938fde49574f64f4..9a95c9e70b72ac26ca9c4104dac7f74d9e967ce9 100644 (file)
@@ -14,6 +14,13 @@ interpreter into
 Any tcl database section of the configuration file
 .BR slapd.conf (5)
 must then specify what Tcl script to use.
+.SH WARNING
+.B "This backend's calling conventions have changed since OpenLDAP 2.0."
+Previously, the 2nd argument to the procs was a message ID.
+Now they are an "operation ID" string.
+Also, proc abandon now gets a new
+.B abandonid
+argument.
 .SH CONFIGURATION
 These
 .B slapd.conf
@@ -57,28 +64,29 @@ So global variables, as well as all the procs, are callable between databases.
 If no tclrealm is specified, it is put into the "default" realm.
 .SH Variables passed to the procs
 .TP
-.B abandon { action msgid suffix }
+.B abandon { action opid suffix abandonid }
 .nf
-action - Always equal to ABANDON.
-msgid  - The msgid of this ldap operation.
-suffix - List of suffix(es) associated with the
-         call.  Each one is an entry in a tcl
-         formatted list (surrounded by {}'s).
+action    - Always equal to ABANDON.
+opid      - The opid of this ldap operation.
+suffix    - List of suffix(es) associated with the
+            call.  Each one is an entry in a tcl
+            formatted list (surrounded by {}'s).
+abandonid - The opid of the operation to abandon.
 .fi
 .TP
-.B add "{ action msgid suffix entry }"
+.B add "{ action opid suffix entry }"
 .nf
 action - Always equal to ADD.
-msgid  - The msgid of this ldap operation.
+opid   - The opid of this ldap operation.
 suffix - List of suffix(es), as above.
 entry  - Full entry to add. Each "type: val" is
          an element in a tcl formatted list.
 .fi
 .TP
-.B bind "{ action msgid suffix dn method cred_len cred }"
+.B bind "{ action opid suffix dn method cred_len cred }"
 .nf
 action   - Always equal to BIND.
-msgid    - The msgid of this ldap operation.
+opid     - The opid of this ldap operation.
 suffix   - List of suffix(es), as above.
 dn       - DN being bound to.
 method   - One of the ldap authentication methods.
@@ -89,28 +97,28 @@ cred     - Credentials being used to authenticate,
            bind (??)
 .fi
 .TP
-.B compare "{ action msgid suffix dn ava_type ava_value }"
+.B compare "{ action opid suffix dn ava_type ava_value }"
 .nf
 action    - Always equal to COMPARE.
-msgid     - The msgid of this ldap operation.
+opid      - The opid of this ldap operation.
 suffix    - List of suffix(es), as above.
 dn        - DN for compare.
 ava_type  - Type for comparison.
 ava_value - Value to compare.
 .fi
 .TP
-.B delete "{ action msgid suffix dn }"
+.B delete "{ action opid suffix dn }"
 .nf
 action    - Always equal to DELETE.
-msgid     - The msgid of this ldap operation.
+opid      - The opid of this ldap operation.
 suffix    - List of suffix(es), as above.
 dn        - DN to delete.
 .fi
 .TP
-.B modify "{ action msgid suffix dn mods }"
+.B modify "{ action opid suffix dn mods }"
 .nf
 action - Always equal to MODIFY.
-msgid  - The msgid of this ldap operation.
+opid   - The opid of this ldap operation.
 suffix - List of suffix(es), as above.
 dn     - DN to modify.
 mods   - Tcl list of modifications.
@@ -128,10 +136,10 @@ mods   - Tcl list of modifications.
          (ADD, DELETE, REPLACE).
 .fi
 .TP
-.B modrdn "{ action msgid suffix dn newrdn deleteoldrdn }"
+.B modrdn "{ action opid suffix dn newrdn deleteoldrdn }"
 .nf
 action - Always equal to MODRDN.
-msgid  - The msgid of this ldap operation.
+opid   - The opid of this ldap operation.
 suffix - List of suffix(es), as above.
 dn     - DN whose RDN is being renamed.
 newrdn - New RDN.
@@ -140,11 +148,11 @@ deleteoldrdn - Boolean stating whether or not the
 .fi
 .TP
 .B
-search { action msgid suffix base scope deref \
+search { action opid suffix base scope deref \
 sizelimit timelimit filterstr attrsonly attrlist }
 .nf
 action    - Always equal to SEARCH.
-msgid     - The msgid of this ldap operation.
+opid      - The opid of this ldap operation.
 suffix    - List of suffix(es), as above.
 base      - Base for this search.
 scope     - Scope of search, ( 0 | 1 | 2 ).
@@ -157,14 +165,19 @@ attrsonly - Boolean for whether to list only the
 attrlist  - Tcl list if to retrieve.
 .fi
 .TP
-.B unbind "{ action msgid suffix dn }"
+.B unbind "{ action opid suffix dn }"
 .nf
 action - Always equal to UNBIND.
-msgid  - The msgid of this ldap operation.
+opid   - The opid of this ldap operation.
 suffix - List of suffix(es), as above.
 dn     - DN to unbind.
 .fi
 .LP
+An
+.I opid
+(operation ID) is a "connection ID/message ID" string identifying an
+operation.
+.LP
 .SH Return Method and Syntax
 There are only 2 return types.
 All procs must return a result to show status of the operation.
index 2eccb51f1272b79ef84b50a079454cff120c95e9..1f5f3f092a0114e3374014be55c6d238e8309f2b 100644 (file)
@@ -65,8 +65,10 @@ shell_back_abandon(
 
        /* write out the request to the abandon process */
        fprintf( wfp, "ABANDON\n" );
+       fprintf( wfp, "opid: %ld/%ld\n", op->o_connid, (long) op->o_msgid );
        fprintf( wfp, "msgid: %d\n", msgid );
        print_suffixes( wfp, be );
+       fprintf( wfp, "abandonid: %ld/%d\n", op->o_connid, msgid );
        fclose( wfp );
 
        /* no result from abandon */
index 8a48579113c76947b71523025867297bc9738c63..528d3993e5a799e4e6b5ad5b99abfd50e163805c 100644 (file)
@@ -41,6 +41,7 @@ shell_back_add(
 
        /* write out the request to the add process */
        fprintf( wfp, "ADD\n" );
+       fprintf( wfp, "opid: %ld/%ld\n", op->o_connid, (long) op->o_msgid );
        fprintf( wfp, "msgid: %ld\n", (long) op->o_msgid );
        print_suffixes( wfp, be );
        ldap_pvt_thread_mutex_lock( &entry2str_mutex );
index c4d6d485ed23e0b33f75b3819b349622c6b59921..024c41f6635af6a60590e482283fbf969d1ab377 100644 (file)
@@ -46,6 +46,7 @@ shell_back_bind(
 
        /* write out the request to the bind process */
        fprintf( wfp, "BIND\n" );
+       fprintf( wfp, "opid: %ld/%ld\n", op->o_connid, (long) op->o_msgid );
        fprintf( wfp, "msgid: %ld\n", (long) op->o_msgid );
        print_suffixes( wfp, be );
        fprintf( wfp, "dn: %s\n", dn->bv_val );
index 7d754b843efa41f4c5228a948f24f9d98c6fc46e..9ef16c5bc31e9f38ae296f12839b674f45d5ee11 100644 (file)
@@ -48,6 +48,7 @@ shell_back_compare(
 
        /* write out the request to the compare process */
        fprintf( wfp, "COMPARE\n" );
+       fprintf( wfp, "opid: %ld/%ld\n", op->o_connid, (long) op->o_msgid );
        fprintf( wfp, "msgid: %ld\n", (long) op->o_msgid );
        print_suffixes( wfp, be );
        fprintf( wfp, "dn: %s\n", dn->bv_val );
index 6e22a1a2b7d2f7901b6bf69f41df7bb3bf99d96a..5902dbeb138f73c15e538e2811754f852bd6c69c 100644 (file)
@@ -42,6 +42,7 @@ shell_back_delete(
 
        /* write out the request to the delete process */
        fprintf( wfp, "DELETE\n" );
+       fprintf( wfp, "opid: %ld/%ld\n", op->o_connid, (long) op->o_msgid );
        fprintf( wfp, "msgid: %ld\n", (long) op->o_msgid );
        print_suffixes( wfp, be );
        fprintf( wfp, "dn: %s\n", dn->bv_val );
index 048ab84fe5009d3ee9dfaa8cb495eba7b48fd46b..91d7149eca03354dda942276c916ae4df77407e8 100644 (file)
@@ -45,6 +45,7 @@ shell_back_modify(
 
        /* write out the request to the modify process */
        fprintf( wfp, "MODIFY\n" );
+       fprintf( wfp, "opid: %ld/%ld\n", op->o_connid, (long) op->o_msgid );
        fprintf( wfp, "msgid: %ld\n", (long) op->o_msgid );
        print_suffixes( wfp, be );
        fprintf( wfp, "dn: %s\n", dn->bv_val );
index 1df474f99fad73d2b121ca58fe0044faa3e27ea0..00dd8a9d6c844ffd5bdb3b93f205fcbc85986684 100644 (file)
@@ -60,6 +60,7 @@ shell_back_modrdn(
 
        /* write out the request to the modrdn process */
        fprintf( wfp, "MODRDN\n" );
+       fprintf( wfp, "opid: %ld/%ld\n", op->o_connid, (long) op->o_msgid );
        fprintf( wfp, "msgid: %ld\n", (long) op->o_msgid );
        print_suffixes( wfp, be );
        fprintf( wfp, "dn: %s\n", dn->bv_val );
index 0c998830718bd69259ee7b6c868bec47440697a9..6d574524ad07d9833ea0c5405dc5e9fbab246ee8 100644 (file)
@@ -52,6 +52,7 @@ shell_back_search(
 
        /* write out the request to the search process */
        fprintf( wfp, "SEARCH\n" );
+       fprintf( wfp, "opid: %ld/%ld\n", op->o_connid, (long) op->o_msgid );
        fprintf( wfp, "msgid: %ld\n", (long) op->o_msgid );
        print_suffixes( wfp, be );
        fprintf( wfp, "base: %s\n", base->bv_val );
index d5d936106e6a865b083709476c271dd7545e8e6e..b7c44c1577b19d37fe47e4d46fac75560ac6b443 100644 (file)
@@ -36,6 +36,7 @@ shell_back_unbind(
 
        /* write out the request to the unbind process */
        fprintf( wfp, "UNBIND\n" );
+       fprintf( wfp, "opid: %ld/%ld\n", op->o_connid, (long) op->o_msgid );
        fprintf( wfp, "msgid: %ld\n", (long) op->o_msgid );
        print_suffixes( wfp, be );
        fprintf( wfp, "dn: %s\n", (conn->c_dn.bv_len ? conn->c_dn.bv_val : "") );
index c416a2b3e09f31e014d8e897fbd9f6547bf9266e..f4d71c657707316eda4c2c4f50352b950e2fc49c 100644 (file)
@@ -38,9 +38,10 @@ tcl_back_abandon (
        }
 
        command = (char *) ch_malloc (ti->ti_abandon.bv_len + suf_tcl.bv_len
-               + 20);
-       sprintf (command, "%s ABANDON {%ld} {%s}",
-               ti->ti_abandon.bv_val, (long) op->o_msgid, suf_tcl.bv_val);
+               + 80);
+       sprintf (command, "%s ABANDON {%ld/%ld} {%s} {%ld/%d}",
+               ti->ti_abandon.bv_val, op->o_connid, (long) op->o_msgid,
+               suf_tcl.bv_val, op->o_connid, msgid);
        Tcl_Free (suf_tcl.bv_val);
 
        ldap_pvt_thread_mutex_lock (&tcl_interpreter_mutex);
index 3fa0d0769caa21fab66d3fae17d04620c6c139ac..96f0d8ee9f131ee712a7f9790f1bc0d63f89009a 100644 (file)
@@ -44,9 +44,9 @@ tcl_back_add (
        entrystr = tcl_clean_entry(e);
 
        command = (char *) ch_malloc (ti->ti_add.bv_len + suf_tcl.bv_len +
-               strlen(entrystr) + 32);
-       sprintf (command, "%s ADD {%ld} {%s} {%s}",
-               ti->ti_add.bv_val, (long) op->o_msgid, 
+               strlen(entrystr) + 52);
+       sprintf (command, "%s ADD {%ld/%ld} {%s} {%s}",
+               ti->ti_add.bv_val, op->o_connid, (long) op->o_msgid, 
                suf_tcl.bv_val, entrystr);
        Tcl_Free (suf_tcl.bv_val);
        free (entrystr);
index f5ade3e7521729f8aba41cc3a74034a7fadbd6f4..d64a3b2718af7c2e36e38ac7797729d6d2cae055 100644 (file)
@@ -46,9 +46,10 @@ tcl_back_bind (
        }
 
        command = (char *) ch_malloc (ti->ti_bind.bv_len + suf_tcl.bv_len +
-               dn->bv_len + cred->bv_len + 64);
-       sprintf (command, "%s BIND {%ld} {%s} {%s} {%d} {%lu} {%s}",
-               ti->ti_bind.bv_val, (long) op->o_msgid, suf_tcl.bv_val, 
+               dn->bv_len + cred->bv_len + 84);
+       sprintf (command, "%s BIND {%ld/%ld} {%s} {%s} {%d} {%lu} {%s}",
+               ti->ti_bind.bv_val, op->o_connid, (long) op->o_msgid,
+               suf_tcl.bv_val, 
                dn->bv_val, method, cred->bv_len, cred->bv_val);
        Tcl_Free (suf_tcl.bv_val);
 
index 2f7b522dcf09995cb1fddca7864e253d223e29f3..3bb705cce75c2fead8172373ce50d1bc2eddbfc8 100644 (file)
@@ -45,10 +45,10 @@ tcl_back_compare (
 
        command = (char *) ch_malloc (ti->ti_compare.bv_len +
                suf_tcl.bv_len + dn->bv_len + ava->aa_desc->ad_cname.bv_len +
-               ava->aa_value.bv_len + 64);
-       sprintf (command, "%s COMPARE {%ld} {%s} {%s} {%s: %s}",
-               ti->ti_compare.bv_val, (long) op->o_msgid, suf_tcl.bv_val, 
-               dn->bv_val,
+               ava->aa_value.bv_len + 84);
+       sprintf (command, "%s COMPARE {%ld/%ld} {%s} {%s} {%s: %s}",
+               ti->ti_compare.bv_val, op->o_connid, (long) op->o_msgid,
+               suf_tcl.bv_val, dn->bv_val,
                ava->aa_desc->ad_cname.bv_val, ava->aa_value.bv_val);
        Tcl_Free (suf_tcl.bv_val);
 
index fe48fb188f2500688624813cf4490629711f3fbe..9047d7d65f1208b97970e2f8c1d437b3bb7e50af 100644 (file)
@@ -43,10 +43,10 @@ tcl_back_delete (
        }
 
        command = (char *) ch_malloc (ti->ti_delete.bv_len + suf_tcl.bv_len
-               + dn->bv_len + 64);
-       sprintf (command, "%s DELETE {%ld} {%s} {%s}",
-               ti->ti_delete.bv_val, (long) op->o_msgid, suf_tcl.bv_val, 
-               dn->bv_val);
+               + dn->bv_len + 84);
+       sprintf (command, "%s DELETE {%ld/%ld} {%s} {%s}",
+               ti->ti_delete.bv_val, op->o_connid, (long) op->o_msgid,
+               suf_tcl.bv_val, dn->bv_val);
        Tcl_Free (suf_tcl.bv_val);
 
        ldap_pvt_thread_mutex_lock (&tcl_interpreter_mutex);
index a140bc3153b9cfda6b552083e3918786359e15cb..06d50a035fef9f25073aa82b35b4eb4d1103a5ba 100644 (file)
@@ -97,11 +97,11 @@ tcl_back_modify (
        }
 
        command = (char *) ch_malloc (ti->ti_modify.bv_len + suf_tcl.bv_len
-               + dn->bv_len + strlen (tcl_mods) + 64);
+               + dn->bv_len + strlen (tcl_mods) + 84);
        /* This space is simply for aesthetics--\  */
-       sprintf (command, "%s MODIFY {%ld} {%s} {%s} { %s}",
-               ti->ti_modify.bv_val, (long) op->o_msgid, suf_tcl.bv_val, 
-               dn->bv_val, tcl_mods);
+       sprintf (command, "%s MODIFY {%ld/%ld} {%s} {%s} { %s}",
+               ti->ti_modify.bv_val, op->o_connid, (long) op->o_msgid,
+               suf_tcl.bv_val, dn->bv_val, tcl_mods);
        Tcl_Free (suf_tcl.bv_val);
        free (tcl_mods);
 
index e3dc71731f7068d3fe6d780b0a20cbf648451d23..361789b77d3f24666ac1b75f0beb429e2a0797ec 100644 (file)
@@ -62,10 +62,11 @@ tcl_back_modrdn (
 
        command = (char *) ch_malloc (ti->ti_modrdn.bv_len + suf_tcl.bv_len
                + dn->bv_len + newrdn->bv_len
-               + (newSuperior ? newSuperior->bv_len : 0) + 64);
+               + (newSuperior ? newSuperior->bv_len : 0) + 84);
        if ( newSuperior ) {
-               sprintf (command, "%s MODRDN {%ld} {%s} {%s} {%s} %d {%s}",
-                        ti->ti_modrdn.bv_val, (long) op->o_msgid, 
+               sprintf (command, "%s MODRDN {%ld/%ld} {%s} {%s} {%s} %d {%s}",
+                        ti->ti_modrdn.bv_val,
+                        op->o_connid, (long) op->o_msgid, 
                         suf_tcl.bv_val, dn->bv_val,
                         newrdn->bv_val, deleteoldrdn ? 1 : 0, 
                         newSuperior->bv_val );
index f9944a56d378f2f76299b51a6239c9f3fc515020..533268d2914bb4da987f8fd9dbb0f806424e989a 100644 (file)
@@ -63,12 +63,12 @@ tcl_back_search (
        }
 
        command = (char *) ch_malloc (ti->ti_search.bv_len + suf_tcl.bv_len
-               + base->bv_len + 40 + filterstr->bv_len + 
+               + base->bv_len + 60 + filterstr->bv_len + 
                (attrs_tcl == NULL ? 5 : strlen (attrs_tcl)) + 72);
        sprintf (command,
-               "%s SEARCH {%ld} {%s} {%s} {%d} {%d} {%d} {%d} {%s} {%d} {%s}",
-               ti->ti_search.bv_val, (long) op->o_msgid, suf_tcl.bv_val, 
-               base->bv_val, scope, deref,
+               "%s SEARCH {%ld/%ld} {%s} {%s} {%d} {%d} {%d} {%d} {%s} {%d} {%s}",
+               ti->ti_search.bv_val, op->o_connid, (long) op->o_msgid,
+               suf_tcl.bv_val, base->bv_val, scope, deref,
                sizelimit, timelimit, filterstr->bv_val, attrsonly ? 1 : 0,
                attrs_tcl == NULL ? "{all}" : attrs_tcl);
        Tcl_Free (attrs_tcl);
index 70ec08a7fae6d0bcd5556575db24423b6cdb4331..abb0beff94b5b8e3ccc8ba687c371929ac13e76d 100644 (file)
@@ -37,10 +37,10 @@ tcl_back_unbind (
        }
 
        command = (char *) ch_malloc (ti->ti_unbind.bv_len + suf_tcl.bv_len
-               + conn->c_dn.bv_len + 64);
-       sprintf (command, "%s UNBIND {%ld} {%s} {%s}",
-               ti->ti_unbind.bv_val, (long) op->o_msgid, suf_tcl.bv_val, 
-               conn->c_dn.bv_val ?  conn->c_dn.bv_val : "");
+               + conn->c_dn.bv_len + 84);
+       sprintf (command, "%s UNBIND {%ld/%ld} {%s} {%s}",
+               ti->ti_unbind.bv_val, op->o_connid, (long) op->o_msgid,
+               suf_tcl.bv_val, conn->c_dn.bv_val ?  conn->c_dn.bv_val : "");
        Tcl_Free (suf_tcl.bv_val);
 
        ldap_pvt_thread_mutex_lock (&tcl_interpreter_mutex);