Line data Source code
1 : /*
2 : * Unix SMB/CIFS implementation.
3 : * RPC Pipe client / server routines for rpcecho
4 : * Copyright (C) Tim Potter 2003
5 : * Copyright (C) Jelmer Vernooij 2006
6 : * Copyright (C) Gerald (Jerry) Carter 2007
7 : *
8 : * This program is free software; you can redistribute it and/or modify
9 : * it under the terms of the GNU General Public License as published by
10 : * the Free Software Foundation; either version 3 of the License, or
11 : * (at your option) any later version.
12 : *
13 : * This program is distributed in the hope that it will be useful,
14 : * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 : * GNU General Public License for more details.
17 : *
18 : * You should have received a copy of the GNU General Public License
19 : * along with this program; if not, see <http://www.gnu.org/licenses/>.
20 : */
21 :
22 : /* This is the interface to the rpcecho pipe. */
23 :
24 : #include "includes.h"
25 : #include "ntdomain.h"
26 : #include "librpc/gen_ndr/ndr_echo.h"
27 : #include "librpc/gen_ndr/ndr_echo_scompat.h"
28 :
29 : #undef DBGC_CLASS
30 : #define DBGC_CLASS DBGC_RPC_SRV
31 :
32 : /* Add one to the input and return it */
33 :
34 0 : void _echo_AddOne(struct pipes_struct *p, struct echo_AddOne *r )
35 : {
36 0 : DEBUG(10, ("_echo_AddOne\n"));
37 :
38 0 : *r->out.out_data = r->in.in_data + 1;
39 0 : }
40 :
41 : /* Echo back an array of data */
42 :
43 0 : void _echo_EchoData(struct pipes_struct *p, struct echo_EchoData *r)
44 : {
45 0 : DEBUG(10, ("_echo_EchoData\n"));
46 :
47 0 : if ( r->in.len == 0 ) {
48 0 : r->out.out_data = NULL;
49 0 : return;
50 : }
51 :
52 0 : r->out.out_data = talloc_array(p->mem_ctx, uint8_t, r->in.len);
53 0 : memcpy( r->out.out_data, r->in.in_data, r->in.len );
54 0 : return;
55 : }
56 :
57 : /* Sink an array of data */
58 :
59 0 : void _echo_SinkData(struct pipes_struct *p, struct echo_SinkData *r)
60 : {
61 0 : DEBUG(10, ("_echo_SinkData\n"));
62 :
63 : /* My that was some yummy data! */
64 0 : return;
65 : }
66 :
67 : /* Source an array of data */
68 :
69 0 : void _echo_SourceData(struct pipes_struct *p, struct echo_SourceData *r)
70 : {
71 : uint32_t i;
72 :
73 0 : DEBUG(10, ("_echo_SourceData\n"));
74 :
75 0 : if ( r->in.len == 0 ) {
76 0 : r->out.data = NULL;
77 0 : return;
78 : }
79 :
80 0 : r->out.data = talloc_array(p->mem_ctx, uint8_t, r->in.len );
81 :
82 0 : for (i = 0; i < r->in.len; i++ ) {
83 0 : r->out.data[i] = i & 0xff;
84 : }
85 :
86 0 : return;
87 : }
88 :
89 0 : void _echo_TestCall(struct pipes_struct *p, struct echo_TestCall *r)
90 : {
91 0 : p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
92 0 : return;
93 : }
94 :
95 0 : NTSTATUS _echo_TestCall2(struct pipes_struct *p, struct echo_TestCall2 *r)
96 : {
97 0 : p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
98 0 : return NT_STATUS_OK;
99 : }
100 :
101 0 : uint32_t _echo_TestSleep(struct pipes_struct *p, struct echo_TestSleep *r)
102 : {
103 0 : smb_msleep(r->in.seconds * 1000);
104 0 : return 0;
105 : }
106 :
107 0 : void _echo_TestEnum(struct pipes_struct *p, struct echo_TestEnum *r)
108 : {
109 0 : p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
110 0 : return;
111 : }
112 :
113 0 : void _echo_TestSurrounding(struct pipes_struct *p, struct echo_TestSurrounding *r)
114 : {
115 0 : p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
116 0 : return;
117 : }
118 :
119 0 : uint16_t _echo_TestDoublePointer(struct pipes_struct *p, struct echo_TestDoublePointer *r)
120 : {
121 0 : p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
122 0 : return 0;
123 : }
124 :
125 : /* include the generated boilerplate */
126 : #include "librpc/gen_ndr/ndr_echo_scompat.c"
|