r464: a big improvement to the API for writing server-side RPC
authorAndrew Tridgell <tridge@samba.org>
Tue, 4 May 2004 06:07:52 +0000 (06:07 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:51:44 +0000 (12:51 -0500)
commita4df5c7cf88891a78d82c8d6d7f058d8485e73f0
treeff8bcec402b1c56d126f8c2a3cc801fb04ca3df6
parent77269e7ad6f569585d5fad37ee63169c4eee3f01
r464: a big improvement to the API for writing server-side RPC
servers. Previously the server pipe code needed to return the RPC
level status (nearly always "OK") and separately set the function call
return using r->out.result. All the programmers writing servers
(metze, jelmer and me) were often getting this wrong, by doing things
like "return NT_STATUS_NO_MEMORY" which was really quite meaningless
as there is no code like that at the dcerpc level.

I have now modified pidl to generate the necessary boilerplate so that
just returning the status you want from the function will work. So for
a NTSTATUS function you return NT_STATUS_XXX and from a WERROR
function you return WERR_XXX. If you really want to generate a DCERPC
level fault rather than just a return value in your function then you
should use the DCESRV_FAULT() macro which will correctly generate a
fault for you.

As a side effect, this also adds automatic type checking of all of our
server side rpc functions, which was impossible with the old API. When
I changed the API I found and fixed quite a few functions with the
wrong type information, so this is definately useful.

I have also changed the server side template generation to generate a
DCERPC "operation range error" by default when you have not yet filled
in a server side function. This allows us to correctly implement
functions in any order in our rpc pipe servers and give the client the
right information about the fault.
source/build/pidl/server.pm
source/build/pidl/template.pm
source/librpc/idl/srvsvc.idl
source/rpc_server/common/common.h
source/rpc_server/dcerpc_server.c
source/rpc_server/dcerpc_server.h
source/rpc_server/echo/rpc_echo.c
source/rpc_server/samr/dcesrv_samr.c
source/rpc_server/srvsvc/dcesrv_srvsvc.c
source/rpc_server/winreg/rpc_winreg.c
source/rpc_server/wkssvc/dcesrv_wkssvc.c