import HEAD into svn+ssh://svn.samba.org/home/svn/samba/trunk
[metze/old/v3-2-winbind-ndr.git] / source / rpc_server / srv_epmapper.c
1
2 /* 
3    Unix SMB/CIFS implementation.
4    Samba end point mapper utility and mapping functions
5    Copyright (C) Jim McDonough (jmcd@us.ibm.com) 2003
6    
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2 of the License, or
10    (at your option) any later version.
11    
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16    
17    You should have received a copy of the GNU General Public License
18    along with this program; if not, write to the Free Software
19    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 */
21
22 #include "includes.h"
23
24 /*****************************************************************
25   api_handle_map_req - handles standard epm mapping request
26 ******************************************************************/
27 static BOOL api_handle_map_req(pipes_struct * p)
28 {
29
30         EPM_Q_MAP q_in;
31         EPM_R_MAP q_out;
32
33         prs_struct *in_data = &p->in_data.data;
34         prs_struct *ret_data = &p->out_data.rdata;
35
36         ZERO_STRUCT(q_in);
37         ZERO_STRUCT(q_out);
38
39         /* process input request and parse packet */
40
41         if (!epm_io_q_map("", &q_in, in_data, 0)) {
42                 DEBUG(0,
43                       ("api_handle_map_request: unable to unmarshall EPMD_MAP\n"));
44                 return False;
45         }
46
47         _epm_map(p, &q_in, &q_out);
48
49         if (!epm_io_r_map("", &q_out, ret_data, 0)) {
50                 DEBUG(0,
51                       ("api_handle_map_req: unable to marshall EPMD_MAP\n"));
52                 return False;
53         }
54
55         return True;
56 }
57
58 /*******************************************************************/
59 /*                  \pipe\epmapper commands                        */
60 /*******************************************************************/
61 /* opnum is 3 on map request */
62
63 struct api_struct api_epmapper_cmds[] = {
64         {"MAP_PIPE_NAME", EPM_MAP_PIPE_NAME, api_handle_map_req},
65 };
66
67 /*******************************************************************/
68 /*                                                                 */
69 /*******************************************************************/
70
71 void epm_get_pipe_fns(struct api_struct **funcs, int *n_funcs)
72 {
73         *funcs = api_epmapper_cmds;
74         *n_funcs = sizeof(api_epmapper_cmds) / sizeof(struct api_struct);
75 }
76
77 /*******************************************************************/
78 /*                                                                 */
79 /*******************************************************************/
80
81 NTSTATUS rpc_epmapper_init(void)
82 {
83         return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION,
84                                           EPM_PIPE_NM, EPM_PIPE_NM,
85                                           api_epmapper_cmds,
86                                           sizeof(api_epmapper_cmds) /
87                                           sizeof(struct api_struct));
88 }