21
21
#include "includes.h"
22
22
#include "rpcclient.h"
23
#include "../librpc/gen_ndr/cli_echo.h"
23
#include "../librpc/gen_ndr/ndr_echo_c.h"
25
25
static NTSTATUS cmd_echo_add_one(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
26
26
int argc, const char **argv)
28
struct dcerpc_binding_handle *b = cli->binding_handle;
28
29
uint32 request = 1, response;
32
33
printf("Usage: %s [num]\n", argv[0]);
33
34
return NT_STATUS_OK;
37
38
request = atoi(argv[1]);
39
result = rpccli_echo_AddOne(cli, mem_ctx, request, &response);
41
if (!NT_STATUS_IS_OK(result))
41
status = dcerpc_echo_AddOne(b, mem_ctx, request, &response);
42
if (!NT_STATUS_IS_OK(status)) {
44
46
printf("%d + 1 = %d\n", request, response);
50
52
static NTSTATUS cmd_echo_data(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
51
53
int argc, const char **argv)
55
struct dcerpc_binding_handle *b = cli->binding_handle;
55
58
uint8_t *in_data = NULL, *out_data = NULL;
63
66
if ( (in_data = (uint8_t*)SMB_MALLOC(size)) == NULL ) {
64
67
printf("Failure to allocate buff of %d bytes\n",
66
result = NT_STATUS_NO_MEMORY;
69
status = NT_STATUS_NO_MEMORY;
69
72
if ( (out_data = (uint8_t*)SMB_MALLOC(size)) == NULL ) {
70
73
printf("Failure to allocate buff of %d bytes\n",
72
result = NT_STATUS_NO_MEMORY;
75
status = NT_STATUS_NO_MEMORY;
76
for (i = 0; i < size; i++)
79
for (i = 0; i < size; i++) {
77
80
in_data[i] = i & 0xff;
79
result = rpccli_echo_EchoData(cli, mem_ctx, size, in_data, out_data);
81
if (!NT_STATUS_IS_OK(result))
83
status = dcerpc_echo_EchoData(b, mem_ctx, size, in_data, out_data);
84
if (!NT_STATUS_IS_OK(status)) {
84
88
for (i = 0; i < size; i++) {
85
89
if (in_data[i] != out_data[i]) {
86
90
printf("mismatch at offset %d, %d != %d\n",
87
91
i, in_data[i], out_data[i]);
88
result = NT_STATUS_UNSUCCESSFUL;
92
status = NT_STATUS_UNSUCCESSFUL;
93
97
SAFE_FREE(in_data);
94
98
SAFE_FREE(out_data);
99
103
static NTSTATUS cmd_echo_source_data(struct rpc_pipe_client *cli,
100
104
TALLOC_CTX *mem_ctx, int argc,
101
105
const char **argv)
107
struct dcerpc_binding_handle *b = cli->binding_handle;
105
110
uint8_t *out_data = NULL;
113
118
if ( (out_data = (uint8_t*)SMB_MALLOC(size)) == NULL ) {
114
119
printf("Failure to allocate buff of %d bytes\n",
116
result = NT_STATUS_NO_MEMORY;
121
status = NT_STATUS_NO_MEMORY;
121
result = rpccli_echo_SourceData(cli, mem_ctx, size, out_data);
123
if (!NT_STATUS_IS_OK(result))
126
status = dcerpc_echo_SourceData(b, mem_ctx, size, out_data);
127
if (!NT_STATUS_IS_OK(status)) {
126
131
for (i = 0; i < size; i++) {
127
132
if (out_data && out_data[i] != (i & 0xff)) {
128
133
printf("mismatch at offset %d, %d != %d\n",
129
134
i, out_data[i], i & 0xff);
130
result = NT_STATUS_UNSUCCESSFUL;
135
status = NT_STATUS_UNSUCCESSFUL;
136
141
SAFE_FREE(out_data);
140
145
static NTSTATUS cmd_echo_sink_data(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
141
146
int argc, const char **argv)
148
struct dcerpc_binding_handle *b = cli->binding_handle;
145
151
uint8_t *in_data = NULL;
153
159
if ( (in_data = (uint8_t*)SMB_MALLOC(size)) == NULL ) {
154
160
printf("Failure to allocate buff of %d bytes\n",
156
result = NT_STATUS_NO_MEMORY;
162
status = NT_STATUS_NO_MEMORY;
160
for (i = 0; i < size; i++)
166
for (i = 0; i < size; i++) {
161
167
in_data[i] = i & 0xff;
163
result = rpccli_echo_SinkData(cli, mem_ctx, size, in_data);
165
if (!NT_STATUS_IS_OK(result))
170
status = dcerpc_echo_SinkData(b, mem_ctx, size, in_data);
171
if (!NT_STATUS_IS_OK(status)) {
169
176
SAFE_FREE(in_data);
174
181
/* List of commands exported by this module */