summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/common/identd.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/common/identd.c b/src/common/identd.c
index e3ea9e95..f413c8ae 100644
--- a/src/common/identd.c
+++ b/src/common/identd.c
@@ -82,15 +82,15 @@ identd (char *username)
 }
 
 #ifdef USE_IPV6
+#define IPV6BUFLEN 60
 static int
 identd_ipv6 (char *username)
 {
 	int sok, read_sok, len;
 	char *p;
 	char buf[256];
-	char outbuf[256];
-	char ipv6buf[60];
-	DWORD ipv6buflen = sizeof (ipv6buf);
+	char outbuf[256];	
+	LPSTR ipv6buf = (LPSTR) malloc (IPV6BUFLEN);
 	struct sockaddr_in6 addr;
 
 	sok = socket (AF_INET6, SOCK_STREAM, 0);
@@ -98,6 +98,7 @@ identd_ipv6 (char *username)
 	if (sok == INVALID_SOCKET)
 	{
 		free (username);
+		free (ipv6buf);
 		return 0;
 	}
 
@@ -112,6 +113,7 @@ identd_ipv6 (char *username)
 	{
 		closesocket (sok);
 		free (username);
+		free (ipv6buf);
 		return 0;
 	}
 
@@ -119,6 +121,7 @@ identd_ipv6 (char *username)
 	{
 		closesocket (sok);
 		free (username);
+		free (ipv6buf);
 		return 0;
 	}
 
@@ -129,12 +132,13 @@ identd_ipv6 (char *username)
 	if (read_sok == INVALID_SOCKET)
 	{
 		free (username);
+		free (ipv6buf);
 		return 0;
 	}
 
 	identd_ipv6_is_running = FALSE;
 
-	if (WSAAddressToString ((struct sockaddr *) &addr, sizeof (addr), NULL, &ipv6buf, &ipv6buflen) == SOCKET_ERROR)
+	if (WSAAddressToString ((struct sockaddr *) &addr, sizeof (addr), NULL, ipv6buf, (LPDWORD) IPV6BUFLEN) == SOCKET_ERROR)
 	{
 		snprintf (ipv6buf, sizeof (ipv6buf) - 1, "[SOCKET ERROR: 0x%X]", WSAGetLastError ());
 	}
@@ -157,6 +161,7 @@ identd_ipv6 (char *username)
 	sleep (1);
 	closesocket (read_sok);
 	free (username);
+	free (ipv6buf);
 
 	return 0;
 }