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