BUG_SSH2_DERIVEKEY is apparently only present in SSH 2.0.11 and
[u/mdw/putty] / winnet.c
index 4ea2903..b5ca741 100644 (file)
--- a/winnet.c
+++ b/winnet.c
@@ -370,7 +370,7 @@ void sk_getaddr(SockAddr addr, char *buf, int buflen)
 
 int sk_addrtype(SockAddr addr)
 {
-    return addr->family;
+    return (addr->family == AF_INET ? ADDRTYPE_IPV4 : ADDRTYPE_IPV6);
 }
 
 void sk_addrcopy(SockAddr addr, char *buf)
@@ -901,6 +901,25 @@ int select_result(WPARAM wParam, LPARAM lParam)
     u_long atmark;
 
     /* wParam is the socket itself */
+
+    /*
+     * One user has reported an assertion failure in tree234 which
+     * indicates a null element pointer has been passed to a
+     * find*234 function. The following find234 is the only one in
+     * the whole program that I can see being capable of doing
+     * this, hence I'm forced to conclude that WinSock is capable
+     * of sending me netevent messages with wParam==0. I want to
+     * know what the rest of the message is if it does so!
+     */
+    if (wParam == 0) {
+       char *str;
+       str = dupprintf("Strange WinSock message: wp=%08x lp=%08x",
+                       (int)wParam, (int)lParam);
+       logevent(NULL, str);
+       connection_fatal(NULL, str);
+       sfree(str);
+    }
+
     s = find234(sktree, (void *) wParam, cmpforsearch);
     if (!s)
        return 1;                      /* boggle */
@@ -1138,3 +1157,13 @@ SOCKET next_socket(int *state)
     Actual_Socket s = index234(sktree, (*state)++);
     return s ? s->s : INVALID_SOCKET;
 }
+
+int net_service_lookup(char *service)
+{
+    struct servent *se;
+    se = getservbyname(service, NULL);
+    if (se != NULL)
+       return ntohs(se->s_port);
+    else
+       return 0;
+}