]> asedeno.scripts.mit.edu Git - PuTTY.git/blobdiff - windows/winhsock.c
Key rollover: rewrite the PGP keys manual appendix.
[PuTTY.git] / windows / winhsock.c
index 701b46da5d193bc8b748e10e7c791bb0007589a6..f52d5211572f3ad1e98d6194dd6793e777f9b11e 100644 (file)
@@ -42,8 +42,6 @@ struct Socket_handle_tag {
     char *error;
 
     Plug plug;
-
-    void *privptr;
 };
 
 static int handle_gotdata(struct handle *h, void *data, int len)
@@ -136,18 +134,6 @@ static void sk_handle_flush(Socket s)
     /* do nothing */
 }
 
-static void sk_handle_set_private_ptr(Socket s, void *ptr)
-{
-    Handle_Socket ps = (Handle_Socket) s;
-    ps->privptr = ptr;
-}
-
-static void *sk_handle_get_private_ptr(Socket s)
-{
-    Handle_Socket ps = (Handle_Socket) s;
-    return ps->privptr;
-}
-
 static void handle_socket_unfreeze(void *psv)
 {
     Handle_Socket ps = (Handle_Socket) psv;
@@ -248,6 +234,31 @@ static const char *sk_handle_socket_error(Socket s)
     return ps->error;
 }
 
+static char *sk_handle_peer_info(Socket s)
+{
+    Handle_Socket ps = (Handle_Socket) s;
+    ULONG pid;
+    static HMODULE kernel32_module;
+    DECL_WINDOWS_FUNCTION(static, BOOL, GetNamedPipeClientProcessId,
+                          (HANDLE, PULONG));
+
+    if (!kernel32_module) {
+        kernel32_module = load_system32_dll("kernel32.dll");
+        GET_WINDOWS_FUNCTION(kernel32_module, GetNamedPipeClientProcessId);
+    }
+
+    /*
+     * Of course, not all handles managed by this module will be
+     * server ends of named pipes, but if they are, then it's useful
+     * to log what we can find out about the client end.
+     */
+    if (p_GetNamedPipeClientProcessId &&
+        p_GetNamedPipeClientProcessId(ps->send_H, &pid))
+        return dupprintf("process id %lu", (unsigned long)pid);
+
+    return NULL;
+}
+
 Socket make_handle_socket(HANDLE send_H, HANDLE recv_H, Plug plug,
                           int overlapped)
 {
@@ -258,10 +269,9 @@ Socket make_handle_socket(HANDLE send_H, HANDLE recv_H, Plug plug,
        sk_handle_write_oob,
        sk_handle_write_eof,
        sk_handle_flush,
-       sk_handle_set_private_ptr,
-       sk_handle_get_private_ptr,
        sk_handle_set_frozen,
-       sk_handle_socket_error
+       sk_handle_socket_error,
+        sk_handle_peer_info,
     };
 
     Handle_Socket ret;