Line data Source code
1 : /*
2 : Unix SMB/Netbios implementation.
3 : NTLMSSP ndr functions
4 :
5 : Copyright (C) Guenther Deschner 2009
6 :
7 : This program is free software; you can redistribute it and/or modify
8 : it under the terms of the GNU General Public License as published by
9 : the Free Software Foundation; either version 3 of the License, or
10 : (at your option) any later version.
11 :
12 : This program is distributed in the hope that it will be useful,
13 : but WITHOUT ANY WARRANTY; without even the implied warranty of
14 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 : GNU General Public License for more details.
16 :
17 : You should have received a copy of the GNU General Public License
18 : along with this program. If not, see <http://www.gnu.org/licenses/>.
19 : */
20 :
21 : #include "includes.h"
22 : #include "../librpc/gen_ndr/ndr_ntlmssp.h"
23 : #include "ntlmssp_ndr.h"
24 :
25 : #define NTLMSSP_PULL_MESSAGE(type, blob, mem_ctx, r) \
26 : do { \
27 : enum ndr_err_code __ndr_err; \
28 : ZERO_STRUCTP(r); /* in order to deal with unset neg flags */\
29 : __ndr_err = ndr_pull_struct_blob(blob, mem_ctx, r, \
30 : (ndr_pull_flags_fn_t)ndr_pull_ ##type); \
31 : if (!NDR_ERR_CODE_IS_SUCCESS(__ndr_err)) { \
32 : return ndr_map_error2ntstatus(__ndr_err); \
33 : } \
34 : if (!mem_equal_const_time(r->Signature, "NTLMSSP\0", 8)) { \
35 : return NT_STATUS_INVALID_PARAMETER; \
36 : } \
37 : return NT_STATUS_OK; \
38 : } while(0);
39 :
40 : #define NTLMSSP_PUSH_MESSAGE(type, blob, mem_ctx, r) \
41 : do { \
42 : enum ndr_err_code __ndr_err; \
43 : __ndr_err = ndr_push_struct_blob(blob, mem_ctx, r, \
44 : (ndr_push_flags_fn_t)ndr_push_ ##type); \
45 : if (!NDR_ERR_CODE_IS_SUCCESS(__ndr_err)) { \
46 : return ndr_map_error2ntstatus(__ndr_err); \
47 : } \
48 : return NT_STATUS_OK; \
49 : } while(0);
50 :
51 :
52 : /**
53 : * Pull NTLMSSP NEGOTIATE_MESSAGE struct from a blob
54 : * @param blob The plain packet blob
55 : * @param mem_ctx A talloc context
56 : * @param r Pointer to a NTLMSSP NEGOTIATE_MESSAGE structure
57 : */
58 :
59 2 : NTSTATUS ntlmssp_pull_NEGOTIATE_MESSAGE(const DATA_BLOB *blob,
60 : TALLOC_CTX *mem_ctx,
61 : struct NEGOTIATE_MESSAGE *r)
62 : {
63 2 : NTLMSSP_PULL_MESSAGE(NEGOTIATE_MESSAGE, blob, mem_ctx, r);
64 : }
65 :
66 : /**
67 : * Pull NTLMSSP CHALLENGE_MESSAGE struct from a blob
68 : * @param blob The plain packet blob
69 : * @param mem_ctx A talloc context
70 : * @param r Pointer to a NTLMSSP CHALLENGE_MESSAGE structure
71 : */
72 :
73 2 : NTSTATUS ntlmssp_pull_CHALLENGE_MESSAGE(const DATA_BLOB *blob,
74 : TALLOC_CTX *mem_ctx,
75 : struct CHALLENGE_MESSAGE *r)
76 : {
77 2 : NTLMSSP_PULL_MESSAGE(CHALLENGE_MESSAGE, blob, mem_ctx, r);
78 : }
79 :
80 : /**
81 : * Pull NTLMSSP AUTHENTICATE_MESSAGE struct from a blob
82 : * @param blob The plain packet blob
83 : * @param mem_ctx A talloc context
84 : * @param r Pointer to a NTLMSSP AUTHENTICATE_MESSAGE structure
85 : */
86 :
87 2 : NTSTATUS ntlmssp_pull_AUTHENTICATE_MESSAGE(const DATA_BLOB *blob,
88 : TALLOC_CTX *mem_ctx,
89 : struct AUTHENTICATE_MESSAGE *r)
90 : {
91 2 : NTLMSSP_PULL_MESSAGE(AUTHENTICATE_MESSAGE, blob, mem_ctx, r);
92 : }
93 :
94 : /**
95 : * Push NTLMSSP NEGOTIATE_MESSAGE struct into a blob
96 : * @param blob The plain packet blob
97 : * @param mem_ctx A talloc context
98 : * @param r Pointer to a NTLMSSP NEGOTIATE_MESSAGE structure
99 : */
100 :
101 0 : NTSTATUS ntlmssp_push_NEGOTIATE_MESSAGE(DATA_BLOB *blob,
102 : TALLOC_CTX *mem_ctx,
103 : const struct NEGOTIATE_MESSAGE *r)
104 : {
105 0 : NTLMSSP_PUSH_MESSAGE(NEGOTIATE_MESSAGE, blob, mem_ctx, r);
106 : }
107 :
108 : /**
109 : * Push NTLMSSP CHALLENGE_MESSAGE struct into a blob
110 : * @param blob The plain packet blob
111 : * @param mem_ctx A talloc context
112 : * @param r Pointer to a NTLMSSP CHALLENGE_MESSAGE structure
113 : */
114 :
115 0 : NTSTATUS ntlmssp_push_CHALLENGE_MESSAGE(DATA_BLOB *blob,
116 : TALLOC_CTX *mem_ctx,
117 : const struct CHALLENGE_MESSAGE *r)
118 : {
119 0 : NTLMSSP_PUSH_MESSAGE(CHALLENGE_MESSAGE, blob, mem_ctx, r);
120 : }
121 :
122 : /**
123 : * Push NTLMSSP AUTHENTICATE_MESSAGE struct into a blob
124 : * @param blob The plain packet blob
125 : * @param mem_ctx A talloc context
126 : * @param r Pointer to a NTLMSSP AUTHENTICATE_MESSAGE structure
127 : */
128 :
129 0 : NTSTATUS ntlmssp_push_AUTHENTICATE_MESSAGE(DATA_BLOB *blob,
130 : TALLOC_CTX *mem_ctx,
131 : const struct AUTHENTICATE_MESSAGE *r)
132 : {
133 0 : NTLMSSP_PUSH_MESSAGE(AUTHENTICATE_MESSAGE, blob, mem_ctx, r);
134 : }
|