From 12e1cf567d239495cf238f44456ab19daab327c8 Mon Sep 17 00:00:00 2001 From: Andrey Borzenkov Date: Fri, 15 Jun 2001 13:01:42 +0000 Subject: 14931: fix socket/address length calculation --- ChangeLog | 5 +++++ Src/Modules/tcp.c | 5 ++++- Src/Modules/zftp.c | 8 ++++---- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index da46434a2..2b9b87b15 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2001-06-15 Andrej Borsenkow + + * 14931: Src/Modules/tcp.c, Src/Modules/zftp.c: fix length + calculation in tcp_connect and zftp_open + 2001-06-14 Peter Stephenson * 14915: Doc/Zsh/builtins.yo, Doc/Zsh/Params.yo, Src/builtin.c, diff --git a/Src/Modules/tcp.c b/Src/Modules/tcp.c index 6f7a05cb2..7bd59fcce 100644 --- a/Src/Modules/tcp.c +++ b/Src/Modules/tcp.c @@ -255,6 +255,7 @@ tcp_close(Tcp_session sess) mod_export int tcp_connect(Tcp_session sess, char *addrp, struct hostent *zhost, int d_port) { + int salen; #ifdef SUPPORT_IPV6 if(zhost->h_addrtype==AF_INET6) { memcpy(&(sess->peer.in6.sin6_addr), addrp, zhost->h_length); @@ -263,14 +264,16 @@ tcp_connect(Tcp_session sess, char *addrp, struct hostent *zhost, int d_port) # ifdef HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID sess->peer.in6.sin6_scope_id = 0; # endif + salen = sizeof(struct sockaddr_in6); } else #endif /* SUPPORT_IPV6 */ { memcpy(&(sess->peer.in.sin_addr), addrp, zhost->h_length); sess->peer.in.sin_port = d_port; + salen = sizeof(struct sockaddr_in); } - return connect(sess->fd, (struct sockaddr *)&(sess->peer), zhost->h_length); + return connect(sess->fd, (struct sockaddr *)&(sess->peer), salen); } /* The load/unload routines required by the zsh library interface */ diff --git a/Src/Modules/zftp.c b/Src/Modules/zftp.c index 082c19781..e6fa9eb79 100644 --- a/Src/Modules/zftp.c +++ b/Src/Modules/zftp.c @@ -1699,7 +1699,7 @@ zftp_open(char *name, char **args, int flags) struct hostent *zhostp = NULL; char **addrp, *fname; int err, len, tmout; - int herrno, af, salen; + int herrno, af, hlen; if (!*args) { if (zfsess->userparams) @@ -1777,11 +1777,11 @@ zftp_open(char *name, char **args, int flags) zfsess->control.peer.a.sa_family = af; #ifdef SUPPORT_IPV6 if(af == AF_INET6) { - salen = sizeof(struct sockaddr_in6); + hlen = 16; } else #endif /* SUPPORT_IPV6 */ { - salen = sizeof(struct sockaddr_in); + hlen = 4; } tcp_socket(af, SOCK_STREAM, 0, &(zfsess->control)); @@ -1805,7 +1805,7 @@ zftp_open(char *name, char **args, int flags) /* try all possible IP's */ for (addrp = zhostp->h_addr_list; err && *addrp; addrp++) { - if(salen != zhostp->h_length) + if(hlen != zhostp->h_length) zwarnnam(name, "address length mismatch", NULL, 0); do { err = tcp_connect(&(zfsess->control), *addrp, zhostp, zservp->s_port); -- cgit 1.4.1