Coverage Report

Created: 2026-04-01 06:26

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/samba/librpc/ndr/ndr_spoolss_buf.c
Line
Count
Source
1
/*
2
   Unix SMB/CIFS implementation.
3
4
   routines for marshalling/unmarshalling spoolss subcontext buffer structures
5
6
   Copyright (C) Andrew Tridgell 2003
7
   Copyright (C) Tim Potter 2003
8
   Copyright (C) Guenther Deschner 2009
9
10
   This program is free software; you can redistribute it and/or modify
11
   it under the terms of the GNU General Public License as published by
12
   the Free Software Foundation; either version 3 of the License, or
13
   (at your option) any later version.
14
15
   This program is distributed in the hope that it will be useful,
16
   but WITHOUT ANY WARRANTY; without even the implied warranty of
17
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
   GNU General Public License for more details.
19
20
   You should have received a copy of the GNU General Public License
21
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
22
*/
23
24
25
#include "includes.h"
26
#include "librpc/gen_ndr/ndr_spoolss.h"
27
#include "librpc/gen_ndr/ndr_security.h"
28
29
49
#define NDR_SPOOLSS_PUSH_ENUM_IN(fn) do { \
30
49
  if (!r->in.buffer && r->in.offered != 0) {\
31
0
    return ndr_push_error(ndr, NDR_ERR_BUFSIZE,\
32
0
      "SPOOLSS Buffer: r->in.offered[%u] but there's no buffer",\
33
0
      (unsigned)r->in.offered);\
34
49
  } else if (r->in.buffer && r->in.buffer->length != r->in.offered) {\
35
0
    return ndr_push_error(ndr, NDR_ERR_BUFSIZE,\
36
0
      "SPOOLSS Buffer: r->in.offered[%u] doesn't match length of r->in.buffer[%u]",\
37
0
      (unsigned)r->in.offered, (unsigned)r->in.buffer->length);\
38
0
  }\
39
49
  _r.in.buffer  = r->in.buffer;\
40
49
  _r.in.offered = r->in.offered;\
41
49
  NDR_CHECK(ndr_push__##fn(ndr, flags, &_r));\
42
49
} while(0)
43
44
41
#define NDR_SPOOLSS_PUSH_ENUM_IN_LEVEL(fn) do { \
45
41
  _r.in.level     = r->in.level;\
46
41
  NDR_SPOOLSS_PUSH_ENUM_IN(fn);\
47
41
} while(0)
48
49
177
#define NDR_SPOOLSS_PUSH_ENUM_OUT_LEVEL(fn) do { \
50
177
  DATA_BLOB _data_blob_info = data_blob_null;\
51
177
  struct ndr_push *_ndr_info = NULL;\
52
177
  _r.in.level = r->in.level;\
53
177
  _r.in.buffer  = r->in.buffer;\
54
177
  _r.in.offered = r->in.offered;\
55
177
  _r.out.info = NULL;\
56
177
  _r.out.needed = r->out.needed;\
57
177
  _r.out.count  = r->out.count;\
58
177
  _r.out.result = r->out.result;\
59
177
  if (r->out.info && *r->out.info && !r->in.buffer) {\
60
153
    return ndr_push_error(ndr, NDR_ERR_BUFSIZE,\
61
153
      "SPOOLSS Buffer: *r->out.info but there's no r->in.buffer");\
62
153
  }\
63
177
  if (r->in.buffer) {\
64
0
    _ndr_info = ndr_push_init_ctx(ndr);\
65
0
    NDR_ERR_HAVE_NO_MEMORY(_ndr_info);\
66
0
    _ndr_info->flags= ndr->flags;\
67
0
    if (r->out.info) {\
68
0
      struct ndr_push *_subndr_info;\
69
0
      struct __##fn __r;\
70
0
      __r.in.level  = r->in.level;\
71
0
      __r.in.count  = *r->out.count;\
72
0
      __r.out.info  = *r->out.info;\
73
0
      NDR_CHECK(ndr_push_subcontext_start(_ndr_info, &_subndr_info, 0, r->in.offered));\
74
0
      NDR_CHECK(ndr_push___##fn(_subndr_info, flags, &__r)); \
75
0
      NDR_CHECK(ndr_push_subcontext_end(_ndr_info, _subndr_info, 0, r->in.offered));\
76
0
    }\
77
0
    if (r->in.offered > _ndr_info->offset) {\
78
0
      uint32_t _padding_len = r->in.offered - _ndr_info->offset;\
79
0
      NDR_CHECK(ndr_push_zero(_ndr_info, _padding_len));\
80
0
    } else if (r->in.offered < _ndr_info->offset) {\
81
0
      return ndr_push_error(ndr, NDR_ERR_BUFSIZE,\
82
0
        "SPOOLSS Buffer: r->in.offered[%u] doesn't match length of out buffer[%u]!",\
83
0
        (unsigned)r->in.offered, (unsigned)_ndr_info->offset);\
84
0
    }\
85
0
    _data_blob_info = ndr_push_blob(_ndr_info);\
86
0
    _r.out.info = &_data_blob_info;\
87
0
  }\
88
24
  NDR_CHECK(ndr_push__##fn(ndr, flags, &_r));\
89
24
} while(0)
90
91
10
#define NDR_SPOOLSS_PUSH_ENUM_OUT(fn) do { \
92
10
  DATA_BLOB _data_blob_info = data_blob_null;\
93
10
  struct ndr_push *_ndr_info = NULL;\
94
10
  _r.in.buffer  = r->in.buffer;\
95
10
  _r.in.offered = r->in.offered;\
96
10
  _r.out.info = NULL;\
97
10
  _r.out.needed = r->out.needed;\
98
10
  _r.out.count  = r->out.count;\
99
10
  _r.out.result = r->out.result;\
100
10
  if (r->out.info && *r->out.info && !r->in.buffer) {\
101
8
    return ndr_push_error(ndr, NDR_ERR_BUFSIZE,\
102
8
      "SPOOLSS Buffer: *r->out.info but there's no r->in.buffer");\
103
8
  }\
104
10
  if (r->in.buffer) {\
105
0
    _ndr_info = ndr_push_init_ctx(ndr);\
106
0
    NDR_ERR_HAVE_NO_MEMORY(_ndr_info);\
107
0
    _ndr_info->flags= ndr->flags;\
108
0
    if (r->out.info) {\
109
0
      struct ndr_push *_subndr_info;\
110
0
      struct __##fn __r;\
111
0
      __r.in.count  = *r->out.count;\
112
0
      __r.out.info  = *r->out.info;\
113
0
      NDR_CHECK(ndr_push_subcontext_start(_ndr_info, &_subndr_info, 0, r->in.offered));\
114
0
      NDR_CHECK(ndr_push___##fn(_subndr_info, flags, &__r)); \
115
0
      NDR_CHECK(ndr_push_subcontext_end(_ndr_info, _subndr_info, 0, r->in.offered));\
116
0
    }\
117
0
    if (r->in.offered > _ndr_info->offset) {\
118
0
      uint32_t _padding_len = r->in.offered - _ndr_info->offset;\
119
0
      NDR_CHECK(ndr_push_zero(_ndr_info, _padding_len));\
120
0
    } else if (r->in.offered < _ndr_info->offset) {\
121
0
      return ndr_push_error(ndr, NDR_ERR_BUFSIZE,\
122
0
        "SPOOLSS Buffer: r->in.offered[%u] doesn't match length of out buffer[%u]!",\
123
0
        (unsigned)r->in.offered, (unsigned)_ndr_info->offset);\
124
0
    }\
125
0
    _data_blob_info = ndr_push_blob(_ndr_info);\
126
0
    _r.out.info = &_data_blob_info;\
127
0
  }\
128
2
  NDR_CHECK(ndr_push__##fn(ndr, flags, &_r));\
129
2
} while(0)
130
131
218
#define NDR_SPOOLSS_PUSH_ENUM_LEVEL(fn,in,out) do { \
132
218
  struct _##fn _r;\
133
218
  if (flags & NDR_IN) {\
134
41
    in;\
135
41
    NDR_SPOOLSS_PUSH_ENUM_IN_LEVEL(fn);\
136
41
  }\
137
218
  if (flags & NDR_OUT) {\
138
177
    out;\
139
177
    NDR_SPOOLSS_PUSH_ENUM_OUT_LEVEL(fn);\
140
177
  }\
141
218
} while(0)
142
143
18
#define NDR_SPOOLSS_PUSH_ENUM(fn,in,out) do { \
144
18
  struct _##fn _r;\
145
18
  if (flags & NDR_IN) {\
146
8
    in;\
147
8
    NDR_SPOOLSS_PUSH_ENUM_IN(fn);\
148
8
  }\
149
18
  if (flags & NDR_OUT) {\
150
10
    out;\
151
10
    NDR_SPOOLSS_PUSH_ENUM_OUT(fn);\
152
10
  }\
153
18
} while(0)
154
155
500
#define NDR_SPOOLSS_PULL_ENUM_IN_COMMON(fn) do { \
156
500
  ZERO_STRUCT(r->out);\
157
500
  r->in.buffer  = _r.in.buffer;\
158
500
  r->in.offered = _r.in.offered;\
159
500
  r->out.needed = _r.out.needed;\
160
500
  r->out.count  = _r.out.count;\
161
500
  if (!r->in.buffer && r->in.offered != 0) {\
162
300
    return ndr_pull_error(ndr, NDR_ERR_BUFSIZE,\
163
300
      "SPOOLSS Buffer: r->in.offered[%u] but there's no buffer",\
164
300
      (unsigned)r->in.offered);\
165
300
  } else if (r->in.buffer && r->in.buffer->length != r->in.offered) {\
166
151
    return ndr_pull_error(ndr, NDR_ERR_BUFSIZE,\
167
151
      "SPOOLSS Buffer: r->in.offered[%u] doesn't match length of r->in.buffer[%u]",\
168
151
      (unsigned)r->in.offered, (unsigned)r->in.buffer->length);\
169
151
  }\
170
500
  NDR_PULL_ALLOC(ndr, r->out.info);\
171
49
  ZERO_STRUCTP(r->out.info);\
172
49
} while(0)
173
174
205
#define NDR_SPOOLSS_PULL_ENUM_IN(fn) do { \
175
205
  NDR_CHECK(ndr_pull__##fn(ndr, flags, &_r));\
176
205
  NDR_SPOOLSS_PULL_ENUM_IN_COMMON(fn); \
177
74
} while(0)
178
179
1.27k
#define NDR_SPOOLSS_PULL_ENUM_IN_LEVEL(fn) do { \
180
1.27k
  NDR_CHECK(ndr_pull__##fn(ndr, flags, &_r));\
181
1.27k
  r->in.level = _r.in.level;\
182
426
  NDR_SPOOLSS_PULL_ENUM_IN_COMMON(fn); \
183
426
} while(0)
184
185
441
#define NDR_SPOOLSS_PULL_ENUM_OUT_LEVEL(fn) do { \
186
441
  _r.in.level = r->in.level;\
187
441
  _r.in.buffer  = r->in.buffer;\
188
441
  _r.in.offered = r->in.offered;\
189
441
  _r.out.needed = r->out.needed;\
190
441
  _r.out.count  = r->out.count;\
191
441
  NDR_CHECK(ndr_pull__##fn(ndr, flags, &_r));\
192
441
  if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {\
193
203
    NDR_PULL_ALLOC(ndr, r->out.info);\
194
203
  }\
195
203
  *r->out.info = NULL;\
196
203
  r->out.needed = _r.out.needed;\
197
203
  r->out.count  = _r.out.count;\
198
203
  r->out.result = _r.out.result;\
199
203
  if (_r.out.info) {\
200
179
    struct ndr_pull *_ndr_info;\
201
179
    NDR_PULL_ALLOC(ndr, *r->out.info);\
202
179
    _ndr_info = ndr_pull_init_blob(_r.out.info, *r->out.info);\
203
179
    NDR_ERR_HAVE_NO_MEMORY(_ndr_info);\
204
179
    _ndr_info->flags= ndr->flags;\
205
179
    if (r->in.offered != _ndr_info->data_size) {\
206
14
      return ndr_pull_error(ndr, NDR_ERR_BUFSIZE,\
207
14
        "SPOOLSS Buffer: offered[%u] doesn't match length of buffer[%u]",\
208
14
        (unsigned)r->in.offered, (unsigned)_ndr_info->data_size);\
209
14
    }\
210
179
    if (*r->out.needed <= _ndr_info->data_size) {\
211
85
      struct __##fn __r;\
212
85
      __r.in.level  = r->in.level;\
213
85
      __r.in.count  = *r->out.count;\
214
85
      __r.out.info  = NULL;\
215
85
      NDR_CHECK(ndr_pull___##fn(_ndr_info, flags, &__r));\
216
85
      *r->out.info  = __r.out.info;\
217
73
    }\
218
165
  }\
219
203
} while(0)
220
221
43
#define NDR_SPOOLSS_PULL_ENUM_OUT(fn) do { \
222
43
  _r.in.buffer  = r->in.buffer;\
223
43
  _r.in.offered = r->in.offered;\
224
43
  _r.out.needed = r->out.needed;\
225
43
  _r.out.count  = r->out.count;\
226
43
  NDR_CHECK(ndr_pull__##fn(ndr, flags, &_r));\
227
43
  if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {\
228
14
    NDR_PULL_ALLOC(ndr, r->out.info);\
229
14
  }\
230
14
  *r->out.info = NULL;\
231
14
  r->out.needed = _r.out.needed;\
232
14
  r->out.count  = _r.out.count;\
233
14
  r->out.result = _r.out.result;\
234
14
  if (_r.out.info) {\
235
12
    struct ndr_pull *_ndr_info;\
236
12
    NDR_PULL_ALLOC(ndr, *r->out.info);\
237
12
    _ndr_info = ndr_pull_init_blob(_r.out.info, *r->out.info);\
238
12
    NDR_ERR_HAVE_NO_MEMORY(_ndr_info);\
239
12
    _ndr_info->flags= ndr->flags;\
240
12
    if (r->in.offered != _ndr_info->data_size) {\
241
1
      return ndr_pull_error(ndr, NDR_ERR_BUFSIZE,\
242
1
        "SPOOLSS Buffer: offered[%u] doesn't match length of buffer[%u]",\
243
1
        (unsigned)r->in.offered, (unsigned)_ndr_info->data_size);\
244
1
    }\
245
12
    if (*r->out.needed <= _ndr_info->data_size) {\
246
4
      struct __##fn __r;\
247
4
      __r.in.count  = *r->out.count;\
248
4
      __r.out.info  = NULL;\
249
4
      NDR_CHECK(ndr_pull___##fn(_ndr_info, flags, &__r));\
250
4
      *r->out.info  = __r.out.info;\
251
1
    }\
252
11
  }\
253
14
} while(0)
254
255
1.71k
#define NDR_SPOOLSS_PULL_ENUM_LEVEL(fn,in,out) do { \
256
1.71k
  struct _##fn _r;\
257
1.71k
  if (flags & NDR_IN) {\
258
1.27k
    out;\
259
1.27k
    NDR_SPOOLSS_PULL_ENUM_IN_LEVEL(fn);\
260
1.27k
    in;\
261
41
  }\
262
1.71k
  if (flags & NDR_OUT) {\
263
441
    out;\
264
441
    NDR_SPOOLSS_PULL_ENUM_OUT_LEVEL(fn);\
265
441
  }\
266
482
} while(0)
267
268
248
#define NDR_SPOOLSS_PULL_ENUM(fn,in,out) do { \
269
248
  struct _##fn _r;\
270
248
  if (flags & NDR_IN) {\
271
205
    out;\
272
205
    NDR_SPOOLSS_PULL_ENUM_IN(fn);\
273
205
    in;\
274
8
  }\
275
248
  if (flags & NDR_OUT) {\
276
43
    out;\
277
43
    NDR_SPOOLSS_PULL_ENUM_OUT(fn);\
278
43
  }\
279
51
} while(0)
280
281
0
#define _NDR_CHECK_UINT32(call) do {\
282
0
  enum ndr_err_code _ndr_err; \
283
0
        _ndr_err = call; \
284
0
  if (!NDR_ERR_CODE_IS_SUCCESS(_ndr_err)) { \
285
0
    return 0; \
286
0
  }\
287
0
} while (0)
288
289
/* TODO: set _ndr_info->flags correct */
290
0
#define NDR_SPOOLSS_SIZE_ENUM_LEVEL(fn) do { \
291
0
  struct __##fn __r;\
292
0
  DATA_BLOB _data_blob_info;\
293
0
  struct ndr_push *_ndr_info = ndr_push_init_ctx(mem_ctx);\
294
0
  if (!_ndr_info) return 0;\
295
0
  _ndr_info->flags|=LIBNDR_FLAG_NO_NDR_SIZE;\
296
0
  __r.in.level  = level;\
297
0
  __r.in.count  = count;\
298
0
  __r.out.info  = info;\
299
0
  _NDR_CHECK_UINT32(ndr_push___##fn(_ndr_info, NDR_OUT, &__r)); \
300
0
  _data_blob_info = ndr_push_blob(_ndr_info);\
301
0
  return _data_blob_info.length;\
302
0
} while(0)
303
304
/* TODO: set _ndr_info->flags correct */
305
0
#define NDR_SPOOLSS_SIZE_ENUM(fn) do { \
306
0
  struct __##fn __r;\
307
0
  DATA_BLOB _data_blob_info;\
308
0
  struct ndr_push *_ndr_info = ndr_push_init_ctx(mem_ctx);\
309
0
  if (!_ndr_info) return 0;\
310
0
  _ndr_info->flags|=LIBNDR_FLAG_NO_NDR_SIZE;\
311
0
  __r.in.count  = count;\
312
0
  __r.out.info  = info;\
313
0
  _NDR_CHECK_UINT32(ndr_push___##fn(_ndr_info, NDR_OUT, &__r)); \
314
0
  _data_blob_info = ndr_push_blob(_ndr_info);\
315
0
  return _data_blob_info.length;\
316
0
} while(0)
317
318
319
/*
320
  spoolss_EnumPrinters
321
*/
322
enum ndr_err_code ndr_push_spoolss_EnumPrinters(struct ndr_push *ndr, ndr_flags_type flags, const struct spoolss_EnumPrinters *r)
323
31
{
324
31
  NDR_SPOOLSS_PUSH_ENUM_LEVEL(spoolss_EnumPrinters,{
325
31
    _r.in.flags = r->in.flags;
326
31
    _r.in.server  = r->in.server;
327
31
  },{
328
31
    _r.in.flags = r->in.flags;
329
31
    _r.in.server  = r->in.server;
330
31
  });
331
17
  return NDR_ERR_SUCCESS;
332
31
}
333
334
enum ndr_err_code ndr_pull_spoolss_EnumPrinters(struct ndr_pull *ndr, ndr_flags_type flags, struct spoolss_EnumPrinters *r)
335
201
{
336
201
  NDR_SPOOLSS_PULL_ENUM_LEVEL(spoolss_EnumPrinters,{
337
201
    r->in.flags = _r.in.flags;
338
201
    r->in.server  = _r.in.server;
339
201
  },{
340
201
    _r.in.flags = r->in.flags;
341
201
    _r.in.server  = r->in.server;
342
201
  });
343
31
  return NDR_ERR_SUCCESS;
344
201
}
345
346
uint32_t ndr_size_spoolss_EnumPrinters_info(TALLOC_CTX *mem_ctx, uint32_t level, uint32_t count, union spoolss_PrinterInfo *info)
347
0
{
348
0
  NDR_SPOOLSS_SIZE_ENUM_LEVEL(spoolss_EnumPrinters);
349
0
}
350
351
/*
352
  spoolss_EnumJobs
353
*/
354
enum ndr_err_code ndr_push_spoolss_EnumJobs(struct ndr_push *ndr, ndr_flags_type flags, const struct spoolss_EnumJobs *r)
355
32
{
356
32
  NDR_SPOOLSS_PUSH_ENUM_LEVEL(spoolss_EnumJobs,{
357
32
    _r.in.handle  = r->in.handle;
358
32
    _r.in.firstjob  = r->in.firstjob;
359
32
    _r.in.numjobs = r->in.numjobs;
360
32
  },{
361
32
    _r.in.handle  = r->in.handle;
362
32
    _r.in.firstjob  = r->in.firstjob;
363
32
    _r.in.numjobs = r->in.numjobs;
364
32
  });
365
8
  return NDR_ERR_SUCCESS;
366
32
}
367
368
enum ndr_err_code ndr_pull_spoolss_EnumJobs(struct ndr_pull *ndr, ndr_flags_type flags, struct spoolss_EnumJobs *r)
369
124
{
370
124
  NDR_SPOOLSS_PULL_ENUM_LEVEL(spoolss_EnumJobs,{
371
124
    r->in.handle  = _r.in.handle;
372
124
    r->in.firstjob  = _r.in.firstjob;
373
124
    r->in.numjobs = _r.in.numjobs;
374
124
  },{
375
124
    _r.in.handle  = r->in.handle;
376
124
    _r.in.firstjob  = r->in.firstjob;
377
124
    _r.in.numjobs = r->in.numjobs;
378
124
  });
379
32
  return NDR_ERR_SUCCESS;
380
124
}
381
382
uint32_t ndr_size_spoolss_EnumJobs_info(TALLOC_CTX *mem_ctx, uint32_t level, uint32_t count, union spoolss_JobInfo *info)
383
0
{
384
0
  NDR_SPOOLSS_SIZE_ENUM_LEVEL(spoolss_EnumJobs);
385
0
}
386
387
/*
388
  spoolss_EnumPrinterDrivers
389
*/
390
enum ndr_err_code ndr_push_spoolss_EnumPrinterDrivers(struct ndr_push *ndr, ndr_flags_type flags, const struct spoolss_EnumPrinterDrivers *r)
391
34
{
392
34
  NDR_SPOOLSS_PUSH_ENUM_LEVEL(spoolss_EnumPrinterDrivers,{
393
34
    _r.in.server    = r->in.server;
394
34
    _r.in.environment = r->in.environment;
395
34
  },{
396
34
    _r.in.server    = r->in.server;
397
34
    _r.in.environment = r->in.environment;
398
34
  });
399
6
  return NDR_ERR_SUCCESS;
400
34
}
401
402
enum ndr_err_code ndr_pull_spoolss_EnumPrinterDrivers(struct ndr_pull *ndr, ndr_flags_type flags, struct spoolss_EnumPrinterDrivers *r)
403
278
{
404
278
  NDR_SPOOLSS_PULL_ENUM_LEVEL(spoolss_EnumPrinterDrivers,{
405
278
    r->in.server    = _r.in.server;
406
278
    r->in.environment = _r.in.environment;
407
278
  },{
408
278
    _r.in.server    = r->in.server;
409
278
    _r.in.environment = r->in.environment;
410
278
  });
411
34
  return NDR_ERR_SUCCESS;
412
278
}
413
414
uint32_t ndr_size_spoolss_EnumPrinterDrivers_info(TALLOC_CTX *mem_ctx, uint32_t level, uint32_t count, union spoolss_DriverInfo *info)
415
0
{
416
0
  NDR_SPOOLSS_SIZE_ENUM_LEVEL(spoolss_EnumPrinterDrivers);
417
0
}
418
419
/*
420
  spoolss_EnumForms
421
*/
422
enum ndr_err_code ndr_push_spoolss_EnumForms(struct ndr_push *ndr, ndr_flags_type flags, const struct spoolss_EnumForms *r)
423
23
{
424
23
  NDR_SPOOLSS_PUSH_ENUM_LEVEL(spoolss_EnumForms,{
425
23
    _r.in.handle  = r->in.handle;
426
23
  },{
427
23
    _r.in.handle  = r->in.handle;
428
23
  });
429
3
  return NDR_ERR_SUCCESS;
430
23
}
431
432
enum ndr_err_code ndr_pull_spoolss_EnumForms(struct ndr_pull *ndr, ndr_flags_type flags, struct spoolss_EnumForms *r)
433
126
{
434
126
  NDR_SPOOLSS_PULL_ENUM_LEVEL(spoolss_EnumForms,{
435
126
    r->in.handle  = _r.in.handle;
436
126
  },{
437
126
    _r.in.handle  = r->in.handle;
438
126
  });
439
23
  return NDR_ERR_SUCCESS;
440
126
}
441
442
uint32_t ndr_size_spoolss_EnumForms_info(TALLOC_CTX *mem_ctx, uint32_t level, uint32_t count, union spoolss_FormInfo *info)
443
0
{
444
0
  NDR_SPOOLSS_SIZE_ENUM_LEVEL(spoolss_EnumForms);
445
0
}
446
447
/*
448
  spoolss_EnumPorts
449
*/
450
enum ndr_err_code ndr_push_spoolss_EnumPorts(struct ndr_push *ndr, ndr_flags_type flags, const struct spoolss_EnumPorts *r)
451
29
{
452
29
  NDR_SPOOLSS_PUSH_ENUM_LEVEL(spoolss_EnumPorts,{
453
29
    _r.in.servername= r->in.servername;
454
29
  },{
455
29
    _r.in.servername= r->in.servername;
456
29
  });
457
14
  return NDR_ERR_SUCCESS;
458
29
}
459
460
enum ndr_err_code ndr_pull_spoolss_EnumPorts(struct ndr_pull *ndr, ndr_flags_type flags, struct spoolss_EnumPorts *r)
461
228
{
462
228
  NDR_SPOOLSS_PULL_ENUM_LEVEL(spoolss_EnumPorts,{
463
228
    r->in.servername= _r.in.servername;
464
228
  },{
465
228
    _r.in.servername= r->in.servername;
466
228
  });
467
29
  return NDR_ERR_SUCCESS;
468
228
}
469
470
uint32_t ndr_size_spoolss_EnumPorts_info(TALLOC_CTX *mem_ctx, uint32_t level, uint32_t count, union spoolss_PortInfo *info)
471
0
{
472
0
  NDR_SPOOLSS_SIZE_ENUM_LEVEL(spoolss_EnumPorts);
473
0
}
474
475
/*
476
  spoolss_EnumMonitors
477
*/
478
enum ndr_err_code ndr_push_spoolss_EnumMonitors(struct ndr_push *ndr, ndr_flags_type flags, const struct spoolss_EnumMonitors *r)
479
23
{
480
23
  NDR_SPOOLSS_PUSH_ENUM_LEVEL(spoolss_EnumMonitors,{
481
23
    _r.in.servername= r->in.servername;
482
23
  },{
483
23
    _r.in.servername= r->in.servername;
484
23
  });
485
6
  return NDR_ERR_SUCCESS;
486
23
}
487
488
enum ndr_err_code ndr_pull_spoolss_EnumMonitors(struct ndr_pull *ndr, ndr_flags_type flags, struct spoolss_EnumMonitors *r)
489
217
{
490
217
  NDR_SPOOLSS_PULL_ENUM_LEVEL(spoolss_EnumMonitors,{
491
217
    r->in.servername= _r.in.servername;
492
217
  },{
493
217
    _r.in.servername= r->in.servername;
494
217
  });
495
23
  return NDR_ERR_SUCCESS;
496
217
}
497
498
uint32_t ndr_size_spoolss_EnumMonitors_info(TALLOC_CTX *mem_ctx, uint32_t level, uint32_t count, union spoolss_MonitorInfo *info)
499
0
{
500
0
  NDR_SPOOLSS_SIZE_ENUM_LEVEL(spoolss_EnumMonitors);
501
0
}
502
503
/*
504
  spoolss_EnumPrintProcessors
505
*/
506
enum ndr_err_code ndr_push_spoolss_EnumPrintProcessors(struct ndr_push *ndr, ndr_flags_type flags, const struct spoolss_EnumPrintProcessors *r)
507
21
{
508
21
  NDR_SPOOLSS_PUSH_ENUM_LEVEL(spoolss_EnumPrintProcessors,{
509
21
    _r.in.servername  = r->in.servername;
510
21
    _r.in.environment = r->in.environment;
511
21
  },{
512
21
    _r.in.servername  = r->in.servername;
513
21
    _r.in.environment = r->in.environment;
514
21
  });
515
6
  return NDR_ERR_SUCCESS;
516
21
}
517
518
enum ndr_err_code ndr_pull_spoolss_EnumPrintProcessors(struct ndr_pull *ndr, ndr_flags_type flags, struct spoolss_EnumPrintProcessors *r)
519
254
{
520
254
  NDR_SPOOLSS_PULL_ENUM_LEVEL(spoolss_EnumPrintProcessors,{
521
254
    r->in.servername  = _r.in.servername;
522
254
    r->in.environment = _r.in.environment;
523
254
  },{
524
254
    _r.in.servername  = r->in.servername;
525
254
    _r.in.environment = r->in.environment;
526
254
  });
527
21
  return NDR_ERR_SUCCESS;
528
254
}
529
530
uint32_t ndr_size_spoolss_EnumPrintProcessors_info(TALLOC_CTX *mem_ctx,
531
               uint32_t level, uint32_t count, union spoolss_PrintProcessorInfo *info)
532
0
{
533
0
  NDR_SPOOLSS_SIZE_ENUM_LEVEL(spoolss_EnumPrintProcessors);
534
0
}
535
536
/*
537
  spoolss_EnumPrintProcessors
538
*/
539
enum ndr_err_code ndr_push_spoolss_EnumPrintProcessorDataTypes(struct ndr_push *ndr, ndr_flags_type flags, const struct spoolss_EnumPrintProcessorDataTypes *r)
540
25
{
541
25
  NDR_SPOOLSS_PUSH_ENUM_LEVEL(spoolss_EnumPrintProcessorDataTypes,{
542
25
    _r.in.servername    = r->in.servername;
543
25
    _r.in.print_processor_name  = r->in.print_processor_name;
544
25
  },{
545
25
    _r.in.servername    = r->in.servername;
546
25
    _r.in.print_processor_name  = r->in.print_processor_name;
547
25
  });
548
5
  return NDR_ERR_SUCCESS;
549
25
}
550
551
enum ndr_err_code ndr_pull_spoolss_EnumPrintProcessorDataTypes(struct ndr_pull *ndr, ndr_flags_type flags, struct spoolss_EnumPrintProcessorDataTypes *r)
552
287
{
553
287
  NDR_SPOOLSS_PULL_ENUM_LEVEL(spoolss_EnumPrintProcessorDataTypes,{
554
287
    r->in.servername    = _r.in.servername;
555
287
    r->in.print_processor_name  = _r.in.print_processor_name;
556
287
  },{
557
287
    _r.in.servername    = r->in.servername;
558
287
    _r.in.print_processor_name  = r->in.print_processor_name;
559
287
  });
560
25
  return NDR_ERR_SUCCESS;
561
287
}
562
563
uint32_t ndr_size_spoolss_EnumPrintProcessorDataTypes_info(TALLOC_CTX *mem_ctx,
564
                  uint32_t level, uint32_t count, union spoolss_PrintProcDataTypesInfo *info)
565
0
{
566
0
  NDR_SPOOLSS_SIZE_ENUM_LEVEL(spoolss_EnumPrintProcessorDataTypes);
567
0
}
568
569
/*
570
  spoolss_EnumPerMachineConnections
571
*/
572
enum ndr_err_code ndr_push_spoolss_EnumPerMachineConnections(struct ndr_push *ndr, ndr_flags_type flags, const struct spoolss_EnumPerMachineConnections *r)
573
18
{
574
18
  NDR_SPOOLSS_PUSH_ENUM(spoolss_EnumPerMachineConnections,{
575
18
    _r.in.server  = r->in.server;
576
18
  },{
577
18
    _r.in.server  = r->in.server;
578
18
  });
579
10
  return NDR_ERR_SUCCESS;
580
18
}
581
582
enum ndr_err_code ndr_pull_spoolss_EnumPerMachineConnections(struct ndr_pull *ndr, ndr_flags_type flags, struct spoolss_EnumPerMachineConnections *r)
583
248
{
584
248
  NDR_SPOOLSS_PULL_ENUM(spoolss_EnumPerMachineConnections,{
585
248
    r->in.server  = _r.in.server;
586
248
  },{
587
248
    _r.in.server  = r->in.server;
588
248
  });
589
18
  return NDR_ERR_SUCCESS;
590
248
}
591
592
uint32_t ndr_size_spoolss_EnumPerMachineConnections_info(TALLOC_CTX *mem_ctx, uint32_t count, struct spoolss_PrinterInfo4 *info)
593
0
{
594
0
  NDR_SPOOLSS_SIZE_ENUM(spoolss_EnumPerMachineConnections);
595
0
}
596
597
/*
598
  spoolss_EnumPrinterDataEx
599
*/
600
601
enum ndr_err_code ndr_push_spoolss_EnumPrinterDataEx(struct ndr_push *ndr, ndr_flags_type flags, const struct spoolss_EnumPrinterDataEx *r)
602
10
{
603
10
  struct _spoolss_EnumPrinterDataEx _r;
604
10
  if (flags & NDR_IN) {
605
1
    _r.in.handle  = r->in.handle;
606
1
    _r.in.key_name  = r->in.key_name;
607
1
    _r.in.offered = r->in.offered;
608
1
    NDR_CHECK(ndr_push__spoolss_EnumPrinterDataEx(ndr, flags, &_r));
609
1
  }
610
10
  if (flags & NDR_OUT) {
611
9
    struct ndr_push *_ndr_info;
612
9
    _r.in.handle  = r->in.handle;
613
9
    _r.in.key_name  = r->in.key_name;
614
9
    _r.in.offered = r->in.offered;
615
9
    _r.out.count  = r->out.count;
616
9
    _r.out.needed = r->out.needed;
617
9
    _r.out.result = r->out.result;
618
9
    _r.out.info   = data_blob(NULL, 0);
619
9
    if (r->in.offered >= *r->out.needed) {
620
2
      struct ndr_push *_subndr_info;
621
2
      struct __spoolss_EnumPrinterDataEx __r;
622
2
      _ndr_info = ndr_push_init_ctx(ndr);
623
2
      NDR_ERR_HAVE_NO_MEMORY(_ndr_info);
624
2
      _ndr_info->flags= ndr->flags;
625
2
      __r.in.count  = *r->out.count;
626
2
      __r.out.info  = *r->out.info;
627
2
      NDR_CHECK(ndr_push_subcontext_start(_ndr_info, &_subndr_info, 0, r->in.offered));
628
2
      NDR_CHECK(ndr_push___spoolss_EnumPrinterDataEx(_subndr_info, flags, &__r));
629
2
      NDR_CHECK(ndr_push_subcontext_end(_ndr_info, _subndr_info, 0, r->in.offered));
630
2
      if (r->in.offered > _ndr_info->offset) {
631
0
        uint32_t _padding_len = r->in.offered - _ndr_info->offset;
632
0
        NDR_CHECK(ndr_push_zero(_ndr_info, _padding_len));
633
0
      }
634
2
      _r.out.info = ndr_push_blob(_ndr_info);
635
2
    }
636
9
    NDR_CHECK(ndr_push__spoolss_EnumPrinterDataEx(ndr, flags, &_r));
637
9
  }
638
10
  return NDR_ERR_SUCCESS;
639
10
}
640
641
enum ndr_err_code ndr_pull_spoolss_EnumPrinterDataEx(struct ndr_pull *ndr, ndr_flags_type flags, struct spoolss_EnumPrinterDataEx *r)
642
88
{
643
88
  struct _spoolss_EnumPrinterDataEx _r;
644
88
  if (flags & NDR_IN) {
645
47
    _r.in.handle  = r->in.handle;
646
47
    _r.in.key_name  = r->in.key_name;
647
47
    ZERO_STRUCT(r->out);
648
47
    NDR_CHECK(ndr_pull__spoolss_EnumPrinterDataEx(ndr, flags, &_r));
649
1
    r->in.handle  = _r.in.handle;
650
1
    r->in.key_name  = _r.in.key_name;
651
1
    r->in.offered = _r.in.offered;
652
1
    r->out.needed = _r.out.needed;
653
1
    r->out.count  = _r.out.count;
654
1
    NDR_PULL_ALLOC(ndr, r->out.info);
655
1
    ZERO_STRUCTP(r->out.info);
656
1
  }
657
42
  if (flags & NDR_OUT) {
658
41
    _r.in.handle  = r->in.handle;
659
41
    _r.in.key_name  = r->in.key_name;
660
41
    _r.in.offered = r->in.offered;
661
41
    _r.out.count  = r->out.count;
662
41
    _r.out.needed = r->out.needed;
663
41
    NDR_CHECK(ndr_pull__spoolss_EnumPrinterDataEx(ndr, flags, &_r));
664
12
    if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
665
12
      NDR_PULL_ALLOC(ndr, r->out.info);
666
12
    }
667
12
    *r->out.info  = NULL;
668
12
    r->out.needed = _r.out.needed;
669
12
    r->out.count  = _r.out.count;
670
12
    r->out.result = _r.out.result;
671
12
    if (_r.out.info.length) {
672
3
      struct ndr_pull *_ndr_info;
673
3
      NDR_PULL_ALLOC(ndr, *r->out.info);
674
3
      _ndr_info = ndr_pull_init_blob(&_r.out.info, *r->out.info);
675
3
      NDR_ERR_HAVE_NO_MEMORY(_ndr_info);
676
3
      _ndr_info->flags= ndr->flags;
677
3
      if (r->in.offered != _ndr_info->data_size) {
678
3
        return ndr_pull_error(ndr, NDR_ERR_BUFSIZE,
679
3
          "SPOOLSS Buffer: offered[%u] doesn't match length of buffer[%u]",
680
3
          (unsigned)r->in.offered, (unsigned)_ndr_info->data_size);
681
3
      }
682
0
      if (*r->out.needed <= _ndr_info->data_size) {
683
0
        struct __spoolss_EnumPrinterDataEx __r;
684
0
        __r.in.count  = *r->out.count;
685
0
        __r.out.info  = NULL;
686
0
        NDR_CHECK(ndr_pull___spoolss_EnumPrinterDataEx(_ndr_info, flags, &__r));
687
0
        *r->out.info  = __r.out.info;
688
0
      }
689
0
    }
690
12
  }
691
10
  return NDR_ERR_SUCCESS;
692
42
}
693
694
uint32_t ndr_size_spoolss_EnumPrinterDataEx_info(TALLOC_CTX *mem_ctx,
695
             uint32_t count, struct spoolss_PrinterEnumValues *info)
696
0
{
697
0
  NDR_SPOOLSS_SIZE_ENUM(spoolss_EnumPrinterDataEx);
698
0
}
699
700
uint32_t _ndr_size_spoolss_DeviceMode(struct spoolss_DeviceMode *devmode, libndr_flags flags)
701
1.58k
{
702
1.58k
  if (!devmode) return 0;
703
666
  return ndr_size_spoolss_DeviceMode(devmode, flags);
704
1.58k
}
705
706
_PUBLIC_ size_t ndr_size_spoolss_StringArray(const struct spoolss_StringArray *r, libndr_flags flags)
707
2.88k
{
708
2.88k
  if (!r) {
709
967
    return 4;
710
967
  }
711
712
1.91k
  return ndr_size_struct(r, flags, (ndr_push_flags_fn_t)ndr_push_spoolss_StringArray);
713
2.88k
}
714
715
/* hand marshall as pidl cannot (yet) generate a relative pointer to a fixed array of
716
 * structs */
717
718
_PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo101(struct ndr_push *ndr, ndr_flags_type ndr_flags, const struct spoolss_DriverInfo101 *r)
719
200
{
720
200
  uint32_t cntr_file_info_1;
721
200
  if (ndr_flags & NDR_SCALARS) {
722
200
    NDR_CHECK(ndr_push_align(ndr, 8));
723
200
    NDR_CHECK(ndr_push_spoolss_DriverOSVersion(ndr, NDR_SCALARS, r->version));
724
200
    {
725
200
      libndr_flags _flags_save_string = ndr->flags;
726
200
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
727
200
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->driver_name));
728
200
      ndr->flags = _flags_save_string;
729
200
    }
730
0
    {
731
200
      libndr_flags _flags_save_string = ndr->flags;
732
200
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
733
200
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->architecture));
734
200
      ndr->flags = _flags_save_string;
735
200
    }
736
200
    NDR_CHECK(ndr_push_relative_ptr1(ndr, r->file_info));
737
200
    NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->file_count));
738
200
    {
739
200
      libndr_flags _flags_save_string = ndr->flags;
740
200
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
741
200
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->monitor_name));
742
200
      ndr->flags = _flags_save_string;
743
200
    }
744
0
    {
745
200
      libndr_flags _flags_save_string = ndr->flags;
746
200
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
747
200
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->default_datatype));
748
200
      ndr->flags = _flags_save_string;
749
200
    }
750
0
    {
751
200
      libndr_flags _flags_save_string_array = ndr->flags;
752
200
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
753
200
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->previous_names));
754
200
      ndr->flags = _flags_save_string_array;
755
200
    }
756
200
    NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->driver_date));
757
200
    NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->driver_version));
758
200
    {
759
200
      libndr_flags _flags_save_string = ndr->flags;
760
200
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
761
200
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->manufacturer_name));
762
200
      ndr->flags = _flags_save_string;
763
200
    }
764
0
    {
765
200
      libndr_flags _flags_save_string = ndr->flags;
766
200
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
767
200
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->manufacturer_url));
768
200
      ndr->flags = _flags_save_string;
769
200
    }
770
0
    {
771
200
      libndr_flags _flags_save_string = ndr->flags;
772
200
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
773
200
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->hardware_id));
774
200
      ndr->flags = _flags_save_string;
775
200
    }
776
0
    {
777
200
      libndr_flags _flags_save_string = ndr->flags;
778
200
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
779
200
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->provider));
780
200
      ndr->flags = _flags_save_string;
781
200
    }
782
200
    NDR_CHECK(ndr_push_trailer_align(ndr, 8));
783
200
  }
784
200
  if (ndr_flags & NDR_BUFFERS) {
785
200
    {
786
200
      libndr_flags _flags_save_string = ndr->flags;
787
200
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
788
200
      if (r->driver_name) {
789
85
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_name));
790
85
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_name));
791
85
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_name));
792
85
      }
793
200
      ndr->flags = _flags_save_string;
794
200
    }
795
0
    {
796
200
      libndr_flags _flags_save_string = ndr->flags;
797
200
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
798
200
      if (r->architecture) {
799
115
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->architecture));
800
115
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->architecture));
801
115
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->architecture));
802
115
      }
803
200
      ndr->flags = _flags_save_string;
804
200
    }
805
200
    if (r->file_info) {
806
122
      NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->file_info));
807
#if 0
808
      NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, r->file_count));
809
#endif
810
4.51k
      for (cntr_file_info_1 = 0; cntr_file_info_1 < r->file_count; cntr_file_info_1++) {
811
4.39k
        NDR_CHECK(ndr_push_spoolss_DriverFileInfo(ndr, NDR_SCALARS, &r->file_info[cntr_file_info_1]));
812
4.39k
      }
813
4.51k
      for (cntr_file_info_1 = 0; cntr_file_info_1 < r->file_count; cntr_file_info_1++) {
814
4.39k
        NDR_CHECK(ndr_push_spoolss_DriverFileInfo(ndr, NDR_BUFFERS, &r->file_info[cntr_file_info_1]));
815
4.39k
      }
816
122
      NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->file_info));
817
122
    }
818
200
    {
819
200
      libndr_flags _flags_save_string = ndr->flags;
820
200
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
821
200
      if (r->monitor_name) {
822
75
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->monitor_name));
823
75
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->monitor_name));
824
75
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->monitor_name));
825
75
      }
826
200
      ndr->flags = _flags_save_string;
827
200
    }
828
0
    {
829
200
      libndr_flags _flags_save_string = ndr->flags;
830
200
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
831
200
      if (r->default_datatype) {
832
78
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->default_datatype));
833
78
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->default_datatype));
834
78
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->default_datatype));
835
78
      }
836
200
      ndr->flags = _flags_save_string;
837
200
    }
838
0
    {
839
200
      libndr_flags _flags_save_string_array = ndr->flags;
840
200
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
841
200
      if (r->previous_names) {
842
88
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->previous_names));
843
88
        NDR_CHECK(ndr_push_string_array(ndr, NDR_SCALARS, r->previous_names));
844
88
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->previous_names));
845
88
      }
846
200
      ndr->flags = _flags_save_string_array;
847
200
    }
848
0
    {
849
200
      libndr_flags _flags_save_string = ndr->flags;
850
200
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
851
200
      if (r->manufacturer_name) {
852
78
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->manufacturer_name));
853
78
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->manufacturer_name));
854
78
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->manufacturer_name));
855
78
      }
856
200
      ndr->flags = _flags_save_string;
857
200
    }
858
0
    {
859
200
      libndr_flags _flags_save_string = ndr->flags;
860
200
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
861
200
      if (r->manufacturer_url) {
862
90
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->manufacturer_url));
863
90
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->manufacturer_url));
864
90
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->manufacturer_url));
865
90
      }
866
200
      ndr->flags = _flags_save_string;
867
200
    }
868
0
    {
869
200
      libndr_flags _flags_save_string = ndr->flags;
870
200
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
871
200
      if (r->hardware_id) {
872
86
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->hardware_id));
873
86
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->hardware_id));
874
86
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->hardware_id));
875
86
      }
876
200
      ndr->flags = _flags_save_string;
877
200
    }
878
0
    {
879
200
      libndr_flags _flags_save_string = ndr->flags;
880
200
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
881
200
      if (r->provider) {
882
74
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->provider));
883
74
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->provider));
884
74
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->provider));
885
74
      }
886
200
      ndr->flags = _flags_save_string;
887
200
    }
888
200
  }
889
200
  return NDR_ERR_SUCCESS;
890
200
}
891
892
_PUBLIC_ enum ndr_err_code ndr_pull_spoolss_DriverInfo101(struct ndr_pull *ndr, ndr_flags_type ndr_flags, struct spoolss_DriverInfo101 *r)
893
499
{
894
499
  uint32_t _ptr_driver_name;
895
499
  TALLOC_CTX *_mem_save_driver_name_0;
896
499
  uint32_t _ptr_architecture;
897
499
  TALLOC_CTX *_mem_save_architecture_0;
898
499
  uint32_t _ptr_file_info;
899
499
  uint32_t cntr_file_info_1;
900
499
  TALLOC_CTX *_mem_save_file_info_0;
901
499
  TALLOC_CTX *_mem_save_file_info_1;
902
499
  uint32_t _ptr_monitor_name;
903
499
  TALLOC_CTX *_mem_save_monitor_name_0;
904
499
  uint32_t _ptr_default_datatype;
905
499
  TALLOC_CTX *_mem_save_default_datatype_0;
906
499
  uint32_t _ptr_previous_names;
907
499
  TALLOC_CTX *_mem_save_previous_names_0;
908
499
  uint32_t _ptr_manufacturer_name;
909
499
  TALLOC_CTX *_mem_save_manufacturer_name_0;
910
499
  uint32_t _ptr_manufacturer_url;
911
499
  TALLOC_CTX *_mem_save_manufacturer_url_0;
912
499
  uint32_t _ptr_hardware_id;
913
499
  TALLOC_CTX *_mem_save_hardware_id_0;
914
499
  uint32_t _ptr_provider;
915
499
  TALLOC_CTX *_mem_save_provider_0;
916
499
  if (ndr_flags & NDR_SCALARS) {
917
499
    NDR_CHECK(ndr_pull_align(ndr, 8));
918
499
    NDR_CHECK(ndr_pull_spoolss_DriverOSVersion(ndr, NDR_SCALARS, &r->version));
919
498
    {
920
498
      libndr_flags _flags_save_string = ndr->flags;
921
498
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
922
498
      NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_driver_name));
923
497
      if (_ptr_driver_name) {
924
189
        NDR_PULL_ALLOC(ndr, r->driver_name);
925
189
        NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->driver_name, _ptr_driver_name));
926
308
      } else {
927
308
        r->driver_name = NULL;
928
308
      }
929
462
      ndr->flags = _flags_save_string;
930
462
    }
931
0
    {
932
462
      libndr_flags _flags_save_string = ndr->flags;
933
462
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
934
462
      NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_architecture));
935
460
      if (_ptr_architecture) {
936
220
        NDR_PULL_ALLOC(ndr, r->architecture);
937
220
        NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->architecture, _ptr_architecture));
938
240
      } else {
939
240
        r->architecture = NULL;
940
240
      }
941
423
      ndr->flags = _flags_save_string;
942
423
    }
943
423
    NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_file_info));
944
421
    if (_ptr_file_info) {
945
242
      NDR_PULL_ALLOC(ndr, r->file_info);
946
242
      NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->file_info, _ptr_file_info));
947
242
    } else {
948
179
      r->file_info = NULL;
949
179
    }
950
381
    NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->file_count));
951
379
    {
952
379
      libndr_flags _flags_save_string = ndr->flags;
953
379
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
954
379
      NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_monitor_name));
955
378
      if (_ptr_monitor_name) {
956
137
        NDR_PULL_ALLOC(ndr, r->monitor_name);
957
137
        NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->monitor_name, _ptr_monitor_name));
958
241
      } else {
959
241
        r->monitor_name = NULL;
960
241
      }
961
362
      ndr->flags = _flags_save_string;
962
362
    }
963
0
    {
964
362
      libndr_flags _flags_save_string = ndr->flags;
965
362
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
966
362
      NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_default_datatype));
967
360
      if (_ptr_default_datatype) {
968
136
        NDR_PULL_ALLOC(ndr, r->default_datatype);
969
136
        NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->default_datatype, _ptr_default_datatype));
970
224
      } else {
971
224
        r->default_datatype = NULL;
972
224
      }
973
334
      ndr->flags = _flags_save_string;
974
334
    }
975
0
    {
976
334
      libndr_flags _flags_save_string_array = ndr->flags;
977
334
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
978
334
      NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_previous_names));
979
332
      if (_ptr_previous_names) {
980
133
        NDR_PULL_ALLOC(ndr, r->previous_names);
981
133
        NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->previous_names, _ptr_previous_names));
982
199
      } else {
983
199
        r->previous_names = NULL;
984
199
      }
985
331
      ndr->flags = _flags_save_string_array;
986
331
    }
987
331
    NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->driver_date));
988
329
    NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->driver_version));
989
328
    {
990
328
      libndr_flags _flags_save_string = ndr->flags;
991
328
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
992
328
      NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_manufacturer_name));
993
327
      if (_ptr_manufacturer_name) {
994
107
        NDR_PULL_ALLOC(ndr, r->manufacturer_name);
995
107
        NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->manufacturer_name, _ptr_manufacturer_name));
996
220
      } else {
997
220
        r->manufacturer_name = NULL;
998
220
      }
999
325
      ndr->flags = _flags_save_string;
1000
325
    }
1001
0
    {
1002
325
      libndr_flags _flags_save_string = ndr->flags;
1003
325
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1004
325
      NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_manufacturer_url));
1005
323
      if (_ptr_manufacturer_url) {
1006
144
        NDR_PULL_ALLOC(ndr, r->manufacturer_url);
1007
144
        NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->manufacturer_url, _ptr_manufacturer_url));
1008
179
      } else {
1009
179
        r->manufacturer_url = NULL;
1010
179
      }
1011
291
      ndr->flags = _flags_save_string;
1012
291
    }
1013
0
    {
1014
291
      libndr_flags _flags_save_string = ndr->flags;
1015
291
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1016
291
      NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_hardware_id));
1017
289
      if (_ptr_hardware_id) {
1018
138
        NDR_PULL_ALLOC(ndr, r->hardware_id);
1019
138
        NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->hardware_id, _ptr_hardware_id));
1020
151
      } else {
1021
151
        r->hardware_id = NULL;
1022
151
      }
1023
257
      ndr->flags = _flags_save_string;
1024
257
    }
1025
0
    {
1026
257
      libndr_flags _flags_save_string = ndr->flags;
1027
257
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1028
257
      NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_provider));
1029
255
      if (_ptr_provider) {
1030
104
        NDR_PULL_ALLOC(ndr, r->provider);
1031
104
        NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->provider, _ptr_provider));
1032
151
      } else {
1033
151
        r->provider = NULL;
1034
151
      }
1035
247
      ndr->flags = _flags_save_string;
1036
247
    }
1037
247
    NDR_CHECK(ndr_pull_trailer_align(ndr, 8));
1038
247
  }
1039
247
  if (ndr_flags & NDR_BUFFERS) {
1040
247
    {
1041
247
      libndr_flags _flags_save_string = ndr->flags;
1042
247
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1043
247
      if (r->driver_name) {
1044
106
        uint32_t _relative_save_offset;
1045
106
        _relative_save_offset = ndr->offset;
1046
106
        NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->driver_name));
1047
106
        _mem_save_driver_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
1048
106
        NDR_PULL_SET_MEM_CTX(ndr, r->driver_name, 0);
1049
106
        NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->driver_name));
1050
105
        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_driver_name_0, 0);
1051
105
        if (ndr->offset > ndr->relative_highest_offset) {
1052
105
          ndr->relative_highest_offset = ndr->offset;
1053
105
        }
1054
105
        ndr->offset = _relative_save_offset;
1055
105
      }
1056
246
      ndr->flags = _flags_save_string;
1057
246
    }
1058
0
    {
1059
246
      libndr_flags _flags_save_string = ndr->flags;
1060
246
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1061
246
      if (r->architecture) {
1062
142
        uint32_t _relative_save_offset;
1063
142
        _relative_save_offset = ndr->offset;
1064
142
        NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->architecture));
1065
142
        _mem_save_architecture_0 = NDR_PULL_GET_MEM_CTX(ndr);
1066
142
        NDR_PULL_SET_MEM_CTX(ndr, r->architecture, 0);
1067
142
        NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->architecture));
1068
141
        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_architecture_0, 0);
1069
141
        if (ndr->offset > ndr->relative_highest_offset) {
1070
107
          ndr->relative_highest_offset = ndr->offset;
1071
107
        }
1072
141
        ndr->offset = _relative_save_offset;
1073
141
      }
1074
245
      ndr->flags = _flags_save_string;
1075
245
    }
1076
245
    if (r->file_info) {
1077
162
      uint32_t _relative_save_offset;
1078
162
      _relative_save_offset = ndr->offset;
1079
162
      NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->file_info));
1080
162
      _mem_save_file_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
1081
162
      NDR_PULL_SET_MEM_CTX(ndr, r->file_info, 0);
1082
#if 0
1083
      NDR_CHECK(ndr_pull_array_size(ndr, &r->file_info));
1084
#else
1085
162
      NDR_CHECK(ndr_token_store(ndr, &ndr->array_size_list, &r->file_info, r->file_count));
1086
162
#endif
1087
162
      NDR_PULL_ALLOC_N(ndr, r->file_info, r->file_count);
1088
161
      _mem_save_file_info_1 = NDR_PULL_GET_MEM_CTX(ndr);
1089
161
      NDR_PULL_SET_MEM_CTX(ndr, r->file_info, 0);
1090
5.87k
      for (cntr_file_info_1 = 0; cntr_file_info_1 < r->file_count; cntr_file_info_1++) {
1091
5.74k
        NDR_CHECK(ndr_pull_spoolss_DriverFileInfo(ndr, NDR_SCALARS, &r->file_info[cntr_file_info_1]));
1092
5.74k
      }
1093
4.79k
      for (cntr_file_info_1 = 0; cntr_file_info_1 < r->file_count; cntr_file_info_1++) {
1094
4.66k
        NDR_CHECK(ndr_pull_spoolss_DriverFileInfo(ndr, NDR_BUFFERS, &r->file_info[cntr_file_info_1]));
1095
4.66k
      }
1096
129
      NDR_PULL_SET_MEM_CTX(ndr, _mem_save_file_info_1, 0);
1097
129
      NDR_PULL_SET_MEM_CTX(ndr, _mem_save_file_info_0, 0);
1098
129
      if (ndr->offset > ndr->relative_highest_offset) {
1099
62
        ndr->relative_highest_offset = ndr->offset;
1100
62
      }
1101
129
      ndr->offset = _relative_save_offset;
1102
129
    }
1103
212
    {
1104
212
      libndr_flags _flags_save_string = ndr->flags;
1105
212
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1106
212
      if (r->monitor_name) {
1107
83
        uint32_t _relative_save_offset;
1108
83
        _relative_save_offset = ndr->offset;
1109
83
        NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->monitor_name));
1110
83
        _mem_save_monitor_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
1111
83
        NDR_PULL_SET_MEM_CTX(ndr, r->monitor_name, 0);
1112
83
        NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->monitor_name));
1113
81
        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_monitor_name_0, 0);
1114
81
        if (ndr->offset > ndr->relative_highest_offset) {
1115
4
          ndr->relative_highest_offset = ndr->offset;
1116
4
        }
1117
81
        ndr->offset = _relative_save_offset;
1118
81
      }
1119
210
      ndr->flags = _flags_save_string;
1120
210
    }
1121
0
    {
1122
210
      libndr_flags _flags_save_string = ndr->flags;
1123
210
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1124
210
      if (r->default_datatype) {
1125
83
        uint32_t _relative_save_offset;
1126
83
        _relative_save_offset = ndr->offset;
1127
83
        NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->default_datatype));
1128
83
        _mem_save_default_datatype_0 = NDR_PULL_GET_MEM_CTX(ndr);
1129
83
        NDR_PULL_SET_MEM_CTX(ndr, r->default_datatype, 0);
1130
83
        NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->default_datatype));
1131
82
        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_default_datatype_0, 0);
1132
82
        if (ndr->offset > ndr->relative_highest_offset) {
1133
7
          ndr->relative_highest_offset = ndr->offset;
1134
7
        }
1135
82
        ndr->offset = _relative_save_offset;
1136
82
      }
1137
209
      ndr->flags = _flags_save_string;
1138
209
    }
1139
0
    {
1140
209
      libndr_flags _flags_save_string_array = ndr->flags;
1141
209
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1142
209
      if (r->previous_names) {
1143
92
        uint32_t _relative_save_offset;
1144
92
        _relative_save_offset = ndr->offset;
1145
92
        NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->previous_names));
1146
92
        _mem_save_previous_names_0 = NDR_PULL_GET_MEM_CTX(ndr);
1147
92
        NDR_PULL_SET_MEM_CTX(ndr, r->previous_names, 0);
1148
92
        NDR_CHECK(ndr_pull_string_array(ndr, NDR_SCALARS, &r->previous_names));
1149
88
        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_previous_names_0, 0);
1150
88
        if (ndr->offset > ndr->relative_highest_offset) {
1151
43
          ndr->relative_highest_offset = ndr->offset;
1152
43
        }
1153
88
        ndr->offset = _relative_save_offset;
1154
88
      }
1155
205
      ndr->flags = _flags_save_string_array;
1156
205
    }
1157
0
    {
1158
205
      libndr_flags _flags_save_string = ndr->flags;
1159
205
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1160
205
      if (r->manufacturer_name) {
1161
79
        uint32_t _relative_save_offset;
1162
79
        _relative_save_offset = ndr->offset;
1163
79
        NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->manufacturer_name));
1164
79
        _mem_save_manufacturer_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
1165
79
        NDR_PULL_SET_MEM_CTX(ndr, r->manufacturer_name, 0);
1166
79
        NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->manufacturer_name));
1167
78
        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_manufacturer_name_0, 0);
1168
78
        if (ndr->offset > ndr->relative_highest_offset) {
1169
12
          ndr->relative_highest_offset = ndr->offset;
1170
12
        }
1171
78
        ndr->offset = _relative_save_offset;
1172
78
      }
1173
204
      ndr->flags = _flags_save_string;
1174
204
    }
1175
0
    {
1176
204
      libndr_flags _flags_save_string = ndr->flags;
1177
204
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1178
204
      if (r->manufacturer_url) {
1179
91
        uint32_t _relative_save_offset;
1180
91
        _relative_save_offset = ndr->offset;
1181
91
        NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->manufacturer_url));
1182
91
        _mem_save_manufacturer_url_0 = NDR_PULL_GET_MEM_CTX(ndr);
1183
91
        NDR_PULL_SET_MEM_CTX(ndr, r->manufacturer_url, 0);
1184
91
        NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->manufacturer_url));
1185
90
        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_manufacturer_url_0, 0);
1186
90
        if (ndr->offset > ndr->relative_highest_offset) {
1187
21
          ndr->relative_highest_offset = ndr->offset;
1188
21
        }
1189
90
        ndr->offset = _relative_save_offset;
1190
90
      }
1191
203
      ndr->flags = _flags_save_string;
1192
203
    }
1193
0
    {
1194
203
      libndr_flags _flags_save_string = ndr->flags;
1195
203
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1196
203
      if (r->hardware_id) {
1197
87
        uint32_t _relative_save_offset;
1198
87
        _relative_save_offset = ndr->offset;
1199
87
        NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->hardware_id));
1200
87
        _mem_save_hardware_id_0 = NDR_PULL_GET_MEM_CTX(ndr);
1201
87
        NDR_PULL_SET_MEM_CTX(ndr, r->hardware_id, 0);
1202
87
        NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->hardware_id));
1203
86
        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_hardware_id_0, 0);
1204
86
        if (ndr->offset > ndr->relative_highest_offset) {
1205
11
          ndr->relative_highest_offset = ndr->offset;
1206
11
        }
1207
86
        ndr->offset = _relative_save_offset;
1208
86
      }
1209
202
      ndr->flags = _flags_save_string;
1210
202
    }
1211
0
    {
1212
202
      libndr_flags _flags_save_string = ndr->flags;
1213
202
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1214
202
      if (r->provider) {
1215
76
        uint32_t _relative_save_offset;
1216
76
        _relative_save_offset = ndr->offset;
1217
76
        NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->provider));
1218
76
        _mem_save_provider_0 = NDR_PULL_GET_MEM_CTX(ndr);
1219
76
        NDR_PULL_SET_MEM_CTX(ndr, r->provider, 0);
1220
76
        NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->provider));
1221
74
        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_provider_0, 0);
1222
74
        if (ndr->offset > ndr->relative_highest_offset) {
1223
4
          ndr->relative_highest_offset = ndr->offset;
1224
4
        }
1225
74
        ndr->offset = _relative_save_offset;
1226
74
      }
1227
200
      ndr->flags = _flags_save_string;
1228
200
    }
1229
200
    if (r->file_info) {
1230
122
      NDR_CHECK(ndr_check_steal_array_size(ndr, (void*)&r->file_info, r->file_count));
1231
122
    }
1232
200
  }
1233
200
  return NDR_ERR_SUCCESS;
1234
247
}
1235
1236
void ndr_print_spoolss_Field(struct ndr_print *ndr, const char *name, const union spoolss_Field *r)
1237
636k
{
1238
636k
  int level;
1239
636k
  level = ndr_print_steal_switch_value(ndr, r);
1240
636k
  ndr_print_union(ndr, name, level, "spoolss_Field");
1241
636k
  switch (level) {
1242
146k
    case PRINTER_NOTIFY_TYPE:
1243
146k
      ndr_print_spoolss_PrintNotifyField(ndr, "field", r->field);
1244
146k
    break;
1245
1246
484k
    case JOB_NOTIFY_TYPE:
1247
484k
      ndr_print_spoolss_JobNotifyField(ndr, "field", r->field);
1248
484k
    break;
1249
1250
4.78k
    default:
1251
4.78k
      ndr_print_uint16(ndr, "field", r->field);
1252
4.78k
    break;
1253
1254
636k
  }
1255
636k
}
1256
1257
_PUBLIC_ size_t ndr_size_spoolss_PrinterData(const union spoolss_PrinterData *r, uint32_t level, libndr_flags flags)
1258
0
{
1259
0
  if (!r) {
1260
0
    return 0;
1261
0
  }
1262
0
  return ndr_size_union(r, flags, level, (ndr_push_flags_fn_t)ndr_push_spoolss_PrinterData);
1263
0
}
1264
1265
void ndr_print_spoolss_security_descriptor(struct ndr_print *ndr, const char *name, const struct security_descriptor *r)
1266
448
{
1267
448
  ndr_print_security_descriptor(ndr, name, r);
1268
448
}
1269
1270
enum ndr_err_code ndr_pull_spoolss_security_descriptor(struct ndr_pull *ndr, ndr_flags_type ndr_flags, struct security_descriptor *r)
1271
928
{
1272
928
  libndr_flags _flags_save_STRUCT = ndr->flags;
1273
928
  ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NO_RELATIVE_REVERSE);
1274
928
  NDR_CHECK(ndr_pull_security_descriptor(ndr, ndr_flags, r));
1275
448
  ndr->flags = _flags_save_STRUCT;
1276
448
  return NDR_ERR_SUCCESS;
1277
928
}
1278
1279
enum ndr_err_code ndr_push_spoolss_security_descriptor(struct ndr_push *ndr, ndr_flags_type ndr_flags, const struct security_descriptor *r)
1280
448
{
1281
448
  {
1282
448
    libndr_flags _flags_save_STRUCT = ndr->flags;
1283
448
    ndr_set_flags(&ndr->flags, LIBNDR_FLAG_LITTLE_ENDIAN|LIBNDR_FLAG_NO_RELATIVE_REVERSE);
1284
448
    if (ndr_flags & NDR_SCALARS) {
1285
448
      NDR_CHECK(ndr_push_align(ndr, 5));
1286
448
      NDR_CHECK(ndr_push_security_descriptor_revision(ndr, NDR_SCALARS, r->revision));
1287
448
      NDR_CHECK(ndr_push_security_descriptor_type(ndr, NDR_SCALARS, r->type));
1288
448
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->owner_sid));
1289
448
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->group_sid));
1290
448
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->sacl));
1291
448
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->dacl));
1292
448
      NDR_CHECK(ndr_push_trailer_align(ndr, 5));
1293
448
    }
1294
448
    if (ndr_flags & NDR_BUFFERS) {
1295
448
      if (r->sacl) {
1296
406
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->sacl));
1297
406
        NDR_CHECK(ndr_push_security_acl(ndr, NDR_SCALARS|NDR_BUFFERS, r->sacl));
1298
406
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->sacl));
1299
406
      }
1300
448
      if (r->dacl) {
1301
405
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->dacl));
1302
405
        NDR_CHECK(ndr_push_security_acl(ndr, NDR_SCALARS|NDR_BUFFERS, r->dacl));
1303
405
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->dacl));
1304
405
      }
1305
448
      if (r->owner_sid) {
1306
260
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->owner_sid));
1307
260
        NDR_CHECK(ndr_push_dom_sid(ndr, NDR_SCALARS, r->owner_sid));
1308
260
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->owner_sid));
1309
260
      }
1310
448
      if (r->group_sid) {
1311
323
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->group_sid));
1312
323
        NDR_CHECK(ndr_push_dom_sid(ndr, NDR_SCALARS, r->group_sid));
1313
323
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->group_sid));
1314
323
      }
1315
448
    }
1316
448
    ndr->flags = _flags_save_STRUCT;
1317
448
  }
1318
0
  return NDR_ERR_SUCCESS;
1319
448
}
1320
1321
_PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo2(struct ndr_push *ndr, ndr_flags_type ndr_flags, const struct spoolss_PrinterInfo2 *r)
1322
44
{
1323
44
  if (ndr_flags & NDR_SCALARS) {
1324
44
    NDR_CHECK(ndr_push_align(ndr, 5));
1325
44
    {
1326
44
      libndr_flags _flags_save_string = ndr->flags;
1327
44
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1328
44
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->servername));
1329
44
      ndr->flags = _flags_save_string;
1330
44
    }
1331
0
    {
1332
44
      libndr_flags _flags_save_string = ndr->flags;
1333
44
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1334
44
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->printername));
1335
44
      ndr->flags = _flags_save_string;
1336
44
    }
1337
0
    {
1338
44
      libndr_flags _flags_save_string = ndr->flags;
1339
44
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1340
44
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->sharename));
1341
44
      ndr->flags = _flags_save_string;
1342
44
    }
1343
0
    {
1344
44
      libndr_flags _flags_save_string = ndr->flags;
1345
44
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1346
44
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->portname));
1347
44
      ndr->flags = _flags_save_string;
1348
44
    }
1349
0
    {
1350
44
      libndr_flags _flags_save_string = ndr->flags;
1351
44
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1352
44
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->drivername));
1353
44
      ndr->flags = _flags_save_string;
1354
44
    }
1355
0
    {
1356
44
      libndr_flags _flags_save_string = ndr->flags;
1357
44
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1358
44
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->comment));
1359
44
      ndr->flags = _flags_save_string;
1360
44
    }
1361
0
    {
1362
44
      libndr_flags _flags_save_string = ndr->flags;
1363
44
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1364
44
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->location));
1365
44
      ndr->flags = _flags_save_string;
1366
44
    }
1367
0
    {
1368
44
      libndr_flags _flags_save_spoolss_DeviceMode = ndr->flags;
1369
44
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
1370
44
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->devmode));
1371
44
      ndr->flags = _flags_save_spoolss_DeviceMode;
1372
44
    }
1373
0
    {
1374
44
      libndr_flags _flags_save_string = ndr->flags;
1375
44
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1376
44
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->sepfile));
1377
44
      ndr->flags = _flags_save_string;
1378
44
    }
1379
0
    {
1380
44
      libndr_flags _flags_save_string = ndr->flags;
1381
44
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1382
44
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->printprocessor));
1383
44
      ndr->flags = _flags_save_string;
1384
44
    }
1385
0
    {
1386
44
      libndr_flags _flags_save_string = ndr->flags;
1387
44
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1388
44
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->datatype));
1389
44
      ndr->flags = _flags_save_string;
1390
44
    }
1391
0
    {
1392
44
      libndr_flags _flags_save_string = ndr->flags;
1393
44
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1394
44
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->parameters));
1395
44
      ndr->flags = _flags_save_string;
1396
44
    }
1397
0
    {
1398
44
      libndr_flags _flags_save_spoolss_security_descriptor = ndr->flags;
1399
44
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
1400
44
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->secdesc));
1401
44
      ndr->flags = _flags_save_spoolss_security_descriptor;
1402
44
    }
1403
44
    NDR_CHECK(ndr_push_spoolss_PrinterAttributes(ndr, NDR_SCALARS, r->attributes));
1404
44
    NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->priority));
1405
44
    NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->defaultpriority));
1406
44
    NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->starttime));
1407
44
    NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->untiltime));
1408
44
    NDR_CHECK(ndr_push_spoolss_PrinterStatus(ndr, NDR_SCALARS, r->status));
1409
44
    NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->cjobs));
1410
44
    NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->averageppm));
1411
44
    NDR_CHECK(ndr_push_trailer_align(ndr, 5));
1412
44
  }
1413
44
  if (ndr_flags & NDR_BUFFERS) {
1414
44
    {
1415
44
      libndr_flags _flags_save_string = ndr->flags;
1416
44
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1417
44
      if (r->servername) {
1418
25
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->servername));
1419
25
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->servername));
1420
25
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->servername));
1421
25
      }
1422
44
      ndr->flags = _flags_save_string;
1423
44
    }
1424
0
    {
1425
44
      libndr_flags _flags_save_string = ndr->flags;
1426
44
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1427
44
      if (r->printername) {
1428
25
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->printername));
1429
25
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->printername));
1430
25
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->printername));
1431
25
      }
1432
44
      ndr->flags = _flags_save_string;
1433
44
    }
1434
0
    {
1435
44
      libndr_flags _flags_save_string = ndr->flags;
1436
44
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1437
44
      if (r->sharename) {
1438
19
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->sharename));
1439
19
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->sharename));
1440
19
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->sharename));
1441
19
      }
1442
44
      ndr->flags = _flags_save_string;
1443
44
    }
1444
0
    {
1445
44
      libndr_flags _flags_save_string = ndr->flags;
1446
44
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1447
44
      if (r->portname) {
1448
11
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->portname));
1449
11
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->portname));
1450
11
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->portname));
1451
11
      }
1452
44
      ndr->flags = _flags_save_string;
1453
44
    }
1454
0
    {
1455
44
      libndr_flags _flags_save_string = ndr->flags;
1456
44
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1457
44
      if (r->drivername) {
1458
31
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->drivername));
1459
31
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->drivername));
1460
31
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->drivername));
1461
31
      }
1462
44
      ndr->flags = _flags_save_string;
1463
44
    }
1464
0
    {
1465
44
      libndr_flags _flags_save_string = ndr->flags;
1466
44
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1467
44
      if (r->comment) {
1468
19
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->comment));
1469
19
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->comment));
1470
19
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->comment));
1471
19
      }
1472
44
      ndr->flags = _flags_save_string;
1473
44
    }
1474
0
    {
1475
44
      libndr_flags _flags_save_string = ndr->flags;
1476
44
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1477
44
      if (r->location) {
1478
23
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->location));
1479
23
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->location));
1480
23
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->location));
1481
23
      }
1482
44
      ndr->flags = _flags_save_string;
1483
44
    }
1484
0
    {
1485
44
      libndr_flags _flags_save_string = ndr->flags;
1486
44
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1487
44
      if (r->sepfile) {
1488
15
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->sepfile));
1489
15
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->sepfile));
1490
15
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->sepfile));
1491
15
      }
1492
44
      ndr->flags = _flags_save_string;
1493
44
    }
1494
0
    {
1495
44
      libndr_flags _flags_save_string = ndr->flags;
1496
44
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1497
44
      if (r->printprocessor) {
1498
19
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->printprocessor));
1499
19
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->printprocessor));
1500
19
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->printprocessor));
1501
19
      }
1502
44
      ndr->flags = _flags_save_string;
1503
44
    }
1504
0
    {
1505
44
      libndr_flags _flags_save_string = ndr->flags;
1506
44
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1507
44
      if (r->datatype) {
1508
17
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->datatype));
1509
17
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->datatype));
1510
17
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->datatype));
1511
17
      }
1512
44
      ndr->flags = _flags_save_string;
1513
44
    }
1514
0
    {
1515
44
      libndr_flags _flags_save_string = ndr->flags;
1516
44
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1517
44
      if (r->parameters) {
1518
12
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->parameters));
1519
12
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->parameters));
1520
12
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->parameters));
1521
12
      }
1522
44
      ndr->flags = _flags_save_string;
1523
44
    }
1524
0
    {
1525
44
      libndr_flags _flags_save_spoolss_DeviceMode = ndr->flags;
1526
44
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
1527
44
      if (r->devmode) {
1528
11
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->devmode));
1529
11
        {
1530
11
          struct ndr_push *_ndr_devmode;
1531
11
          NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_devmode, 0, -1));
1532
11
          NDR_CHECK(ndr_push_spoolss_DeviceMode(_ndr_devmode, NDR_SCALARS, r->devmode));
1533
11
          NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_devmode, 0, -1));
1534
11
        }
1535
11
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->devmode));
1536
11
      }
1537
44
      ndr->flags = _flags_save_spoolss_DeviceMode;
1538
44
    }
1539
0
    {
1540
44
      libndr_flags _flags_save_spoolss_security_descriptor = ndr->flags;
1541
44
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
1542
44
      if (r->secdesc) {
1543
17
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->secdesc));
1544
17
        {
1545
17
          struct ndr_push *_ndr_secdesc;
1546
17
          NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_secdesc, 0, -1));
1547
17
          NDR_CHECK(ndr_push_spoolss_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc));
1548
17
          NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_secdesc, 0, -1));
1549
17
        }
1550
17
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->secdesc));
1551
17
      }
1552
44
      ndr->flags = _flags_save_spoolss_security_descriptor;
1553
44
    }
1554
44
  }
1555
44
  return NDR_ERR_SUCCESS;
1556
44
}
1557
1558
_PUBLIC_ void ndr_print_spoolss_Time(struct ndr_print *ndr, const char *name, const struct spoolss_Time *r)
1559
4.42k
{
1560
4.42k
  struct tm tm;
1561
4.42k
  time_t t;
1562
4.42k
  char *str;
1563
1564
4.42k
  tm.tm_sec = r->second;
1565
4.42k
  tm.tm_min = r->minute;
1566
4.42k
  tm.tm_hour  = r->hour;
1567
4.42k
  tm.tm_mday  = r->day;
1568
4.42k
  tm.tm_mon = r->month - 1;
1569
4.42k
  tm.tm_year  = r->year - 1900;
1570
4.42k
  tm.tm_wday  = r->day_of_week;
1571
4.42k
  tm.tm_yday  = 0;
1572
4.42k
  tm.tm_isdst = -1;
1573
1574
4.42k
  t = mktime(&tm);
1575
1576
4.42k
  str = timestring(ndr, t);
1577
1578
4.42k
  ndr_print_struct(ndr, name, "spoolss_Time");
1579
4.42k
  ndr->depth++;
1580
4.42k
  ndr_print_string(ndr, "", str);
1581
4.42k
  ndr->depth--;
1582
4.42k
  TALLOC_FREE(str);
1583
4.42k
}
1584
1585
_PUBLIC_ libndr_flags ndr_spoolss_PrinterEnumValues_align(enum winreg_Type type)
1586
513
{
1587
513
  switch(type) {
1588
59
  case REG_NONE:
1589
59
    return 0;
1590
5
  case REG_SZ:
1591
5
    return LIBNDR_FLAG_ALIGN2;
1592
12
  case REG_EXPAND_SZ:
1593
12
    return LIBNDR_FLAG_ALIGN2;
1594
2
  case REG_BINARY:
1595
2
    return 0;
1596
2
  case REG_DWORD:
1597
2
    return LIBNDR_FLAG_ALIGN4;
1598
0
  case REG_DWORD_BIG_ENDIAN:
1599
0
    return LIBNDR_FLAG_ALIGN4;
1600
0
  case REG_LINK:
1601
0
    return 0;
1602
1
  case REG_MULTI_SZ:
1603
1
    return LIBNDR_FLAG_ALIGN2;
1604
7
  case REG_RESOURCE_LIST:
1605
7
    return LIBNDR_FLAG_ALIGN2;
1606
6
  case REG_FULL_RESOURCE_DESCRIPTOR:
1607
6
    return LIBNDR_FLAG_ALIGN4;
1608
0
  case REG_RESOURCE_REQUIREMENTS_LIST:
1609
0
    return LIBNDR_FLAG_ALIGN2;
1610
5
  case REG_QWORD:
1611
5
    return LIBNDR_FLAG_ALIGN8;
1612
513
  }
1613
1614
414
  return 0;
1615
513
}