Index: src/modules/m_pass.c
===================================================================
RCS file: /cvs/unreal/src/modules/Attic/m_pass.c,v
retrieving revision 1.1.2.2.2.7
diff -u -r1.1.2.2.2.7 m_pass.c
--- src/modules/m_pass.c	19 Sep 2007 08:46:45 -0000	1.1.2.2.2.7
+++ src/modules/m_pass.c	24 May 2010 02:48:35 -0000
@@ -148,8 +148,9 @@
 int docgiirc(aClient *cptr, char *ip, char *host)
 {
 #ifdef INET6
-char ipbuf[64], crap[32];
+	char ipbuf[64], crap[32];
 #endif
+	int ret;
 
 	if (IsCGIIRC(cptr))
 		return exit_client(cptr, cptr, &me, "Double CGI:IRC request (already identified)");
@@ -160,14 +161,17 @@
 	/* STEP 1: Update cptr->ip */
 #ifdef INET6
 	/* Transform ipv4 to ::ffff:ipv4 if needed */
+	/* AFINET is an alias to either AF_INET or AF_INET6, depending on ifdef(INET6) */
 	if (inet_pton(AF_INET, ip, crap) != 0)
 	{
 		snprintf(ipbuf, sizeof(ipbuf), "::ffff:%s", ip);
-		ip = ipbuf;
-	}
+		ret = inet_pton(AFINET, ipbuf, &cptr->ip);
+		//ip = ipbuf;
+	} else /* else.. do like we normally do.. */
 #endif
+		ret = inet_pton(AFINET, ip, &cptr->ip);
 
-	if (inet_pton(AFINET, ip, &cptr->ip) <= 0)
+	if(ret <= 0)
 		return exit_client(cptr, cptr, &me, "Invalid IP address");
 
 	/* STEP 2: Update GetIP() */
@@ -190,8 +194,11 @@
 	if (host)
 		cptr->hostp = unreal_create_hostent(host, &cptr->ip);
 
-	/* STEP 4: Update sockhost */		
-	strlcpy(cptr->sockhost, ip, sizeof(cptr->sockhost));
+	/* STEP 4: Update sockhost
+	   Make sure that if this is an IPv4 address, it is _not_ prefixed with
+	   "::ffff:".
+	 */		
+	strlcpy(cptr->sockhost, Inet_ia2p(&cptr->ip), sizeof(cptr->sockhost));
 
 	SetCGIIRC(cptr);
 
