]> asedeno.scripts.mit.edu Git - PuTTY.git/blobdiff - windows/winnps.c
Key rollover: rewrite the PGP keys manual appendix.
[PuTTY.git] / windows / winnps.c
index 9cc8176fdefdc63091add8123af4886d3836127e..2547fd71c5a3863b8114ab8ca4777a0a86e33d5e 100644 (file)
@@ -26,13 +26,13 @@ struct Socket_named_pipe_server_tag {
 
     /* Parameters for (repeated) creation of named pipe objects */
     PSECURITY_DESCRIPTOR psd;
-    PSID networksid;
     PACL acl;
     char *pipename;
 
     /* The current named pipe object + attempt to connect to it */
     HANDLE pipehandle;
     OVERLAPPED connect_ovl;
+    struct handle *callback_handle;    /* winhandl.c's reference */
 
     /* PuTTY Socket machinery */
     Plug plug;
@@ -52,12 +52,12 @@ static void sk_namedpipeserver_close(Socket s)
 {
     Named_Pipe_Server_Socket ps = (Named_Pipe_Server_Socket) s;
 
+    if (ps->callback_handle)
+        handle_free(ps->callback_handle);
     CloseHandle(ps->pipehandle);
     CloseHandle(ps->connect_ovl.hEvent);
     sfree(ps->error);
     sfree(ps->pipename);
-    if (ps->networksid)
-        LocalFree(ps->networksid);
     if (ps->acl)
         LocalFree(ps->acl);
     if (ps->psd)
@@ -71,6 +71,11 @@ static const char *sk_namedpipeserver_socket_error(Socket s)
     return ps->error;
 }
 
+static char *sk_namedpipeserver_peer_info(Socket s)
+{
+    return NULL;
+}
+
 static int create_named_pipe(Named_Pipe_Server_Socket ps, int first_instance)
 {
     SECURITY_ATTRIBUTES sa;
@@ -211,7 +216,8 @@ Socket new_named_pipe_listener(const char *pipename, Plug plug)
         NULL /* write_eof */,
         NULL /* flush */,
         NULL /* set_frozen */,
-       sk_namedpipeserver_socket_error
+       sk_namedpipeserver_socket_error,
+       sk_namedpipeserver_peer_info,
     };
 
     Named_Pipe_Server_Socket ret;
@@ -222,15 +228,14 @@ Socket new_named_pipe_listener(const char *pipename, Plug plug)
     ret->error = NULL;
     ret->psd = NULL;
     ret->pipename = dupstr(pipename);
-    ret->networksid = NULL;
     ret->acl = NULL;
+    ret->callback_handle = NULL;
 
     assert(strncmp(pipename, "\\\\.\\pipe\\", 9) == 0);
     assert(strchr(pipename + 9, '\\') == NULL);
 
     if (!make_private_security_descriptor(GENERIC_READ | GENERIC_WRITE,
-                                          &ret->psd, &ret->networksid,
-                                          &ret->acl, &ret->error)) {
+                                          &ret->psd, &ret->acl, &ret->error)) {
         goto cleanup;
     }
 
@@ -242,8 +247,9 @@ Socket new_named_pipe_listener(const char *pipename, Plug plug)
 
     memset(&ret->connect_ovl, 0, sizeof(ret->connect_ovl));
     ret->connect_ovl.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
-    handle_add_foreign_event(ret->connect_ovl.hEvent,
-                             named_pipe_connect_callback, ret);
+    ret->callback_handle =
+        handle_add_foreign_event(ret->connect_ovl.hEvent,
+                                 named_pipe_connect_callback, ret);
     named_pipe_accept_loop(ret, FALSE);
 
   cleanup: