comparison 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
comparison
equal deleted inserted replaced
3:2366b362676d 4:d741b3ecc917
818 fs_give ((void **) &sadr); 818 fs_give ((void **) &sadr);
819 } 819 }
820 return stream->localhost; /* return local host name */ 820 return stream->localhost; /* return local host name */
821 } 821 }
822 822
823 /* Get $TCPREMOTEHOST || $TCPREMOTEHOST
824 * If invoked via tcpserver or couriertcpd, consult $TCPREMOTEHOST
825 * or $TCPREMOTEIP
826 */
827 char* gettcpremoteip()
828 {
829 if (getenv("TCPREMOTEHOST") && strcmp("0", getenv("TCPREMOTEHOST"))) {
830 return getenv("TCPREMOTEHOST");
831 } else if (getenv("TCPREMOTEIP")) {
832 return getenv("TCPREMOTEIP");
833 }
834 return "NON-IPv4";
835 }
836
823 /* TCP/IP get client host address (server calls only) 837 /* TCP/IP get client host address (server calls only)
824 * Returns: client host address 838 * Returns: client host address
825 */ 839 */
826 840
827 char *tcp_clientaddr () 841 char *tcp_clientaddr ()
848 char *tcp_clienthost () 862 char *tcp_clienthost ()
849 { 863 {
850 if (!myClientHost) { 864 if (!myClientHost) {
851 size_t sadrlen; 865 size_t sadrlen;
852 struct sockaddr *sadr = ip_newsockaddr (&sadrlen); 866 struct sockaddr *sadr = ip_newsockaddr (&sadrlen);
867 #ifdef INET6
868 if (getenv("TCPREMOTEIP")) {
869 myClientHost =
870 cpystr((getenv("TCPREMOTEHOST")
871 && strcasecmp("UNKNOWN", getenv("TCPREMOTEHOST")))
872 ? getenv("TCPREMOTEHOST")
873 : getenv("TCPREMOTEIP"));
874 } else
875 #endif
853 if (getpeername (0,sadr,(void *) &sadrlen)) { 876 if (getpeername (0,sadr,(void *) &sadrlen)) {
854 char *s,*t,*v,tmp[MAILTMPLEN]; 877 char *s,*t,*v,tmp[MAILTMPLEN];
855 if ((s = getenv (t = "SSH_CLIENT")) || 878 if ((s = getenv (t = "SSH_CLIENT")) ||
856 (s = getenv (t = "KRB5REMOTEADDR")) || 879 (s = getenv (t = "KRB5REMOTEADDR")) ||
857 (s = getenv (t = "SSH2_CLIENT"))) { 880 (s = getenv (t = "SSH2_CLIENT"))) {
911 { 934 {
912 if (!myServerHost) { /* once-only */ 935 if (!myServerHost) { /* once-only */
913 size_t sadrlen; 936 size_t sadrlen;
914 struct sockaddr *sadr = ip_newsockaddr (&sadrlen); 937 struct sockaddr *sadr = ip_newsockaddr (&sadrlen);
915 /* get stdin's name */ 938 /* get stdin's name */
916 if (getsockname (0,sadr,(void *) &sadrlen)) 939 if (getsockname (0,sadr,(void *) &sadrlen) ||
940 (myServerPort = ip_sockaddrtoport (sadr)) < 0)
917 myServerHost = cpystr (mylocalhost ()); 941 myServerHost = cpystr (mylocalhost ());
918 else { /* get stdin's name */ 942 else { /* get stdin's name */
919 myServerHost = tcp_name (sadr,NIL); 943 myServerHost = tcp_name (sadr,NIL);
920 if (!myServerAddr) myServerAddr = cpystr (ip_sockaddrtostring (sadr)); 944 if (!myServerAddr) myServerAddr = cpystr (ip_sockaddrtostring (sadr));
921 if (myServerPort < 0) myServerPort = ip_sockaddrtoport (sadr); 945 if (myServerPort < 0) myServerPort = ip_sockaddrtoport (sadr);

yatex.org