AnthonyLiguori
IBM
aliguor@us.ibm.com
JelmerVernooij
Samba Team
jelmer@samba.org
January 2003
RPC Pluggable Modules
About
This document describes how to make use the new RPC Pluggable Modules features
of Samba 3.0. This architecture was added to increase the maintainability of
Samba allowing RPC Pipes to be worked on separately from the main CVS branch.
The RPM architecture will also allow third-party vendors to add functionality
to Samba through plug-ins.
General Overview
When an RPC call is sent to smbd, smbd tries to load a shared library by the
name librpc_<pipename>.so to handle the call if
it doesn't know how to handle the call internally. For instance, LSA calls
are handled by librpc_lsass.so..
These shared libraries should be located in the <sambaroot>/lib/rpc. smbd then attempts to call the init_module function within
the shared library. Check the chapter on modules for more information.
In the init_module function, the library should call
rpc_pipe_register_commands(). This function takes the following arguments:
NTSTATUS rpc_pipe_register_commands(int version, const char *clnt, const char *srv,
const struct api_struct *cmds, int size);
version
Version number of the RPC interface. Use the define SMB_RPC_INTERFACE_VERSION for this
argument.
clnt
the Client name of the named pipe
srv
the Server name of the named pipe
cmds
a list of api_structs that map RPC ordinal numbers to function calls
size
the number of api_structs contained in cmds
See rpc_server/srv_reg.c and rpc_server/srv_reg_nt.c for a small example of
how to use this library.