Skip to content

Commit

Permalink
rpcrt4: RpcServerUnregisterIf() with NULL ifspec shouldn't unregister…
Browse files Browse the repository at this point in the history
… auto-listen interfaces.

Signed-off-by: Zebediah Figura <[email protected]>
Signed-off-by: Alexandre Julliard <[email protected]>
  • Loading branch information
zfigura authored and julliard committed May 7, 2018
1 parent 9d6d2eb commit 950b349
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 1 deletion.
3 changes: 2 additions & 1 deletion dlls/rpcrt4/rpc_server.c
Original file line number Diff line number Diff line change
Expand Up @@ -1220,7 +1220,8 @@ RPC_STATUS WINAPI RpcServerUnregisterIf( RPC_IF_HANDLE IfSpec, UUID* MgrTypeUuid

EnterCriticalSection(&server_cs);
LIST_FOR_EACH_ENTRY(cif, &server_interfaces, RpcServerInterface, entry) {
if ((!IfSpec || !memcmp(&If->InterfaceId, &cif->If->InterfaceId, sizeof(RPC_SYNTAX_IDENTIFIER))) &&
if (((!IfSpec && !(cif->Flags & RPC_IF_AUTOLISTEN)) ||
(IfSpec && !memcmp(&If->InterfaceId, &cif->If->InterfaceId, sizeof(RPC_SYNTAX_IDENTIFIER)))) &&
UuidEqual(MgrTypeUuid, &cif->MgrTypeUuid, &status)) {
list_remove(&cif->entry);
TRACE("unregistering cif %p\n", cif);
Expand Down
11 changes: 11 additions & 0 deletions dlls/rpcrt4/tests/server.c
Original file line number Diff line number Diff line change
Expand Up @@ -844,6 +844,14 @@ void __cdecl s_stop(void)
}
}

void __cdecl s_stop_autolisten(void)
{
RPC_STATUS status;
status = RpcServerUnregisterIf(NULL, NULL, FALSE);
todo_wine
ok(status == RPC_S_UNKNOWN_MGR_TYPE, "got %u\n", status);
}

void __cdecl s_ip_test(ipu_t *a)
{
STATSTG st;
Expand Down Expand Up @@ -1690,6 +1698,9 @@ client(const char *test)
todo_wine
test_is_server_listening(IServer_IfHandle, RPC_S_NOT_LISTENING);

stop_autolisten();
ok(int_return() == INT_CODE, "RPC int_return\n");

ok(RPC_S_OK == RpcStringFreeA(&binding), "RpcStringFree\n");
ok(RPC_S_OK == RpcBindingFree(&IServer_IfHandle), "RpcBindingFree\n");
}
Expand Down
1 change: 1 addition & 0 deletions dlls/rpcrt4/tests/server.idl
Original file line number Diff line number Diff line change
Expand Up @@ -385,6 +385,7 @@ cpp_quote("#endif")
void authinfo_test(unsigned int protseq, int secure);

void stop(void);
void stop_autolisten(void);

typedef union ipu switch(int t)
{
Expand Down

0 comments on commit 950b349

Please sign in to comment.