[stunnel-users] A couple of patches against 4.06

Peter Pentchev roam at ringlet.net
Wed Dec 29 15:45:47 CET 2004


Hi,

First of all, thanks for writing and maintaining this great piece
of software :)

When I ported 4.06 to FreeBSD on Monday, there were three changes that
needed to be made.  One is the passing of -1, not -1000, to poll(2),
which has already been discussed on this list (and which, by the way, is
mandated by POSIX and the Single Unix Specification, as you can see at
http://www.opengroup.org/onlinepubs/007908799/xsh/poll.html )
The other two can be seen in the patch below.

The first one is related to the fact that EAI_NODATA is not present on
all systems - it was actually obsoleted by the KAME implementation of
IPv6 about an year ago.  On some systems it is defined and has its own
value - then stunnel builds just fine.  On other systems it is not
defined at all, while on yet other systems it is aliased to EAI_NONAME,
so 'case EAI_NONAME' and 'case EAI_NODATA' would produce an error
message from the compiler.  Thus, the #ifdef and #if in the first chunk
of the patch.  This could not be done portably with a single statement,
something like '#if defined(EAI_NODATA) && EAI_NODATA != EAI_NONAME',
since there are some compilers that would barf on the second part if
EAI_NODATA was not actually defined.

The second chunk of the patch fixes getnameinfo() error reporting - just
like with getaddrinfo(), getnameinfo() errors should be displayed using
s_gai_strerror() instead of sockerror().

Keep up the good work!

G'luck,
Peter

--- src/network.c.orig	Thu Oct 14 18:03:49 2004
+++ src/network.c	Wed Dec 29 14:16:06 2004
@@ -416,8 +416,12 @@
             return "Temporary failure in name resolution (EAI_AGAIN)";
         case EAI_FAIL:
             return "Non-recoverable failure in name resolution (EAI_FAIL)";
+#ifdef EAI_NODATA
+#if EAI_NODATA != EAI_NONAME
         case EAI_NODATA:
             return "No address associated with nodename (EAI_NODATA)";
+#endif
+#endif
         case EAI_FAMILY:
             return "ai_family not supported (EAI_FAMILY)";
         case EAI_SOCKTYPE:
@@ -562,10 +566,13 @@
 /* getnameinfo() version */
 char *s_ntop(char *text, SOCKADDR_UNION *addr) {
     char host[20], port[6];
+    int err;
 
-    if(getnameinfo(&addr->sa, addr_len(*addr),
-            host, 20, port, 6, NI_NUMERICHOST|NI_NUMERICSERV)) {
-        sockerror("getnameinfo");
+    err = getnameinfo(&addr->sa, addr_len(*addr),
+            host, 20, port, 6, NI_NUMERICHOST|NI_NUMERICSERV);
+    if (err) {
+        s_log(LOG_ERR, "Error resolving the specified address: %s",
+            s_gai_strerror(err));
         strcpy(text, "unresolvable IP");
         return text;
     }

-- 
Peter Pentchev	roam at ringlet.net    roam at cnsys.bg    roam at FreeBSD.org
PGP key:	http://people.FreeBSD.org/~roam/roam.key.asc
Key fingerprint	FDBA FD79 C26F 3C51 C95E  DF9E ED18 B68D 1619 4553
.siht ekil ti gnidaer eb d'uoy ,werbeH ni erew ecnetnes siht fI
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
URL: <http://www.stunnel.org/pipermail/stunnel-users/attachments/20041229/c926e45f/attachment.sig>


More information about the stunnel-users mailing list