From: Hallvard Furuseth Date: Mon, 15 Jun 2015 17:57:48 +0000 (+0200) Subject: ITS#8158 Fix sendto() address length for CLDAP X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=c5462a8032ec355c5119248206a3f07a407e1bd2;p=openldap ITS#8158 Fix sendto() address length for CLDAP --- diff --git a/libraries/liblber/sockbuf.c b/libraries/liblber/sockbuf.c index cbcaa9b5ea..79935f34ef 100644 --- a/libraries/liblber/sockbuf.c +++ b/libraries/liblber/sockbuf.c @@ -928,6 +928,7 @@ sb_dgram_write( Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len ) { ber_slen_t rc; struct sockaddr *dst; + socklen_t dstsize; assert( sbiod != NULL ); assert( SOCKBUF_VALID( sbiod->sbiod_sb ) ); @@ -936,9 +937,12 @@ sb_dgram_write( Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len ) dst = buf; buf = (char *) buf + sizeof( struct sockaddr_storage ); len -= sizeof( struct sockaddr_storage ); - - rc = sendto( sbiod->sbiod_sb->sb_fd, buf, len, 0, dst, - sizeof( struct sockaddr_storage ) ); + dstsize = dst->sa_family == AF_INET ? sizeof( struct sockaddr_in ) +#ifdef LDAP_PF_INET6 + : dst->sa_family == AF_INET6 ? sizeof( struct sockaddr_in6 ) +#endif + : sizeof( struct sockaddr_storage ); + rc = sendto( sbiod->sbiod_sb->sb_fd, buf, len, 0, dst, dstsize ); if ( rc < 0 ) return -1;