Mercurial > hgrepos > hgweb.cgi > imapext
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);