mirror of
https://github.com/nmap/nmap.git
synced 2025-12-11 18:29:03 +00:00
Fix calculation of namelen param to bind in Ncat. Fixes #166
This commit is contained in:
@@ -1,5 +1,9 @@
|
|||||||
# Nmap Changelog ($Id$); -*-text-*-
|
# Nmap Changelog ($Id$); -*-text-*-
|
||||||
|
|
||||||
|
o Fix Ncat listen mode on Solaris and other platforms where struct sockaddr
|
||||||
|
does not have a sa_len member. This also affected use of the -p and -s
|
||||||
|
options. Brandon Haberfeld reported the crash. [Daniel Miller]
|
||||||
|
|
||||||
o [NSE] Fix Diffie-Hellman parameter extraction in tls.lua. [Jacob Gajek]
|
o [NSE] Fix Diffie-Hellman parameter extraction in tls.lua. [Jacob Gajek]
|
||||||
|
|
||||||
o [NSE] Added http-webdav-scan, which detects WebDAV installations. [Gyanendra Mishra]
|
o [NSE] Added http-webdav-scan, which detects WebDAV installations. [Gyanendra Mishra]
|
||||||
|
|||||||
@@ -922,8 +922,26 @@ int ncat_connect(void)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
if (srcaddr.storage.ss_family != AF_UNSPEC)
|
switch (srcaddr.storage.ss_family) {
|
||||||
|
case AF_UNSPEC:
|
||||||
|
break;
|
||||||
|
case AF_INET:
|
||||||
|
nsi_set_localaddr(cs.sock_nsi, &srcaddr.storage, sizeof(srcaddr.in));
|
||||||
|
break;
|
||||||
|
#ifdef AF_INET6
|
||||||
|
case AF_INET6:
|
||||||
|
nsi_set_localaddr(cs.sock_nsi, &srcaddr.storage, sizeof(srcaddr.in6));
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#if HAVE_SYS_UN_H
|
||||||
|
case AF_UNIX:
|
||||||
|
nsi_set_localaddr(cs.sock_nsi, &srcaddr.storage, SUN_LEN((struct sockaddr_un *)&srcaddr.storage));
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
nsi_set_localaddr(cs.sock_nsi, &srcaddr.storage, sizeof(srcaddr.storage));
|
nsi_set_localaddr(cs.sock_nsi, &srcaddr.storage, sizeof(srcaddr.storage));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (o.numsrcrtes) {
|
if (o.numsrcrtes) {
|
||||||
unsigned char *ipopts = NULL;
|
unsigned char *ipopts = NULL;
|
||||||
|
|||||||
18
ncat/util.c
18
ncat/util.c
@@ -440,15 +440,29 @@ int do_listen(int type, int proto, const union sockaddr_u *srcaddr_u)
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
switch(srcaddr_u->storage.ss_family) {
|
||||||
#ifdef HAVE_SYS_UN_H
|
#ifdef HAVE_SYS_UN_H
|
||||||
if (srcaddr_u->storage.ss_family == AF_UNIX)
|
case AF_UNIX:
|
||||||
sa_len = SUN_LEN(&srcaddr_u->un);
|
sa_len = SUN_LEN(&srcaddr_u->un);
|
||||||
else
|
break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_SOCKADDR_SA_LEN
|
#ifdef HAVE_SOCKADDR_SA_LEN
|
||||||
|
default:
|
||||||
sa_len = srcaddr_u->sockaddr.sa_len;
|
sa_len = srcaddr_u->sockaddr.sa_len;
|
||||||
|
break;
|
||||||
#else
|
#else
|
||||||
|
case AF_INET:
|
||||||
|
sa_len = sizeof (struct sockaddr_in);
|
||||||
|
break;
|
||||||
|
#ifdef AF_INET6
|
||||||
|
case AF_INET6:
|
||||||
|
sa_len = sizeof (struct sockaddr_in6);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
sa_len = sizeof(*srcaddr_u);
|
sa_len = sizeof(*srcaddr_u);
|
||||||
|
break;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (bind(sock, &srcaddr_u->sockaddr, sa_len) < 0) {
|
if (bind(sock, &srcaddr_u->sockaddr, sa_len) < 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user