2 Unix SMB/CIFS implementation.
3 test suite for various RAP operations
4 Copyright (C) Volker Lendecke 2004
5 Copyright (C) Tim Potter 2005
6 Copyright (C) Jelmer Vernooij 2007
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.
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.
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/>.
23 #include "libcli/libcli.h"
24 #include "torture/smbtorture.h"
25 #include "torture/util.h"
26 #include "../librpc/gen_ndr/ndr_rap.h"
27 #include "librpc/ndr/libndr.h"
28 #include "param/param.h"
29 #include "torture/rap/proto.h"
31 #define RAP_GOTO(call) do { \
34 if (!NT_STATUS_IS_OK(_status)) { \
40 #define RAP_RETURN(call) do { \
43 if (!NT_STATUS_IS_OK(_status)) { \
49 #define NDR_GOTO(call) do { \
50 enum ndr_err_code _ndr_err; \
52 if (!NDR_ERR_CODE_IS_SUCCESS(_ndr_err)) { \
53 result = ndr_map_error2ntstatus(_ndr_err); \
58 #define NDR_RETURN(call) do { \
59 enum ndr_err_code _ndr_err; \
61 if (!NDR_ERR_CODE_IS_SUCCESS(_ndr_err)) { \
62 return ndr_map_error2ntstatus(_ndr_err); \
70 const char *auxdatadesc;
75 uint16_t rcv_paramlen, rcv_datalen;
77 struct ndr_push *ndr_push_param;
78 struct ndr_push *ndr_push_data;
79 struct ndr_pull *ndr_pull_param;
80 struct ndr_pull *ndr_pull_data;
83 #define RAPNDR_FLAGS (LIBNDR_FLAG_NOALIGN|LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
85 static struct rap_call *new_rap_cli_call(TALLOC_CTX *mem_ctx, uint16_t callno)
87 struct rap_call *call;
89 call = talloc(mem_ctx, struct rap_call);
94 call->callno = callno;
95 call->rcv_paramlen = 4;
97 call->paramdesc = NULL;
98 call->datadesc = NULL;
99 call->auxdatadesc = NULL;
101 call->ndr_push_param = ndr_push_init_ctx(mem_ctx);
102 call->ndr_push_param->flags = RAPNDR_FLAGS;
104 call->ndr_push_data = ndr_push_init_ctx(mem_ctx);
105 call->ndr_push_data->flags = RAPNDR_FLAGS;
110 static void rap_cli_push_paramdesc(struct rap_call *call, char desc)
114 if (call->paramdesc != NULL)
115 len = strlen(call->paramdesc);
117 call->paramdesc = talloc_realloc(call,
122 call->paramdesc[len] = desc;
123 call->paramdesc[len+1] = '\0';
126 static void rap_cli_push_word(struct rap_call *call, uint16_t val)
128 rap_cli_push_paramdesc(call, 'W');
129 ndr_push_uint16(call->ndr_push_param, NDR_SCALARS, val);
132 static void rap_cli_push_dword(struct rap_call *call, uint32_t val)
134 rap_cli_push_paramdesc(call, 'D');
135 ndr_push_uint32(call->ndr_push_param, NDR_SCALARS, val);
138 static void rap_cli_push_rcvbuf(struct rap_call *call, int len)
140 rap_cli_push_paramdesc(call, 'r');
141 rap_cli_push_paramdesc(call, 'L');
142 ndr_push_uint16(call->ndr_push_param, NDR_SCALARS, len);
143 call->rcv_datalen = len;
146 static void rap_cli_push_sendbuf(struct rap_call *call, int len)
148 rap_cli_push_paramdesc(call, 's');
149 rap_cli_push_paramdesc(call, 'T');
150 ndr_push_uint16(call->ndr_push_param, NDR_SCALARS, len);
153 static void rap_cli_push_param(struct rap_call *call, uint16_t val)
155 rap_cli_push_paramdesc(call, 'P');
156 ndr_push_uint16(call->ndr_push_param, NDR_SCALARS, val);
159 static void rap_cli_expect_multiple_entries(struct rap_call *call)
161 rap_cli_push_paramdesc(call, 'e');
162 rap_cli_push_paramdesc(call, 'h');
163 call->rcv_paramlen += 4; /* uint16_t entry count, uint16_t total */
166 static void rap_cli_expect_word(struct rap_call *call)
168 rap_cli_push_paramdesc(call, 'h');
169 call->rcv_paramlen += 2;
172 static void rap_cli_push_string(struct rap_call *call, const char *str)
175 rap_cli_push_paramdesc(call, 'O');
178 rap_cli_push_paramdesc(call, 'z');
179 ndr_push_string(call->ndr_push_param, NDR_SCALARS, str);
182 static void rap_cli_expect_format(struct rap_call *call, const char *format)
184 call->datadesc = format;
187 static void rap_cli_expect_extra_format(struct rap_call *call, const char *format)
189 call->auxdatadesc = format;
192 static NTSTATUS rap_pull_string(TALLOC_CTX *mem_ctx, struct ndr_pull *ndr,
193 uint16_t convert, const char **dest)
195 uint16_t string_offset;
200 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &string_offset));
201 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &ignore));
203 string_offset -= convert;
205 if (string_offset+1 > ndr->data_size)
206 return NT_STATUS_INVALID_PARAMETER;
208 p = (const char *)(ndr->data + string_offset);
209 len = strnlen(p, ndr->data_size-string_offset);
211 if ( string_offset + len + 1 > ndr->data_size )
212 return NT_STATUS_INVALID_PARAMETER;
214 *dest = talloc_zero_array(mem_ctx, char, len+1);
215 pull_string(discard_const_p(char, *dest), p, len+1, len, STR_ASCII);
220 static NTSTATUS rap_cli_do_call(struct smbcli_tree *tree,
221 struct rap_call *call)
224 DATA_BLOB param_blob;
226 struct ndr_push *params;
227 struct ndr_push *data;
228 struct smb_trans2 trans;
230 params = ndr_push_init_ctx(call);
233 return NT_STATUS_NO_MEMORY;
235 params->flags = RAPNDR_FLAGS;
237 data = ndr_push_init_ctx(call);
240 return NT_STATUS_NO_MEMORY;
242 data->flags = RAPNDR_FLAGS;
244 trans.in.max_param = call->rcv_paramlen;
245 trans.in.max_data = call->rcv_datalen;
246 trans.in.max_setup = 0;
248 trans.in.timeout = 0;
249 trans.in.setup_count = 0;
250 trans.in.setup = NULL;
251 trans.in.trans_name = "\\PIPE\\LANMAN";
253 NDR_RETURN(ndr_push_uint16(params, NDR_SCALARS, call->callno));
255 NDR_RETURN(ndr_push_string(params, NDR_SCALARS, call->paramdesc));
257 NDR_RETURN(ndr_push_string(params, NDR_SCALARS, call->datadesc));
259 param_blob = ndr_push_blob(call->ndr_push_param);
260 NDR_RETURN(ndr_push_bytes(params, param_blob.data,
263 data_blob = ndr_push_blob(call->ndr_push_data);
264 NDR_RETURN(ndr_push_bytes(data, data_blob.data,
267 if (call->auxdatadesc)
268 NDR_RETURN(ndr_push_string(params, NDR_SCALARS, call->auxdatadesc));
270 trans.in.params = ndr_push_blob(params);
271 trans.in.data = ndr_push_blob(data);
273 result = smb_raw_trans(tree, call, &trans);
275 if (!NT_STATUS_IS_OK(result))
278 call->ndr_pull_param = ndr_pull_init_blob(&trans.out.params, call);
279 call->ndr_pull_param->flags = RAPNDR_FLAGS;
281 call->ndr_pull_data = ndr_pull_init_blob(&trans.out.data, call);
282 call->ndr_pull_data->flags = RAPNDR_FLAGS;
288 static NTSTATUS smbcli_rap_netshareenum(struct smbcli_tree *tree,
290 struct rap_NetShareEnum *r)
292 struct rap_call *call;
293 NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
296 call = new_rap_cli_call(tree, RAP_WshareEnum);
299 return NT_STATUS_NO_MEMORY;
301 rap_cli_push_word(call, r->in.level); /* Level */
302 rap_cli_push_rcvbuf(call, r->in.bufsize);
303 rap_cli_expect_multiple_entries(call);
305 switch(r->in.level) {
307 rap_cli_expect_format(call, "B13");
310 rap_cli_expect_format(call, "B13BWz");
314 if (DEBUGLEVEL >= 10) {
315 NDR_PRINT_IN_DEBUG(rap_NetShareEnum, r);
318 result = rap_cli_do_call(tree, call);
320 if (!NT_STATUS_IS_OK(result))
323 NDR_GOTO(ndr_pull_rap_status(call->ndr_pull_param, NDR_SCALARS, &r->out.status));
324 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.convert));
325 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.count));
326 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.available));
328 r->out.info = talloc_array(mem_ctx, union rap_share_info, r->out.count);
330 if (r->out.info == NULL) {
331 result = NT_STATUS_NO_MEMORY;
335 for (i=0; i<r->out.count; i++) {
336 switch(r->in.level) {
338 NDR_GOTO(ndr_pull_bytes(call->ndr_pull_data,
339 r->out.info[i].info0.share_name, 13));
342 NDR_GOTO(ndr_pull_bytes(call->ndr_pull_data,
343 r->out.info[i].info1.share_name, 13));
344 NDR_GOTO(ndr_pull_bytes(call->ndr_pull_data,
345 &r->out.info[i].info1.reserved1, 1));
346 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_data,
347 NDR_SCALARS, &r->out.info[i].info1.share_type));
348 RAP_GOTO(rap_pull_string(mem_ctx, call->ndr_pull_data,
350 &r->out.info[i].info1.comment));
355 if (DEBUGLEVEL >= 10) {
356 NDR_PRINT_OUT_DEBUG(rap_NetShareEnum, r);
358 result = NT_STATUS_OK;
365 static bool test_netshareenum(struct torture_context *tctx,
366 struct smbcli_state *cli)
368 struct rap_NetShareEnum r;
374 torture_assert_ntstatus_ok(tctx,
375 smbcli_rap_netshareenum(cli->tree, tctx, &r), "");
377 for (i=0; i<r.out.count; i++) {
378 printf("%s %d %s\n", r.out.info[i].info1.share_name,
379 r.out.info[i].info1.share_type,
380 r.out.info[i].info1.comment);
386 static NTSTATUS smbcli_rap_netserverenum2(struct smbcli_tree *tree,
388 struct rap_NetServerEnum2 *r)
390 struct rap_call *call;
391 NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
394 call = new_rap_cli_call(mem_ctx, RAP_NetServerEnum2);
397 return NT_STATUS_NO_MEMORY;
399 rap_cli_push_word(call, r->in.level);
400 rap_cli_push_rcvbuf(call, r->in.bufsize);
401 rap_cli_expect_multiple_entries(call);
402 rap_cli_push_dword(call, r->in.servertype);
403 rap_cli_push_string(call, r->in.domain);
405 switch(r->in.level) {
407 rap_cli_expect_format(call, "B16");
410 rap_cli_expect_format(call, "B16BBDz");
414 if (DEBUGLEVEL >= 10) {
415 NDR_PRINT_IN_DEBUG(rap_NetServerEnum2, r);
418 result = rap_cli_do_call(tree, call);
420 if (!NT_STATUS_IS_OK(result))
423 result = NT_STATUS_INVALID_PARAMETER;
425 NDR_GOTO(ndr_pull_rap_status(call->ndr_pull_param, NDR_SCALARS, &r->out.status));
426 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.convert));
427 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.count));
428 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.available));
430 r->out.info = talloc_array(mem_ctx, union rap_server_info, r->out.count);
432 if (r->out.info == NULL) {
433 result = NT_STATUS_NO_MEMORY;
437 for (i=0; i<r->out.count; i++) {
438 switch(r->in.level) {
440 NDR_GOTO(ndr_pull_bytes(call->ndr_pull_data,
441 r->out.info[i].info0.name, 16));
444 NDR_GOTO(ndr_pull_bytes(call->ndr_pull_data,
445 r->out.info[i].info1.name, 16));
446 NDR_GOTO(ndr_pull_bytes(call->ndr_pull_data,
447 &r->out.info[i].info1.version_major, 1));
448 NDR_GOTO(ndr_pull_bytes(call->ndr_pull_data,
449 &r->out.info[i].info1.version_minor, 1));
450 NDR_GOTO(ndr_pull_uint32(call->ndr_pull_data,
451 NDR_SCALARS, &r->out.info[i].info1.servertype));
452 RAP_GOTO(rap_pull_string(mem_ctx, call->ndr_pull_data,
454 &r->out.info[i].info1.comment));
458 if (DEBUGLEVEL >= 10) {
459 NDR_PRINT_OUT_DEBUG(rap_NetServerEnum2, r);
462 result = NT_STATUS_OK;
469 static bool test_netserverenum(struct torture_context *tctx,
470 struct smbcli_state *cli)
472 struct rap_NetServerEnum2 r;
477 r.in.servertype = 0xffffffff;
478 r.in.servertype = 0x80000000;
481 torture_assert_ntstatus_ok(tctx,
482 smbcli_rap_netserverenum2(cli->tree, tctx, &r), "");
484 for (i=0; i<r.out.count; i++) {
485 switch (r.in.level) {
487 printf("%s\n", r.out.info[i].info0.name);
490 printf("%s %x %s\n", r.out.info[i].info1.name,
491 r.out.info[i].info1.servertype,
492 r.out.info[i].info1.comment);
500 NTSTATUS smbcli_rap_netservergetinfo(struct smbcli_tree *tree,
502 struct rap_WserverGetInfo *r)
504 struct rap_call *call;
505 NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
507 if (!(call = new_rap_cli_call(mem_ctx, RAP_WserverGetInfo))) {
508 return NT_STATUS_NO_MEMORY;
511 rap_cli_push_word(call, r->in.level);
512 rap_cli_push_rcvbuf(call, r->in.bufsize);
513 rap_cli_expect_word(call);
515 switch(r->in.level) {
517 rap_cli_expect_format(call, "B16");
520 rap_cli_expect_format(call, "B16BBDz");
523 result = NT_STATUS_INVALID_PARAMETER;
527 if (DEBUGLEVEL >= 10) {
528 NDR_PRINT_IN_DEBUG(rap_WserverGetInfo, r);
531 result = rap_cli_do_call(tree, call);
533 if (!NT_STATUS_IS_OK(result))
536 NDR_GOTO(ndr_pull_rap_status(call->ndr_pull_param, NDR_SCALARS, &r->out.status));
537 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.convert));
538 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.available));
540 switch(r->in.level) {
542 NDR_GOTO(ndr_pull_bytes(call->ndr_pull_data,
543 r->out.info.info0.name, 16));
546 NDR_GOTO(ndr_pull_bytes(call->ndr_pull_data,
547 r->out.info.info1.name, 16));
548 NDR_GOTO(ndr_pull_bytes(call->ndr_pull_data,
549 &r->out.info.info1.version_major, 1));
550 NDR_GOTO(ndr_pull_bytes(call->ndr_pull_data,
551 &r->out.info.info1.version_minor, 1));
552 NDR_GOTO(ndr_pull_uint32(call->ndr_pull_data,
553 NDR_SCALARS, &r->out.info.info1.servertype));
554 RAP_GOTO(rap_pull_string(mem_ctx, call->ndr_pull_data,
556 &r->out.info.info1.comment));
559 if (DEBUGLEVEL >= 10) {
560 NDR_PRINT_OUT_DEBUG(rap_WserverGetInfo, r);
567 static NTSTATUS rap_pull_rap_JobInfo0(TALLOC_CTX *mem_ctx, struct ndr_pull *ndr, uint16_t convert, struct rap_PrintJobInfo0 *r)
569 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->JobID));
574 static NTSTATUS rap_pull_rap_JobInfo1(TALLOC_CTX *mem_ctx, struct ndr_pull *ndr, uint16_t convert, struct rap_PrintJobInfo1 *r)
576 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->JobID));
577 NDR_RETURN(ndr_pull_charset(ndr, NDR_SCALARS, &r->UserName, 21, sizeof(uint8_t), CH_DOS));
578 NDR_RETURN(ndr_pull_uint8(ndr, NDR_SCALARS, &r->Pad));
579 NDR_RETURN(ndr_pull_charset(ndr, NDR_SCALARS, &r->NotifyName, 16, sizeof(uint8_t), CH_DOS));
580 NDR_RETURN(ndr_pull_charset(ndr, NDR_SCALARS, &r->DataType, 10, sizeof(uint8_t), CH_DOS));
581 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->PrintParameterString));
582 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->JobPosition));
583 NDR_RETURN(ndr_pull_rap_PrintJStatusCode(ndr, NDR_SCALARS, &r->JobStatus));
584 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->JobStatusString));
585 NDR_RETURN(ndr_pull_time_t(ndr, NDR_SCALARS, &r->TimeSubmitted));
586 NDR_RETURN(ndr_pull_uint32(ndr, NDR_SCALARS, &r->JobSize));
587 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->JobCommentString));
592 static NTSTATUS rap_pull_rap_JobInfo2(TALLOC_CTX *mem_ctx, struct ndr_pull *ndr, uint16_t convert, struct rap_PrintJobInfo2 *r)
594 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->JobID));
595 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->Priority));
596 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->UserName));
597 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->JobPosition));
598 NDR_RETURN(ndr_pull_rap_PrintJStatusCode(ndr, NDR_SCALARS, &r->JobStatus));
599 NDR_RETURN(ndr_pull_time_t(ndr, NDR_SCALARS, &r->TimeSubmitted));
600 NDR_RETURN(ndr_pull_uint32(ndr, NDR_SCALARS, &r->JobSize));
601 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->JobCommentString));
602 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->DocumentName));
607 static NTSTATUS rap_pull_rap_JobInfo3(TALLOC_CTX *mem_ctx, struct ndr_pull *ndr, uint16_t convert, struct rap_PrintJobInfo3 *r)
609 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->JobID));
610 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->Priority));
611 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->UserName));
612 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->JobPosition));
613 NDR_RETURN(ndr_pull_rap_PrintJStatusCode(ndr, NDR_SCALARS, &r->JobStatus));
614 NDR_RETURN(ndr_pull_time_t(ndr, NDR_SCALARS, &r->TimeSubmitted));
615 NDR_RETURN(ndr_pull_uint32(ndr, NDR_SCALARS, &r->JobSize));
616 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->JobCommentString));
617 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->DocumentName));
618 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->NotifyName));
619 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->DataType));
620 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->PrintParameterString));
621 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->StatusString));
622 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->QueueName));
623 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->PrintProcessorName));
624 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->PrintProcessorParams));
625 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->DriverName));
626 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->DriverDataOffset));
627 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->PrinterNameOffset));
632 static NTSTATUS rap_pull_rap_PrintQueue0(TALLOC_CTX *mem_ctx, struct ndr_pull *ndr, uint16_t convert, struct rap_PrintQueue0 *r)
634 NDR_RETURN(ndr_pull_charset(ndr, NDR_SCALARS, &r->PrintQName, 13, sizeof(uint8_t), CH_DOS));
639 static NTSTATUS rap_pull_rap_PrintQueue1(TALLOC_CTX *mem_ctx, struct ndr_pull *ndr, uint16_t convert, struct rap_PrintQueue1 *r)
641 NDR_RETURN(ndr_pull_charset(ndr, NDR_SCALARS, &r->PrintQName, 13, sizeof(uint8_t), CH_DOS));
642 NDR_RETURN(ndr_pull_uint8(ndr, NDR_SCALARS, &r->Pad1));
643 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->Priority));
644 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->StartTime));
645 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->UntilTime));
646 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->SeparatorPageFilename));
647 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->PrintProcessorDllName));
648 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->PrintDestinationsName));
649 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->PrintParameterString));
650 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->CommentString));
651 NDR_RETURN(ndr_pull_rap_PrintQStatusCode(ndr, NDR_SCALARS, &r->PrintQStatus));
652 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->PrintJobCount));
657 static NTSTATUS rap_pull_rap_PrintQueue2(TALLOC_CTX *mem_ctx, struct ndr_pull *ndr, uint16_t convert, struct rap_PrintQueue2 *r)
660 RAP_RETURN(rap_pull_rap_PrintQueue1(mem_ctx, ndr, convert, &r->queue));
661 r->job = talloc_zero_array(mem_ctx, struct rap_PrintJobInfo1, r->queue.PrintJobCount);
662 if (r->job == NULL) {
663 return NT_STATUS_NO_MEMORY;
665 for (i=0; i < r->queue.PrintJobCount; i++) {
666 RAP_RETURN(rap_pull_rap_JobInfo1(mem_ctx, ndr, convert, &r->job[i]));
672 static NTSTATUS rap_pull_rap_PrintQueue3(TALLOC_CTX *mem_ctx, struct ndr_pull *ndr, uint16_t convert, struct rap_PrintQueue3 *r)
674 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->PrintQueueName));
675 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->Priority));
676 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->StartTime));
677 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->UntilTime));
678 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->Pad));
679 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->SeparatorPageFilename));
680 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->PrintProcessorDllName));
681 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->PrintParameterString));
682 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->CommentString));
683 NDR_RETURN(ndr_pull_rap_PrintQStatusCode(ndr, NDR_SCALARS, &r->PrintQStatus));
684 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->PrintJobCount));
685 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->Printers));
686 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->DriverName));
687 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->PrintDriverData));
692 static NTSTATUS rap_pull_rap_PrintQueue4(TALLOC_CTX *mem_ctx, struct ndr_pull *ndr, uint16_t convert, struct rap_PrintQueue4 *r)
695 RAP_RETURN(rap_pull_rap_PrintQueue3(mem_ctx, ndr, convert, &r->queue));
696 r->job = talloc_zero_array(mem_ctx, struct rap_PrintJobInfo2, r->queue.PrintJobCount);
697 if (r->job == NULL) {
698 return NT_STATUS_NO_MEMORY;
700 for (i=0; i < r->queue.PrintJobCount; i++) {
701 RAP_RETURN(rap_pull_rap_JobInfo2(mem_ctx, ndr, convert, &r->job[i]));
707 static NTSTATUS rap_pull_rap_PrintQueue5(TALLOC_CTX *mem_ctx, struct ndr_pull *ndr, uint16_t convert, struct rap_PrintQueue5 *r)
709 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->PrintQueueName));
714 static enum ndr_err_code ndr_pull_rap_NetPrintQEnum_data(struct ndr_pull *ndr, struct rap_NetPrintQEnum *r)
716 uint32_t cntr_info_0;
717 TALLOC_CTX *_mem_save_info_0;
719 NDR_PULL_ALLOC_N(ndr, r->out.info, r->out.count);
720 _mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
721 NDR_PULL_SET_MEM_CTX(ndr, r->out.info, 0);
722 for (cntr_info_0 = 0; cntr_info_0 < r->out.count; cntr_info_0++) {
723 NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->out.info[cntr_info_0], r->in.level));
724 NDR_CHECK(ndr_pull_rap_printq_info(ndr, NDR_SCALARS, &r->out.info[cntr_info_0]));
726 for (cntr_info_0 = 0; cntr_info_0 < r->out.count; cntr_info_0++) {
727 NDR_CHECK(ndr_pull_rap_printq_info(ndr, NDR_BUFFERS, &r->out.info[cntr_info_0]));
729 NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, 0);
731 return NDR_ERR_SUCCESS;
734 NTSTATUS smbcli_rap_netprintqenum(struct smbcli_tree *tree,
736 struct rap_NetPrintQEnum *r)
738 struct rap_call *call;
739 NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
741 if (!(call = new_rap_cli_call(mem_ctx, RAP_WPrintQEnum))) {
742 return NT_STATUS_NO_MEMORY;
745 rap_cli_push_word(call, r->in.level);
746 rap_cli_push_rcvbuf(call, r->in.bufsize);
747 rap_cli_expect_multiple_entries(call);
749 switch(r->in.level) {
751 rap_cli_expect_format(call, "B13");
754 rap_cli_expect_format(call, "B13BWWWzzzzzWW");
757 rap_cli_expect_format(call, "B13BWWWzzzzzWN");
758 rap_cli_expect_extra_format(call, "WB21BB16B10zWWzDDz");
761 rap_cli_expect_format(call, "zWWWWzzzzWWzzl");
764 rap_cli_expect_format(call, "zWWWWzzzzWNzzl");
765 rap_cli_expect_extra_format(call, "WWzWWDDzz");
766 /* no mention of extra format in MS-RAP */
769 rap_cli_expect_format(call, "z");
772 result = NT_STATUS_INVALID_PARAMETER;
776 if (DEBUGLEVEL >= 10) {
777 NDR_PRINT_IN_DEBUG(rap_NetPrintQEnum, r);
780 result = rap_cli_do_call(tree, call);
782 if (!NT_STATUS_IS_OK(result))
785 result = NT_STATUS_INVALID_PARAMETER;
787 NDR_GOTO(ndr_pull_rap_status(call->ndr_pull_param, NDR_SCALARS, &r->out.status));
788 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.convert));
789 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.count));
790 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.available));
792 call->ndr_pull_data->relative_rap_convert = r->out.convert;
794 NDR_GOTO(ndr_pull_rap_NetPrintQEnum_data(call->ndr_pull_data, r));
796 r->out.info = talloc_steal(mem_ctx, r->out.info);
798 if (DEBUGLEVEL >= 10) {
799 NDR_PRINT_OUT_DEBUG(rap_NetPrintQEnum, r);
802 result = NT_STATUS_OK;
809 NTSTATUS smbcli_rap_netprintqgetinfo(struct smbcli_tree *tree,
811 struct rap_NetPrintQGetInfo *r)
813 struct rap_call *call;
814 NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
816 if (!(call = new_rap_cli_call(mem_ctx, RAP_WPrintQGetInfo))) {
817 return NT_STATUS_NO_MEMORY;
820 rap_cli_push_string(call, r->in.PrintQueueName);
821 rap_cli_push_word(call, r->in.level);
822 rap_cli_push_rcvbuf(call, r->in.bufsize);
823 rap_cli_expect_word(call);
825 switch(r->in.level) {
827 rap_cli_expect_format(call, "B13");
830 rap_cli_expect_format(call, "B13BWWWzzzzzWW");
833 rap_cli_expect_format(call, "B13BWWWzzzzzWN");
834 rap_cli_expect_extra_format(call, "WB21BB16B10zWWzDDz");
837 rap_cli_expect_format(call, "zWWWWzzzzWWzzl");
840 rap_cli_expect_format(call, "zWWWWzzzzWNzzl");
841 rap_cli_expect_extra_format(call, "WWzWWDDzz");
842 /* no mention of extra format in MS-RAP */
845 rap_cli_expect_format(call, "z");
848 result = NT_STATUS_INVALID_PARAMETER;
852 if (DEBUGLEVEL >= 10) {
853 NDR_PRINT_IN_DEBUG(rap_NetPrintQGetInfo, r);
856 result = rap_cli_do_call(tree, call);
858 if (!NT_STATUS_IS_OK(result))
861 result = NT_STATUS_INVALID_PARAMETER;
865 NDR_GOTO(ndr_pull_rap_status(call->ndr_pull_param, NDR_SCALARS, &r->out.status));
866 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.convert));
867 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.available));
869 call->ndr_pull_data->relative_rap_convert = r->out.convert;
871 NDR_GOTO(ndr_pull_set_switch_value(call->ndr_pull_data, &r->out.info, r->in.level));
872 NDR_GOTO(ndr_pull_rap_printq_info(call->ndr_pull_data, NDR_SCALARS|NDR_BUFFERS, &r->out.info));
874 if (DEBUGLEVEL >= 10) {
875 NDR_PRINT_OUT_DEBUG(rap_NetPrintQGetInfo, r);
878 result = NT_STATUS_OK;
884 NTSTATUS smbcli_rap_netprintjobpause(struct smbcli_tree *tree,
886 struct rap_NetPrintJobPause *r)
888 struct rap_call *call;
889 NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
891 if (!(call = new_rap_cli_call(mem_ctx, RAP_WPrintJobPause))) {
892 return NT_STATUS_NO_MEMORY;
895 rap_cli_push_word(call, r->in.JobID);
897 rap_cli_expect_format(call, "W");
899 if (DEBUGLEVEL >= 10) {
900 NDR_PRINT_IN_DEBUG(rap_NetPrintJobPause, r);
903 result = rap_cli_do_call(tree, call);
905 if (!NT_STATUS_IS_OK(result))
908 NDR_GOTO(ndr_pull_rap_status(call->ndr_pull_param, NDR_SCALARS, &r->out.status));
909 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.convert));
911 if (DEBUGLEVEL >= 10) {
912 NDR_PRINT_OUT_DEBUG(rap_NetPrintJobPause, r);
920 NTSTATUS smbcli_rap_netprintjobcontinue(struct smbcli_tree *tree,
922 struct rap_NetPrintJobContinue *r)
924 struct rap_call *call;
925 NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
927 if (!(call = new_rap_cli_call(mem_ctx, RAP_WPrintJobContinue))) {
928 return NT_STATUS_NO_MEMORY;
931 rap_cli_push_word(call, r->in.JobID);
933 rap_cli_expect_format(call, "W");
935 if (DEBUGLEVEL >= 10) {
936 NDR_PRINT_IN_DEBUG(rap_NetPrintJobContinue, r);
939 result = rap_cli_do_call(tree, call);
941 if (!NT_STATUS_IS_OK(result))
944 NDR_GOTO(ndr_pull_rap_status(call->ndr_pull_param, NDR_SCALARS, &r->out.status));
945 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.convert));
947 if (DEBUGLEVEL >= 10) {
948 NDR_PRINT_OUT_DEBUG(rap_NetPrintJobContinue, r);
956 NTSTATUS smbcli_rap_netprintjobdelete(struct smbcli_tree *tree,
958 struct rap_NetPrintJobDelete *r)
960 struct rap_call *call;
961 NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
963 if (!(call = new_rap_cli_call(mem_ctx, RAP_WPrintJobDel))) {
964 return NT_STATUS_NO_MEMORY;
967 rap_cli_push_word(call, r->in.JobID);
969 rap_cli_expect_format(call, "W");
971 if (DEBUGLEVEL >= 10) {
972 NDR_PRINT_IN_DEBUG(rap_NetPrintJobDelete, r);
975 result = rap_cli_do_call(tree, call);
977 if (!NT_STATUS_IS_OK(result))
980 NDR_GOTO(ndr_pull_rap_status(call->ndr_pull_param, NDR_SCALARS, &r->out.status));
981 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.convert));
983 if (DEBUGLEVEL >= 10) {
984 NDR_PRINT_OUT_DEBUG(rap_NetPrintJobDelete, r);
992 NTSTATUS smbcli_rap_netprintqueuepause(struct smbcli_tree *tree,
994 struct rap_NetPrintQueuePause *r)
996 struct rap_call *call;
997 NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
999 if (!(call = new_rap_cli_call(mem_ctx, RAP_WPrintQPause))) {
1000 return NT_STATUS_NO_MEMORY;
1003 rap_cli_push_string(call, r->in.PrintQueueName);
1005 rap_cli_expect_format(call, "");
1007 if (DEBUGLEVEL >= 10) {
1008 NDR_PRINT_IN_DEBUG(rap_NetPrintQueuePause, r);
1011 result = rap_cli_do_call(tree, call);
1013 if (!NT_STATUS_IS_OK(result))
1016 NDR_GOTO(ndr_pull_rap_status(call->ndr_pull_param, NDR_SCALARS, &r->out.status));
1017 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.convert));
1019 if (DEBUGLEVEL >= 10) {
1020 NDR_PRINT_OUT_DEBUG(rap_NetPrintQueuePause, r);
1028 NTSTATUS smbcli_rap_netprintqueueresume(struct smbcli_tree *tree,
1029 TALLOC_CTX *mem_ctx,
1030 struct rap_NetPrintQueueResume *r)
1032 struct rap_call *call;
1033 NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
1035 if (!(call = new_rap_cli_call(mem_ctx, RAP_WPrintQContinue))) {
1036 return NT_STATUS_NO_MEMORY;
1039 rap_cli_push_string(call, r->in.PrintQueueName);
1041 rap_cli_expect_format(call, "");
1043 if (DEBUGLEVEL >= 10) {
1044 NDR_PRINT_IN_DEBUG(rap_NetPrintQueueResume, r);
1047 result = rap_cli_do_call(tree, call);
1049 if (!NT_STATUS_IS_OK(result))
1052 NDR_GOTO(ndr_pull_rap_status(call->ndr_pull_param, NDR_SCALARS, &r->out.status));
1053 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.convert));
1055 if (DEBUGLEVEL >= 10) {
1056 NDR_PRINT_OUT_DEBUG(rap_NetPrintQueueResume, r);
1064 NTSTATUS smbcli_rap_netprintqueuepurge(struct smbcli_tree *tree,
1065 TALLOC_CTX *mem_ctx,
1066 struct rap_NetPrintQueuePurge *r)
1068 struct rap_call *call;
1069 NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
1071 if (!(call = new_rap_cli_call(mem_ctx, RAP_WPrintQPurge))) {
1072 return NT_STATUS_NO_MEMORY;
1075 rap_cli_push_string(call, r->in.PrintQueueName);
1077 rap_cli_expect_format(call, "");
1079 if (DEBUGLEVEL >= 10) {
1080 NDR_PRINT_IN_DEBUG(rap_NetPrintQueuePurge, r);
1083 result = rap_cli_do_call(tree, call);
1085 if (!NT_STATUS_IS_OK(result))
1088 NDR_GOTO(ndr_pull_rap_status(call->ndr_pull_param, NDR_SCALARS, &r->out.status));
1089 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.convert));
1091 if (DEBUGLEVEL >= 10) {
1092 NDR_PRINT_OUT_DEBUG(rap_NetPrintQueuePurge, r);
1100 static enum ndr_err_code ndr_pull_rap_NetPrintJobEnum_data(struct ndr_pull *ndr, struct rap_NetPrintJobEnum *r)
1102 uint32_t cntr_info_0;
1103 TALLOC_CTX *_mem_save_info_0;
1105 NDR_PULL_ALLOC_N(ndr, r->out.info, r->out.count);
1106 _mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
1107 NDR_PULL_SET_MEM_CTX(ndr, r->out.info, 0);
1108 for (cntr_info_0 = 0; cntr_info_0 < r->out.count; cntr_info_0++) {
1109 NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->out.info[cntr_info_0], r->in.level));
1110 NDR_CHECK(ndr_pull_rap_printj_info(ndr, NDR_SCALARS, &r->out.info[cntr_info_0]));
1112 for (cntr_info_0 = 0; cntr_info_0 < r->out.count; cntr_info_0++) {
1113 NDR_CHECK(ndr_pull_rap_printj_info(ndr, NDR_BUFFERS, &r->out.info[cntr_info_0]));
1115 NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, 0);
1117 return NDR_ERR_SUCCESS;
1120 NTSTATUS smbcli_rap_netprintjobenum(struct smbcli_tree *tree,
1121 TALLOC_CTX *mem_ctx,
1122 struct rap_NetPrintJobEnum *r)
1124 struct rap_call *call;
1125 NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
1127 if (!(call = new_rap_cli_call(mem_ctx, RAP_WPrintJobEnum))) {
1128 return NT_STATUS_NO_MEMORY;
1131 rap_cli_push_string(call, r->in.PrintQueueName);
1132 rap_cli_push_word(call, r->in.level);
1133 rap_cli_push_rcvbuf(call, r->in.bufsize);
1134 rap_cli_expect_multiple_entries(call);
1136 switch(r->in.level) {
1138 rap_cli_expect_format(call, "W");
1141 rap_cli_expect_format(call, "WB21BB16B10zWWzDDz");
1144 rap_cli_expect_format(call, "WWzWWDDzz");
1147 rap_cli_expect_format(call, "WWzWWDDzzzzzzzzzzlz");
1150 rap_cli_expect_format(call, "WWzWWDDzzzzzDDDDDDD");
1153 result = NT_STATUS_INVALID_PARAMETER;
1157 if (DEBUGLEVEL >= 10) {
1158 NDR_PRINT_IN_DEBUG(rap_NetPrintJobEnum, r);
1161 result = rap_cli_do_call(tree, call);
1163 if (!NT_STATUS_IS_OK(result))
1166 result = NT_STATUS_INVALID_PARAMETER;
1168 NDR_GOTO(ndr_pull_rap_status(call->ndr_pull_param, NDR_SCALARS, &r->out.status));
1169 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.convert));
1170 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.count));
1171 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.available));
1173 call->ndr_pull_data->relative_rap_convert = r->out.convert;
1175 NDR_GOTO(ndr_pull_rap_NetPrintJobEnum_data(call->ndr_pull_data, r));
1177 if (DEBUGLEVEL >= 10) {
1178 NDR_PRINT_OUT_DEBUG(rap_NetPrintJobEnum, r);
1181 r->out.info = talloc_steal(mem_ctx, r->out.info);
1183 result = NT_STATUS_OK;
1190 NTSTATUS smbcli_rap_netprintjobgetinfo(struct smbcli_tree *tree,
1191 TALLOC_CTX *mem_ctx,
1192 struct rap_NetPrintJobGetInfo *r)
1194 struct rap_call *call;
1195 NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
1197 if (!(call = new_rap_cli_call(mem_ctx, RAP_WPrintJobGetInfo))) {
1198 return NT_STATUS_NO_MEMORY;
1201 rap_cli_push_word(call, r->in.JobID);
1202 rap_cli_push_word(call, r->in.level);
1203 rap_cli_push_rcvbuf(call, r->in.bufsize);
1204 rap_cli_expect_word(call);
1206 switch(r->in.level) {
1208 rap_cli_expect_format(call, "W");
1211 rap_cli_expect_format(call, "WB21BB16B10zWWzDDz");
1214 rap_cli_expect_format(call, "WWzWWDDzz");
1217 rap_cli_expect_format(call, "WWzWWDDzzzzzzzzzzlz");
1220 rap_cli_expect_format(call, "WWzWWDDzzzzzDDDDDDD");
1223 result = NT_STATUS_INVALID_PARAMETER;
1227 if (DEBUGLEVEL >= 10) {
1228 NDR_PRINT_IN_DEBUG(rap_NetPrintJobGetInfo, r);
1231 result = rap_cli_do_call(tree, call);
1233 if (!NT_STATUS_IS_OK(result))
1236 result = NT_STATUS_INVALID_PARAMETER;
1238 NDR_GOTO(ndr_pull_rap_status(call->ndr_pull_param, NDR_SCALARS, &r->out.status));
1239 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.convert));
1240 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.available));
1242 call->ndr_pull_data->relative_rap_convert = r->out.convert;
1244 NDR_GOTO(ndr_pull_set_switch_value(call->ndr_pull_data, &r->out.info, r->in.level));
1245 NDR_GOTO(ndr_pull_rap_printj_info(call->ndr_pull_data, NDR_SCALARS|NDR_BUFFERS, &r->out.info));
1247 if (DEBUGLEVEL >= 10) {
1248 NDR_PRINT_OUT_DEBUG(rap_NetPrintJobGetInfo, r);
1251 result = NT_STATUS_OK;
1258 NTSTATUS smbcli_rap_netprintjobsetinfo(struct smbcli_tree *tree,
1259 TALLOC_CTX *mem_ctx,
1260 struct rap_NetPrintJobSetInfo *r)
1262 struct rap_call *call;
1263 NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
1265 if (!(call = new_rap_cli_call(mem_ctx, RAP_WPrintJobSetInfo))) {
1266 return NT_STATUS_NO_MEMORY;
1269 rap_cli_push_word(call, r->in.JobID);
1270 rap_cli_push_word(call, r->in.level);
1271 rap_cli_push_sendbuf(call, r->in.bufsize);
1272 rap_cli_push_param(call, r->in.ParamNum);
1274 switch (r->in.ParamNum) {
1275 case RAP_PARAM_JOBNUM:
1276 case RAP_PARAM_JOBPOSITION:
1277 case RAP_PARAM_JOBSTATUS:
1278 NDR_GOTO(ndr_push_uint16(call->ndr_push_param, NDR_SCALARS, r->in.Param.value));
1280 case RAP_PARAM_USERNAME:
1281 case RAP_PARAM_NOTIFYNAME:
1282 case RAP_PARAM_DATATYPE:
1283 case RAP_PARAM_PARAMETERS_STRING:
1284 case RAP_PARAM_JOBSTATUSSTR:
1285 case RAP_PARAM_JOBCOMMENT:
1286 NDR_GOTO(ndr_push_string(call->ndr_push_param, NDR_SCALARS, r->in.Param.string));
1288 case RAP_PARAM_TIMESUBMITTED:
1289 case RAP_PARAM_JOBSIZE:
1290 NDR_GOTO(ndr_push_uint32(call->ndr_push_param, NDR_SCALARS, r->in.Param.value4));
1293 result = NT_STATUS_INVALID_PARAMETER;
1297 /* not really sure if this is correct */
1298 rap_cli_expect_format(call, "WB21BB16B10zWWzDDz");
1300 if (DEBUGLEVEL >= 10) {
1301 NDR_PRINT_IN_DEBUG(rap_NetPrintJobSetInfo, r);
1304 result = rap_cli_do_call(tree, call);
1306 if (!NT_STATUS_IS_OK(result))
1309 result = NT_STATUS_INVALID_PARAMETER;
1311 NDR_GOTO(ndr_pull_rap_status(call->ndr_pull_param, NDR_SCALARS, &r->out.status));
1312 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.convert));
1314 result = NT_STATUS_OK;
1316 if (!NT_STATUS_IS_OK(result)) {
1320 if (DEBUGLEVEL >= 10) {
1321 NDR_PRINT_OUT_DEBUG(rap_NetPrintJobSetInfo, r);
1329 static NTSTATUS rap_pull_rap_PrintDest0(TALLOC_CTX *mem_ctx, struct ndr_pull *ndr, uint16_t convert, struct rap_PrintDest0 *r)
1331 NDR_RETURN(ndr_pull_charset(ndr, NDR_SCALARS, &r->PrintDestName, 9, sizeof(uint8_t), CH_DOS));
1333 return NT_STATUS_OK;
1336 static NTSTATUS rap_pull_rap_PrintDest1(TALLOC_CTX *mem_ctx, struct ndr_pull *ndr, uint16_t convert, struct rap_PrintDest1 *r)
1338 NDR_RETURN(ndr_pull_charset(ndr, NDR_SCALARS, &r->PrintDestName, 9, sizeof(uint8_t), CH_DOS));
1339 NDR_RETURN(ndr_pull_charset(ndr, NDR_SCALARS, &r->UserName, 21, sizeof(uint8_t), CH_DOS));
1340 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->JobId));
1341 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->Status));
1342 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->StatusStringName));
1343 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->Time));
1345 return NT_STATUS_OK;
1348 static NTSTATUS rap_pull_rap_PrintDest2(TALLOC_CTX *mem_ctx, struct ndr_pull *ndr, uint16_t convert, struct rap_PrintDest2 *r)
1350 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->PrinterName));
1352 return NT_STATUS_OK;
1355 static NTSTATUS rap_pull_rap_PrintDest3(TALLOC_CTX *mem_ctx, struct ndr_pull *ndr, uint16_t convert, struct rap_PrintDest3 *r)
1357 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->PrinterName));
1358 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->UserName));
1359 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->LogAddr));
1360 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->JobId));
1361 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->Status));
1362 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->StatusStringName));
1363 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->Comment));
1364 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->Drivers));
1365 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->Time));
1366 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->Pad1));
1368 return NT_STATUS_OK;
1372 static enum ndr_err_code ndr_pull_rap_NetPrintDestEnum_data(struct ndr_pull *ndr, struct rap_NetPrintDestEnum *r)
1374 uint32_t cntr_info_0;
1375 TALLOC_CTX *_mem_save_info_0;
1377 NDR_PULL_ALLOC_N(ndr, r->out.info, r->out.count);
1378 _mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
1379 NDR_PULL_SET_MEM_CTX(ndr, r->out.info, 0);
1380 for (cntr_info_0 = 0; cntr_info_0 < r->out.count; cntr_info_0++) {
1381 NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->out.info[cntr_info_0], r->in.level));
1382 NDR_CHECK(ndr_pull_rap_printdest_info(ndr, NDR_SCALARS, &r->out.info[cntr_info_0]));
1384 for (cntr_info_0 = 0; cntr_info_0 < r->out.count; cntr_info_0++) {
1385 NDR_CHECK(ndr_pull_rap_printdest_info(ndr, NDR_BUFFERS, &r->out.info[cntr_info_0]));
1387 NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, 0);
1389 return NDR_ERR_SUCCESS;
1393 NTSTATUS smbcli_rap_netprintdestenum(struct smbcli_tree *tree,
1394 TALLOC_CTX *mem_ctx,
1395 struct rap_NetPrintDestEnum *r)
1397 struct rap_call *call;
1398 NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
1400 if (!(call = new_rap_cli_call(mem_ctx, RAP_WPrintDestEnum))) {
1401 return NT_STATUS_NO_MEMORY;
1404 rap_cli_push_word(call, r->in.level);
1405 rap_cli_push_rcvbuf(call, r->in.bufsize);
1406 rap_cli_expect_multiple_entries(call);
1408 switch(r->in.level) {
1410 rap_cli_expect_format(call, "B9");
1413 rap_cli_expect_format(call, "B9B21WWzW");
1416 rap_cli_expect_format(call, "z");
1419 rap_cli_expect_format(call, "zzzWWzzzWW");
1422 result = NT_STATUS_INVALID_PARAMETER;
1426 if (DEBUGLEVEL >= 10) {
1427 NDR_PRINT_IN_DEBUG(rap_NetPrintDestEnum, r);
1430 result = rap_cli_do_call(tree, call);
1432 if (!NT_STATUS_IS_OK(result))
1435 result = NT_STATUS_INVALID_PARAMETER;
1437 NDR_GOTO(ndr_pull_rap_status(call->ndr_pull_param, NDR_SCALARS, &r->out.status));
1438 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.convert));
1439 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.count));
1440 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.available));
1442 call->ndr_pull_data->relative_rap_convert = r->out.convert;
1444 NDR_GOTO(ndr_pull_rap_NetPrintDestEnum_data(call->ndr_pull_data, r));
1446 r->out.info = talloc_steal(mem_ctx, r->out.info);
1448 if (DEBUGLEVEL >= 10) {
1449 NDR_PRINT_OUT_DEBUG(rap_NetPrintDestEnum, r);
1452 result = NT_STATUS_OK;
1459 NTSTATUS smbcli_rap_netprintdestgetinfo(struct smbcli_tree *tree,
1460 TALLOC_CTX *mem_ctx,
1461 struct rap_NetPrintDestGetInfo *r)
1463 struct rap_call *call;
1464 NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
1466 if (!(call = new_rap_cli_call(mem_ctx, RAP_WPrintDestGetInfo))) {
1467 return NT_STATUS_NO_MEMORY;
1470 rap_cli_push_string(call, r->in.PrintDestName);
1471 rap_cli_push_word(call, r->in.level);
1472 rap_cli_push_rcvbuf(call, r->in.bufsize);
1473 rap_cli_expect_word(call);
1475 switch(r->in.level) {
1477 rap_cli_expect_format(call, "B9");
1480 rap_cli_expect_format(call, "B9B21WWzW");
1483 rap_cli_expect_format(call, "z");
1486 rap_cli_expect_format(call, "zzzWWzzzWW");
1489 result = NT_STATUS_INVALID_PARAMETER;
1493 if (DEBUGLEVEL >= 10) {
1494 NDR_PRINT_IN_DEBUG(rap_NetPrintDestGetInfo, r);
1497 result = rap_cli_do_call(tree, call);
1499 if (!NT_STATUS_IS_OK(result))
1502 result = NT_STATUS_INVALID_PARAMETER;
1504 NDR_GOTO(ndr_pull_rap_status(call->ndr_pull_param, NDR_SCALARS, &r->out.status));
1505 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.convert));
1506 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.available));
1508 call->ndr_pull_data->relative_rap_convert = r->out.convert;
1510 NDR_GOTO(ndr_pull_set_switch_value(call->ndr_pull_data, &r->out.info, r->in.level));
1511 NDR_GOTO(ndr_pull_rap_printdest_info(call->ndr_pull_data, NDR_SCALARS|NDR_BUFFERS, &r->out.info));
1513 if (DEBUGLEVEL >= 10) {
1514 NDR_PRINT_OUT_DEBUG(rap_NetPrintDestGetInfo, r);
1517 result = NT_STATUS_OK;
1524 NTSTATUS smbcli_rap_netuserpasswordset2(struct smbcli_tree *tree,
1525 struct smb_iconv_convenience *iconv_convenience,
1526 TALLOC_CTX *mem_ctx,
1527 struct rap_NetUserPasswordSet2 *r)
1529 struct rap_call *call;
1530 NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
1532 if (!(call = new_rap_cli_call(mem_ctx, RAP_WUserPasswordSet2))) {
1533 return NT_STATUS_NO_MEMORY;
1536 rap_cli_push_string(call, r->in.UserName);
1537 rap_cli_push_paramdesc(call, 'b');
1538 rap_cli_push_paramdesc(call, '1');
1539 rap_cli_push_paramdesc(call, '6');
1540 ndr_push_array_uint8(call->ndr_push_param, NDR_SCALARS, r->in.OldPassword, 16);
1541 rap_cli_push_paramdesc(call, 'b');
1542 rap_cli_push_paramdesc(call, '1');
1543 rap_cli_push_paramdesc(call, '6');
1544 ndr_push_array_uint8(call->ndr_push_param, NDR_SCALARS, r->in.NewPassword, 16);
1545 rap_cli_push_word(call, r->in.EncryptedPassword);
1546 rap_cli_push_word(call, r->in.RealPasswordLength);
1548 rap_cli_expect_format(call, "");
1550 if (DEBUGLEVEL >= 10) {
1551 NDR_PRINT_IN_DEBUG(rap_NetUserPasswordSet2, r);
1554 result = rap_cli_do_call(tree, call);
1556 if (!NT_STATUS_IS_OK(result))
1559 result = NT_STATUS_INVALID_PARAMETER;
1561 NDR_GOTO(ndr_pull_rap_status(call->ndr_pull_param, NDR_SCALARS, &r->out.status));
1562 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.convert));
1564 result = NT_STATUS_OK;
1566 if (!NT_STATUS_IS_OK(result)) {
1570 if (DEBUGLEVEL >= 10) {
1571 NDR_PRINT_OUT_DEBUG(rap_NetUserPasswordSet2, r);
1579 NTSTATUS smbcli_rap_netoemchangepassword(struct smbcli_tree *tree,
1580 struct smb_iconv_convenience *iconv_convenience,
1581 TALLOC_CTX *mem_ctx,
1582 struct rap_NetOEMChangePassword *r)
1584 struct rap_call *call;
1585 NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
1587 if (!(call = new_rap_cli_call(mem_ctx, RAP_SamOEMChgPasswordUser2_P))) {
1588 return NT_STATUS_NO_MEMORY;
1591 rap_cli_push_string(call, r->in.UserName);
1592 rap_cli_push_sendbuf(call, 532);
1593 ndr_push_array_uint8(call->ndr_push_data, NDR_SCALARS, r->in.crypt_password, 516);
1594 ndr_push_array_uint8(call->ndr_push_data, NDR_SCALARS, r->in.password_hash, 16);
1596 rap_cli_expect_format(call, "B516B16");
1598 if (DEBUGLEVEL >= 10) {
1599 NDR_PRINT_IN_DEBUG(rap_NetOEMChangePassword, r);
1602 result = rap_cli_do_call(tree, call);
1604 if (!NT_STATUS_IS_OK(result))
1607 result = NT_STATUS_INVALID_PARAMETER;
1609 NDR_GOTO(ndr_pull_rap_status(call->ndr_pull_param, NDR_SCALARS, &r->out.status));
1610 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.convert));
1612 result = NT_STATUS_OK;
1614 if (!NT_STATUS_IS_OK(result)) {
1618 if (DEBUGLEVEL >= 10) {
1619 NDR_PRINT_OUT_DEBUG(rap_NetOEMChangePassword, r);
1627 static NTSTATUS rap_pull_rap_NetUserInfo0(TALLOC_CTX *mem_ctx, struct ndr_pull *ndr, uint16_t convert, struct rap_NetUserInfo0 *r)
1629 NDR_RETURN(ndr_pull_charset(ndr, NDR_SCALARS, &r->Name, 21, sizeof(uint8_t), CH_DOS));
1631 return NT_STATUS_OK;
1634 static NTSTATUS rap_pull_rap_NetUserInfo1(TALLOC_CTX *mem_ctx, struct ndr_pull *ndr, uint16_t convert, struct rap_NetUserInfo1 *r)
1636 NDR_RETURN(ndr_pull_charset(ndr, NDR_SCALARS, &r->Name, 21, sizeof(uint8_t), CH_DOS));
1637 NDR_RETURN(ndr_pull_uint8(ndr, NDR_SCALARS, &r->Pad));
1638 NDR_RETURN(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->Password, 16));
1639 NDR_RETURN(ndr_pull_time_t(ndr, NDR_SCALARS, &r->PasswordAge));
1640 NDR_RETURN(ndr_pull_rap_UserPriv(ndr, NDR_SCALARS, &r->Priv));
1641 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->HomeDir));
1642 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->Comment));
1643 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->Flags));
1644 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->ScriptPath));
1646 return NT_STATUS_OK;
1649 static NTSTATUS rap_pull_rap_NetUserInfo2(TALLOC_CTX *mem_ctx, struct ndr_pull *ndr, uint16_t convert, struct rap_NetUserInfo2 *r)
1651 NDR_RETURN(ndr_pull_charset(ndr, NDR_SCALARS, &r->Name, 21, sizeof(uint8_t), CH_DOS));
1652 NDR_RETURN(ndr_pull_uint8(ndr, NDR_SCALARS, &r->Pad));
1653 NDR_RETURN(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->Password, 16));
1654 NDR_RETURN(ndr_pull_time_t(ndr, NDR_SCALARS, &r->PasswordAge));
1655 NDR_RETURN(ndr_pull_rap_UserPriv(ndr, NDR_SCALARS, &r->Priv));
1656 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->HomeDir));
1657 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->Comment));
1658 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->Flags));
1659 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->ScriptPath));
1660 NDR_RETURN(ndr_pull_rap_AuthFlags(ndr, NDR_SCALARS, &r->AuthFlags));
1661 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->FullName));
1662 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->UsrComment));
1663 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->pParms));
1664 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->WorkStations));
1665 NDR_RETURN(ndr_pull_time_t(ndr, NDR_SCALARS, &r->LastLogon));
1666 NDR_RETURN(ndr_pull_time_t(ndr, NDR_SCALARS, &r->LastLogOff));
1667 NDR_RETURN(ndr_pull_time_t(ndr, NDR_SCALARS, &r->AcctExpires));
1668 NDR_RETURN(ndr_pull_uint32(ndr, NDR_SCALARS, &r->MaxStorage));
1669 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->UnitsPerWeek));
1670 /* NDR_RETURN(ndr_pull_rap_LogonHours(ndr, NDR_SCALARS, r->LogonHours)); */
1671 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->BadPwCount));
1672 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->NumLogons));
1673 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->LogonServer));
1674 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->CountryCode));
1675 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->CodePage));
1677 return NT_STATUS_OK;
1680 static NTSTATUS rap_pull_rap_NetUserInfo10(TALLOC_CTX *mem_ctx, struct ndr_pull *ndr, uint16_t convert, struct rap_NetUserInfo10 *r)
1682 NDR_RETURN(ndr_pull_charset(ndr, NDR_SCALARS, &r->Name, 21, sizeof(uint8_t), CH_DOS));
1683 NDR_RETURN(ndr_pull_uint8(ndr, NDR_SCALARS, &r->Pad));
1684 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->Comment));
1685 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->UsrComment));
1686 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->FullName));
1688 return NT_STATUS_OK;
1691 static NTSTATUS rap_pull_rap_NetUserInfo11(TALLOC_CTX *mem_ctx, struct ndr_pull *ndr, uint16_t convert, struct rap_NetUserInfo11 *r)
1693 NDR_RETURN(ndr_pull_charset(ndr, NDR_SCALARS, &r->Name, 21, sizeof(uint8_t), CH_DOS));
1694 NDR_RETURN(ndr_pull_uint8(ndr, NDR_SCALARS, &r->Pad));
1695 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->Comment));
1696 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->UsrComment));
1697 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->FullName));
1698 NDR_RETURN(ndr_pull_rap_UserPriv(ndr, NDR_SCALARS, &r->Priv));
1699 NDR_RETURN(ndr_pull_rap_AuthFlags(ndr, NDR_SCALARS, &r->AuthFlags));
1700 NDR_RETURN(ndr_pull_time_t(ndr, NDR_SCALARS, &r->PasswordAge));
1701 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->HomeDir));
1702 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->Parms));
1703 NDR_RETURN(ndr_pull_time_t(ndr, NDR_SCALARS, &r->LastLogon));
1704 NDR_RETURN(ndr_pull_time_t(ndr, NDR_SCALARS, &r->LastLogOff));
1705 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->BadPWCount));
1706 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->NumLogons));
1707 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->LogonServer));
1708 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->CountryCode));
1709 RAP_RETURN(rap_pull_string(mem_ctx, ndr, convert, &r->WorkStations));
1710 NDR_RETURN(ndr_pull_uint32(ndr, NDR_SCALARS, &r->MaxStorage));
1711 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->UnitsPerWeek));
1712 /* NDR_RETURN(ndr_pull_rap_LogonHours(ndr, NDR_SCALARS, r->LogonHours)); */
1713 NDR_RETURN(ndr_pull_uint16(ndr, NDR_SCALARS, &r->CodePage));
1715 return NT_STATUS_OK;
1718 NTSTATUS smbcli_rap_netusergetinfo(struct smbcli_tree *tree,
1719 TALLOC_CTX *mem_ctx,
1720 struct rap_NetUserGetInfo *r)
1722 struct rap_call *call;
1723 NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
1725 if (!(call = new_rap_cli_call(mem_ctx, RAP_WUserGetInfo))) {
1726 return NT_STATUS_NO_MEMORY;
1729 rap_cli_push_string(call, r->in.UserName);
1730 rap_cli_push_word(call, r->in.level);
1731 rap_cli_push_rcvbuf(call, r->in.bufsize);
1732 rap_cli_expect_word(call);
1734 switch(r->in.level) {
1736 rap_cli_expect_format(call, "B21");
1739 rap_cli_expect_format(call, "B21BB16DWzzWz");
1742 rap_cli_expect_format(call, "B21BB16DWzzWzDzzzzDDDDWb21WWzWW");
1745 rap_cli_expect_format(call, "B21Bzzz");
1748 rap_cli_expect_format(call, "B21BzzzWDDzzDDWWzWzDWb21W");
1751 result = NT_STATUS_INVALID_PARAMETER;
1755 if (DEBUGLEVEL >= 10) {
1756 NDR_PRINT_IN_DEBUG(rap_NetUserGetInfo, r);
1759 result = rap_cli_do_call(tree, call);
1761 if (!NT_STATUS_IS_OK(result))
1764 NDR_GOTO(ndr_pull_rap_status(call->ndr_pull_param, NDR_SCALARS, &r->out.status));
1765 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.convert));
1766 NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.available));
1768 call->ndr_pull_data->relative_rap_convert = r->out.convert;
1770 NDR_GOTO(ndr_pull_set_switch_value(call->ndr_pull_data, &r->out.info, r->in.level));
1771 NDR_GOTO(ndr_pull_rap_netuser_info(call->ndr_pull_data, NDR_SCALARS|NDR_BUFFERS, &r->out.info));
1773 if (DEBUGLEVEL >= 10) {
1774 NDR_PRINT_OUT_DEBUG(rap_NetUserGetInfo, r);
1777 result = NT_STATUS_OK;
1785 static bool test_netservergetinfo(struct torture_context *tctx,
1786 struct smbcli_state *cli)
1788 struct rap_WserverGetInfo r;
1791 r.in.bufsize = 0xffff;
1794 torture_assert_ntstatus_ok(tctx,
1795 smbcli_rap_netservergetinfo(cli->tree, tctx, &r),
1796 "rap_netservergetinfo level 0 failed");
1797 torture_assert_werr_ok(tctx, W_ERROR(r.out.status),
1798 "rap_netservergetinfo level 0 failed");
1801 torture_assert_ntstatus_ok(tctx,
1802 smbcli_rap_netservergetinfo(cli->tree, tctx, &r),
1803 "rap_netservergetinfo level 1 failed");
1804 torture_assert_werr_ok(tctx, W_ERROR(r.out.status),
1805 "rap_netservergetinfo level 1 failed");
1810 bool torture_rap_scan(struct torture_context *torture, struct smbcli_state *cli)
1814 for (callno = 0; callno < 0xffff; callno++) {
1815 struct rap_call *call = new_rap_cli_call(torture, callno);
1818 result = rap_cli_do_call(cli->tree, call);
1820 if (!NT_STATUS_EQUAL(result, NT_STATUS_INVALID_PARAMETER))
1823 printf("callno %d is RAP call\n", callno);
1829 NTSTATUS torture_rap_init(void)
1831 struct torture_suite *suite = torture_suite_create(talloc_autofree_context(), "RAP");
1832 struct torture_suite *suite_basic = torture_suite_create(suite, "BASIC");
1834 torture_suite_add_suite(suite, suite_basic);
1835 torture_suite_add_suite(suite, torture_rap_rpc(suite));
1836 torture_suite_add_suite(suite, torture_rap_printing(suite));
1837 torture_suite_add_suite(suite, torture_rap_sam(suite));
1839 torture_suite_add_1smb_test(suite_basic, "netserverenum",
1840 test_netserverenum);
1841 torture_suite_add_1smb_test(suite_basic, "netshareenum",
1843 torture_suite_add_1smb_test(suite_basic, "netservergetinfo",
1844 test_netservergetinfo);
1846 torture_suite_add_1smb_test(suite, "SCAN", torture_rap_scan);
1848 suite->description = talloc_strdup(suite,
1849 "Remote Administration Protocol tests");
1851 torture_register_suite(suite);
1853 return NT_STATUS_OK;