tdr 30 source4/lib/tdr/tdr.c #define TDR_PUSH_NEED_BYTES(tdr, n) TDR_CHECK(tdr_push_expand(tdr, tdr->data.length+(n))) tdr 32 source4/lib/tdr/tdr.c #define TDR_PULL_NEED_BYTES(tdr, n) do { \ tdr 33 source4/lib/tdr/tdr.c if ((n) > tdr->data.length || tdr->offset + (n) > tdr->data.length) { \ tdr 38 source4/lib/tdr/tdr.c #define TDR_BE(tdr) ((tdr)->flags & TDR_BIG_ENDIAN) tdr 40 source4/lib/tdr/tdr.c #define TDR_CVAL(tdr, ofs) CVAL(tdr->data.data,ofs) tdr 41 source4/lib/tdr/tdr.c #define TDR_SVAL(tdr, ofs) (TDR_BE(tdr)?RSVAL(tdr->data.data,ofs):SVAL(tdr->data.data,ofs)) tdr 42 source4/lib/tdr/tdr.c #define TDR_IVAL(tdr, ofs) (TDR_BE(tdr)?RIVAL(tdr->data.data,ofs):IVAL(tdr->data.data,ofs)) tdr 43 source4/lib/tdr/tdr.c #define TDR_SCVAL(tdr, ofs, v) SCVAL(tdr->data.data,ofs,v) tdr 44 source4/lib/tdr/tdr.c #define TDR_SSVAL(tdr, ofs, v) do { if (TDR_BE(tdr)) { RSSVAL(tdr->data.data,ofs,v); } else SSVAL(tdr->data.data,ofs,v); } while (0) tdr 45 source4/lib/tdr/tdr.c #define TDR_SIVAL(tdr, ofs, v) do { if (TDR_BE(tdr)) { RSIVAL(tdr->data.data,ofs,v); } else SIVAL(tdr->data.data,ofs,v); } while (0) tdr 50 source4/lib/tdr/tdr.c NTSTATUS tdr_push_expand(struct tdr_push *tdr, uint32_t size) tdr 52 source4/lib/tdr/tdr.c if (talloc_get_size(tdr->data.data) >= size) { tdr 56 source4/lib/tdr/tdr.c tdr->data.data = talloc_realloc(tdr, tdr->data.data, uint8_t, tdr->data.length + TDR_BASE_MARSHALL_SIZE); tdr 58 source4/lib/tdr/tdr.c if (tdr->data.data == NULL) tdr 65 source4/lib/tdr/tdr.c NTSTATUS tdr_pull_uint8(struct tdr_pull *tdr, TALLOC_CTX *ctx, uint8_t *v) tdr 67 source4/lib/tdr/tdr.c TDR_PULL_NEED_BYTES(tdr, 1); tdr 68 source4/lib/tdr/tdr.c *v = TDR_CVAL(tdr, tdr->offset); tdr 69 source4/lib/tdr/tdr.c tdr->offset += 1; tdr 73 source4/lib/tdr/tdr.c NTSTATUS tdr_push_uint8(struct tdr_push *tdr, const uint8_t *v) tdr 75 source4/lib/tdr/tdr.c TDR_PUSH_NEED_BYTES(tdr, 1); tdr 76 source4/lib/tdr/tdr.c TDR_SCVAL(tdr, tdr->data.length, *v); tdr 77 source4/lib/tdr/tdr.c tdr->data.length += 1; tdr 81 source4/lib/tdr/tdr.c NTSTATUS tdr_print_uint8(struct tdr_print *tdr, const char *name, uint8_t *v) tdr 83 source4/lib/tdr/tdr.c tdr->print(tdr, "%-25s: 0x%02x (%u)", name, *v, *v); tdr 87 source4/lib/tdr/tdr.c NTSTATUS tdr_pull_uint16(struct tdr_pull *tdr, TALLOC_CTX *ctx, uint16_t *v) tdr 89 source4/lib/tdr/tdr.c TDR_PULL_NEED_BYTES(tdr, 2); tdr 90 source4/lib/tdr/tdr.c *v = TDR_SVAL(tdr, tdr->offset); tdr 91 source4/lib/tdr/tdr.c tdr->offset += 2; tdr 95 source4/lib/tdr/tdr.c NTSTATUS tdr_push_uint16(struct tdr_push *tdr, const uint16_t *v) tdr 97 source4/lib/tdr/tdr.c TDR_PUSH_NEED_BYTES(tdr, 2); tdr 98 source4/lib/tdr/tdr.c TDR_SSVAL(tdr, tdr->data.length, *v); tdr 99 source4/lib/tdr/tdr.c tdr->data.length += 2; tdr 103 source4/lib/tdr/tdr.c NTSTATUS tdr_print_uint16(struct tdr_print *tdr, const char *name, uint16_t *v) tdr 105 source4/lib/tdr/tdr.c tdr->print(tdr, "%-25s: 0x%02x (%u)", name, *v, *v); tdr 109 source4/lib/tdr/tdr.c NTSTATUS tdr_pull_uint32(struct tdr_pull *tdr, TALLOC_CTX *ctx, uint32_t *v) tdr 111 source4/lib/tdr/tdr.c TDR_PULL_NEED_BYTES(tdr, 4); tdr 112 source4/lib/tdr/tdr.c *v = TDR_IVAL(tdr, tdr->offset); tdr 113 source4/lib/tdr/tdr.c tdr->offset += 4; tdr 117 source4/lib/tdr/tdr.c NTSTATUS tdr_push_uint32(struct tdr_push *tdr, const uint32_t *v) tdr 119 source4/lib/tdr/tdr.c TDR_PUSH_NEED_BYTES(tdr, 4); tdr 120 source4/lib/tdr/tdr.c TDR_SIVAL(tdr, tdr->data.length, *v); tdr 121 source4/lib/tdr/tdr.c tdr->data.length += 4; tdr 125 source4/lib/tdr/tdr.c NTSTATUS tdr_print_uint32(struct tdr_print *tdr, const char *name, uint32_t *v) tdr 127 source4/lib/tdr/tdr.c tdr->print(tdr, "%-25s: 0x%02x (%u)", name, *v, *v); tdr 131 source4/lib/tdr/tdr.c NTSTATUS tdr_pull_charset(struct tdr_pull *tdr, TALLOC_CTX *ctx, const char **v, uint32_t length, uint32_t el_size, charset_t chset) tdr 138 source4/lib/tdr/tdr.c length = ascii_len_n((const char*)tdr->data.data+tdr->offset, tdr->data.length-tdr->offset); tdr 141 source4/lib/tdr/tdr.c length = utf16_len_n(tdr->data.data+tdr->offset, tdr->data.length-tdr->offset); tdr 154 source4/lib/tdr/tdr.c TDR_PULL_NEED_BYTES(tdr, el_size*length); tdr 156 source4/lib/tdr/tdr.c if (!convert_string_talloc_convenience(ctx, tdr->iconv_convenience, chset, CH_UNIX, tdr->data.data+tdr->offset, el_size*length, discard_const_p(void *, v), &ret, false)) { tdr 160 source4/lib/tdr/tdr.c tdr->offset += length * el_size; tdr 165 source4/lib/tdr/tdr.c NTSTATUS tdr_push_charset(struct tdr_push *tdr, const char **v, uint32_t length, uint32_t el_size, charset_t chset) tdr 174 source4/lib/tdr/tdr.c TDR_PUSH_NEED_BYTES(tdr, required); tdr 176 source4/lib/tdr/tdr.c if (!convert_string_convenience(tdr->iconv_convenience, CH_UNIX, chset, *v, strlen(*v), tdr->data.data+tdr->data.length, required, &ret, false)) { tdr 182 source4/lib/tdr/tdr.c memset(tdr->data.data+tdr->data.length+ret, 0, required-ret); tdr 185 source4/lib/tdr/tdr.c tdr->data.length += required; tdr 190 source4/lib/tdr/tdr.c NTSTATUS tdr_print_charset(struct tdr_print *tdr, const char *name, const char **v, uint32_t length, uint32_t el_size, charset_t chset) tdr 192 source4/lib/tdr/tdr.c tdr->print(tdr, "%-25s: %s", name, *v); tdr 199 source4/lib/tdr/tdr.c NTSTATUS tdr_pull_hyper(struct tdr_pull *tdr, TALLOC_CTX *ctx, uint64_t *v) tdr 201 source4/lib/tdr/tdr.c TDR_PULL_NEED_BYTES(tdr, 8); tdr 202 source4/lib/tdr/tdr.c *v = TDR_IVAL(tdr, tdr->offset); tdr 203 source4/lib/tdr/tdr.c *v |= (uint64_t)(TDR_IVAL(tdr, tdr->offset+4)) << 32; tdr 204 source4/lib/tdr/tdr.c tdr->offset += 8; tdr 211 source4/lib/tdr/tdr.c NTSTATUS tdr_push_hyper(struct tdr_push *tdr, uint64_t *v) tdr 213 source4/lib/tdr/tdr.c TDR_PUSH_NEED_BYTES(tdr, 8); tdr 214 source4/lib/tdr/tdr.c TDR_SIVAL(tdr, tdr->data.length, ((*v) & 0xFFFFFFFF)); tdr 215 source4/lib/tdr/tdr.c TDR_SIVAL(tdr, tdr->data.length+4, ((*v)>>32)); tdr 216 source4/lib/tdr/tdr.c tdr->data.length += 8; tdr 223 source4/lib/tdr/tdr.c NTSTATUS tdr_push_NTTIME(struct tdr_push *tdr, NTTIME *t) tdr 225 source4/lib/tdr/tdr.c TDR_CHECK(tdr_push_hyper(tdr, t)); tdr 232 source4/lib/tdr/tdr.c NTSTATUS tdr_pull_NTTIME(struct tdr_pull *tdr, TALLOC_CTX *ctx, NTTIME *t) tdr 234 source4/lib/tdr/tdr.c TDR_CHECK(tdr_pull_hyper(tdr, ctx, t)); tdr 241 source4/lib/tdr/tdr.c NTSTATUS tdr_push_time_t(struct tdr_push *tdr, time_t *t) tdr 243 source4/lib/tdr/tdr.c return tdr_push_uint32(tdr, (uint32_t *)t); tdr 249 source4/lib/tdr/tdr.c NTSTATUS tdr_pull_time_t(struct tdr_pull *tdr, TALLOC_CTX *ctx, time_t *t) tdr 252 source4/lib/tdr/tdr.c TDR_CHECK(tdr_pull_uint32(tdr, ctx, &tt)); tdr 257 source4/lib/tdr/tdr.c NTSTATUS tdr_print_time_t(struct tdr_print *tdr, const char *name, time_t *t) tdr 260 source4/lib/tdr/tdr.c tdr->print(tdr, "%-25s: (time_t)%d", name, (int)*t); tdr 262 source4/lib/tdr/tdr.c tdr->print(tdr, "%-25s: %s", name, timestring(tdr, *t)); tdr 268 source4/lib/tdr/tdr.c NTSTATUS tdr_print_NTTIME(struct tdr_print *tdr, const char *name, NTTIME *t) tdr 270 source4/lib/tdr/tdr.c tdr->print(tdr, "%-25s: %s", name, nt_time_string(tdr, *t)); tdr 275 source4/lib/tdr/tdr.c NTSTATUS tdr_print_DATA_BLOB(struct tdr_print *tdr, const char *name, DATA_BLOB *r) tdr 277 source4/lib/tdr/tdr.c tdr->print(tdr, "%-25s: DATA_BLOB length=%u", name, r->length); tdr 290 source4/lib/tdr/tdr.c NTSTATUS tdr_push_DATA_BLOB(struct tdr_push *tdr, DATA_BLOB *blob) tdr 292 source4/lib/tdr/tdr.c if (tdr->flags & TDR_ALIGN2) { tdr 293 source4/lib/tdr/tdr.c blob->length = TDR_ALIGN(tdr->data.length, 2); tdr 294 source4/lib/tdr/tdr.c } else if (tdr->flags & TDR_ALIGN4) { tdr 295 source4/lib/tdr/tdr.c blob->length = TDR_ALIGN(tdr->data.length, 4); tdr 296 source4/lib/tdr/tdr.c } else if (tdr->flags & TDR_ALIGN8) { tdr 297 source4/lib/tdr/tdr.c blob->length = TDR_ALIGN(tdr->data.length, 8); tdr 300 source4/lib/tdr/tdr.c TDR_PUSH_NEED_BYTES(tdr, blob->length); tdr 302 source4/lib/tdr/tdr.c memcpy(tdr->data.data+tdr->data.length, blob->data, blob->length); tdr 309 source4/lib/tdr/tdr.c NTSTATUS tdr_pull_DATA_BLOB(struct tdr_pull *tdr, TALLOC_CTX *ctx, DATA_BLOB *blob) tdr 313 source4/lib/tdr/tdr.c if (tdr->flags & TDR_ALIGN2) { tdr 314 source4/lib/tdr/tdr.c length = TDR_ALIGN(tdr->offset, 2); tdr 315 source4/lib/tdr/tdr.c } else if (tdr->flags & TDR_ALIGN4) { tdr 316 source4/lib/tdr/tdr.c length = TDR_ALIGN(tdr->offset, 4); tdr 317 source4/lib/tdr/tdr.c } else if (tdr->flags & TDR_ALIGN8) { tdr 318 source4/lib/tdr/tdr.c length = TDR_ALIGN(tdr->offset, 8); tdr 319 source4/lib/tdr/tdr.c } else if (tdr->flags & TDR_REMAINING) { tdr 320 source4/lib/tdr/tdr.c length = tdr->data.length - tdr->offset; tdr 325 source4/lib/tdr/tdr.c if (tdr->data.length - tdr->offset < length) { tdr 326 source4/lib/tdr/tdr.c length = tdr->data.length - tdr->offset; tdr 329 source4/lib/tdr/tdr.c TDR_PULL_NEED_BYTES(tdr, length); tdr 331 source4/lib/tdr/tdr.c *blob = data_blob_talloc(tdr, tdr->data.data+tdr->offset, length); tdr 332 source4/lib/tdr/tdr.c tdr->offset += length; tdr 383 source4/lib/tdr/tdr.c void tdr_print_debug_helper(struct tdr_print *tdr, const char *format, ...) _PRINTF_ATTRIBUTE(2,3) tdr 393 source4/lib/tdr/tdr.c for (i=0;i<tdr->level;i++) { DEBUG(0,(" ")); } tdr 29 source4/lib/tdr/testsuite.c struct tdr_push *tdr = tdr_push_init(tctx, lp_iconv_convenience(tctx->lp_ctx)); tdr 31 source4/lib/tdr/testsuite.c torture_assert_ntstatus_ok(tctx, tdr_push_uint8(tdr, &v), "push failed"); tdr 32 source4/lib/tdr/testsuite.c torture_assert_int_equal(tctx, tdr->data.length, 1, "length incorrect"); tdr 33 source4/lib/tdr/testsuite.c torture_assert_int_equal(tctx, tdr->data.data[0], 4, "data incorrect"); tdr 41 source4/lib/tdr/testsuite.c struct tdr_pull *tdr = tdr_pull_init(tctx, lp_iconv_convenience(tctx->lp_ctx)); tdr 42 source4/lib/tdr/testsuite.c tdr->data.data = &d; tdr 43 source4/lib/tdr/testsuite.c tdr->data.length = 1; tdr 44 source4/lib/tdr/testsuite.c tdr->offset = 0; tdr 45 source4/lib/tdr/testsuite.c tdr->flags = 0; tdr 46 source4/lib/tdr/testsuite.c torture_assert_ntstatus_ok(tctx, tdr_pull_uint8(tdr, tctx, &l), tdr 48 source4/lib/tdr/testsuite.c torture_assert_int_equal(tctx, 1, tdr->offset, tdr 56 source4/lib/tdr/testsuite.c struct tdr_push *tdr = tdr_push_init(tctx, lp_iconv_convenience(tctx->lp_ctx)); tdr 58 source4/lib/tdr/testsuite.c torture_assert_ntstatus_ok(tctx, tdr_push_uint16(tdr, &v), "push failed"); tdr 59 source4/lib/tdr/testsuite.c torture_assert_int_equal(tctx, tdr->data.length, 2, "length incorrect"); tdr 60 source4/lib/tdr/testsuite.c torture_assert_int_equal(tctx, tdr->data.data[0], 0x32, "data incorrect"); tdr 61 source4/lib/tdr/testsuite.c torture_assert_int_equal(tctx, tdr->data.data[1], 0x0F, "data incorrect"); tdr 69 source4/lib/tdr/testsuite.c struct tdr_pull *tdr = tdr_pull_init(tctx, lp_iconv_convenience(tctx->lp_ctx)); tdr 70 source4/lib/tdr/testsuite.c tdr->data.data = d; tdr 71 source4/lib/tdr/testsuite.c tdr->data.length = 2; tdr 72 source4/lib/tdr/testsuite.c tdr->offset = 0; tdr 73 source4/lib/tdr/testsuite.c tdr->flags = 0; tdr 74 source4/lib/tdr/testsuite.c torture_assert_ntstatus_ok(tctx, tdr_pull_uint16(tdr, tctx, &l), tdr 76 source4/lib/tdr/testsuite.c torture_assert_int_equal(tctx, 2, tdr->offset, "offset invalid"); tdr 84 source4/lib/tdr/testsuite.c struct tdr_push *tdr = tdr_push_init(tctx, lp_iconv_convenience(tctx->lp_ctx)); tdr 86 source4/lib/tdr/testsuite.c torture_assert_ntstatus_ok(tctx, tdr_push_uint32(tdr, &v), "push failed"); tdr 87 source4/lib/tdr/testsuite.c torture_assert_int_equal(tctx, tdr->data.length, 4, "length incorrect"); tdr 88 source4/lib/tdr/testsuite.c torture_assert_int_equal(tctx, tdr->data.data[0], 0x32, "data incorrect"); tdr 89 source4/lib/tdr/testsuite.c torture_assert_int_equal(tctx, tdr->data.data[1], 0x0F, "data incorrect"); tdr 90 source4/lib/tdr/testsuite.c torture_assert_int_equal(tctx, tdr->data.data[2], 0x10, "data incorrect"); tdr 91 source4/lib/tdr/testsuite.c torture_assert_int_equal(tctx, tdr->data.data[3], 0x00, "data incorrect"); tdr 99 source4/lib/tdr/testsuite.c struct tdr_pull *tdr = tdr_pull_init(tctx, lp_iconv_convenience(tctx->lp_ctx)); tdr 100 source4/lib/tdr/testsuite.c tdr->data.data = d; tdr 101 source4/lib/tdr/testsuite.c tdr->data.length = 4; tdr 102 source4/lib/tdr/testsuite.c tdr->offset = 0; tdr 103 source4/lib/tdr/testsuite.c tdr->flags = 0; tdr 104 source4/lib/tdr/testsuite.c torture_assert_ntstatus_ok(tctx, tdr_pull_uint32(tdr, tctx, &l), tdr 106 source4/lib/tdr/testsuite.c torture_assert_int_equal(tctx, 4, tdr->offset, "offset invalid"); tdr 113 source4/lib/tdr/testsuite.c struct tdr_pull *tdr = tdr_pull_init(tctx, lp_iconv_convenience(tctx->lp_ctx)); tdr 115 source4/lib/tdr/testsuite.c tdr->data.data = (uint8_t *)talloc_strdup(tctx, "bla"); tdr 116 source4/lib/tdr/testsuite.c tdr->data.length = 4; tdr 117 source4/lib/tdr/testsuite.c tdr->offset = 0; tdr 118 source4/lib/tdr/testsuite.c tdr->flags = 0; tdr 119 source4/lib/tdr/testsuite.c torture_assert_ntstatus_ok(tctx, tdr_pull_charset(tdr, tctx, &l, -1, 1, CH_DOS), tdr 121 source4/lib/tdr/testsuite.c torture_assert_int_equal(tctx, 4, tdr->offset, "offset invalid"); tdr 124 source4/lib/tdr/testsuite.c tdr->offset = 0; tdr 125 source4/lib/tdr/testsuite.c torture_assert_ntstatus_ok(tctx, tdr_pull_charset(tdr, tctx, &l, 2, 1, CH_UNIX), tdr 127 source4/lib/tdr/testsuite.c torture_assert_int_equal(tctx, 2, tdr->offset, "offset invalid"); tdr 135 source4/lib/tdr/testsuite.c struct tdr_pull *tdr = tdr_pull_init(tctx, lp_iconv_convenience(tctx->lp_ctx)); tdr 137 source4/lib/tdr/testsuite.c tdr->data.data = (uint8_t *)talloc_strdup(tctx, "bla"); tdr 138 source4/lib/tdr/testsuite.c tdr->data.length = 4; tdr 139 source4/lib/tdr/testsuite.c tdr->offset = 0; tdr 140 source4/lib/tdr/testsuite.c tdr->flags = 0; tdr 141 source4/lib/tdr/testsuite.c torture_assert_ntstatus_ok(tctx, tdr_pull_charset(tdr, tctx, &l, 0, 1, CH_DOS), tdr 143 source4/lib/tdr/testsuite.c torture_assert_int_equal(tctx, 0, tdr->offset, "offset invalid"); tdr 154 source4/lib/tdr/testsuite.c struct tdr_push *tdr = tdr_push_init(tctx, lp_iconv_convenience(tctx->lp_ctx)); tdr 155 source4/lib/tdr/testsuite.c torture_assert_ntstatus_ok(tctx, tdr_push_charset(tdr, &l, 4, 1, CH_UTF8), tdr 157 source4/lib/tdr/testsuite.c torture_assert_int_equal(tctx, 4, tdr->data.length, "offset invalid"); tdr 158 source4/lib/tdr/testsuite.c torture_assert(tctx, strcmp("bloe", (const char *)tdr->data.data) == 0, "right string push"); tdr 160 source4/lib/tdr/testsuite.c torture_assert_ntstatus_ok(tctx, tdr_push_charset(tdr, &l, -1, 1, CH_UTF8), tdr 162 source4/lib/tdr/testsuite.c torture_assert_int_equal(tctx, 9, tdr->data.length, "offset invalid"); tdr 163 source4/lib/tdr/testsuite.c torture_assert_str_equal(tctx, "bloe", (const char *)tdr->data.data+4, "right string read");