2 Unix SMB/CIFS implementation.
4 routines for printing some linked list structs in DRSUAPI
6 Copyright (C) Stefan (metze) Metzmacher 2005
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>.
24 #include "librpc/gen_ndr/ndr_drsuapi.h"
25 #include "librpc/gen_ndr/ndr_misc.h"
26 #include "../lib/util/asn1.h"
27 #include "librpc/ndr/ndr_compression.h"
28 /* We don't need multibyte if we're just comparing to 'ff' */
31 void ndr_print_drsuapi_DsReplicaObjectListItem(struct ndr_print
*ndr
, const char *name
,
32 const struct drsuapi_DsReplicaObjectListItem
*r
)
34 ndr_print_struct(ndr
, name
, "drsuapi_DsReplicaObjectListItem");
36 ndr_print_ptr(ndr
, "next_object", r
->next_object
);
37 ndr_print_drsuapi_DsReplicaObject(ndr
, "object", &r
->object
);
40 ndr_print_drsuapi_DsReplicaObjectListItem(ndr
, "next_object", r
->next_object
);
44 void ndr_print_drsuapi_DsReplicaObjectListItemEx(struct ndr_print
*ndr
, const char *name
, const struct drsuapi_DsReplicaObjectListItemEx
*r
)
46 ndr_print_struct(ndr
, name
, "drsuapi_DsReplicaObjectListItemEx");
48 ndr_print_ptr(ndr
, "next_object", r
->next_object
);
49 ndr_print_drsuapi_DsReplicaObject(ndr
, "object", &r
->object
);
50 ndr_print_uint32(ndr
, "is_nc_prefix", r
->is_nc_prefix
);
51 ndr_print_ptr(ndr
, "parent_object_guid", r
->parent_object_guid
);
53 if (r
->parent_object_guid
) {
54 ndr_print_GUID(ndr
, "parent_object_guid", r
->parent_object_guid
);
57 ndr_print_ptr(ndr
, "meta_data_ctr", r
->meta_data_ctr
);
59 if (r
->meta_data_ctr
) {
60 ndr_print_drsuapi_DsReplicaMetaDataCtr(ndr
, "meta_data_ctr", r
->meta_data_ctr
);
65 ndr_print_drsuapi_DsReplicaObjectListItemEx(ndr
, "next_object", r
->next_object
);
69 _PUBLIC_
void ndr_print_drsuapi_DsReplicaOID(struct ndr_print
*ndr
, const char *name
, const struct drsuapi_DsReplicaOID
*r
)
71 ndr_print_struct(ndr
, name
, "drsuapi_DsReplicaOID");
73 ndr_print_uint32(ndr
, "length", r
->length
);
74 ndr
->print(ndr
, "%-25s: length=%u", "oid", r
->length
);
76 char *partial_oid
= NULL
;
77 DATA_BLOB oid_blob
= data_blob_const(r
->binary_oid
, r
->length
);
78 char *hex_str
= data_blob_hex_string_upper(ndr
, &oid_blob
);
79 ber_read_partial_OID_String(ndr
, oid_blob
, (const char **)&partial_oid
);
81 ndr
->print(ndr
, "%-25s: 0x%s (%s)", "binary_oid", hex_str
, partial_oid
);
84 talloc_free(partial_oid
);
89 enum ndr_err_code
ndr_push_drsuapi_DsGetNCChangesMSZIPCtr1(struct ndr_push
*ndr
, int ndr_flags
, const struct drsuapi_DsGetNCChangesMSZIPCtr1
*r
)
91 if (ndr_flags
& NDR_SCALARS
) {
92 uint32_t decompressed_length
= 0;
93 uint32_t compressed_length
= 0;
96 struct ndr_push
*_ndr_ts
;
97 NDR_CHECK(ndr_push_subcontext_start(ndr
, &_ndr_ts
, 4, -1));
99 struct ndr_push
*_ndr_ts_compressed
;
100 NDR_CHECK(ndr_push_compression_start(_ndr_ts
, &_ndr_ts_compressed
, NDR_COMPRESSION_MSZIP
, -1));
101 NDR_CHECK(ndr_push_drsuapi_DsGetNCChangesCtr1TS(_ndr_ts_compressed
, NDR_SCALARS
|NDR_BUFFERS
, r
->ts
));
102 decompressed_length
= _ndr_ts_compressed
->offset
;
103 NDR_CHECK(ndr_push_compression_end(_ndr_ts
, _ndr_ts_compressed
, NDR_COMPRESSION_MSZIP
, -1));
105 compressed_length
= _ndr_ts
->offset
;
106 talloc_free(_ndr_ts
);
109 NDR_CHECK(ndr_push_align(ndr
, 4));
110 NDR_CHECK(ndr_push_uint32(ndr
, NDR_SCALARS
, decompressed_length
));
111 NDR_CHECK(ndr_push_uint32(ndr
, NDR_SCALARS
, compressed_length
));
112 NDR_CHECK(ndr_push_unique_ptr(ndr
, r
->ts
));
114 if (ndr_flags
& NDR_BUFFERS
) {
117 struct ndr_push
*_ndr_ts
;
118 NDR_CHECK(ndr_push_subcontext_start(ndr
, &_ndr_ts
, 4, -1));
120 struct ndr_push
*_ndr_ts_compressed
;
121 NDR_CHECK(ndr_push_compression_start(_ndr_ts
, &_ndr_ts_compressed
, NDR_COMPRESSION_MSZIP
, -1));
122 NDR_CHECK(ndr_push_drsuapi_DsGetNCChangesCtr1TS(_ndr_ts_compressed
, NDR_SCALARS
|NDR_BUFFERS
, r
->ts
));
123 NDR_CHECK(ndr_push_compression_end(_ndr_ts
, _ndr_ts_compressed
, NDR_COMPRESSION_MSZIP
, -1));
125 NDR_CHECK(ndr_push_subcontext_end(ndr
, _ndr_ts
, 4, -1));
129 return NDR_ERR_SUCCESS
;
132 enum ndr_err_code
ndr_push_drsuapi_DsGetNCChangesMSZIPCtr6(struct ndr_push
*ndr
, int ndr_flags
, const struct drsuapi_DsGetNCChangesMSZIPCtr6
*r
)
134 if (ndr_flags
& NDR_SCALARS
) {
135 uint32_t decompressed_length
= 0;
136 uint32_t compressed_length
= 0;
139 struct ndr_push
*_ndr_ts
;
140 NDR_CHECK(ndr_push_subcontext_start(ndr
, &_ndr_ts
, 4, -1));
142 struct ndr_push
*_ndr_ts_compressed
;
143 NDR_CHECK(ndr_push_compression_start(_ndr_ts
, &_ndr_ts_compressed
, NDR_COMPRESSION_MSZIP
, -1));
144 NDR_CHECK(ndr_push_drsuapi_DsGetNCChangesCtr6TS(_ndr_ts_compressed
, NDR_SCALARS
|NDR_BUFFERS
, r
->ts
));
145 decompressed_length
= _ndr_ts_compressed
->offset
;
146 NDR_CHECK(ndr_push_compression_end(_ndr_ts
, _ndr_ts_compressed
, NDR_COMPRESSION_MSZIP
, -1));
148 compressed_length
= _ndr_ts
->offset
;
149 talloc_free(_ndr_ts
);
152 NDR_CHECK(ndr_push_align(ndr
, 4));
153 NDR_CHECK(ndr_push_uint32(ndr
, NDR_SCALARS
, decompressed_length
));
154 NDR_CHECK(ndr_push_uint32(ndr
, NDR_SCALARS
, compressed_length
));
155 NDR_CHECK(ndr_push_unique_ptr(ndr
, r
->ts
));
157 if (ndr_flags
& NDR_BUFFERS
) {
160 struct ndr_push
*_ndr_ts
;
161 NDR_CHECK(ndr_push_subcontext_start(ndr
, &_ndr_ts
, 4, -1));
163 struct ndr_push
*_ndr_ts_compressed
;
164 NDR_CHECK(ndr_push_compression_start(_ndr_ts
, &_ndr_ts_compressed
, NDR_COMPRESSION_MSZIP
, -1));
165 NDR_CHECK(ndr_push_drsuapi_DsGetNCChangesCtr6TS(_ndr_ts_compressed
, NDR_SCALARS
|NDR_BUFFERS
, r
->ts
));
166 NDR_CHECK(ndr_push_compression_end(_ndr_ts
, _ndr_ts_compressed
, NDR_COMPRESSION_MSZIP
, -1));
168 NDR_CHECK(ndr_push_subcontext_end(ndr
, _ndr_ts
, 4, -1));
172 return NDR_ERR_SUCCESS
;
175 enum ndr_err_code
ndr_push_drsuapi_DsGetNCChangesXPRESSCtr1(struct ndr_push
*ndr
, int ndr_flags
, const struct drsuapi_DsGetNCChangesXPRESSCtr1
*r
)
177 if (ndr_flags
& NDR_SCALARS
) {
178 uint32_t decompressed_length
= 0;
179 uint32_t compressed_length
= 0;
182 struct ndr_push
*_ndr_ts
;
183 NDR_CHECK(ndr_push_subcontext_start(ndr
, &_ndr_ts
, 4, -1));
185 struct ndr_push
*_ndr_ts_compressed
;
186 NDR_CHECK(ndr_push_compression_start(_ndr_ts
, &_ndr_ts_compressed
, NDR_COMPRESSION_XPRESS
, -1));
187 NDR_CHECK(ndr_push_drsuapi_DsGetNCChangesCtr1TS(_ndr_ts_compressed
, NDR_SCALARS
|NDR_BUFFERS
, r
->ts
));
188 decompressed_length
= _ndr_ts_compressed
->offset
;
189 NDR_CHECK(ndr_push_compression_end(_ndr_ts
, _ndr_ts_compressed
, NDR_COMPRESSION_XPRESS
, -1));
191 compressed_length
= _ndr_ts
->offset
;
192 talloc_free(_ndr_ts
);
195 NDR_CHECK(ndr_push_align(ndr
, 4));
196 NDR_CHECK(ndr_push_uint32(ndr
, NDR_SCALARS
, decompressed_length
));
197 NDR_CHECK(ndr_push_uint32(ndr
, NDR_SCALARS
, compressed_length
));
198 NDR_CHECK(ndr_push_unique_ptr(ndr
, r
->ts
));
200 if (ndr_flags
& NDR_BUFFERS
) {
203 struct ndr_push
*_ndr_ts
;
204 NDR_CHECK(ndr_push_subcontext_start(ndr
, &_ndr_ts
, 4, -1));
206 struct ndr_push
*_ndr_ts_compressed
;
207 NDR_CHECK(ndr_push_compression_start(_ndr_ts
, &_ndr_ts_compressed
, NDR_COMPRESSION_XPRESS
, -1));
208 NDR_CHECK(ndr_push_drsuapi_DsGetNCChangesCtr1TS(_ndr_ts_compressed
, NDR_SCALARS
|NDR_BUFFERS
, r
->ts
));
209 NDR_CHECK(ndr_push_compression_end(_ndr_ts
, _ndr_ts_compressed
, NDR_COMPRESSION_XPRESS
, -1));
211 NDR_CHECK(ndr_push_subcontext_end(ndr
, _ndr_ts
, 4, -1));
215 return NDR_ERR_SUCCESS
;
218 enum ndr_err_code
ndr_push_drsuapi_DsGetNCChangesXPRESSCtr6(struct ndr_push
*ndr
, int ndr_flags
, const struct drsuapi_DsGetNCChangesXPRESSCtr6
*r
)
220 if (ndr_flags
& NDR_SCALARS
) {
221 uint32_t decompressed_length
= 0;
222 uint32_t compressed_length
= 0;
225 struct ndr_push
*_ndr_ts
;
226 NDR_CHECK(ndr_push_subcontext_start(ndr
, &_ndr_ts
, 4, -1));
228 struct ndr_push
*_ndr_ts_compressed
;
229 NDR_CHECK(ndr_push_compression_start(_ndr_ts
, &_ndr_ts_compressed
, NDR_COMPRESSION_XPRESS
, -1));
230 NDR_CHECK(ndr_push_drsuapi_DsGetNCChangesCtr6TS(_ndr_ts_compressed
, NDR_SCALARS
|NDR_BUFFERS
, r
->ts
));
231 decompressed_length
= _ndr_ts_compressed
->offset
;
232 NDR_CHECK(ndr_push_compression_end(_ndr_ts
, _ndr_ts_compressed
, NDR_COMPRESSION_XPRESS
, -1));
234 compressed_length
= _ndr_ts
->offset
;
235 talloc_free(_ndr_ts
);
238 NDR_CHECK(ndr_push_align(ndr
, 4));
239 NDR_CHECK(ndr_push_uint32(ndr
, NDR_SCALARS
, decompressed_length
));
240 NDR_CHECK(ndr_push_uint32(ndr
, NDR_SCALARS
, compressed_length
));
241 NDR_CHECK(ndr_push_unique_ptr(ndr
, r
->ts
));
243 if (ndr_flags
& NDR_BUFFERS
) {
246 struct ndr_push
*_ndr_ts
;
247 NDR_CHECK(ndr_push_subcontext_start(ndr
, &_ndr_ts
, 4, -1));
249 struct ndr_push
*_ndr_ts_compressed
;
250 NDR_CHECK(ndr_push_compression_start(_ndr_ts
, &_ndr_ts_compressed
, NDR_COMPRESSION_XPRESS
, -1));
251 NDR_CHECK(ndr_push_drsuapi_DsGetNCChangesCtr6TS(_ndr_ts_compressed
, NDR_SCALARS
|NDR_BUFFERS
, r
->ts
));
252 NDR_CHECK(ndr_push_compression_end(_ndr_ts
, _ndr_ts_compressed
, NDR_COMPRESSION_XPRESS
, -1));
254 NDR_CHECK(ndr_push_subcontext_end(ndr
, _ndr_ts
, 4, -1));
258 return NDR_ERR_SUCCESS
;
261 _PUBLIC_
size_t ndr_size_drsuapi_DsReplicaObjectIdentifier3Binary_without_Binary(const struct drsuapi_DsReplicaObjectIdentifier3Binary
*r
, struct smb_iconv_convenience
*ic
, int flags
)
263 return ndr_size_struct((const struct drsuapi_DsReplicaObjectIdentifier3
*)r
, flags
, (ndr_push_flags_fn_t
)ndr_push_drsuapi_DsReplicaObjectIdentifier3
, ic
);