smbd: remove now unneccessary wrapper vfs_fget_dos_attributes()
[Samba.git] / librpc / ndr / ndr_claims.c
blob961262692132aaf7d9329c5e4ae8d4a24af3a357
1 #include "includes.h"
2 #include "librpc/gen_ndr/ndr_claims.h"
3 #include "librpc/ndr/ndr_claims.h"
5 #include "librpc/ndr/ndr_compression.h"
6 #include "lib/compression/lzxpress_huffman.h"
8 enum ndr_compression_alg ndr_claims_compression_alg(enum CLAIMS_COMPRESSION_FORMAT wire_alg)
10 switch (wire_alg) {
11 case CLAIMS_COMPRESSION_FORMAT_NONE:
12 return NDR_COMPRESSION_NONE;
14 case CLAIMS_COMPRESSION_FORMAT_LZNT1:
15 return NDR_COMPRESSION_INVALID;
17 case CLAIMS_COMPRESSION_FORMAT_XPRESS:
18 return NDR_COMPRESSION_INVALID;
20 case CLAIMS_COMPRESSION_FORMAT_XPRESS_HUFF:
21 return NDR_COMPRESSION_XPRESS_HUFF_RAW;
23 return NDR_COMPRESSION_INVALID;
27 enum CLAIMS_COMPRESSION_FORMAT ndr_claims_actual_wire_compression_alg(enum CLAIMS_COMPRESSION_FORMAT specified_compression,
28 size_t uncompressed_claims_size) {
29 if (uncompressed_claims_size < CLAIM_UPPER_COMPRESSION_THRESHOLD) {
30 return CLAIMS_COMPRESSION_FORMAT_NONE;
33 return specified_compression;
36 size_t ndr_claims_compressed_size(struct CLAIMS_SET_NDR *claims_set,
37 enum CLAIMS_COMPRESSION_FORMAT wire_alg,
38 int flags)
40 TALLOC_CTX *frame = NULL;
41 DATA_BLOB tmp_blob;
42 uint8_t * tmp_compressed;
43 ssize_t compressed_size;
44 enum ndr_err_code ndr_err;
45 enum CLAIMS_COMPRESSION_FORMAT actual_wire_alg;
47 if (claims_set == NULL) {
48 return 0;
51 frame = talloc_stackframe();
53 ndr_err = ndr_push_struct_blob(&tmp_blob,
54 frame,
55 claims_set,
56 (ndr_push_flags_fn_t)ndr_push_CLAIMS_SET_NDR);
57 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
58 DBG_ERR("Failed to push claims while determining compressed size\n");
59 TALLOC_FREE(frame);
60 return 0;
63 actual_wire_alg = ndr_claims_actual_wire_compression_alg(wire_alg,
64 tmp_blob.length);
66 switch (actual_wire_alg) {
67 case CLAIMS_COMPRESSION_FORMAT_NONE:
68 TALLOC_FREE(frame);
69 return tmp_blob.length;
71 case CLAIMS_COMPRESSION_FORMAT_XPRESS_HUFF:
72 compressed_size = lzxpress_huffman_compress_talloc(frame,
73 tmp_blob.data,
74 tmp_blob.length,
75 &tmp_compressed);
77 TALLOC_FREE(frame);
79 if (compressed_size < 0) {
80 DBG_ERR("Failed to compress claims (for determining compressed size)\n");
81 return 0;
83 return compressed_size;
85 default:
86 TALLOC_FREE(frame);
87 DBG_ERR("Invalid chosen compression algorithm while determining compressed claim size\n");
88 return 0;