svn commit: samba r464 - in branches/SAMBA_4_0/source: build/pidl librpc/idl rpc_server rpc_server/common rpc_server/echo rpc_server/samr rpc_server/srvsvc rpc_server/winreg rpc_server/wkssvc

tridge at samba.org tridge at samba.org
Tue May 4 06:07:52 GMT 2004


Author: tridge
Date: 2004-05-04 06:07:52 +0000 (Tue, 04 May 2004)
New Revision: 464

Modified:
   branches/SAMBA_4_0/source/build/pidl/server.pm
   branches/SAMBA_4_0/source/build/pidl/template.pm
   branches/SAMBA_4_0/source/librpc/idl/srvsvc.idl
   branches/SAMBA_4_0/source/rpc_server/common/common.h
   branches/SAMBA_4_0/source/rpc_server/dcerpc_server.c
   branches/SAMBA_4_0/source/rpc_server/dcerpc_server.h
   branches/SAMBA_4_0/source/rpc_server/echo/rpc_echo.c
   branches/SAMBA_4_0/source/rpc_server/samr/dcesrv_samr.c
   branches/SAMBA_4_0/source/rpc_server/srvsvc/dcesrv_srvsvc.c
   branches/SAMBA_4_0/source/rpc_server/winreg/rpc_winreg.c
   branches/SAMBA_4_0/source/rpc_server/wkssvc/dcesrv_wkssvc.c
Log:
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.


WebSVN: http://websvn.samba.org/websvn/changeset.php?rep=samba&path=/branches/SAMBA_4_0/source&rev=464&nolog=1


More information about the samba-cvs mailing list