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_IN(fn) do { \
29 _r.in.level = r->in.level;\
30 _r.in.buffer = r->in.buffer;\
31 _r.in.buf_size = r->in.buf_size;\
32 NDR_CHECK(ndr_push__##fn(ndr, flags, &_r));\
35 #define NDR_SPOOLSS_PUSH_ENUM_OUT(fn) do { \
36 struct ndr_push *_ndr_info;\
37 _r.in.level = r->in.level;\
38 _r.in.buffer = r->in.buffer;\
39 _r.in.buf_size = r->in.buf_size;\
40 _r.out.buffer = NULL;\
41 _r.out.buf_size = r->out.buf_size;\
42 _r.out.count = r->out.count;\
43 _r.out.result = r->out.result;\
46 DATA_BLOB _data_blob_info;\
47 _ndr_info = ndr_push_init_ctx(ndr);\
48 if (!_ndr_info) return NT_STATUS_NO_MEMORY;\
49 __r.in.level = r->in.level;\
50 __r.in.count = r->out.count;\
51 __r.out.info = r->out.info;\
52 NDR_CHECK(ndr_push___##fn(_ndr_info, flags, &__r)); \
53 _data_blob_info = ndr_push_blob(_ndr_info);\
54 _r.out.buffer = &_data_blob_info;\
56 NDR_CHECK(ndr_push__##fn(ndr, flags, &_r));\
59 #define NDR_SPOOLSS_PUSH_ENUM(fn,in,out) do { \
61 if (flags & NDR_IN) {\
63 NDR_SPOOLSS_PUSH_ENUM_IN(fn);\
65 if (flags & NDR_OUT) {\
67 NDR_SPOOLSS_PUSH_ENUM_OUT(fn);\
71 #define NDR_SPOOLSS_PULL_ENUM_IN(fn) do { \
73 NDR_CHECK(ndr_pull__##fn(ndr, flags, &_r));\
74 r->in.level = _r.in.level;\
75 r->in.buffer = _r.in.buffer;\
76 r->in.buf_size = _r.in.buf_size;\
79 #define NDR_SPOOLSS_PULL_ENUM_OUT(fn) do { \
80 struct ndr_pull *_ndr_info;\
81 _r.in.level = r->in.level;\
82 _r.in.buffer = r->in.buffer;\
83 _r.in.buf_size = r->in.buf_size;\
84 _r.out.buf_size = r->out.buf_size;\
85 NDR_CHECK(ndr_pull__##fn(ndr, flags, &_r));\
87 r->out.buf_size = _r.out.buf_size;\
88 r->out.count = _r.out.count;\
89 r->out.result = _r.out.result;\
92 _ndr_info = ndr_pull_init_blob(_r.out.buffer, ndr);\
93 if (!_ndr_info) return NT_STATUS_NO_MEMORY;\
94 __r.in.level = r->in.level;\
95 __r.in.count = r->out.count;\
97 NDR_CHECK(ndr_pull___##fn(_ndr_info, flags, &__r));\
98 r->out.info = __r.out.info;\
102 #define NDR_SPOOLSS_PULL_ENUM(fn,in,out) do { \
104 if (flags & NDR_IN) {\
106 NDR_SPOOLSS_PULL_ENUM_IN(fn);\
109 if (flags & NDR_OUT) {\
111 NDR_SPOOLSS_PULL_ENUM_OUT(fn);\
115 #define _NDR_CHECK_UINT32(call) do { NTSTATUS _status; \
117 if (!NT_STATUS_IS_OK(_status)) \
121 #define NDR_SPOOLSS_SIZE_ENUM(fn) do { \
123 DATA_BLOB _data_blob_info;\
124 struct ndr_push *_ndr_info = ndr_push_init_ctx(mem_ctx);\
125 if (!_ndr_info) return 0;\
126 __r.in.level = level;\
127 __r.in.count = count;\
128 __r.out.info = info;\
129 _NDR_CHECK_UINT32(ndr_push___##fn(_ndr_info, NDR_OUT, &__r)); \
130 _data_blob_info = ndr_push_blob(_ndr_info);\
131 return _data_blob_info.length;\
137 NTSTATUS ndr_push_spoolss_EnumPrinters(struct ndr_push *ndr, int flags, struct spoolss_EnumPrinters *r)
139 NDR_SPOOLSS_PUSH_ENUM(spoolss_EnumPrinters,{
140 _r.in.flags = r->in.flags;
141 _r.in.server = r->in.server;
143 _r.in.flags = r->in.flags;
144 _r.in.server = r->in.server;
149 NTSTATUS ndr_pull_spoolss_EnumPrinters(struct ndr_pull *ndr, int flags, struct spoolss_EnumPrinters *r)
151 NDR_SPOOLSS_PULL_ENUM(spoolss_EnumPrinters,{
152 r->in.flags = _r.in.flags;
153 r->in.server = _r.in.server;
155 _r.in.flags = r->in.flags;
156 _r.in.server = r->in.server;
161 uint32_t ndr_size_spoolss_EnumPrinters_info(TALLOC_CTX *mem_ctx, uint32_t level, uint32_t count, union spoolss_PrinterInfo *info)
163 NDR_SPOOLSS_SIZE_ENUM(spoolss_EnumPrinters);
169 NTSTATUS ndr_push_spoolss_EnumJobs(struct ndr_push *ndr, int flags, struct spoolss_EnumJobs *r)
171 NDR_SPOOLSS_PUSH_ENUM(spoolss_EnumJobs,{
172 _r.in.handle = r->in.handle;
173 _r.in.firstjob = r->in.firstjob;
174 _r.in.numjobs = r->in.numjobs;
176 _r.in.handle = r->in.handle;
177 _r.in.firstjob = r->in.firstjob;
178 _r.in.numjobs = r->in.numjobs;
183 NTSTATUS ndr_pull_spoolss_EnumJobs(struct ndr_pull *ndr, int flags, struct spoolss_EnumJobs *r)
185 NDR_SPOOLSS_PULL_ENUM(spoolss_EnumJobs,{
186 r->in.handle = _r.in.handle;
187 r->in.firstjob = _r.in.firstjob;
188 r->in.numjobs = _r.in.numjobs;
190 _r.in.handle = r->in.handle;
191 _r.in.firstjob = r->in.firstjob;
192 _r.in.numjobs = r->in.numjobs;
197 uint32_t ndr_size_spoolss_EnumJobss_info(TALLOC_CTX *mem_ctx, uint32_t level, uint32_t count, union spoolss_JobInfo *info)
199 NDR_SPOOLSS_SIZE_ENUM(spoolss_EnumJobs);
203 spoolss_EnumPrinterDrivers
205 NTSTATUS ndr_push_spoolss_EnumPrinterDrivers(struct ndr_push *ndr, int flags, struct spoolss_EnumPrinterDrivers *r)
207 NDR_SPOOLSS_PUSH_ENUM(spoolss_EnumPrinterDrivers,{
208 _r.in.server = r->in.server;
209 _r.in.environment = r->in.environment;
211 _r.in.server = r->in.server;
212 _r.in.environment = r->in.environment;
217 NTSTATUS ndr_pull_spoolss_EnumPrinterDrivers(struct ndr_pull *ndr, int flags, struct spoolss_EnumPrinterDrivers *r)
219 NDR_SPOOLSS_PULL_ENUM(spoolss_EnumPrinterDrivers,{
220 r->in.server = _r.in.server;
221 r->in.environment = _r.in.environment;
223 _r.in.server = r->in.server;
224 _r.in.environment = r->in.environment;
229 uint32_t ndr_size_spoolss_EnumPrinterDrivers_info(TALLOC_CTX *mem_ctx, uint32_t level, uint32_t count, union spoolss_DriverInfo *info)
231 NDR_SPOOLSS_SIZE_ENUM(spoolss_EnumPrinterDrivers);
237 NTSTATUS ndr_push_spoolss_EnumForms(struct ndr_push *ndr, int flags, struct spoolss_EnumForms *r)
239 NDR_SPOOLSS_PUSH_ENUM(spoolss_EnumForms,{
240 _r.in.handle = r->in.handle;
242 _r.in.handle = r->in.handle;
247 NTSTATUS ndr_pull_spoolss_EnumForms(struct ndr_pull *ndr, int flags, struct spoolss_EnumForms *r)
249 NDR_SPOOLSS_PULL_ENUM(spoolss_EnumForms,{
250 r->in.handle = _r.in.handle;
252 _r.in.handle = r->in.handle;
257 uint32_t ndr_size_spoolss_EnumForms_info(TALLOC_CTX *mem_ctx, uint32_t level, uint32_t count, union spoolss_FormInfo *info)
259 NDR_SPOOLSS_SIZE_ENUM(spoolss_EnumForms);
265 NTSTATUS ndr_push_spoolss_EnumPorts(struct ndr_push *ndr, int flags, struct spoolss_EnumPorts *r)
267 NDR_SPOOLSS_PUSH_ENUM(spoolss_EnumPorts,{
268 _r.in.servername= r->in.servername;
270 _r.in.servername= r->in.servername;
275 NTSTATUS ndr_pull_spoolss_EnumPorts(struct ndr_pull *ndr, int flags, struct spoolss_EnumPorts *r)
277 NDR_SPOOLSS_PULL_ENUM(spoolss_EnumPorts,{
278 r->in.servername= _r.in.servername;
280 _r.in.servername= r->in.servername;
285 uint32_t ndr_size_spoolss_EnumPorts_info(TALLOC_CTX *mem_ctx, uint32_t level, uint32_t count, union spoolss_PortInfo *info)
287 NDR_SPOOLSS_SIZE_ENUM(spoolss_EnumPorts);
293 NTSTATUS ndr_push_spoolss_EnumMonitors(struct ndr_push *ndr, int flags, struct spoolss_EnumMonitors *r)
295 NDR_SPOOLSS_PUSH_ENUM(spoolss_EnumMonitors,{
296 _r.in.servername= r->in.servername;
298 _r.in.servername= r->in.servername;
303 NTSTATUS ndr_pull_spoolss_EnumMonitors(struct ndr_pull *ndr, int flags, struct spoolss_EnumMonitors *r)
305 NDR_SPOOLSS_PULL_ENUM(spoolss_EnumMonitors,{
306 r->in.servername= _r.in.servername;
308 _r.in.servername= r->in.servername;
313 uint32_t ndr_size_spoolss_EnumMonitors_info(TALLOC_CTX *mem_ctx, uint32_t level, uint32_t count, union spoolss_MonitorInfo *info)
315 NDR_SPOOLSS_SIZE_ENUM(spoolss_EnumMonitors);
319 spoolss_EnumPrintProcessors
321 NTSTATUS ndr_push_spoolss_EnumPrintProcessors(struct ndr_push *ndr, int flags, struct spoolss_EnumPrintProcessors *r)
323 NDR_SPOOLSS_PUSH_ENUM(spoolss_EnumPrintProcessors,{
324 _r.in.servername = r->in.servername;
325 _r.in.environment = r->in.environment;
327 _r.in.servername = r->in.servername;
328 _r.in.environment = r->in.environment;
333 NTSTATUS ndr_pull_spoolss_EnumPrintProcessors(struct ndr_pull *ndr, int flags, struct spoolss_EnumPrintProcessors *r)
335 NDR_SPOOLSS_PULL_ENUM(spoolss_EnumPrintProcessors,{
336 r->in.servername = _r.in.servername;
337 r->in.environment = _r.in.environment;
339 _r.in.servername = r->in.servername;
340 _r.in.environment = r->in.environment;
345 uint32_t ndr_size_spoolss_EnumPrinterProcessors_info(TALLOC_CTX *mem_ctx, uint32_t level, uint32_t count, union spoolss_PrintProcessorInfo *info)
347 NDR_SPOOLSS_SIZE_ENUM(spoolss_EnumPrintProcessors);