Coverage Report

Created: 2026-02-14 07:07

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
46
#define NDR_SPOOLSS_PUSH_ENUM_IN(fn) do { \
30
46
  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
46
  } 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
46
  _r.in.buffer  = r->in.buffer;\
40
46
  _r.in.offered = r->in.offered;\
41
46
  NDR_CHECK(ndr_push__##fn(ndr, flags, &_r));\
42
46
} while(0)
43
44
38
#define NDR_SPOOLSS_PUSH_ENUM_IN_LEVEL(fn) do { \
45
38
  _r.in.level     = r->in.level;\
46
38
  NDR_SPOOLSS_PUSH_ENUM_IN(fn);\
47
38
} while(0)
48
49
167
#define NDR_SPOOLSS_PUSH_ENUM_OUT_LEVEL(fn) do { \
50
167
  DATA_BLOB _data_blob_info = data_blob_null;\
51
167
  struct ndr_push *_ndr_info = NULL;\
52
167
  _r.in.level = r->in.level;\
53
167
  _r.in.buffer  = r->in.buffer;\
54
167
  _r.in.offered = r->in.offered;\
55
167
  _r.out.info = NULL;\
56
167
  _r.out.needed = r->out.needed;\
57
167
  _r.out.count  = r->out.count;\
58
167
  _r.out.result = r->out.result;\
59
167
  if (r->out.info && *r->out.info && !r->in.buffer) {\
60
145
    return ndr_push_error(ndr, NDR_ERR_BUFSIZE,\
61
145
      "SPOOLSS Buffer: *r->out.info but there's no r->in.buffer");\
62
145
  }\
63
167
  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
22
  NDR_CHECK(ndr_push__##fn(ndr, flags, &_r));\
89
22
} while(0)
90
91
11
#define NDR_SPOOLSS_PUSH_ENUM_OUT(fn) do { \
92
11
  DATA_BLOB _data_blob_info = data_blob_null;\
93
11
  struct ndr_push *_ndr_info = NULL;\
94
11
  _r.in.buffer  = r->in.buffer;\
95
11
  _r.in.offered = r->in.offered;\
96
11
  _r.out.info = NULL;\
97
11
  _r.out.needed = r->out.needed;\
98
11
  _r.out.count  = r->out.count;\
99
11
  _r.out.result = r->out.result;\
100
11
  if (r->out.info && *r->out.info && !r->in.buffer) {\
101
9
    return ndr_push_error(ndr, NDR_ERR_BUFSIZE,\
102
9
      "SPOOLSS Buffer: *r->out.info but there's no r->in.buffer");\
103
9
  }\
104
11
  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
205
#define NDR_SPOOLSS_PUSH_ENUM_LEVEL(fn,in,out) do { \
132
205
  struct _##fn _r;\
133
205
  if (flags & NDR_IN) {\
134
38
    in;\
135
38
    NDR_SPOOLSS_PUSH_ENUM_IN_LEVEL(fn);\
136
38
  }\
137
205
  if (flags & NDR_OUT) {\
138
167
    out;\
139
167
    NDR_SPOOLSS_PUSH_ENUM_OUT_LEVEL(fn);\
140
167
  }\
141
205
} while(0)
142
143
19
#define NDR_SPOOLSS_PUSH_ENUM(fn,in,out) do { \
144
19
  struct _##fn _r;\
145
19
  if (flags & NDR_IN) {\
146
8
    in;\
147
8
    NDR_SPOOLSS_PUSH_ENUM_IN(fn);\
148
8
  }\
149
19
  if (flags & NDR_OUT) {\
150
11
    out;\
151
11
    NDR_SPOOLSS_PUSH_ENUM_OUT(fn);\
152
11
  }\
153
19
} while(0)
154
155
538
#define NDR_SPOOLSS_PULL_ENUM_IN_COMMON(fn) do { \
156
538
  ZERO_STRUCT(r->out);\
157
538
  r->in.buffer  = _r.in.buffer;\
158
538
  r->in.offered = _r.in.offered;\
159
538
  r->out.needed = _r.out.needed;\
160
538
  r->out.count  = _r.out.count;\
161
538
  if (!r->in.buffer && r->in.offered != 0) {\
162
287
    return ndr_pull_error(ndr, NDR_ERR_BUFSIZE,\
163
287
      "SPOOLSS Buffer: r->in.offered[%u] but there's no buffer",\
164
287
      (unsigned)r->in.offered);\
165
287
  } else if (r->in.buffer && r->in.buffer->length != r->in.offered) {\
166
205
    return ndr_pull_error(ndr, NDR_ERR_BUFSIZE,\
167
205
      "SPOOLSS Buffer: r->in.offered[%u] doesn't match length of r->in.buffer[%u]",\
168
205
      (unsigned)r->in.offered, (unsigned)r->in.buffer->length);\
169
205
  }\
170
538
  NDR_PULL_ALLOC(ndr, r->out.info);\
171
46
  ZERO_STRUCTP(r->out.info);\
172
46
} while(0)
173
174
209
#define NDR_SPOOLSS_PULL_ENUM_IN(fn) do { \
175
209
  NDR_CHECK(ndr_pull__##fn(ndr, flags, &_r));\
176
209
  NDR_SPOOLSS_PULL_ENUM_IN_COMMON(fn); \
177
71
} while(0)
178
179
1.30k
#define NDR_SPOOLSS_PULL_ENUM_IN_LEVEL(fn) do { \
180
1.30k
  NDR_CHECK(ndr_pull__##fn(ndr, flags, &_r));\
181
1.30k
  r->in.level = _r.in.level;\
182
467
  NDR_SPOOLSS_PULL_ENUM_IN_COMMON(fn); \
183
467
} while(0)
184
185
387
#define NDR_SPOOLSS_PULL_ENUM_OUT_LEVEL(fn) do { \
186
387
  _r.in.level = r->in.level;\
187
387
  _r.in.buffer  = r->in.buffer;\
188
387
  _r.in.offered = r->in.offered;\
189
387
  _r.out.needed = r->out.needed;\
190
387
  _r.out.count  = r->out.count;\
191
387
  NDR_CHECK(ndr_pull__##fn(ndr, flags, &_r));\
192
387
  if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {\
193
191
    NDR_PULL_ALLOC(ndr, r->out.info);\
194
191
  }\
195
191
  *r->out.info = NULL;\
196
191
  r->out.needed = _r.out.needed;\
197
191
  r->out.count  = _r.out.count;\
198
191
  r->out.result = _r.out.result;\
199
191
  if (_r.out.info) {\
200
169
    struct ndr_pull *_ndr_info;\
201
169
    NDR_PULL_ALLOC(ndr, *r->out.info);\
202
169
    _ndr_info = ndr_pull_init_blob(_r.out.info, *r->out.info);\
203
169
    NDR_ERR_HAVE_NO_MEMORY(_ndr_info);\
204
169
    _ndr_info->flags= ndr->flags;\
205
169
    if (r->in.offered != _ndr_info->data_size) {\
206
13
      return ndr_pull_error(ndr, NDR_ERR_BUFSIZE,\
207
13
        "SPOOLSS Buffer: offered[%u] doesn't match length of buffer[%u]",\
208
13
        (unsigned)r->in.offered, (unsigned)_ndr_info->data_size);\
209
13
    }\
210
169
    if (*r->out.needed <= _ndr_info->data_size) {\
211
82
      struct __##fn __r;\
212
82
      __r.in.level  = r->in.level;\
213
82
      __r.in.count  = *r->out.count;\
214
82
      __r.out.info  = NULL;\
215
82
      NDR_CHECK(ndr_pull___##fn(_ndr_info, flags, &__r));\
216
82
      *r->out.info  = __r.out.info;\
217
71
    }\
218
156
  }\
219
191
} while(0)
220
221
47
#define NDR_SPOOLSS_PULL_ENUM_OUT(fn) do { \
222
47
  _r.in.buffer  = r->in.buffer;\
223
47
  _r.in.offered = r->in.offered;\
224
47
  _r.out.needed = r->out.needed;\
225
47
  _r.out.count  = r->out.count;\
226
47
  NDR_CHECK(ndr_pull__##fn(ndr, flags, &_r));\
227
47
  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
2
    }\
252
11
  }\
253
14
} while(0)
254
255
1.69k
#define NDR_SPOOLSS_PULL_ENUM_LEVEL(fn,in,out) do { \
256
1.69k
  struct _##fn _r;\
257
1.69k
  if (flags & NDR_IN) {\
258
1.30k
    out;\
259
1.30k
    NDR_SPOOLSS_PULL_ENUM_IN_LEVEL(fn);\
260
1.30k
    in;\
261
38
  }\
262
1.69k
  if (flags & NDR_OUT) {\
263
387
    out;\
264
387
    NDR_SPOOLSS_PULL_ENUM_OUT_LEVEL(fn);\
265
387
  }\
266
425
} while(0)
267
268
256
#define NDR_SPOOLSS_PULL_ENUM(fn,in,out) do { \
269
256
  struct _##fn _r;\
270
256
  if (flags & NDR_IN) {\
271
209
    out;\
272
209
    NDR_SPOOLSS_PULL_ENUM_IN(fn);\
273
209
    in;\
274
8
  }\
275
256
  if (flags & NDR_OUT) {\
276
47
    out;\
277
47
    NDR_SPOOLSS_PULL_ENUM_OUT(fn);\
278
47
  }\
279
55
} 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
26
{
324
26
  NDR_SPOOLSS_PUSH_ENUM_LEVEL(spoolss_EnumPrinters,{
325
26
    _r.in.flags = r->in.flags;
326
26
    _r.in.server  = r->in.server;
327
26
  },{
328
26
    _r.in.flags = r->in.flags;
329
26
    _r.in.server  = r->in.server;
330
26
  });
331
16
  return NDR_ERR_SUCCESS;
332
26
}
333
334
enum ndr_err_code ndr_pull_spoolss_EnumPrinters(struct ndr_pull *ndr, ndr_flags_type flags, struct spoolss_EnumPrinters *r)
335
186
{
336
186
  NDR_SPOOLSS_PULL_ENUM_LEVEL(spoolss_EnumPrinters,{
337
186
    r->in.flags = _r.in.flags;
338
186
    r->in.server  = _r.in.server;
339
186
  },{
340
186
    _r.in.flags = r->in.flags;
341
186
    _r.in.server  = r->in.server;
342
186
  });
343
26
  return NDR_ERR_SUCCESS;
344
186
}
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
34
{
356
34
  NDR_SPOOLSS_PUSH_ENUM_LEVEL(spoolss_EnumJobs,{
357
34
    _r.in.handle  = r->in.handle;
358
34
    _r.in.firstjob  = r->in.firstjob;
359
34
    _r.in.numjobs = r->in.numjobs;
360
34
  },{
361
34
    _r.in.handle  = r->in.handle;
362
34
    _r.in.firstjob  = r->in.firstjob;
363
34
    _r.in.numjobs = r->in.numjobs;
364
34
  });
365
8
  return NDR_ERR_SUCCESS;
366
34
}
367
368
enum ndr_err_code ndr_pull_spoolss_EnumJobs(struct ndr_pull *ndr, ndr_flags_type flags, struct spoolss_EnumJobs *r)
369
108
{
370
108
  NDR_SPOOLSS_PULL_ENUM_LEVEL(spoolss_EnumJobs,{
371
108
    r->in.handle  = _r.in.handle;
372
108
    r->in.firstjob  = _r.in.firstjob;
373
108
    r->in.numjobs = _r.in.numjobs;
374
108
  },{
375
108
    _r.in.handle  = r->in.handle;
376
108
    _r.in.firstjob  = r->in.firstjob;
377
108
    _r.in.numjobs = r->in.numjobs;
378
108
  });
379
34
  return NDR_ERR_SUCCESS;
380
108
}
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
32
{
392
32
  NDR_SPOOLSS_PUSH_ENUM_LEVEL(spoolss_EnumPrinterDrivers,{
393
32
    _r.in.server    = r->in.server;
394
32
    _r.in.environment = r->in.environment;
395
32
  },{
396
32
    _r.in.server    = r->in.server;
397
32
    _r.in.environment = r->in.environment;
398
32
  });
399
6
  return NDR_ERR_SUCCESS;
400
32
}
401
402
enum ndr_err_code ndr_pull_spoolss_EnumPrinterDrivers(struct ndr_pull *ndr, ndr_flags_type flags, struct spoolss_EnumPrinterDrivers *r)
403
268
{
404
268
  NDR_SPOOLSS_PULL_ENUM_LEVEL(spoolss_EnumPrinterDrivers,{
405
268
    r->in.server    = _r.in.server;
406
268
    r->in.environment = _r.in.environment;
407
268
  },{
408
268
    _r.in.server    = r->in.server;
409
268
    _r.in.environment = r->in.environment;
410
268
  });
411
32
  return NDR_ERR_SUCCESS;
412
268
}
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
20
{
424
20
  NDR_SPOOLSS_PUSH_ENUM_LEVEL(spoolss_EnumForms,{
425
20
    _r.in.handle  = r->in.handle;
426
20
  },{
427
20
    _r.in.handle  = r->in.handle;
428
20
  });
429
3
  return NDR_ERR_SUCCESS;
430
20
}
431
432
enum ndr_err_code ndr_pull_spoolss_EnumForms(struct ndr_pull *ndr, ndr_flags_type flags, struct spoolss_EnumForms *r)
433
136
{
434
136
  NDR_SPOOLSS_PULL_ENUM_LEVEL(spoolss_EnumForms,{
435
136
    r->in.handle  = _r.in.handle;
436
136
  },{
437
136
    _r.in.handle  = r->in.handle;
438
136
  });
439
20
  return NDR_ERR_SUCCESS;
440
136
}
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
24
{
452
24
  NDR_SPOOLSS_PUSH_ENUM_LEVEL(spoolss_EnumPorts,{
453
24
    _r.in.servername= r->in.servername;
454
24
  },{
455
24
    _r.in.servername= r->in.servername;
456
24
  });
457
12
  return NDR_ERR_SUCCESS;
458
24
}
459
460
enum ndr_err_code ndr_pull_spoolss_EnumPorts(struct ndr_pull *ndr, ndr_flags_type flags, struct spoolss_EnumPorts *r)
461
221
{
462
221
  NDR_SPOOLSS_PULL_ENUM_LEVEL(spoolss_EnumPorts,{
463
221
    r->in.servername= _r.in.servername;
464
221
  },{
465
221
    _r.in.servername= r->in.servername;
466
221
  });
467
24
  return NDR_ERR_SUCCESS;
468
221
}
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
26
{
480
26
  NDR_SPOOLSS_PUSH_ENUM_LEVEL(spoolss_EnumMonitors,{
481
26
    _r.in.servername= r->in.servername;
482
26
  },{
483
26
    _r.in.servername= r->in.servername;
484
26
  });
485
5
  return NDR_ERR_SUCCESS;
486
26
}
487
488
enum ndr_err_code ndr_pull_spoolss_EnumMonitors(struct ndr_pull *ndr, ndr_flags_type flags, struct spoolss_EnumMonitors *r)
489
222
{
490
222
  NDR_SPOOLSS_PULL_ENUM_LEVEL(spoolss_EnumMonitors,{
491
222
    r->in.servername= _r.in.servername;
492
222
  },{
493
222
    _r.in.servername= r->in.servername;
494
222
  });
495
26
  return NDR_ERR_SUCCESS;
496
222
}
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
20
{
508
20
  NDR_SPOOLSS_PUSH_ENUM_LEVEL(spoolss_EnumPrintProcessors,{
509
20
    _r.in.servername  = r->in.servername;
510
20
    _r.in.environment = r->in.environment;
511
20
  },{
512
20
    _r.in.servername  = r->in.servername;
513
20
    _r.in.environment = r->in.environment;
514
20
  });
515
5
  return NDR_ERR_SUCCESS;
516
20
}
517
518
enum ndr_err_code ndr_pull_spoolss_EnumPrintProcessors(struct ndr_pull *ndr, ndr_flags_type flags, struct spoolss_EnumPrintProcessors *r)
519
272
{
520
272
  NDR_SPOOLSS_PULL_ENUM_LEVEL(spoolss_EnumPrintProcessors,{
521
272
    r->in.servername  = _r.in.servername;
522
272
    r->in.environment = _r.in.environment;
523
272
  },{
524
272
    _r.in.servername  = r->in.servername;
525
272
    _r.in.environment = r->in.environment;
526
272
  });
527
20
  return NDR_ERR_SUCCESS;
528
272
}
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
23
{
541
23
  NDR_SPOOLSS_PUSH_ENUM_LEVEL(spoolss_EnumPrintProcessorDataTypes,{
542
23
    _r.in.servername    = r->in.servername;
543
23
    _r.in.print_processor_name  = r->in.print_processor_name;
544
23
  },{
545
23
    _r.in.servername    = r->in.servername;
546
23
    _r.in.print_processor_name  = r->in.print_processor_name;
547
23
  });
548
5
  return NDR_ERR_SUCCESS;
549
23
}
550
551
enum ndr_err_code ndr_pull_spoolss_EnumPrintProcessorDataTypes(struct ndr_pull *ndr, ndr_flags_type flags, struct spoolss_EnumPrintProcessorDataTypes *r)
552
277
{
553
277
  NDR_SPOOLSS_PULL_ENUM_LEVEL(spoolss_EnumPrintProcessorDataTypes,{
554
277
    r->in.servername    = _r.in.servername;
555
277
    r->in.print_processor_name  = _r.in.print_processor_name;
556
277
  },{
557
277
    _r.in.servername    = r->in.servername;
558
277
    _r.in.print_processor_name  = r->in.print_processor_name;
559
277
  });
560
23
  return NDR_ERR_SUCCESS;
561
277
}
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
19
{
574
19
  NDR_SPOOLSS_PUSH_ENUM(spoolss_EnumPerMachineConnections,{
575
19
    _r.in.server  = r->in.server;
576
19
  },{
577
19
    _r.in.server  = r->in.server;
578
19
  });
579
10
  return NDR_ERR_SUCCESS;
580
19
}
581
582
enum ndr_err_code ndr_pull_spoolss_EnumPerMachineConnections(struct ndr_pull *ndr, ndr_flags_type flags, struct spoolss_EnumPerMachineConnections *r)
583
256
{
584
256
  NDR_SPOOLSS_PULL_ENUM(spoolss_EnumPerMachineConnections,{
585
256
    r->in.server  = _r.in.server;
586
256
  },{
587
256
    _r.in.server  = r->in.server;
588
256
  });
589
19
  return NDR_ERR_SUCCESS;
590
256
}
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
84
{
643
84
  struct _spoolss_EnumPrinterDataEx _r;
644
84
  if (flags & NDR_IN) {
645
40
    _r.in.handle  = r->in.handle;
646
40
    _r.in.key_name  = r->in.key_name;
647
40
    ZERO_STRUCT(r->out);
648
40
    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
45
  if (flags & NDR_OUT) {
658
44
    _r.in.handle  = r->in.handle;
659
44
    _r.in.key_name  = r->in.key_name;
660
44
    _r.in.offered = r->in.offered;
661
44
    _r.out.count  = r->out.count;
662
44
    _r.out.needed = r->out.needed;
663
44
    NDR_CHECK(ndr_pull__spoolss_EnumPrinterDataEx(ndr, flags, &_r));
664
13
    if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
665
13
      NDR_PULL_ALLOC(ndr, r->out.info);
666
13
    }
667
13
    *r->out.info  = NULL;
668
13
    r->out.needed = _r.out.needed;
669
13
    r->out.count  = _r.out.count;
670
13
    r->out.result = _r.out.result;
671
13
    if (_r.out.info.length) {
672
4
      struct ndr_pull *_ndr_info;
673
4
      NDR_PULL_ALLOC(ndr, *r->out.info);
674
4
      _ndr_info = ndr_pull_init_blob(&_r.out.info, *r->out.info);
675
4
      NDR_ERR_HAVE_NO_MEMORY(_ndr_info);
676
4
      _ndr_info->flags= ndr->flags;
677
4
      if (r->in.offered != _ndr_info->data_size) {
678
4
        return ndr_pull_error(ndr, NDR_ERR_BUFSIZE,
679
4
          "SPOOLSS Buffer: offered[%u] doesn't match length of buffer[%u]",
680
4
          (unsigned)r->in.offered, (unsigned)_ndr_info->data_size);
681
4
      }
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
13
  }
691
10
  return NDR_ERR_SUCCESS;
692
45
}
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.59k
{
702
1.59k
  if (!devmode) return 0;
703
660
  return ndr_size_spoolss_DeviceMode(devmode, flags);
704
1.59k
}
705
706
_PUBLIC_ size_t ndr_size_spoolss_StringArray(const struct spoolss_StringArray *r, libndr_flags flags)
707
2.57k
{
708
2.57k
  if (!r) {
709
939
    return 4;
710
939
  }
711
712
1.63k
  return ndr_size_struct(r, flags, (ndr_push_flags_fn_t)ndr_push_spoolss_StringArray);
713
2.57k
}
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
185
{
720
185
  uint32_t cntr_file_info_1;
721
185
  if (ndr_flags & NDR_SCALARS) {
722
185
    NDR_CHECK(ndr_push_align(ndr, 8));
723
185
    NDR_CHECK(ndr_push_spoolss_DriverOSVersion(ndr, NDR_SCALARS, r->version));
724
185
    {
725
185
      libndr_flags _flags_save_string = ndr->flags;
726
185
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
727
185
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->driver_name));
728
185
      ndr->flags = _flags_save_string;
729
185
    }
730
0
    {
731
185
      libndr_flags _flags_save_string = ndr->flags;
732
185
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
733
185
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->architecture));
734
185
      ndr->flags = _flags_save_string;
735
185
    }
736
185
    NDR_CHECK(ndr_push_relative_ptr1(ndr, r->file_info));
737
185
    NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->file_count));
738
185
    {
739
185
      libndr_flags _flags_save_string = ndr->flags;
740
185
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
741
185
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->monitor_name));
742
185
      ndr->flags = _flags_save_string;
743
185
    }
744
0
    {
745
185
      libndr_flags _flags_save_string = ndr->flags;
746
185
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
747
185
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->default_datatype));
748
185
      ndr->flags = _flags_save_string;
749
185
    }
750
0
    {
751
185
      libndr_flags _flags_save_string_array = ndr->flags;
752
185
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
753
185
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->previous_names));
754
185
      ndr->flags = _flags_save_string_array;
755
185
    }
756
185
    NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->driver_date));
757
185
    NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->driver_version));
758
185
    {
759
185
      libndr_flags _flags_save_string = ndr->flags;
760
185
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
761
185
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->manufacturer_name));
762
185
      ndr->flags = _flags_save_string;
763
185
    }
764
0
    {
765
185
      libndr_flags _flags_save_string = ndr->flags;
766
185
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
767
185
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->manufacturer_url));
768
185
      ndr->flags = _flags_save_string;
769
185
    }
770
0
    {
771
185
      libndr_flags _flags_save_string = ndr->flags;
772
185
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
773
185
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->hardware_id));
774
185
      ndr->flags = _flags_save_string;
775
185
    }
776
0
    {
777
185
      libndr_flags _flags_save_string = ndr->flags;
778
185
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
779
185
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->provider));
780
185
      ndr->flags = _flags_save_string;
781
185
    }
782
185
    NDR_CHECK(ndr_push_trailer_align(ndr, 8));
783
185
  }
784
185
  if (ndr_flags & NDR_BUFFERS) {
785
185
    {
786
185
      libndr_flags _flags_save_string = ndr->flags;
787
185
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
788
185
      if (r->driver_name) {
789
63
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_name));
790
63
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_name));
791
63
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_name));
792
63
      }
793
185
      ndr->flags = _flags_save_string;
794
185
    }
795
0
    {
796
185
      libndr_flags _flags_save_string = ndr->flags;
797
185
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
798
185
      if (r->architecture) {
799
81
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->architecture));
800
81
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->architecture));
801
81
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->architecture));
802
81
      }
803
185
      ndr->flags = _flags_save_string;
804
185
    }
805
185
    if (r->file_info) {
806
104
      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
3.76k
      for (cntr_file_info_1 = 0; cntr_file_info_1 < r->file_count; cntr_file_info_1++) {
811
3.66k
        NDR_CHECK(ndr_push_spoolss_DriverFileInfo(ndr, NDR_SCALARS, &r->file_info[cntr_file_info_1]));
812
3.66k
      }
813
3.76k
      for (cntr_file_info_1 = 0; cntr_file_info_1 < r->file_count; cntr_file_info_1++) {
814
3.66k
        NDR_CHECK(ndr_push_spoolss_DriverFileInfo(ndr, NDR_BUFFERS, &r->file_info[cntr_file_info_1]));
815
3.66k
      }
816
104
      NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->file_info));
817
104
    }
818
185
    {
819
185
      libndr_flags _flags_save_string = ndr->flags;
820
185
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
821
185
      if (r->monitor_name) {
822
61
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->monitor_name));
823
61
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->monitor_name));
824
61
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->monitor_name));
825
61
      }
826
185
      ndr->flags = _flags_save_string;
827
185
    }
828
0
    {
829
185
      libndr_flags _flags_save_string = ndr->flags;
830
185
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
831
185
      if (r->default_datatype) {
832
66
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->default_datatype));
833
66
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->default_datatype));
834
66
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->default_datatype));
835
66
      }
836
185
      ndr->flags = _flags_save_string;
837
185
    }
838
0
    {
839
185
      libndr_flags _flags_save_string_array = ndr->flags;
840
185
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
841
185
      if (r->previous_names) {
842
66
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->previous_names));
843
66
        NDR_CHECK(ndr_push_string_array(ndr, NDR_SCALARS, r->previous_names));
844
66
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->previous_names));
845
66
      }
846
185
      ndr->flags = _flags_save_string_array;
847
185
    }
848
0
    {
849
185
      libndr_flags _flags_save_string = ndr->flags;
850
185
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
851
185
      if (r->manufacturer_name) {
852
54
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->manufacturer_name));
853
54
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->manufacturer_name));
854
54
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->manufacturer_name));
855
54
      }
856
185
      ndr->flags = _flags_save_string;
857
185
    }
858
0
    {
859
185
      libndr_flags _flags_save_string = ndr->flags;
860
185
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
861
185
      if (r->manufacturer_url) {
862
66
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->manufacturer_url));
863
66
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->manufacturer_url));
864
66
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->manufacturer_url));
865
66
      }
866
185
      ndr->flags = _flags_save_string;
867
185
    }
868
0
    {
869
185
      libndr_flags _flags_save_string = ndr->flags;
870
185
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
871
185
      if (r->hardware_id) {
872
55
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->hardware_id));
873
55
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->hardware_id));
874
55
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->hardware_id));
875
55
      }
876
185
      ndr->flags = _flags_save_string;
877
185
    }
878
0
    {
879
185
      libndr_flags _flags_save_string = ndr->flags;
880
185
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
881
185
      if (r->provider) {
882
61
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->provider));
883
61
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->provider));
884
61
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->provider));
885
61
      }
886
185
      ndr->flags = _flags_save_string;
887
185
    }
888
185
  }
889
185
  return NDR_ERR_SUCCESS;
890
185
}
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
431
{
894
431
  uint32_t _ptr_driver_name;
895
431
  TALLOC_CTX *_mem_save_driver_name_0;
896
431
  uint32_t _ptr_architecture;
897
431
  TALLOC_CTX *_mem_save_architecture_0;
898
431
  uint32_t _ptr_file_info;
899
431
  uint32_t cntr_file_info_1;
900
431
  TALLOC_CTX *_mem_save_file_info_0;
901
431
  TALLOC_CTX *_mem_save_file_info_1;
902
431
  uint32_t _ptr_monitor_name;
903
431
  TALLOC_CTX *_mem_save_monitor_name_0;
904
431
  uint32_t _ptr_default_datatype;
905
431
  TALLOC_CTX *_mem_save_default_datatype_0;
906
431
  uint32_t _ptr_previous_names;
907
431
  TALLOC_CTX *_mem_save_previous_names_0;
908
431
  uint32_t _ptr_manufacturer_name;
909
431
  TALLOC_CTX *_mem_save_manufacturer_name_0;
910
431
  uint32_t _ptr_manufacturer_url;
911
431
  TALLOC_CTX *_mem_save_manufacturer_url_0;
912
431
  uint32_t _ptr_hardware_id;
913
431
  TALLOC_CTX *_mem_save_hardware_id_0;
914
431
  uint32_t _ptr_provider;
915
431
  TALLOC_CTX *_mem_save_provider_0;
916
431
  if (ndr_flags & NDR_SCALARS) {
917
431
    NDR_CHECK(ndr_pull_align(ndr, 8));
918
431
    NDR_CHECK(ndr_pull_spoolss_DriverOSVersion(ndr, NDR_SCALARS, &r->version));
919
429
    {
920
429
      libndr_flags _flags_save_string = ndr->flags;
921
429
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
922
429
      NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_driver_name));
923
428
      if (_ptr_driver_name) {
924
167
        NDR_PULL_ALLOC(ndr, r->driver_name);
925
167
        NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->driver_name, _ptr_driver_name));
926
261
      } else {
927
261
        r->driver_name = NULL;
928
261
      }
929
393
      ndr->flags = _flags_save_string;
930
393
    }
931
0
    {
932
393
      libndr_flags _flags_save_string = ndr->flags;
933
393
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
934
393
      NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_architecture));
935
391
      if (_ptr_architecture) {
936
145
        NDR_PULL_ALLOC(ndr, r->architecture);
937
145
        NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->architecture, _ptr_architecture));
938
246
      } else {
939
246
        r->architecture = NULL;
940
246
      }
941
370
      ndr->flags = _flags_save_string;
942
370
    }
943
370
    NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_file_info));
944
368
    if (_ptr_file_info) {
945
177
      NDR_PULL_ALLOC(ndr, r->file_info);
946
177
      NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->file_info, _ptr_file_info));
947
191
    } else {
948
191
      r->file_info = NULL;
949
191
    }
950
364
    NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->file_count));
951
362
    {
952
362
      libndr_flags _flags_save_string = ndr->flags;
953
362
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
954
362
      NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_monitor_name));
955
361
      if (_ptr_monitor_name) {
956
125
        NDR_PULL_ALLOC(ndr, r->monitor_name);
957
125
        NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->monitor_name, _ptr_monitor_name));
958
236
      } else {
959
236
        r->monitor_name = NULL;
960
236
      }
961
334
      ndr->flags = _flags_save_string;
962
334
    }
963
0
    {
964
334
      libndr_flags _flags_save_string = ndr->flags;
965
334
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
966
334
      NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_default_datatype));
967
332
      if (_ptr_default_datatype) {
968
129
        NDR_PULL_ALLOC(ndr, r->default_datatype);
969
129
        NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->default_datatype, _ptr_default_datatype));
970
203
      } else {
971
203
        r->default_datatype = NULL;
972
203
      }
973
296
      ndr->flags = _flags_save_string;
974
296
    }
975
0
    {
976
296
      libndr_flags _flags_save_string_array = ndr->flags;
977
296
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
978
296
      NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_previous_names));
979
294
      if (_ptr_previous_names) {
980
100
        NDR_PULL_ALLOC(ndr, r->previous_names);
981
100
        NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->previous_names, _ptr_previous_names));
982
194
      } else {
983
194
        r->previous_names = NULL;
984
194
      }
985
293
      ndr->flags = _flags_save_string_array;
986
293
    }
987
293
    NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->driver_date));
988
291
    NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->driver_version));
989
290
    {
990
290
      libndr_flags _flags_save_string = ndr->flags;
991
290
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
992
290
      NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_manufacturer_name));
993
289
      if (_ptr_manufacturer_name) {
994
101
        NDR_PULL_ALLOC(ndr, r->manufacturer_name);
995
101
        NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->manufacturer_name, _ptr_manufacturer_name));
996
188
      } else {
997
188
        r->manufacturer_name = NULL;
998
188
      }
999
261
      ndr->flags = _flags_save_string;
1000
261
    }
1001
0
    {
1002
261
      libndr_flags _flags_save_string = ndr->flags;
1003
261
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1004
261
      NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_manufacturer_url));
1005
259
      if (_ptr_manufacturer_url) {
1006
107
        NDR_PULL_ALLOC(ndr, r->manufacturer_url);
1007
107
        NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->manufacturer_url, _ptr_manufacturer_url));
1008
152
      } else {
1009
152
        r->manufacturer_url = NULL;
1010
152
      }
1011
234
      ndr->flags = _flags_save_string;
1012
234
    }
1013
0
    {
1014
234
      libndr_flags _flags_save_string = ndr->flags;
1015
234
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1016
234
      NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_hardware_id));
1017
232
      if (_ptr_hardware_id) {
1018
74
        NDR_PULL_ALLOC(ndr, r->hardware_id);
1019
74
        NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->hardware_id, _ptr_hardware_id));
1020
158
      } else {
1021
158
        r->hardware_id = NULL;
1022
158
      }
1023
231
      ndr->flags = _flags_save_string;
1024
231
    }
1025
0
    {
1026
231
      libndr_flags _flags_save_string = ndr->flags;
1027
231
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1028
231
      NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_provider));
1029
229
      if (_ptr_provider) {
1030
80
        NDR_PULL_ALLOC(ndr, r->provider);
1031
80
        NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->provider, _ptr_provider));
1032
149
      } else {
1033
149
        r->provider = NULL;
1034
149
      }
1035
228
      ndr->flags = _flags_save_string;
1036
228
    }
1037
228
    NDR_CHECK(ndr_pull_trailer_align(ndr, 8));
1038
228
  }
1039
228
  if (ndr_flags & NDR_BUFFERS) {
1040
228
    {
1041
228
      libndr_flags _flags_save_string = ndr->flags;
1042
228
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1043
228
      if (r->driver_name) {
1044
84
        uint32_t _relative_save_offset;
1045
84
        _relative_save_offset = ndr->offset;
1046
84
        NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->driver_name));
1047
84
        _mem_save_driver_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
1048
84
        NDR_PULL_SET_MEM_CTX(ndr, r->driver_name, 0);
1049
84
        NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->driver_name));
1050
83
        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_driver_name_0, 0);
1051
83
        if (ndr->offset > ndr->relative_highest_offset) {
1052
83
          ndr->relative_highest_offset = ndr->offset;
1053
83
        }
1054
83
        ndr->offset = _relative_save_offset;
1055
83
      }
1056
227
      ndr->flags = _flags_save_string;
1057
227
    }
1058
0
    {
1059
227
      libndr_flags _flags_save_string = ndr->flags;
1060
227
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1061
227
      if (r->architecture) {
1062
103
        uint32_t _relative_save_offset;
1063
103
        _relative_save_offset = ndr->offset;
1064
103
        NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->architecture));
1065
103
        _mem_save_architecture_0 = NDR_PULL_GET_MEM_CTX(ndr);
1066
103
        NDR_PULL_SET_MEM_CTX(ndr, r->architecture, 0);
1067
103
        NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->architecture));
1068
102
        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_architecture_0, 0);
1069
102
        if (ndr->offset > ndr->relative_highest_offset) {
1070
76
          ndr->relative_highest_offset = ndr->offset;
1071
76
        }
1072
102
        ndr->offset = _relative_save_offset;
1073
102
      }
1074
226
      ndr->flags = _flags_save_string;
1075
226
    }
1076
226
    if (r->file_info) {
1077
142
      uint32_t _relative_save_offset;
1078
142
      _relative_save_offset = ndr->offset;
1079
142
      NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->file_info));
1080
142
      _mem_save_file_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
1081
142
      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
142
      NDR_CHECK(ndr_token_store(ndr, &ndr->array_size_list, &r->file_info, r->file_count));
1086
142
#endif
1087
142
      NDR_PULL_ALLOC_N(ndr, r->file_info, r->file_count);
1088
141
      _mem_save_file_info_1 = NDR_PULL_GET_MEM_CTX(ndr);
1089
141
      NDR_PULL_SET_MEM_CTX(ndr, r->file_info, 0);
1090
5.07k
      for (cntr_file_info_1 = 0; cntr_file_info_1 < r->file_count; cntr_file_info_1++) {
1091
4.96k
        NDR_CHECK(ndr_pull_spoolss_DriverFileInfo(ndr, NDR_SCALARS, &r->file_info[cntr_file_info_1]));
1092
4.96k
      }
1093
4.11k
      for (cntr_file_info_1 = 0; cntr_file_info_1 < r->file_count; cntr_file_info_1++) {
1094
4.00k
        NDR_CHECK(ndr_pull_spoolss_DriverFileInfo(ndr, NDR_BUFFERS, &r->file_info[cntr_file_info_1]));
1095
4.00k
      }
1096
113
      NDR_PULL_SET_MEM_CTX(ndr, _mem_save_file_info_1, 0);
1097
113
      NDR_PULL_SET_MEM_CTX(ndr, _mem_save_file_info_0, 0);
1098
113
      if (ndr->offset > ndr->relative_highest_offset) {
1099
62
        ndr->relative_highest_offset = ndr->offset;
1100
62
      }
1101
113
      ndr->offset = _relative_save_offset;
1102
113
    }
1103
197
    {
1104
197
      libndr_flags _flags_save_string = ndr->flags;
1105
197
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1106
197
      if (r->monitor_name) {
1107
68
        uint32_t _relative_save_offset;
1108
68
        _relative_save_offset = ndr->offset;
1109
68
        NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->monitor_name));
1110
68
        _mem_save_monitor_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
1111
68
        NDR_PULL_SET_MEM_CTX(ndr, r->monitor_name, 0);
1112
68
        NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->monitor_name));
1113
66
        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_monitor_name_0, 0);
1114
66
        if (ndr->offset > ndr->relative_highest_offset) {
1115
9
          ndr->relative_highest_offset = ndr->offset;
1116
9
        }
1117
66
        ndr->offset = _relative_save_offset;
1118
66
      }
1119
195
      ndr->flags = _flags_save_string;
1120
195
    }
1121
0
    {
1122
195
      libndr_flags _flags_save_string = ndr->flags;
1123
195
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1124
195
      if (r->default_datatype) {
1125
72
        uint32_t _relative_save_offset;
1126
72
        _relative_save_offset = ndr->offset;
1127
72
        NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->default_datatype));
1128
72
        _mem_save_default_datatype_0 = NDR_PULL_GET_MEM_CTX(ndr);
1129
72
        NDR_PULL_SET_MEM_CTX(ndr, r->default_datatype, 0);
1130
72
        NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->default_datatype));
1131
71
        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_default_datatype_0, 0);
1132
71
        if (ndr->offset > ndr->relative_highest_offset) {
1133
15
          ndr->relative_highest_offset = ndr->offset;
1134
15
        }
1135
71
        ndr->offset = _relative_save_offset;
1136
71
      }
1137
194
      ndr->flags = _flags_save_string;
1138
194
    }
1139
0
    {
1140
194
      libndr_flags _flags_save_string_array = ndr->flags;
1141
194
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1142
194
      if (r->previous_names) {
1143
71
        uint32_t _relative_save_offset;
1144
71
        _relative_save_offset = ndr->offset;
1145
71
        NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->previous_names));
1146
71
        _mem_save_previous_names_0 = NDR_PULL_GET_MEM_CTX(ndr);
1147
71
        NDR_PULL_SET_MEM_CTX(ndr, r->previous_names, 0);
1148
71
        NDR_CHECK(ndr_pull_string_array(ndr, NDR_SCALARS, &r->previous_names));
1149
66
        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_previous_names_0, 0);
1150
66
        if (ndr->offset > ndr->relative_highest_offset) {
1151
30
          ndr->relative_highest_offset = ndr->offset;
1152
30
        }
1153
66
        ndr->offset = _relative_save_offset;
1154
66
      }
1155
189
      ndr->flags = _flags_save_string_array;
1156
189
    }
1157
0
    {
1158
189
      libndr_flags _flags_save_string = ndr->flags;
1159
189
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1160
189
      if (r->manufacturer_name) {
1161
55
        uint32_t _relative_save_offset;
1162
55
        _relative_save_offset = ndr->offset;
1163
55
        NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->manufacturer_name));
1164
55
        _mem_save_manufacturer_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
1165
55
        NDR_PULL_SET_MEM_CTX(ndr, r->manufacturer_name, 0);
1166
55
        NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->manufacturer_name));
1167
54
        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_manufacturer_name_0, 0);
1168
54
        if (ndr->offset > ndr->relative_highest_offset) {
1169
5
          ndr->relative_highest_offset = ndr->offset;
1170
5
        }
1171
54
        ndr->offset = _relative_save_offset;
1172
54
      }
1173
188
      ndr->flags = _flags_save_string;
1174
188
    }
1175
0
    {
1176
188
      libndr_flags _flags_save_string = ndr->flags;
1177
188
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1178
188
      if (r->manufacturer_url) {
1179
67
        uint32_t _relative_save_offset;
1180
67
        _relative_save_offset = ndr->offset;
1181
67
        NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->manufacturer_url));
1182
67
        _mem_save_manufacturer_url_0 = NDR_PULL_GET_MEM_CTX(ndr);
1183
67
        NDR_PULL_SET_MEM_CTX(ndr, r->manufacturer_url, 0);
1184
67
        NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->manufacturer_url));
1185
66
        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_manufacturer_url_0, 0);
1186
66
        if (ndr->offset > ndr->relative_highest_offset) {
1187
17
          ndr->relative_highest_offset = ndr->offset;
1188
17
        }
1189
66
        ndr->offset = _relative_save_offset;
1190
66
      }
1191
187
      ndr->flags = _flags_save_string;
1192
187
    }
1193
0
    {
1194
187
      libndr_flags _flags_save_string = ndr->flags;
1195
187
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1196
187
      if (r->hardware_id) {
1197
56
        uint32_t _relative_save_offset;
1198
56
        _relative_save_offset = ndr->offset;
1199
56
        NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->hardware_id));
1200
56
        _mem_save_hardware_id_0 = NDR_PULL_GET_MEM_CTX(ndr);
1201
56
        NDR_PULL_SET_MEM_CTX(ndr, r->hardware_id, 0);
1202
56
        NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->hardware_id));
1203
55
        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_hardware_id_0, 0);
1204
55
        if (ndr->offset > ndr->relative_highest_offset) {
1205
10
          ndr->relative_highest_offset = ndr->offset;
1206
10
        }
1207
55
        ndr->offset = _relative_save_offset;
1208
55
      }
1209
186
      ndr->flags = _flags_save_string;
1210
186
    }
1211
0
    {
1212
186
      libndr_flags _flags_save_string = ndr->flags;
1213
186
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1214
186
      if (r->provider) {
1215
62
        uint32_t _relative_save_offset;
1216
62
        _relative_save_offset = ndr->offset;
1217
62
        NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->provider));
1218
62
        _mem_save_provider_0 = NDR_PULL_GET_MEM_CTX(ndr);
1219
62
        NDR_PULL_SET_MEM_CTX(ndr, r->provider, 0);
1220
62
        NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->provider));
1221
61
        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_provider_0, 0);
1222
61
        if (ndr->offset > ndr->relative_highest_offset) {
1223
12
          ndr->relative_highest_offset = ndr->offset;
1224
12
        }
1225
61
        ndr->offset = _relative_save_offset;
1226
61
      }
1227
185
      ndr->flags = _flags_save_string;
1228
185
    }
1229
185
    if (r->file_info) {
1230
104
      NDR_CHECK(ndr_check_steal_array_size(ndr, (void*)&r->file_info, r->file_count));
1231
104
    }
1232
185
  }
1233
185
  return NDR_ERR_SUCCESS;
1234
228
}
1235
1236
void ndr_print_spoolss_Field(struct ndr_print *ndr, const char *name, const union spoolss_Field *r)
1237
635k
{
1238
635k
  int level;
1239
635k
  level = ndr_print_steal_switch_value(ndr, r);
1240
635k
  ndr_print_union(ndr, name, level, "spoolss_Field");
1241
635k
  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.79k
    default:
1251
4.79k
      ndr_print_uint16(ndr, "field", r->field);
1252
4.79k
    break;
1253
1254
635k
  }
1255
635k
}
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
453
{
1267
453
  ndr_print_security_descriptor(ndr, name, r);
1268
453
}
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
903
{
1272
903
  libndr_flags _flags_save_STRUCT = ndr->flags;
1273
903
  ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NO_RELATIVE_REVERSE);
1274
903
  NDR_CHECK(ndr_pull_security_descriptor(ndr, ndr_flags, r));
1275
453
  ndr->flags = _flags_save_STRUCT;
1276
453
  return NDR_ERR_SUCCESS;
1277
903
}
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
453
{
1281
453
  {
1282
453
    libndr_flags _flags_save_STRUCT = ndr->flags;
1283
453
    ndr_set_flags(&ndr->flags, LIBNDR_FLAG_LITTLE_ENDIAN|LIBNDR_FLAG_NO_RELATIVE_REVERSE);
1284
453
    if (ndr_flags & NDR_SCALARS) {
1285
453
      NDR_CHECK(ndr_push_align(ndr, 5));
1286
453
      NDR_CHECK(ndr_push_security_descriptor_revision(ndr, NDR_SCALARS, r->revision));
1287
453
      NDR_CHECK(ndr_push_security_descriptor_type(ndr, NDR_SCALARS, r->type));
1288
453
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->owner_sid));
1289
453
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->group_sid));
1290
453
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->sacl));
1291
453
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->dacl));
1292
453
      NDR_CHECK(ndr_push_trailer_align(ndr, 5));
1293
453
    }
1294
453
    if (ndr_flags & NDR_BUFFERS) {
1295
453
      if (r->sacl) {
1296
413
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->sacl));
1297
413
        NDR_CHECK(ndr_push_security_acl(ndr, NDR_SCALARS|NDR_BUFFERS, r->sacl));
1298
413
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->sacl));
1299
413
      }
1300
453
      if (r->dacl) {
1301
415
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->dacl));
1302
415
        NDR_CHECK(ndr_push_security_acl(ndr, NDR_SCALARS|NDR_BUFFERS, r->dacl));
1303
415
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->dacl));
1304
415
      }
1305
453
      if (r->owner_sid) {
1306
261
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->owner_sid));
1307
261
        NDR_CHECK(ndr_push_dom_sid(ndr, NDR_SCALARS, r->owner_sid));
1308
261
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->owner_sid));
1309
261
      }
1310
453
      if (r->group_sid) {
1311
327
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->group_sid));
1312
327
        NDR_CHECK(ndr_push_dom_sid(ndr, NDR_SCALARS, r->group_sid));
1313
327
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->group_sid));
1314
327
      }
1315
453
    }
1316
453
    ndr->flags = _flags_save_STRUCT;
1317
453
  }
1318
0
  return NDR_ERR_SUCCESS;
1319
453
}
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
46
{
1323
46
  if (ndr_flags & NDR_SCALARS) {
1324
46
    NDR_CHECK(ndr_push_align(ndr, 5));
1325
46
    {
1326
46
      libndr_flags _flags_save_string = ndr->flags;
1327
46
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1328
46
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->servername));
1329
46
      ndr->flags = _flags_save_string;
1330
46
    }
1331
0
    {
1332
46
      libndr_flags _flags_save_string = ndr->flags;
1333
46
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1334
46
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->printername));
1335
46
      ndr->flags = _flags_save_string;
1336
46
    }
1337
0
    {
1338
46
      libndr_flags _flags_save_string = ndr->flags;
1339
46
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1340
46
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->sharename));
1341
46
      ndr->flags = _flags_save_string;
1342
46
    }
1343
0
    {
1344
46
      libndr_flags _flags_save_string = ndr->flags;
1345
46
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1346
46
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->portname));
1347
46
      ndr->flags = _flags_save_string;
1348
46
    }
1349
0
    {
1350
46
      libndr_flags _flags_save_string = ndr->flags;
1351
46
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1352
46
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->drivername));
1353
46
      ndr->flags = _flags_save_string;
1354
46
    }
1355
0
    {
1356
46
      libndr_flags _flags_save_string = ndr->flags;
1357
46
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1358
46
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->comment));
1359
46
      ndr->flags = _flags_save_string;
1360
46
    }
1361
0
    {
1362
46
      libndr_flags _flags_save_string = ndr->flags;
1363
46
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1364
46
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->location));
1365
46
      ndr->flags = _flags_save_string;
1366
46
    }
1367
0
    {
1368
46
      libndr_flags _flags_save_spoolss_DeviceMode = ndr->flags;
1369
46
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
1370
46
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->devmode));
1371
46
      ndr->flags = _flags_save_spoolss_DeviceMode;
1372
46
    }
1373
0
    {
1374
46
      libndr_flags _flags_save_string = ndr->flags;
1375
46
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1376
46
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->sepfile));
1377
46
      ndr->flags = _flags_save_string;
1378
46
    }
1379
0
    {
1380
46
      libndr_flags _flags_save_string = ndr->flags;
1381
46
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1382
46
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->printprocessor));
1383
46
      ndr->flags = _flags_save_string;
1384
46
    }
1385
0
    {
1386
46
      libndr_flags _flags_save_string = ndr->flags;
1387
46
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1388
46
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->datatype));
1389
46
      ndr->flags = _flags_save_string;
1390
46
    }
1391
0
    {
1392
46
      libndr_flags _flags_save_string = ndr->flags;
1393
46
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1394
46
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->parameters));
1395
46
      ndr->flags = _flags_save_string;
1396
46
    }
1397
0
    {
1398
46
      libndr_flags _flags_save_spoolss_security_descriptor = ndr->flags;
1399
46
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
1400
46
      NDR_CHECK(ndr_push_relative_ptr1(ndr, r->secdesc));
1401
46
      ndr->flags = _flags_save_spoolss_security_descriptor;
1402
46
    }
1403
46
    NDR_CHECK(ndr_push_spoolss_PrinterAttributes(ndr, NDR_SCALARS, r->attributes));
1404
46
    NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->priority));
1405
46
    NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->defaultpriority));
1406
46
    NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->starttime));
1407
46
    NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->untiltime));
1408
46
    NDR_CHECK(ndr_push_spoolss_PrinterStatus(ndr, NDR_SCALARS, r->status));
1409
46
    NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->cjobs));
1410
46
    NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->averageppm));
1411
46
    NDR_CHECK(ndr_push_trailer_align(ndr, 5));
1412
46
  }
1413
46
  if (ndr_flags & NDR_BUFFERS) {
1414
46
    {
1415
46
      libndr_flags _flags_save_string = ndr->flags;
1416
46
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1417
46
      if (r->servername) {
1418
32
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->servername));
1419
32
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->servername));
1420
32
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->servername));
1421
32
      }
1422
46
      ndr->flags = _flags_save_string;
1423
46
    }
1424
0
    {
1425
46
      libndr_flags _flags_save_string = ndr->flags;
1426
46
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1427
46
      if (r->printername) {
1428
28
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->printername));
1429
28
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->printername));
1430
28
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->printername));
1431
28
      }
1432
46
      ndr->flags = _flags_save_string;
1433
46
    }
1434
0
    {
1435
46
      libndr_flags _flags_save_string = ndr->flags;
1436
46
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1437
46
      if (r->sharename) {
1438
17
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->sharename));
1439
17
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->sharename));
1440
17
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->sharename));
1441
17
      }
1442
46
      ndr->flags = _flags_save_string;
1443
46
    }
1444
0
    {
1445
46
      libndr_flags _flags_save_string = ndr->flags;
1446
46
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1447
46
      if (r->portname) {
1448
12
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->portname));
1449
12
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->portname));
1450
12
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->portname));
1451
12
      }
1452
46
      ndr->flags = _flags_save_string;
1453
46
    }
1454
0
    {
1455
46
      libndr_flags _flags_save_string = ndr->flags;
1456
46
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1457
46
      if (r->drivername) {
1458
34
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->drivername));
1459
34
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->drivername));
1460
34
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->drivername));
1461
34
      }
1462
46
      ndr->flags = _flags_save_string;
1463
46
    }
1464
0
    {
1465
46
      libndr_flags _flags_save_string = ndr->flags;
1466
46
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1467
46
      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
46
      ndr->flags = _flags_save_string;
1473
46
    }
1474
0
    {
1475
46
      libndr_flags _flags_save_string = ndr->flags;
1476
46
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1477
46
      if (r->location) {
1478
18
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->location));
1479
18
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->location));
1480
18
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->location));
1481
18
      }
1482
46
      ndr->flags = _flags_save_string;
1483
46
    }
1484
0
    {
1485
46
      libndr_flags _flags_save_string = ndr->flags;
1486
46
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1487
46
      if (r->sepfile) {
1488
12
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->sepfile));
1489
12
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->sepfile));
1490
12
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->sepfile));
1491
12
      }
1492
46
      ndr->flags = _flags_save_string;
1493
46
    }
1494
0
    {
1495
46
      libndr_flags _flags_save_string = ndr->flags;
1496
46
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1497
46
      if (r->printprocessor) {
1498
16
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->printprocessor));
1499
16
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->printprocessor));
1500
16
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->printprocessor));
1501
16
      }
1502
46
      ndr->flags = _flags_save_string;
1503
46
    }
1504
0
    {
1505
46
      libndr_flags _flags_save_string = ndr->flags;
1506
46
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1507
46
      if (r->datatype) {
1508
16
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->datatype));
1509
16
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->datatype));
1510
16
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->datatype));
1511
16
      }
1512
46
      ndr->flags = _flags_save_string;
1513
46
    }
1514
0
    {
1515
46
      libndr_flags _flags_save_string = ndr->flags;
1516
46
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
1517
46
      if (r->parameters) {
1518
13
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->parameters));
1519
13
        NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->parameters));
1520
13
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->parameters));
1521
13
      }
1522
46
      ndr->flags = _flags_save_string;
1523
46
    }
1524
0
    {
1525
46
      libndr_flags _flags_save_spoolss_DeviceMode = ndr->flags;
1526
46
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
1527
46
      if (r->devmode) {
1528
9
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->devmode));
1529
9
        {
1530
9
          struct ndr_push *_ndr_devmode;
1531
9
          NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_devmode, 0, -1));
1532
9
          NDR_CHECK(ndr_push_spoolss_DeviceMode(_ndr_devmode, NDR_SCALARS, r->devmode));
1533
9
          NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_devmode, 0, -1));
1534
9
        }
1535
9
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->devmode));
1536
9
      }
1537
46
      ndr->flags = _flags_save_spoolss_DeviceMode;
1538
46
    }
1539
0
    {
1540
46
      libndr_flags _flags_save_spoolss_security_descriptor = ndr->flags;
1541
46
      ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
1542
46
      if (r->secdesc) {
1543
18
        NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->secdesc));
1544
18
        {
1545
18
          struct ndr_push *_ndr_secdesc;
1546
18
          NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_secdesc, 0, -1));
1547
18
          NDR_CHECK(ndr_push_spoolss_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc));
1548
18
          NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_secdesc, 0, -1));
1549
18
        }
1550
18
        NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->secdesc));
1551
18
      }
1552
46
      ndr->flags = _flags_save_spoolss_security_descriptor;
1553
46
    }
1554
46
  }
1555
46
  return NDR_ERR_SUCCESS;
1556
46
}
1557
1558
_PUBLIC_ void ndr_print_spoolss_Time(struct ndr_print *ndr, const char *name, const struct spoolss_Time *r)
1559
4.29k
{
1560
4.29k
  struct tm tm;
1561
4.29k
  time_t t;
1562
4.29k
  char *str;
1563
1564
4.29k
  tm.tm_sec = r->second;
1565
4.29k
  tm.tm_min = r->minute;
1566
4.29k
  tm.tm_hour  = r->hour;
1567
4.29k
  tm.tm_mday  = r->day;
1568
4.29k
  tm.tm_mon = r->month - 1;
1569
4.29k
  tm.tm_year  = r->year - 1900;
1570
4.29k
  tm.tm_wday  = r->day_of_week;
1571
4.29k
  tm.tm_yday  = 0;
1572
4.29k
  tm.tm_isdst = -1;
1573
1574
4.29k
  t = mktime(&tm);
1575
1576
4.29k
  str = timestring(ndr, t);
1577
1578
4.29k
  ndr_print_struct(ndr, name, "spoolss_Time");
1579
4.29k
  ndr->depth++;
1580
4.29k
  ndr_print_string(ndr, "", str);
1581
4.29k
  ndr->depth--;
1582
4.29k
  TALLOC_FREE(str);
1583
4.29k
}
1584
1585
_PUBLIC_ libndr_flags ndr_spoolss_PrinterEnumValues_align(enum winreg_Type type)
1586
606
{
1587
606
  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
3
  case REG_BINARY:
1595
3
    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
0
  case REG_MULTI_SZ:
1603
0
    return LIBNDR_FLAG_ALIGN2;
1604
5
  case REG_RESOURCE_LIST:
1605
5
    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
6
  case REG_QWORD:
1611
6
    return LIBNDR_FLAG_ALIGN8;
1612
606
  }
1613
1614
508
  return 0;
1615
606
}