Index: servers/slapd/ldapsync.c =================================================================== RCS file: /repo/OpenLDAP/pkg/ldap/servers/slapd/ldapsync.c,v retrieving revision 1.21.2.7 retrieving revision 1.34 diff -u -u -r1.21.2.7 -r1.34 --- servers/slapd/ldapsync.c 9 May 2006 17:29:12 -0000 1.21.2.7 +++ servers/slapd/ldapsync.c 15 Jun 2006 21:54:51 -0000 1.34 @@ -38,24 +38,29 @@ int rid ) { char cookiestr[ LDAP_LUTIL_CSNSTR_BUFSIZE + 20 ]; + int len; if ( BER_BVISNULL( csn )) { if ( rid == -1 ) { cookiestr[0] = '\0'; + len = 0; } else { - snprintf( cookiestr, LDAP_LUTIL_CSNSTR_BUFSIZE + 20, + len = snprintf( cookiestr, LDAP_LUTIL_CSNSTR_BUFSIZE + 20, "rid=%03d", rid ); } } else { - if ( rid == -1 ) { - snprintf( cookiestr, LDAP_LUTIL_CSNSTR_BUFSIZE + 20, - "csn=%s", csn->bv_val ); - } else { - snprintf( cookiestr, LDAP_LUTIL_CSNSTR_BUFSIZE + 20, - "csn=%s,rid=%03d", csn->bv_val, rid ); + char *end = cookiestr + sizeof(cookiestr); + char *ptr = lutil_strcopy( cookiestr, "csn=" ); + len = csn->bv_len; + if ( ptr + len >= end ) + len = end - ptr; + ptr = lutil_strncopy( ptr, csn->bv_val, len ); + if ( rid != -1 && ptr < end - STRLENOF(",rid=xxx") ) { + ptr += sprintf( ptr, ",rid=%03d", rid ); } + len = ptr - cookiestr; } - ber_str2bv_x( cookiestr, strlen(cookiestr), 1, cookie, + ber_str2bv_x( cookiestr, len, 1, cookie, op ? op->o_tmpmemctx : NULL ); }