summaryrefslogtreecommitdiff
path: root/docs/textdocs/RPC_PLUGIN.txt
blob: b8e59ecdd2e14a3259c89bcbffd6d0f23c3bf79f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
RPC Pluggable Modules How-To
----------------------------

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 rpc_pipe_init function within the shared library.

In the rpc_pipe_init function, the library should call 
rpc_pipe_register_commands().  This function takes the following arguments:

int rpc_pipe_register_commands(const char *clnt, const char *srv,
                               const struct api_struct *cmds, int size);

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.

- Anthony Liguori <aliguor@us.ibm.com>