summaryrefslogtreecommitdiff
path: root/www/ap-perl/patches/patch-ab
blob: 2499de02126dbfd9e9d77f25aa8e6c31ba9abe53 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
$NetBSD: patch-ab,v 1.5 2001/11/23 10:52:24 martti Exp $

--- src/modules/perl/Connection.xs.orig	Fri Sep 29 16:41:30 2000
+++ src/modules/perl/Connection.xs	Fri Nov 23 11:38:03 2001
@@ -78,7 +78,11 @@
     RETVAL = newSVpv((char *)&conn->remote_addr,
                       sizeof conn->remote_addr);
     if(sv_addr) {
+#ifdef APACHE6
+        struct sockaddr_storage addr;
+#else
         struct sockaddr_in addr; 
+#endif
         STRLEN sockaddrlen; 
         char * new_addr = SvPV(sv_addr,sockaddrlen); 
         if (sockaddrlen != sizeof(addr)) { 
@@ -106,7 +110,26 @@
 #else
         conn->remote_ip = pstrdup(conn->pool, (char *)SvPV(ST(1),na));
 #endif
+#ifdef APACHE6
+	{
+	  struct addrinfo hints, *res0;
+	  int error;
+
+	  memset(&hints, 0, sizeof(hints));
+	  hints.ai_family = PF_UNSPEC;
+	  hints.ai_flags = AI_NUMERICHOST;
+	  error = getaddrinfo(conn->remote_ip, NULL, &hints, &res0);
+	  if (!error) {
+	    memcpy(&conn->remote_addr, res0->ai_addr, res0->ai_addrlen);
+	    freeaddrinfo(res0);
+	  } else {
+            croak("Bad ip address in remote_ip getaddrinfo failed %s",
+		  gai_strerror(error)); 
+	  }
+	}
+#else
         conn->remote_addr.sin_addr.s_addr = inet_addr(conn->remote_ip);
+#endif
     }
 
     OUTPUT: