Line data Source code
1 : /*
2 : Unix SMB/CIFS implementation.
3 :
4 : routines for marshalling/unmarshalling special schannel structures
5 :
6 : Copyright (C) Guenther Deschner 2009
7 :
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.
12 :
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.
17 :
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/>.
20 : */
21 :
22 : #include "includes.h"
23 : #include "../librpc/gen_ndr/ndr_schannel.h"
24 : #include "../librpc/ndr/ndr_schannel.h"
25 : #include "../libcli/nbt/libnbt.h"
26 :
27 0 : _PUBLIC_ void ndr_print_NL_AUTH_MESSAGE_BUFFER(struct ndr_print *ndr, const char *name, const union NL_AUTH_MESSAGE_BUFFER *r)
28 : {
29 : int level;
30 0 : level = ndr_print_steal_switch_value(ndr, r);
31 0 : switch (level) {
32 0 : case NL_FLAG_OEM_NETBIOS_DOMAIN_NAME:
33 0 : ndr_print_string(ndr, name, r->a);
34 0 : break;
35 :
36 0 : case NL_FLAG_OEM_NETBIOS_COMPUTER_NAME:
37 0 : ndr_print_string(ndr, name, r->a);
38 0 : break;
39 :
40 0 : case NL_FLAG_UTF8_DNS_DOMAIN_NAME:
41 0 : ndr_print_nbt_string(ndr, name, r->u);
42 0 : break;
43 :
44 0 : case NL_FLAG_UTF8_DNS_HOST_NAME:
45 0 : ndr_print_nbt_string(ndr, name, r->u);
46 0 : break;
47 :
48 0 : case NL_FLAG_UTF8_NETBIOS_COMPUTER_NAME:
49 0 : ndr_print_nbt_string(ndr, name, r->u);
50 0 : break;
51 :
52 0 : default:
53 0 : break;
54 :
55 : }
56 0 : }
57 :
58 0 : _PUBLIC_ void ndr_print_NL_AUTH_MESSAGE_BUFFER_REPLY(struct ndr_print *ndr, const char *name, const union NL_AUTH_MESSAGE_BUFFER_REPLY *r)
59 : {
60 : int level;
61 0 : level = ndr_print_steal_switch_value(ndr, r);
62 0 : switch (level) {
63 0 : case NL_NEGOTIATE_RESPONSE:
64 0 : ndr_print_uint32(ndr, name, r->dummy);
65 0 : break;
66 :
67 0 : default:
68 0 : break;
69 :
70 : }
71 0 : }
72 :
73 0 : void dump_NL_AUTH_SIGNATURE(TALLOC_CTX *mem_ctx,
74 : const DATA_BLOB *blob)
75 : {
76 : enum ndr_err_code ndr_err;
77 : uint16_t signature_algorithm;
78 :
79 0 : if (blob->length < 2) {
80 0 : return;
81 : }
82 :
83 0 : signature_algorithm = SVAL(blob->data, 0);
84 :
85 0 : switch (signature_algorithm) {
86 0 : case NL_SIGN_HMAC_MD5: {
87 : struct NL_AUTH_SIGNATURE r;
88 0 : ndr_err = ndr_pull_struct_blob(blob, mem_ctx, &r,
89 : (ndr_pull_flags_fn_t)ndr_pull_NL_AUTH_SIGNATURE);
90 0 : if (NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
91 0 : NDR_PRINT_DEBUG(NL_AUTH_SIGNATURE, &r);
92 : }
93 0 : break;
94 : }
95 0 : case NL_SIGN_HMAC_SHA256: {
96 : struct NL_AUTH_SHA2_SIGNATURE r;
97 0 : ndr_err = ndr_pull_struct_blob(blob, mem_ctx, &r,
98 : (ndr_pull_flags_fn_t)ndr_pull_NL_AUTH_SHA2_SIGNATURE);
99 0 : if (NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
100 0 : NDR_PRINT_DEBUG(NL_AUTH_SHA2_SIGNATURE, &r);
101 : }
102 0 : break;
103 : }
104 0 : default:
105 0 : break;
106 : }
107 : }
|