Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
64280a6d
Commit
64280a6d
authored
Mar 14, 2005
by
Robert Shearman
Committed by
Alexandre Julliard
Mar 14, 2005
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
- RpcMgmtStopServerListen should not affect auto-listen interfaces.
- Implement stub for RpcRevertToSelfEx. - Change the more verbose files to use a new debug channel, "rpc."
parent
6cf8602e
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
74 additions
and
39 deletions
+74
-39
ndr_midl.c
dlls/rpcrt4/ndr_midl.c
+1
-1
rpc_binding.c
dlls/rpcrt4/rpc_binding.c
+31
-2
rpc_message.c
dlls/rpcrt4/rpc_message.c
+1
-1
rpc_server.c
dlls/rpcrt4/rpc_server.c
+39
-33
rpcrt4.spec
dlls/rpcrt4/rpcrt4.spec
+1
-1
rpcrt4_main.c
dlls/rpcrt4/rpcrt4_main.c
+1
-1
No files found.
dlls/rpcrt4/ndr_midl.c
View file @
64280a6d
...
...
@@ -44,7 +44,7 @@
#include "ndr_misc.h"
#include "rpcndr.h"
WINE_DEFAULT_DEBUG_CHANNEL
(
ole
);
WINE_DEFAULT_DEBUG_CHANNEL
(
rpc
);
/***********************************************************************
* NdrProxyInitialize [RPCRT4.@]
...
...
dlls/rpcrt4/rpc_binding.c
View file @
64280a6d
...
...
@@ -44,7 +44,7 @@
#include "rpc_binding.h"
#include "rpc_message.h"
WINE_DEFAULT_DEBUG_CHANNEL
(
ole
);
WINE_DEFAULT_DEBUG_CHANNEL
(
rpc
);
LPSTR
RPCRT4_strndupA
(
LPCSTR
src
,
INT
slen
)
{
...
...
@@ -1109,9 +1109,38 @@ RPC_STATUS WINAPI RpcNetworkIsProtseqValidW(LPWSTR protseq) {
* RETURNS
* Success: RPS_S_OK.
* Failure: RPC_STATUS value.
*
* NOTES
*
* If BindingHandle is NULL then the function impersonates the client
* connected to the binding handle of the current thread.
*/
RPC_STATUS
WINAPI
RpcImpersonateClient
(
RPC_BINDING_HANDLE
BindingHandle
)
{
FIXME
(
"(%p): stub
\n
"
,
BindingHandle
);
return
RPC_S_NO_CONTEXT_AVAILABLE
;
return
RPC_S_OK
;
}
/***********************************************************************
* RpcRevertToSelfEx (RPCRT4.@)
*
* Stops impersonating the client connected to the binding handle so that security
* checks are no longer done in the context of the client.
*
* PARAMS
* BindingHandle [I] Handle to the binding to the client.
*
* RETURNS
* Success: RPS_S_OK.
* Failure: RPC_STATUS value.
*
* NOTES
*
* If BindingHandle is NULL then the function stops impersonating the client
* connected to the binding handle of the current thread.
*/
RPC_STATUS
WINAPI
RpcRevertToSelfEx
(
RPC_BINDING_HANDLE
BindingHandle
)
{
FIXME
(
"(%p): stub
\n
"
,
BindingHandle
);
return
RPC_S_OK
;
}
dlls/rpcrt4/rpc_message.c
View file @
64280a6d
...
...
@@ -42,7 +42,7 @@
#include "rpc_misc.h"
#include "rpc_defs.h"
WINE_DEFAULT_DEBUG_CHANNEL
(
ole
);
WINE_DEFAULT_DEBUG_CHANNEL
(
rpc
);
DWORD
RPCRT4_GetHeaderSize
(
RpcPktHdr
*
Header
)
{
...
...
dlls/rpcrt4/rpc_server.c
View file @
64280a6d
...
...
@@ -50,7 +50,7 @@
#define MAX_THREADS 128
WINE_DEFAULT_DEBUG_CHANNEL
(
ole
);
WINE_DEFAULT_DEBUG_CHANNEL
(
rpc
);
typedef
struct
_RpcPacket
{
...
...
@@ -91,8 +91,12 @@ static CRITICAL_SECTION_DEBUG listen_cs_debug =
};
static
CRITICAL_SECTION
listen_cs
=
{
&
listen_cs_debug
,
-
1
,
0
,
0
,
0
,
0
};
/* whether the server is currently listening */
static
BOOL
std_listen
;
static
LONG
listen_count
=
-
1
;
/* number of manual listeners (calls to RpcServerListen) */
static
LONG
manual_listen_count
;
/* total listeners including auto listeners */
static
LONG
listen_count
;
/* set on change of configuration (e.g. listening on new protseq) */
static
HANDLE
mgr_event
;
/* mutex for ensuring only one thread can change state at a time */
...
...
@@ -156,7 +160,7 @@ static RpcServerInterface* RPCRT4_find_interface(UUID* object,
while
(
cif
)
{
if
(
!
memcmp
(
if_id
,
&
cif
->
If
->
InterfaceId
,
sizeof
(
RPC_SYNTAX_IDENTIFIER
))
&&
(
check_object
==
FALSE
||
UuidEqual
(
MgrType
,
&
cif
->
MgrTypeUuid
,
&
status
))
&&
(
std_listen
||
(
cif
->
Flags
&
RPC_IF_AUTOLISTEN
))
)
break
;
std_listen
)
break
;
cif
=
cif
->
Next
;
}
LeaveCriticalSection
(
&
server_cs
);
...
...
@@ -571,38 +575,44 @@ static void RPCRT4_sync_with_server_thread(void)
ReleaseMutex
(
mgr_mutex
);
}
static
void
RPCRT4_start_listen
(
void
)
static
void
RPCRT4_start_listen
(
BOOL
auto_listen
)
{
TRACE
(
"
\n
"
);
EnterCriticalSection
(
&
listen_cs
);
if
(
!
++
listen_count
)
{
if
(
!
mgr_mutex
)
mgr_mutex
=
CreateMutexW
(
NULL
,
FALSE
,
NULL
);
if
(
!
mgr_event
)
mgr_event
=
CreateEventW
(
NULL
,
FALSE
,
FALSE
,
NULL
);
if
(
!
server_ready_event
)
server_ready_event
=
CreateEventW
(
NULL
,
FALSE
,
FALSE
,
NULL
);
if
(
!
server_sem
)
server_sem
=
CreateSemaphoreW
(
NULL
,
0
,
MAX_THREADS
,
NULL
);
if
(
!
worker_tls
)
worker_tls
=
TlsAlloc
();
std_listen
=
TRUE
;
server_thread
=
CreateThread
(
NULL
,
0
,
RPCRT4_server_thread
,
NULL
,
0
,
NULL
);
LeaveCriticalSection
(
&
listen_cs
);
}
else
{
LeaveCriticalSection
(
&
listen_cs
);
RPCRT4_sync_with_server_thread
();
if
(
auto_listen
||
(
manual_listen_count
++
==
0
))
{
if
(
++
listen_count
==
1
)
{
/* first listener creates server thread */
if
(
!
mgr_mutex
)
mgr_mutex
=
CreateMutexW
(
NULL
,
FALSE
,
NULL
);
if
(
!
mgr_event
)
mgr_event
=
CreateEventW
(
NULL
,
FALSE
,
FALSE
,
NULL
);
if
(
!
server_ready_event
)
server_ready_event
=
CreateEventW
(
NULL
,
FALSE
,
FALSE
,
NULL
);
if
(
!
server_sem
)
server_sem
=
CreateSemaphoreW
(
NULL
,
0
,
MAX_THREADS
,
NULL
);
if
(
!
worker_tls
)
worker_tls
=
TlsAlloc
();
std_listen
=
TRUE
;
server_thread
=
CreateThread
(
NULL
,
0
,
RPCRT4_server_thread
,
NULL
,
0
,
NULL
);
LeaveCriticalSection
(
&
listen_cs
);
}
else
{
LeaveCriticalSection
(
&
listen_cs
);
RPCRT4_sync_with_server_thread
();
}
}
}
static
void
RPCRT4_stop_listen
(
void
)
static
void
RPCRT4_stop_listen
(
BOOL
auto_listen
)
{
EnterCriticalSection
(
&
listen_cs
);
if
(
listen_count
==
-
1
)
LeaveCriticalSection
(
&
listen_cs
);
else
if
(
--
listen_count
==
-
1
)
{
std_listen
=
FALSE
;
LeaveCriticalSection
(
&
listen_cs
);
RPCRT4_sync_with_server_thread
();
}
else
LeaveCriticalSection
(
&
listen_cs
);
assert
(
listen_count
>
-
2
);
if
(
auto_listen
||
(
--
manual_listen_count
==
0
))
{
if
(
listen_count
!=
0
&&
--
listen_count
==
0
)
{
std_listen
=
FALSE
;
LeaveCriticalSection
(
&
listen_cs
);
RPCRT4_sync_with_server_thread
();
return
;
}
assert
(
listen_count
>=
0
);
}
LeaveCriticalSection
(
&
listen_cs
);
}
static
RPC_STATUS
RPCRT4_use_protseq
(
RpcServerProtseq
*
ps
)
...
...
@@ -835,7 +845,7 @@ RPC_STATUS WINAPI RpcServerRegisterIf2( RPC_IF_HANDLE IfSpec, UUID* MgrTypeUuid,
if
(
sif
->
Flags
&
RPC_IF_AUTOLISTEN
)
{
/* well, start listening, I think... */
RPCRT4_start_listen
();
RPCRT4_start_listen
(
TRUE
);
}
return
RPC_S_OK
;
...
...
@@ -966,7 +976,7 @@ RPC_STATUS WINAPI RpcServerListen( UINT MinimumCallThreads, UINT MaxCalls, UINT
return
RPC_S_ALREADY_LISTENING
;
}
RPCRT4_start_listen
();
RPCRT4_start_listen
(
FALSE
);
LeaveCriticalSection
(
&
listen_cs
);
...
...
@@ -1017,11 +1027,7 @@ RPC_STATUS WINAPI RpcMgmtStopServerListening ( RPC_BINDING_HANDLE Binding )
return
RPC_S_WRONG_KIND_OF_BINDING
;
}
/* hmm... */
EnterCriticalSection
(
&
listen_cs
);
while
(
std_listen
)
RPCRT4_stop_listen
();
LeaveCriticalSection
(
&
listen_cs
);
RPCRT4_stop_listen
(
FALSE
);
return
RPC_S_OK
;
}
...
...
dlls/rpcrt4/rpcrt4.spec
View file @
64280a6d
...
...
@@ -112,7 +112,7 @@
@ stdcall RpcRaiseException(long)
@ stub RpcRegisterAsyncInfo
@ stub RpcRevertToSelf
@ st
ub RpcRevertToSelfEx
@ st
dcall RpcRevertToSelfEx(ptr)
@ stdcall RpcServerInqBindings(ptr)
@ stub RpcServerInqCallAttributesA # wxp
@ stub RpcServerInqCallAttributesW # wxp
...
...
dlls/rpcrt4/rpcrt4_main.c
View file @
64280a6d
...
...
@@ -114,7 +114,7 @@
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL
(
ole
);
WINE_DEFAULT_DEBUG_CHANNEL
(
rpc
);
static
UUID
uuid_nil
;
static
HANDLE
master_mutex
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment