Sophie

Sophie

distrib > Mandriva > 2007.0 > x86_64 > by-pkgid > b0cc1e3379830da9e41fcc2afd6c3978 > files > 39

openldap-2.3.27-1mdv2007.0.src.rpm

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 );
 }