2
Unix SMB/CIFS implementation.
3
Generic authentication types
4
Copyright (C) Andrew Bartlett 2001-2002
5
Copyright (C) Jelmer Vernooij 2002
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 2 of the License, or
10
(at your option) any later version.
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.
17
You should have received a copy of the GNU General Public License
18
along with this program; if not, write to the Free Software
19
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25
#define DBGC_CLASS DBGC_AUTH
28
* Return a guest logon for guest users (username = "")
30
* Typically used as the first module in the auth chain, this allows
31
* guest logons to be dealt with in one place. Non-guest logons 'fail'
32
* and pass onto the next module.
35
static NTSTATUS check_guest_security(const struct auth_context *auth_context,
36
void *my_private_data,
38
const auth_usersupplied_info *user_info,
39
auth_serversupplied_info **server_info)
41
/* mark this as 'not for me' */
42
NTSTATUS nt_status = NT_STATUS_NOT_IMPLEMENTED;
44
if (!(user_info->internal_username
45
&& *user_info->internal_username)) {
46
nt_status = make_server_info_guest(server_info);
52
/* Guest modules initialisation */
54
static NTSTATUS auth_init_guest(struct auth_context *auth_context, const char *options, auth_methods **auth_method)
56
if (!make_auth_methods(auth_context, auth_method))
57
return NT_STATUS_NO_MEMORY;
59
(*auth_method)->auth = check_guest_security;
60
(*auth_method)->name = "guest";
66
* Return an error based on username
68
* This function allows the testing of obsure errors, as well as the generation
69
* of NT_STATUS -> DOS error mapping tables.
71
* This module is of no value to end-users.
73
* The password is ignored.
75
* @return An NTSTATUS value based on the username
78
static NTSTATUS check_name_to_ntstatus_security(const struct auth_context *auth_context,
79
void *my_private_data,
81
const auth_usersupplied_info *user_info,
82
auth_serversupplied_info **server_info)
87
fstrcpy(user, user_info->smb_name);
89
if (strnequal("NT_STATUS", user, strlen("NT_STATUS"))) {
91
return nt_status_string_to_code(user);
95
error_num = strtoul(user, NULL, 16);
97
DEBUG(5,("check_name_to_ntstatus_security: Error for user %s was %lx\n", user, error_num));
99
nt_status = NT_STATUS(error_num);
104
/** Module initialisation function */
106
static NTSTATUS auth_init_name_to_ntstatus(struct auth_context *auth_context, const char *param, auth_methods **auth_method)
108
if (!make_auth_methods(auth_context, auth_method))
109
return NT_STATUS_NO_MEMORY;
111
(*auth_method)->auth = check_name_to_ntstatus_security;
112
(*auth_method)->name = "name_to_ntstatus";
117
* Return a 'fixed' challenge instead of a variable one.
119
* The idea of this function is to make packet snifs consistant
120
* with a fixed challenge, so as to aid debugging.
122
* This module is of no value to end-users.
124
* This module does not actually authenticate the user, but
125
* just pretenteds to need a specified challenge.
126
* This module removes *all* security from the challenge-response system
128
* @return NT_STATUS_UNSUCCESSFUL
131
static NTSTATUS check_fixed_challenge_security(const struct auth_context *auth_context,
132
void *my_private_data,
134
const auth_usersupplied_info *user_info,
135
auth_serversupplied_info **server_info)
137
return NT_STATUS_NOT_IMPLEMENTED;
140
/****************************************************************************
141
Get the challenge out of a password server.
142
****************************************************************************/
144
static DATA_BLOB auth_get_fixed_challenge(const struct auth_context *auth_context,
145
void **my_private_data,
148
const char *challenge = "I am a teapot";
149
return data_blob(challenge, 8);
153
/** Module initailisation function */
155
static NTSTATUS auth_init_fixed_challenge(struct auth_context *auth_context, const char *param, auth_methods **auth_method)
157
if (!make_auth_methods(auth_context, auth_method))
158
return NT_STATUS_NO_MEMORY;
160
(*auth_method)->auth = check_fixed_challenge_security;
161
(*auth_method)->get_chal = auth_get_fixed_challenge;
162
(*auth_method)->name = "fixed_challenge";
165
#endif /* DEVELOPER */
167
NTSTATUS auth_builtin_init(void)
169
smb_register_auth(AUTH_INTERFACE_VERSION, "guest", auth_init_guest);
171
smb_register_auth(AUTH_INTERFACE_VERSION, "fixed_challenge", auth_init_fixed_challenge);
172
smb_register_auth(AUTH_INTERFACE_VERSION, "name_to_ntstatus", auth_init_name_to_ntstatus);