r1200: Add 'gensec', our generic security layer.
[metze/samba/wip.git] / source4 / libcli / auth / gensec_ntlmssp.c
1 /* 
2    Unix SMB/CIFS implementation.
3
4    dcerpc authentication operations
5
6    Copyright (C) Andrew Tridgell 2003
7    Copyright (C) Andrew Bartlett <abartlet@samba.org> 2004
8    
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 2 of the License, or
12    (at your option) any later version.
13    
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18    
19    You should have received a copy of the GNU General Public License
20    along with this program; if not, write to the Free Software
21    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 */
23
24 #include "includes.h"
25
26
27 NTSTATUS gensec_ntlmssp_client_start(struct gensec_security *gensec_security)
28 {
29         struct ntlmssp_state *ntlmssp_state = NULL;
30         NTSTATUS status;
31
32         status = ntlmssp_client_start(&ntlmssp_state);
33         if (!NT_STATUS_IS_OK(status)) {
34                 return status;
35         }
36
37         status = ntlmssp_set_domain(ntlmssp_state, gensec_security->user.domain);
38         if (!NT_STATUS_IS_OK(status)) {
39                 return status;
40         }
41         
42         status = ntlmssp_set_username(ntlmssp_state, gensec_security->user.name);
43         if (!NT_STATUS_IS_OK(status)) {
44                 return status;
45         }
46
47         status = ntlmssp_set_password(ntlmssp_state, gensec_security->user.password);
48         if (!NT_STATUS_IS_OK(status)) {
49                 return status;
50         }
51         
52         gensec_security->private_data = ntlmssp_state;
53
54         return status;
55 }
56
57 /*
58   wrappers for the ntlmssp_*() functions
59 */
60 NTSTATUS gensec_ntlmssp_unseal_packet(struct gensec_security *gensec_security, 
61                                       TALLOC_CTX *mem_ctx, 
62                                       uint8_t *data, size_t length, DATA_BLOB *sig)
63 {
64         struct ntlmssp_state *ntlmssp_state = gensec_security->private_data;
65
66         return ntlmssp_unseal_packet(ntlmssp_state, mem_ctx, data, length, sig);
67 }
68
69 NTSTATUS gensec_ntlmssp_check_packet(struct gensec_security *gensec_security, 
70                                      TALLOC_CTX *mem_ctx, 
71                                      const uint8_t *data, size_t length, 
72                                      const DATA_BLOB *sig)
73 {
74         struct ntlmssp_state *ntlmssp_state = gensec_security->private_data;
75
76         return ntlmssp_check_packet(ntlmssp_state, mem_ctx, data, length, sig);
77 }
78
79 NTSTATUS gensec_ntlmssp_seal_packet(struct gensec_security *gensec_security, 
80                                     TALLOC_CTX *mem_ctx, 
81                                     uint8_t *data, size_t length, 
82                                     DATA_BLOB *sig)
83 {
84         struct ntlmssp_state *ntlmssp_state = gensec_security->private_data;
85
86         return ntlmssp_seal_packet(ntlmssp_state, mem_ctx, data, length, sig);
87 }
88
89 NTSTATUS gensec_ntlmssp_sign_packet(struct gensec_security *gensec_security, 
90                                     TALLOC_CTX *mem_ctx, 
91                                     const uint8_t *data, size_t length, 
92                                     DATA_BLOB *sig)
93 {
94         struct ntlmssp_state *ntlmssp_state = gensec_security->private_data;
95
96         return ntlmssp_sign_packet(ntlmssp_state, mem_ctx, data, length, sig);
97 }
98
99 NTSTATUS gensec_ntlmssp_session_key(struct gensec_security *gensec_security, 
100                                     DATA_BLOB *session_key)
101 {
102         struct ntlmssp_state *ntlmssp_state = gensec_security->private_data;
103
104         return ntlmssp_session_key(ntlmssp_state, session_key);
105 }
106
107 NTSTATUS gensec_ntlmssp_update(struct gensec_security *gensec_security, TALLOC_CTX *out_mem_ctx, 
108                                const DATA_BLOB in, DATA_BLOB *out) 
109 {
110         struct ntlmssp_state *ntlmssp_state = gensec_security->private_data;
111
112         return ntlmssp_update(ntlmssp_state, out_mem_ctx, in, out);
113 }
114
115 void gensec_ntlmssp_end(struct gensec_security *gensec_security)
116 {
117         struct ntlmssp_state *ntlmssp_state = gensec_security->private_data;
118
119         ntlmssp_end(&ntlmssp_state);
120
121         gensec_security->private_data = NULL;
122 }