2 Unix SMB/CIFS implementation.
4 routines for marshalling/unmarshalling spoolss subcontext buffer structures
6 Copyright (C) Andrew Tridgell 2003
7 Copyright (C) Tim Potter 2003
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26 #include "librpc/gen_ndr/ndr_spoolss.h"
28 #define NDR_SPOOLSS_PUSH_ENUM_OUT(fn,type) do { \
32 struct ndr_push *ndr2;\
34 ndr2 = ndr_push_init_ctx(ndr);\
36 return NT_STATUS_NO_MEMORY;\
39 for (i=0;i<r->out.count;i++) {\
40 ndr2->data += ndr2->offset;\
42 NDR_CHECK(ndr_push_##type(ndr2, NDR_SCALARS|NDR_BUFFERS, r->in.level, &(*r->out.info)[i]));\
44 if (*r->in.buf_size >= ndr->offset) {\
45 buffer = data_blob_const(ndr2->data, ndr2->offset);\
49 r->out.result = WERR_INSUFFICIENT_BUFFER;\
51 *r->out.buf_size = ndr2->offset;\
53 NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.info));\
55 NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS|NDR_BUFFERS, buffer));\
57 NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.buf_size));\
58 NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.count));\
59 NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));\
62 #define NDR_SPOOLSS_PULL_ENUM_OUT(fn,type) do { \
65 struct ndr_pull *ndr2;\
67 NDR_CHECK(ndr_pull_unique_ptr(ndr, &_ptr_info));\
69 NDR_ALLOC(ndr, r->out.info);\
74 NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS|NDR_BUFFERS, &buffer));\
77 if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {\
78 NDR_ALLOC(ndr, r->out.buf_size);\
80 NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.buf_size));\
81 NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS|NDR_BUFFERS, &r->out.count));\
82 NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));\
84 if (r->out.info == NULL && r->out.count) {\
85 return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE,\
86 #fn ": r->out.count[%d] but r->out.info == NULL\n",\
90 if (r->out.info && r->out.count) {\
91 ndr2 = ndr_pull_init_blob(&buffer, ndr);\
92 if (!ndr2) return NT_STATUS_NO_MEMORY;\
93 NDR_ALLOC_N(ndr2, *r->out.info, r->out.count);\
94 for (i=0;i<r->out.count;i++) {\
95 ndr2->data += ndr2->offset;\
97 NDR_CHECK(ndr_pull_##type(ndr2, NDR_SCALARS|NDR_BUFFERS, r->in.level, &(*r->out.info)[i]));\
102 #define NDR_SPOOLSS_PRINT_ENUM_OUT(fn,type) do { \
103 ndr_print_struct(ndr, "out", #fn);\
105 ndr_print_ptr(ndr, "info", r->out.info);\
109 ndr->print(ndr, "%s: ARRAY(%d)", "info", r->out.count);\
111 for (i=0;i<r->out.count;i++) {\
113 asprintf(&idx, "[%d]", i);\
115 ndr_print_##type(ndr, idx, r->in.level, &((*r->out.info)[i]));\
122 ndr_print_ptr(ndr, "buf_size", r->out.buf_size);\
124 ndr_print_uint32(ndr, "buf_size", *r->out.buf_size);\
126 ndr_print_uint32(ndr, "count", r->out.count);\
127 ndr_print_WERROR(ndr, "result", r->out.result);\
134 NTSTATUS
ndr_push_spoolss_EnumPrinters(struct ndr_push
*ndr
, int flags
, struct spoolss_EnumPrinters
*r
)
136 if (!(flags
& NDR_IN
)) goto ndr_out
;
138 NDR_CHECK(ndr_push_uint32(ndr
, NDR_SCALARS
|NDR_BUFFERS
, r
->in
.flags
));
139 { uint32_t _flags_save_string
= ndr
->flags
;
140 ndr_set_flags(&ndr
->flags
, LIBNDR_FLAG_STR_SIZE4
|LIBNDR_FLAG_STR_LEN4
);
141 NDR_CHECK(ndr_push_unique_ptr(ndr
, r
->in
.server
));
142 ndr
->flags
= _flags_save_string
;
144 { uint32_t _flags_save_string
= ndr
->flags
;
145 ndr_set_flags(&ndr
->flags
, LIBNDR_FLAG_STR_SIZE4
|LIBNDR_FLAG_STR_LEN4
);
147 NDR_CHECK(ndr_push_string(ndr
, NDR_SCALARS
|NDR_BUFFERS
, r
->in
.server
));
149 ndr
->flags
= _flags_save_string
;
151 NDR_CHECK(ndr_push_uint32(ndr
, NDR_SCALARS
|NDR_BUFFERS
, r
->in
.level
));
152 NDR_CHECK(ndr_push_unique_ptr(ndr
, r
->in
.buffer
));
154 NDR_CHECK(ndr_push_DATA_BLOB(ndr
, NDR_SCALARS
|NDR_BUFFERS
, *r
->in
.buffer
));
156 NDR_CHECK(ndr_push_uint32(ndr
, NDR_SCALARS
|NDR_BUFFERS
, *r
->in
.buf_size
));
158 if (!(flags
& NDR_OUT
)) goto done
;
160 NDR_SPOOLSS_PUSH_ENUM_OUT(spoolss_EnumPrinters
,spoolss_PrinterInfo
);
166 NTSTATUS
ndr_pull_spoolss_EnumPrinters(struct ndr_pull
*ndr
, int flags
, struct spoolss_EnumPrinters
*r
)
168 uint32_t _ptr_server
;
169 uint32_t _ptr_buffer
;
171 if (!(flags
& NDR_IN
)) goto ndr_out
;
175 NDR_CHECK(ndr_pull_uint32(ndr
, NDR_SCALARS
|NDR_BUFFERS
, &r
->in
.flags
));
176 { uint32_t _flags_save_string
= ndr
->flags
;
177 ndr_set_flags(&ndr
->flags
, LIBNDR_FLAG_STR_SIZE4
|LIBNDR_FLAG_STR_LEN4
);
178 NDR_CHECK(ndr_pull_unique_ptr(ndr
, &_ptr_server
));
180 NDR_ALLOC(ndr
, r
->in
.server
);
184 ndr
->flags
= _flags_save_string
;
186 { uint32_t _flags_save_string
= ndr
->flags
;
187 ndr_set_flags(&ndr
->flags
, LIBNDR_FLAG_STR_SIZE4
|LIBNDR_FLAG_STR_LEN4
);
189 NDR_CHECK(ndr_pull_string(ndr
, NDR_SCALARS
|NDR_BUFFERS
, &r
->in
.server
));
191 ndr
->flags
= _flags_save_string
;
193 NDR_CHECK(ndr_pull_uint32(ndr
, NDR_SCALARS
|NDR_BUFFERS
, &r
->in
.level
));
194 NDR_CHECK(ndr_pull_unique_ptr(ndr
, &_ptr_buffer
));
196 NDR_ALLOC(ndr
, r
->in
.buffer
);
201 NDR_CHECK(ndr_pull_DATA_BLOB(ndr
, NDR_SCALARS
|NDR_BUFFERS
, r
->in
.buffer
));
203 NDR_ALLOC(ndr
, r
->in
.buf_size
);
204 NDR_CHECK(ndr_pull_uint32(ndr
, NDR_SCALARS
|NDR_BUFFERS
, r
->in
.buf_size
));
205 NDR_ALLOC(ndr
, r
->out
.buf_size
);
206 *r
->out
.buf_size
= *r
->in
.buf_size
;
208 if (!(flags
& NDR_OUT
)) goto done
;
210 NDR_SPOOLSS_PULL_ENUM_OUT(spoolss_EnumPrinters
,spoolss_PrinterInfo
);
217 void ndr_print_spoolss_EnumPrinters(struct ndr_print
*ndr
, const char *name
, int flags
, struct spoolss_EnumPrinters
*r
)
219 ndr_print_struct(ndr
, name
, "spoolss_EnumPrinters");
221 if (flags
& NDR_SET_VALUES
) {
222 ndr
->flags
|= LIBNDR_PRINT_SET_VALUES
;
224 if (flags
& NDR_IN
) {
225 ndr_print_struct(ndr
, "in", "spoolss_EnumPrinters");
227 ndr_print_uint32(ndr
, "flags", r
->in
.flags
);
228 ndr_print_ptr(ndr
, "server", r
->in
.server
);
231 ndr_print_string(ndr
, "server", r
->in
.server
);
234 ndr_print_uint32(ndr
, "level", r
->in
.level
);
235 ndr_print_ptr(ndr
, "buffer", r
->in
.buffer
);
238 ndr_print_DATA_BLOB(ndr
, "buffer", *r
->in
.buffer
);
241 ndr_print_ptr(ndr
, "buf_size", r
->in
.buf_size
);
243 ndr_print_uint32(ndr
, "buf_size", *r
->in
.buf_size
);
247 if (flags
& NDR_OUT
) {
248 NDR_SPOOLSS_PRINT_ENUM_OUT(spoolss_EnumPrinters
,spoolss_PrinterInfo
);
256 NTSTATUS
ndr_push_spoolss_EnumJobs(struct ndr_push
*ndr
, int flags
, struct spoolss_EnumJobs
*r
)
258 if (!(flags
& NDR_IN
)) goto ndr_out
;
260 NDR_CHECK(ndr_push_policy_handle(ndr
, NDR_SCALARS
|NDR_BUFFERS
, r
->in
.handle
));
261 NDR_CHECK(ndr_push_uint32(ndr
, NDR_SCALARS
|NDR_BUFFERS
, r
->in
.firstjob
));
262 NDR_CHECK(ndr_push_uint32(ndr
, NDR_SCALARS
|NDR_BUFFERS
, r
->in
.numjobs
));
263 NDR_CHECK(ndr_push_uint32(ndr
, NDR_SCALARS
|NDR_BUFFERS
, r
->in
.level
));
264 NDR_CHECK(ndr_push_unique_ptr(ndr
, r
->in
.buffer
));
266 NDR_CHECK(ndr_push_DATA_BLOB(ndr
, NDR_SCALARS
|NDR_BUFFERS
, *r
->in
.buffer
));
268 NDR_CHECK(ndr_push_uint32(ndr
, NDR_SCALARS
|NDR_BUFFERS
, *r
->in
.buf_size
));
270 if (!(flags
& NDR_OUT
)) goto done
;
272 NDR_SPOOLSS_PUSH_ENUM_OUT(spoolss_EnumJobs
,spoolss_JobInfo
);
278 NTSTATUS
ndr_pull_spoolss_EnumJobs(struct ndr_pull
*ndr
, int flags
, struct spoolss_EnumJobs
*r
)
280 uint32_t _ptr_buffer
;
282 if (!(flags
& NDR_IN
)) goto ndr_out
;
286 NDR_ALLOC(ndr
, r
->in
.handle
);
287 NDR_CHECK(ndr_pull_policy_handle(ndr
, NDR_SCALARS
|NDR_BUFFERS
, r
->in
.handle
));
288 NDR_CHECK(ndr_pull_uint32(ndr
, NDR_SCALARS
|NDR_BUFFERS
, &r
->in
.firstjob
));
289 NDR_CHECK(ndr_pull_uint32(ndr
, NDR_SCALARS
|NDR_BUFFERS
, &r
->in
.numjobs
));
290 NDR_CHECK(ndr_pull_uint32(ndr
, NDR_SCALARS
|NDR_BUFFERS
, &r
->in
.level
));
291 NDR_CHECK(ndr_pull_unique_ptr(ndr
, &_ptr_buffer
));
293 NDR_ALLOC(ndr
, r
->in
.buffer
);
298 NDR_CHECK(ndr_pull_DATA_BLOB(ndr
, NDR_SCALARS
|NDR_BUFFERS
, r
->in
.buffer
));
300 NDR_ALLOC(ndr
, r
->in
.buf_size
);
301 NDR_CHECK(ndr_pull_uint32(ndr
, NDR_SCALARS
|NDR_BUFFERS
, r
->in
.buf_size
));
302 NDR_ALLOC(ndr
, r
->out
.buf_size
);
303 *r
->out
.buf_size
= *r
->in
.buf_size
;
305 if (!(flags
& NDR_OUT
)) goto done
;
307 NDR_SPOOLSS_PULL_ENUM_OUT(spoolss_EnumJobs
,spoolss_JobInfo
);
314 void ndr_print_spoolss_EnumJobs(struct ndr_print
*ndr
, const char *name
, int flags
, struct spoolss_EnumJobs
*r
)
316 ndr_print_struct(ndr
, name
, "spoolss_EnumJobs");
318 if (flags
& NDR_SET_VALUES
) {
319 ndr
->flags
|= LIBNDR_PRINT_SET_VALUES
;
321 if (flags
& NDR_IN
) {
322 ndr_print_struct(ndr
, "in", "spoolss_EnumJobs");
324 ndr_print_ptr(ndr
, "handle", r
->in
.handle
);
326 ndr_print_policy_handle(ndr
, "handle", r
->in
.handle
);
328 ndr_print_uint32(ndr
, "firstjob", r
->in
.firstjob
);
329 ndr_print_uint32(ndr
, "numjobs", r
->in
.numjobs
);
330 ndr_print_uint32(ndr
, "level", r
->in
.level
);
331 ndr_print_ptr(ndr
, "buffer", r
->in
.buffer
);
334 ndr_print_DATA_BLOB(ndr
, "buffer", *r
->in
.buffer
);
337 ndr_print_ptr(ndr
, "buf_size", r
->in
.buf_size
);
339 ndr_print_uint32(ndr
, "buf_size", *r
->in
.buf_size
);
343 if (flags
& NDR_OUT
) {
344 NDR_SPOOLSS_PRINT_ENUM_OUT(spoolss_EnumJobs
,spoolss_JobInfo
);
350 spoolss_EnumPrinterDrivers
352 NTSTATUS
ndr_push_spoolss_EnumPrinterDrivers(struct ndr_push
*ndr
, int flags
, struct spoolss_EnumPrinterDrivers
*r
)
354 if (!(flags
& NDR_IN
)) goto ndr_out
;
356 { uint32_t _flags_save_string
= ndr
->flags
;
357 ndr_set_flags(&ndr
->flags
, LIBNDR_FLAG_STR_SIZE4
|LIBNDR_FLAG_STR_LEN4
);
358 NDR_CHECK(ndr_push_unique_ptr(ndr
, r
->in
.server
));
359 ndr
->flags
= _flags_save_string
;
361 { uint32_t _flags_save_string
= ndr
->flags
;
362 ndr_set_flags(&ndr
->flags
, LIBNDR_FLAG_STR_SIZE4
|LIBNDR_FLAG_STR_LEN4
);
364 NDR_CHECK(ndr_push_string(ndr
, NDR_SCALARS
|NDR_BUFFERS
, r
->in
.server
));
366 ndr
->flags
= _flags_save_string
;
368 { uint32_t _flags_save_string
= ndr
->flags
;
369 ndr_set_flags(&ndr
->flags
, LIBNDR_FLAG_STR_SIZE4
|LIBNDR_FLAG_STR_LEN4
);
370 NDR_CHECK(ndr_push_unique_ptr(ndr
, r
->in
.environment
));
371 ndr
->flags
= _flags_save_string
;
373 { uint32_t _flags_save_string
= ndr
->flags
;
374 ndr_set_flags(&ndr
->flags
, LIBNDR_FLAG_STR_SIZE4
|LIBNDR_FLAG_STR_LEN4
);
375 if (r
->in
.environment
) {
376 NDR_CHECK(ndr_push_string(ndr
, NDR_SCALARS
|NDR_BUFFERS
, r
->in
.environment
));
378 ndr
->flags
= _flags_save_string
;
380 NDR_CHECK(ndr_push_uint32(ndr
, NDR_SCALARS
|NDR_BUFFERS
, r
->in
.level
));
381 NDR_CHECK(ndr_push_unique_ptr(ndr
, r
->in
.buffer
));
383 NDR_CHECK(ndr_push_DATA_BLOB(ndr
, NDR_SCALARS
|NDR_BUFFERS
, *r
->in
.buffer
));
385 NDR_CHECK(ndr_push_uint32(ndr
, NDR_SCALARS
|NDR_BUFFERS
, *r
->in
.buf_size
));
387 if (!(flags
& NDR_OUT
)) goto done
;
389 NDR_SPOOLSS_PUSH_ENUM_OUT(spoolss_EnumPrinterDrivers
,spoolss_DriverInfo
);
395 NTSTATUS
ndr_pull_spoolss_EnumPrinterDrivers(struct ndr_pull
*ndr
, int flags
, struct spoolss_EnumPrinterDrivers
*r
)
397 uint32_t _ptr_server
;
398 uint32_t _ptr_environment
;
399 uint32_t _ptr_buffer
;
401 if (!(flags
& NDR_IN
)) goto ndr_out
;
405 { uint32_t _flags_save_string
= ndr
->flags
;
406 ndr_set_flags(&ndr
->flags
, LIBNDR_FLAG_STR_SIZE4
|LIBNDR_FLAG_STR_LEN4
);
407 NDR_CHECK(ndr_pull_unique_ptr(ndr
, &_ptr_server
));
409 NDR_ALLOC(ndr
, r
->in
.server
);
413 ndr
->flags
= _flags_save_string
;
415 { uint32_t _flags_save_string
= ndr
->flags
;
416 ndr_set_flags(&ndr
->flags
, LIBNDR_FLAG_STR_SIZE4
|LIBNDR_FLAG_STR_LEN4
);
418 NDR_CHECK(ndr_pull_string(ndr
, NDR_SCALARS
|NDR_BUFFERS
, &r
->in
.server
));
420 ndr
->flags
= _flags_save_string
;
422 { uint32_t _flags_save_string
= ndr
->flags
;
423 ndr_set_flags(&ndr
->flags
, LIBNDR_FLAG_STR_SIZE4
|LIBNDR_FLAG_STR_LEN4
);
424 NDR_CHECK(ndr_pull_unique_ptr(ndr
, &_ptr_environment
));
425 if (_ptr_environment
) {
426 NDR_ALLOC(ndr
, r
->in
.environment
);
428 r
->in
.environment
= NULL
;
430 ndr
->flags
= _flags_save_string
;
432 { uint32_t _flags_save_string
= ndr
->flags
;
433 ndr_set_flags(&ndr
->flags
, LIBNDR_FLAG_STR_SIZE4
|LIBNDR_FLAG_STR_LEN4
);
434 if (r
->in
.environment
) {
435 NDR_CHECK(ndr_pull_string(ndr
, NDR_SCALARS
|NDR_BUFFERS
, &r
->in
.environment
));
437 ndr
->flags
= _flags_save_string
;
439 NDR_CHECK(ndr_pull_uint32(ndr
, NDR_SCALARS
|NDR_BUFFERS
, &r
->in
.level
));
440 NDR_CHECK(ndr_pull_unique_ptr(ndr
, &_ptr_buffer
));
442 NDR_ALLOC(ndr
, r
->in
.buffer
);
447 NDR_CHECK(ndr_pull_DATA_BLOB(ndr
, NDR_SCALARS
|NDR_BUFFERS
, r
->in
.buffer
));
449 NDR_ALLOC(ndr
, r
->in
.buf_size
);
450 NDR_CHECK(ndr_pull_uint32(ndr
, NDR_SCALARS
|NDR_BUFFERS
, r
->in
.buf_size
));
451 NDR_ALLOC(ndr
, r
->out
.buf_size
);
452 *r
->out
.buf_size
= *r
->in
.buf_size
;
454 if (!(flags
& NDR_OUT
)) goto done
;
456 NDR_SPOOLSS_PULL_ENUM_OUT(spoolss_EnumPrinterDrivers
,spoolss_DriverInfo
);
463 void ndr_print_spoolss_EnumPrinterDrivers(struct ndr_print
*ndr
, const char *name
, int flags
, struct spoolss_EnumPrinterDrivers
*r
)
465 ndr_print_struct(ndr
, name
, "spoolss_EnumPrinterDrivers");
467 if (flags
& NDR_SET_VALUES
) {
468 ndr
->flags
|= LIBNDR_PRINT_SET_VALUES
;
470 if (flags
& NDR_IN
) {
471 ndr_print_struct(ndr
, "in", "spoolss_EnumPrinterDrivers");
473 ndr_print_ptr(ndr
, "server", r
->in
.server
);
476 ndr_print_string(ndr
, "server", r
->in
.server
);
479 ndr_print_ptr(ndr
, "environment", r
->in
.environment
);
481 if (r
->in
.environment
) {
482 ndr_print_string(ndr
, "environment", r
->in
.environment
);
485 ndr_print_uint32(ndr
, "level", r
->in
.level
);
486 ndr_print_ptr(ndr
, "buffer", r
->in
.buffer
);
489 ndr_print_DATA_BLOB(ndr
, "buffer", *r
->in
.buffer
);
492 ndr_print_ptr(ndr
, "buf_size", r
->in
.buf_size
);
494 ndr_print_uint32(ndr
, "buf_size", *r
->in
.buf_size
);
498 if (flags
& NDR_OUT
) {
499 NDR_SPOOLSS_PRINT_ENUM_OUT(spoolss_EnumPrinterDrivers
,spoolss_DriverInfo
);
507 NTSTATUS
ndr_push_spoolss_EnumForms(struct ndr_push
*ndr
, int flags
, struct spoolss_EnumForms
*r
)
509 if (!(flags
& NDR_IN
)) goto ndr_out
;
511 NDR_CHECK(ndr_push_policy_handle(ndr
, NDR_SCALARS
|NDR_BUFFERS
, r
->in
.handle
));
512 NDR_CHECK(ndr_push_uint32(ndr
, NDR_SCALARS
|NDR_BUFFERS
, r
->in
.level
));
513 NDR_CHECK(ndr_push_unique_ptr(ndr
, r
->in
.buffer
));
515 NDR_CHECK(ndr_push_DATA_BLOB(ndr
, NDR_SCALARS
|NDR_BUFFERS
, *r
->in
.buffer
));
517 NDR_CHECK(ndr_push_uint32(ndr
, NDR_SCALARS
|NDR_BUFFERS
, *r
->in
.buf_size
));
519 if (!(flags
& NDR_OUT
)) goto done
;
521 NDR_SPOOLSS_PUSH_ENUM_OUT(spoolss_EnumForms
,spoolss_FormInfo
);
527 NTSTATUS
ndr_pull_spoolss_EnumForms(struct ndr_pull
*ndr
, int flags
, struct spoolss_EnumForms
*r
)
529 uint32_t _ptr_buffer
;
531 if (!(flags
& NDR_IN
)) goto ndr_out
;
535 NDR_ALLOC(ndr
, r
->in
.handle
);
536 NDR_CHECK(ndr_pull_policy_handle(ndr
, NDR_SCALARS
|NDR_BUFFERS
, r
->in
.handle
));
537 NDR_CHECK(ndr_pull_uint32(ndr
, NDR_SCALARS
|NDR_BUFFERS
, &r
->in
.level
));
538 NDR_CHECK(ndr_pull_unique_ptr(ndr
, &_ptr_buffer
));
540 NDR_ALLOC(ndr
, r
->in
.buffer
);
545 NDR_CHECK(ndr_pull_DATA_BLOB(ndr
, NDR_SCALARS
|NDR_BUFFERS
, r
->in
.buffer
));
547 NDR_ALLOC(ndr
, r
->in
.buf_size
);
548 NDR_CHECK(ndr_pull_uint32(ndr
, NDR_SCALARS
|NDR_BUFFERS
, r
->in
.buf_size
));
549 NDR_ALLOC(ndr
, r
->out
.buf_size
);
550 *r
->out
.buf_size
= *r
->in
.buf_size
;
552 if (!(flags
& NDR_OUT
)) goto done
;
554 NDR_SPOOLSS_PULL_ENUM_OUT(spoolss_EnumForms
,spoolss_FormInfo
);
561 void ndr_print_spoolss_EnumForms(struct ndr_print
*ndr
, const char *name
, int flags
, struct spoolss_EnumForms
*r
)
563 ndr_print_struct(ndr
, name
, "spoolss_EnumForms");
565 if (flags
& NDR_SET_VALUES
) {
566 ndr
->flags
|= LIBNDR_PRINT_SET_VALUES
;
568 if (flags
& NDR_IN
) {
569 ndr_print_struct(ndr
, "in", "spoolss_EnumForms");
571 ndr_print_ptr(ndr
, "handle", r
->in
.handle
);
573 ndr_print_policy_handle(ndr
, "handle", r
->in
.handle
);
575 ndr_print_uint32(ndr
, "level", r
->in
.level
);
576 ndr_print_ptr(ndr
, "buffer", r
->in
.buffer
);
579 ndr_print_DATA_BLOB(ndr
, "buffer", *r
->in
.buffer
);
582 ndr_print_ptr(ndr
, "buf_size", r
->in
.buf_size
);
584 ndr_print_uint32(ndr
, "buf_size", *r
->in
.buf_size
);
588 if (flags
& NDR_OUT
) {
589 NDR_SPOOLSS_PRINT_ENUM_OUT(spoolss_EnumForms
,spoolss_FormInfo
);
597 NTSTATUS
ndr_push_spoolss_EnumPorts(struct ndr_push
*ndr
, int flags
, struct spoolss_EnumPorts
*r
)
599 if (!(flags
& NDR_IN
)) goto ndr_out
;
601 { uint32_t _flags_save_string
= ndr
->flags
;
602 ndr_set_flags(&ndr
->flags
, LIBNDR_FLAG_STR_SIZE4
|LIBNDR_FLAG_STR_LEN4
);
603 NDR_CHECK(ndr_push_unique_ptr(ndr
, r
->in
.servername
));
604 ndr
->flags
= _flags_save_string
;
606 { uint32_t _flags_save_string
= ndr
->flags
;
607 ndr_set_flags(&ndr
->flags
, LIBNDR_FLAG_STR_SIZE4
|LIBNDR_FLAG_STR_LEN4
);
608 if (r
->in
.servername
) {
609 NDR_CHECK(ndr_push_string(ndr
, NDR_SCALARS
|NDR_BUFFERS
, r
->in
.servername
));
611 ndr
->flags
= _flags_save_string
;
613 NDR_CHECK(ndr_push_uint32(ndr
, NDR_SCALARS
|NDR_BUFFERS
, r
->in
.level
));
614 NDR_CHECK(ndr_push_unique_ptr(ndr
, r
->in
.buffer
));
616 NDR_CHECK(ndr_push_DATA_BLOB(ndr
, NDR_SCALARS
|NDR_BUFFERS
, *r
->in
.buffer
));
618 NDR_CHECK(ndr_push_uint32(ndr
, NDR_SCALARS
|NDR_BUFFERS
, *r
->in
.buf_size
));
620 if (!(flags
& NDR_OUT
)) goto done
;
622 NDR_SPOOLSS_PUSH_ENUM_OUT(spoolss_EnumPorts
,spoolss_PortInfo
);
628 NTSTATUS
ndr_pull_spoolss_EnumPorts(struct ndr_pull
*ndr
, int flags
, struct spoolss_EnumPorts
*r
)
630 uint32_t _ptr_servername
;
631 uint32_t _ptr_buffer
;
633 if (!(flags
& NDR_IN
)) goto ndr_out
;
637 { uint32_t _flags_save_string
= ndr
->flags
;
638 ndr_set_flags(&ndr
->flags
, LIBNDR_FLAG_STR_SIZE4
|LIBNDR_FLAG_STR_LEN4
);
639 NDR_CHECK(ndr_pull_unique_ptr(ndr
, &_ptr_servername
));
640 if (_ptr_servername
) {
641 NDR_ALLOC(ndr
, r
->in
.servername
);
643 r
->in
.servername
= NULL
;
645 ndr
->flags
= _flags_save_string
;
647 { uint32_t _flags_save_string
= ndr
->flags
;
648 ndr_set_flags(&ndr
->flags
, LIBNDR_FLAG_STR_SIZE4
|LIBNDR_FLAG_STR_LEN4
);
649 if (r
->in
.servername
) {
650 NDR_CHECK(ndr_pull_string(ndr
, NDR_SCALARS
|NDR_BUFFERS
, &r
->in
.servername
));
652 ndr
->flags
= _flags_save_string
;
654 NDR_CHECK(ndr_pull_uint32(ndr
, NDR_SCALARS
|NDR_BUFFERS
, &r
->in
.level
));
655 NDR_CHECK(ndr_pull_unique_ptr(ndr
, &_ptr_buffer
));
657 NDR_ALLOC(ndr
, r
->in
.buffer
);
662 NDR_CHECK(ndr_pull_DATA_BLOB(ndr
, NDR_SCALARS
|NDR_BUFFERS
, r
->in
.buffer
));
664 NDR_ALLOC(ndr
, r
->in
.buf_size
);
665 NDR_CHECK(ndr_pull_uint32(ndr
, NDR_SCALARS
|NDR_BUFFERS
, r
->in
.buf_size
));
666 NDR_ALLOC(ndr
, r
->out
.buf_size
);
667 *r
->out
.buf_size
= *r
->in
.buf_size
;
669 if (!(flags
& NDR_OUT
)) goto done
;
671 NDR_SPOOLSS_PULL_ENUM_OUT(spoolss_EnumPorts
,spoolss_PortInfo
);
678 void ndr_print_spoolss_EnumPorts(struct ndr_print
*ndr
, const char *name
, int flags
, struct spoolss_EnumPorts
*r
)
680 ndr_print_struct(ndr
, name
, "spoolss_EnumPorts");
682 if (flags
& NDR_SET_VALUES
) {
683 ndr
->flags
|= LIBNDR_PRINT_SET_VALUES
;
685 if (flags
& NDR_IN
) {
686 ndr_print_struct(ndr
, "in", "spoolss_EnumPorts");
688 ndr_print_ptr(ndr
, "servername", r
->in
.servername
);
690 if (r
->in
.servername
) {
691 ndr_print_string(ndr
, "servername", r
->in
.servername
);
694 ndr_print_uint32(ndr
, "level", r
->in
.level
);
695 ndr_print_ptr(ndr
, "buffer", r
->in
.buffer
);
698 ndr_print_DATA_BLOB(ndr
, "buffer", *r
->in
.buffer
);
701 ndr_print_ptr(ndr
, "buf_size", r
->in
.buf_size
);
703 ndr_print_uint32(ndr
, "buf_size", *r
->in
.buf_size
);
707 if (flags
& NDR_OUT
) {
708 NDR_SPOOLSS_PRINT_ENUM_OUT(spoolss_EnumPorts
,spoolss_PortInfo
);