imapext-2007
diff src/osdep/unix/tcp_unix.c @ 1:28a55bc1110c
[mq]: imapext
author | yuuji@gentei.org |
---|---|
date | Mon, 14 Sep 2009 19:23:11 +0900 |
parents | ada5e610ab86 |
children | 2366b362676d 20c025a380ab |
line diff
1.1 --- a/src/osdep/unix/tcp_unix.c Mon Sep 14 15:17:45 2009 +0900 1.2 +++ b/src/osdep/unix/tcp_unix.c Mon Sep 14 19:23:11 2009 +0900 1.3 @@ -818,6 +818,20 @@ 1.4 return stream->localhost; /* return local host name */ 1.5 } 1.6 1.7 +/* Get $TCPREMOTEHOST || $TCPREMOTEHOST 1.8 + * If invoked via tcpserver or couriertcpd, consult $TCPREMOTEHOST 1.9 + * or $TCPREMOTEIP 1.10 + */ 1.11 +char* gettcpremoteip() 1.12 +{ 1.13 + if (getenv("TCPREMOTEHOST") && strcmp("0", getenv("TCPREMOTEHOST"))) { 1.14 + return getenv("TCPREMOTEHOST"); 1.15 + } else if (getenv("TCPREMOTEIP")) { 1.16 + return getenv("TCPREMOTEIP"); 1.17 + } 1.18 + return "NON-IPv4"; 1.19 +} 1.20 + 1.21 /* TCP/IP get client host address (server calls only) 1.22 * Returns: client host address 1.23 */ 1.24 @@ -848,6 +862,15 @@ 1.25 if (!myClientHost) { 1.26 size_t sadrlen; 1.27 struct sockaddr *sadr = ip_newsockaddr (&sadrlen); 1.28 +#ifdef INET6 1.29 + if (getenv("TCPREMOTEIP")) { 1.30 + myClientHost = 1.31 + cpystr((getenv("TCPREMOTEHOST") 1.32 + && strcasecmp("UNKNOWN", getenv("TCPREMOTEHOST"))) 1.33 + ? getenv("TCPREMOTEHOST") 1.34 + : getenv("TCPREMOTEIP")); 1.35 + } else 1.36 +#endif 1.37 if (getpeername (0,sadr,(void *) &sadrlen)) { 1.38 char *s,*t,*v,tmp[MAILTMPLEN]; 1.39 if ((s = getenv (t = "SSH_CLIENT")) || 1.40 @@ -911,7 +934,8 @@ 1.41 size_t sadrlen; 1.42 struct sockaddr *sadr = ip_newsockaddr (&sadrlen); 1.43 /* get stdin's name */ 1.44 - if (getsockname (0,sadr,(void *) &sadrlen)) 1.45 + if (getsockname (0,sadr,(void *) &sadrlen) || 1.46 + (myServerPort = ip_sockaddrtoport (sadr)) < 0) 1.47 myServerHost = cpystr (mylocalhost ()); 1.48 else { /* get stdin's name */ 1.49 myServerHost = tcp_name (sadr,NIL);