X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=windows%2Fwinnps.c;h=2547fd71c5a3863b8114ab8ca4777a0a86e33d5e;hb=a063e522970946bf7d5dc052079d7773c0dee76d;hp=9cc8176fdefdc63091add8123af4886d3836127e;hpb=bb78583ad29084f16db994d66895917e1b20346e;p=PuTTY.git diff --git a/windows/winnps.c b/windows/winnps.c index 9cc8176f..2547fd71 100644 --- a/windows/winnps.c +++ b/windows/winnps.c @@ -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: