OSSP CVS Repository

ossp - Difference in ossp-pkg/sa/sa.c versions 1.73 and 1.74
Not logged in
[Honeypot]  [Browse]  [Home]  [Login]  [Reports
[Search]  [Ticket]  [Timeline
  [History

ossp-pkg/sa/sa.c 1.73 -> 1.74

--- sa.c 2003/01/06 13:11:23     1.73
+++ sa.c 2003/02/07 20:47:51     1.74
@@ -252,6 +252,7 @@
     ((tv).tv_sec == 0 && (tv).tv_usec == 0)
 
 /* convert Internet address from presentation to network format */
+#ifndef HAVE_GETADDRINFO
 static int sa_inet_pton(int family, const char *strptr, void *addrptr)
 {
 #ifdef HAVE_INET_PTON
@@ -278,6 +279,7 @@
     return 0;
 #endif
 }
+#endif /* !HAVE_GETADDRINFO */
 
 /* convert Internet address from network to presentation format */
 static const char *sa_inet_ntop(int family, const void *src, char *dst, size_t size)
@@ -481,13 +483,19 @@
     socklen_t sl;
     struct sockaddr *sa;
     struct sockaddr_un un;
+#ifdef HAVE_GETADDRINFO
+    struct addrinfo ai_hints;
+    struct addrinfo *ai = NULL;
+    int err;
+#else
     struct sockaddr_in sa4;
 #ifdef AF_INET6
     struct sockaddr_in6 sa6;
 #endif
-    int bIPv6;
     struct hostent *he;
+#endif
     struct servent *se;
+    int bIPv6;
     int bNumeric;
     char *cpHost;
     char *cpPort;
@@ -598,6 +606,28 @@
             nPort = ntohs(se->s_port);
         }
 
+#ifdef HAVE_GETADDRINFO
+        memset(&ai_hints, 0, sizeof(ai_hints));
+        ai_hints.ai_family = PF_UNSPEC;
+        if ((err = getaddrinfo(cpHost, NULL, &ai_hints, &ai)) != 0) {
+            if (err == EAI_MEMORY)
+                return SA_RC(SA_ERR_MEM);
+            else if (err == EAI_SYSTEM)
+                return SA_RC(SA_ERR_SYS);
+            else
+                return SA_RC(SA_ERR_ARG);
+        }
+        sa = ai->ai_addr;
+        sl = ai->ai_addrlen;
+        sf = ai->ai_family;
+        if (sf == AF_INET)
+            ((struct sockaddr_in *)sa)->sin_port = htons(nPort);
+        else if (sf == AF_INET6)
+            ((struct sockaddr_in6 *)sa)->sin6_port = htons(nPort);
+        else
+            return SA_RC(SA_ERR_ARG);
+#else /* !HAVE_GETADDRINFO */
+
         /* mandatory(!) socket address structure initialization */
         memset(&sa4, 0, sizeof(sa4));
 #ifdef AF_INET6
@@ -648,6 +678,7 @@
         }
         else
             return SA_RC(SA_ERR_ARG);
+#endif /* !HAVE_GETADDRINFO */
     }
     else
         return SA_RC(SA_ERR_ARG);
@@ -661,6 +692,11 @@
     saa->slBuf = sl;
     saa->nFamily = (int)sf;
 
+#ifdef HAVE_GETADDRINFO
+    if (ai != NULL)
+        freeaddrinfo(ai);
+#endif
+
     return SA_OK;
 }
 

CVSTrac 2.0.1