diff src/osdep/unix/tcp_unix.c @ 1:28a55bc1110c imapext-2007-1

[mq]: imapext
author yuuji@gentei.org
date Mon, 14 Sep 2009 19:23:11 +0900
parents ada5e610ab86
children 2366b362676d 20c025a380ab
line wrap: on
line diff
--- a/src/osdep/unix/tcp_unix.c	Mon Sep 14 15:17:45 2009 +0900
+++ b/src/osdep/unix/tcp_unix.c	Mon Sep 14 19:23:11 2009 +0900
@@ -818,6 +818,20 @@
   return stream->localhost;	/* return local host name */
 }
 
+/* Get $TCPREMOTEHOST || $TCPREMOTEHOST
+ * If invoked via tcpserver or couriertcpd, consult $TCPREMOTEHOST
+ * or $TCPREMOTEIP
+ */
+char* gettcpremoteip()
+{
+  if (getenv("TCPREMOTEHOST") && strcmp("0", getenv("TCPREMOTEHOST"))) {
+    return getenv("TCPREMOTEHOST");
+  } else if (getenv("TCPREMOTEIP")) {
+    return getenv("TCPREMOTEIP");
+  }
+  return "NON-IPv4";
+}
+
 /* TCP/IP get client host address (server calls only)
  * Returns: client host address
  */
@@ -848,6 +862,15 @@
   if (!myClientHost) {
     size_t sadrlen;
     struct sockaddr *sadr = ip_newsockaddr (&sadrlen);
+#ifdef INET6
+    if (getenv("TCPREMOTEIP")) {
+      myClientHost =
+         cpystr((getenv("TCPREMOTEHOST")
+ 		&& strcasecmp("UNKNOWN", getenv("TCPREMOTEHOST")))
+ 		? getenv("TCPREMOTEHOST")
+ 		: getenv("TCPREMOTEIP"));
+    } else
+#endif
     if (getpeername (0,sadr,(void *) &sadrlen)) {
       char *s,*t,*v,tmp[MAILTMPLEN];
       if ((s = getenv (t = "SSH_CLIENT")) ||
@@ -911,7 +934,8 @@
     size_t sadrlen;
     struct sockaddr *sadr = ip_newsockaddr (&sadrlen);
 				/* get stdin's name */
-    if (getsockname (0,sadr,(void *) &sadrlen))
+    if (getsockname (0,sadr,(void *) &sadrlen) ||
+        (myServerPort = ip_sockaddrtoport (sadr)) < 0)
       myServerHost = cpystr (mylocalhost ());
     else {			/* get stdin's name */
       myServerHost = tcp_name (sadr,NIL);

yatex.org