diff src/osdep/unix/tcp_unix.c @ 4:d741b3ecc917 draft

imapext-2007f
author HIROSE Yuuji <yuuji@gentei.org>
date Thu, 30 Oct 2014 00:03:05 +0900
parents 2366b362676d
children
line wrap: on
line diff
--- a/src/osdep/unix/tcp_unix.c	Thu Oct 30 00:00:57 2014 +0900
+++ b/src/osdep/unix/tcp_unix.c	Thu Oct 30 00:03:05 2014 +0900
@@ -820,6 +820,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
  */
@@ -850,6 +864,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")) ||
@@ -913,7 +936,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