lp_load(get_dyn_CONFIGFILE(), false, false, true, true);
- nt_status = make_user_info_map(&mapped_user_info,
+ nt_status = make_user_info_map(talloc_tos(),
+ &mapped_user_info,
user_info->client.account_name,
user_info->client.domain_name,
user_info->workstation_name,
username_was_mapped = mapped_user_info->was_mapped;
- free_user_info(&mapped_user_info);
+ TALLOC_FREE(mapped_user_info);
if (!NT_STATUS_IS_OK(nt_status)) {
nt_status = do_map_to_guest_server_info(mem_ctx,
Create an auth_usersupplied_data structure after appropriate mapping.
****************************************************************************/
-NTSTATUS make_user_info_map(struct auth_usersupplied_info **user_info,
+NTSTATUS make_user_info_map(TALLOC_CTX *mem_ctx,
+ struct auth_usersupplied_info **user_info,
const char *smb_name,
const char *client_domain,
const char *workstation_name,
* it is our global SAM name, or for legacy behavior it is our
* primary domain name */
- result = make_user_info(user_info, smb_name, internal_username,
+ result = make_user_info(mem_ctx, user_info, smb_name, internal_username,
client_domain, domain, workstation_name,
remote_address, lm_pwd, nt_pwd,
lm_interactive_pwd, nt_interactive_pwd,
Decrypt and encrypt the passwords.
****************************************************************************/
-bool make_user_info_netlogon_network(struct auth_usersupplied_info **user_info,
+bool make_user_info_netlogon_network(TALLOC_CTX *mem_ctx,
+ struct auth_usersupplied_info **user_info,
const char *smb_name,
const char *client_domain,
const char *workstation_name,
DATA_BLOB lm_blob = data_blob(lm_network_pwd, lm_pwd_len);
DATA_BLOB nt_blob = data_blob(nt_network_pwd, nt_pwd_len);
- status = make_user_info_map(user_info,
+ status = make_user_info_map(mem_ctx, user_info,
smb_name, client_domain,
workstation_name,
remote_address,
Decrypt and encrypt the passwords.
****************************************************************************/
-bool make_user_info_netlogon_interactive(struct auth_usersupplied_info **user_info,
+bool make_user_info_netlogon_interactive(TALLOC_CTX *mem_ctx,
+ struct auth_usersupplied_info **user_info,
const char *smb_name,
const char *client_domain,
const char *workstation_name,
}
nt_status = make_user_info_map(
+ mem_ctx,
user_info,
smb_name, client_domain, workstation_name,
remote_address,
Create an auth_usersupplied_data structure
****************************************************************************/
-bool make_user_info_for_reply(struct auth_usersupplied_info **user_info,
+bool make_user_info_for_reply(TALLOC_CTX *mem_ctx,
+ struct auth_usersupplied_info **user_info,
const char *smb_name,
const char *client_domain,
const struct tsocket_address *remote_address,
return false;
}
- ret = make_user_info(
+ ret = make_user_info(mem_ctx,
user_info, smb_name, smb_name, client_domain, client_domain,
get_remote_machine_name(),
remote_address,
Create an auth_usersupplied_data structure
****************************************************************************/
-NTSTATUS make_user_info_for_reply_enc(struct auth_usersupplied_info **user_info,
+NTSTATUS make_user_info_for_reply_enc(TALLOC_CTX *mem_ctx,
+ struct auth_usersupplied_info **user_info,
const char *smb_name,
const char *client_domain,
const struct tsocket_address *remote_address,
DATA_BLOB lm_resp, DATA_BLOB nt_resp)
{
- return make_user_info(user_info, smb_name, smb_name,
+ return make_user_info(mem_ctx,
+ user_info, smb_name, smb_name,
client_domain, client_domain,
get_remote_machine_name(),
remote_address,
Create a guest user_info blob, for anonymous authentication.
****************************************************************************/
-bool make_user_info_guest(const struct tsocket_address *remote_address,
+bool make_user_info_guest(TALLOC_CTX *mem_ctx,
+ const struct tsocket_address *remote_address,
struct auth_usersupplied_info **user_info)
{
NTSTATUS nt_status;
- nt_status = make_user_info(user_info,
+ nt_status = make_user_info(mem_ctx,
+ user_info,
"","",
"","",
"",
/* The following definitions come from auth/auth_util.c */
struct tsocket_address;
-NTSTATUS make_user_info_map(struct auth_usersupplied_info **user_info,
+NTSTATUS make_user_info_map(TALLOC_CTX *mem_ctx,
+ struct auth_usersupplied_info **user_info,
const char *smb_name,
const char *client_domain,
const char *workstation_name,
const struct samr_Password *nt_interactive_pwd,
const char *plaintext,
enum auth_password_state password_state);
-bool make_user_info_netlogon_network(struct auth_usersupplied_info **user_info,
+bool make_user_info_netlogon_network(TALLOC_CTX *mem_ctx,
+ struct auth_usersupplied_info **user_info,
const char *smb_name,
const char *client_domain,
const char *workstation_name,
int lm_pwd_len,
const uchar *nt_network_pwd,
int nt_pwd_len);
-bool make_user_info_netlogon_interactive(struct auth_usersupplied_info **user_info,
+bool make_user_info_netlogon_interactive(TALLOC_CTX *mem_ctx,
+ struct auth_usersupplied_info **user_info,
const char *smb_name,
const char *client_domain,
const char *workstation_name,
const uchar chal[8],
const uchar lm_interactive_pwd[16],
const uchar nt_interactive_pwd[16]);
-bool make_user_info_for_reply(struct auth_usersupplied_info **user_info,
+bool make_user_info_for_reply(TALLOC_CTX *mem_ctx,
+ struct auth_usersupplied_info **user_info,
const char *smb_name,
const char *client_domain,
const struct tsocket_address *remote_address,
const uint8 chal[8],
DATA_BLOB plaintext_password);
-NTSTATUS make_user_info_for_reply_enc(struct auth_usersupplied_info **user_info,
+NTSTATUS make_user_info_for_reply_enc(TALLOC_CTX *mem_ctx,
+ struct auth_usersupplied_info **user_info,
const char *smb_name,
const char *client_domain,
const struct tsocket_address *remote_address,
DATA_BLOB lm_resp, DATA_BLOB nt_resp);
-bool make_user_info_guest(const struct tsocket_address *remote_address,
+bool make_user_info_guest(TALLOC_CTX *mem_ctx,
+ const struct tsocket_address *remote_address,
struct auth_usersupplied_info **user_info);
struct samu;
/* The following definitions come from auth/user_info.c */
-NTSTATUS make_user_info(struct auth_usersupplied_info **ret_user_info,
+NTSTATUS make_user_info(TALLOC_CTX *mem_ctx,
+ struct auth_usersupplied_info **ret_user_info,
const char *smb_name,
const char *internal_username,
const char *client_domain,
Create an auth_usersupplied_data structure
****************************************************************************/
-NTSTATUS make_user_info(struct auth_usersupplied_info **ret_user_info,
+NTSTATUS make_user_info(TALLOC_CTX *mem_ctx,
+ struct auth_usersupplied_info **ret_user_info,
const char *smb_name,
const char *internal_username,
const char *client_domain,
DEBUG(5,("attempting to make a user_info for %s (%s)\n", internal_username, smb_name));
- /* FIXME: Have the caller provide a talloc context of the
- * correct lifetime (possibly talloc_tos(), but it depends on
- * the caller) */
- user_info = talloc_zero(NULL, struct auth_usersupplied_info);
+ user_info = talloc_zero(mem_ctx, struct auth_usersupplied_info);
if (user_info == NULL) {
DEBUG(0,("talloc failed for user_info\n"));
return NT_STATUS_NO_MEMORY;
*ret_user_info = user_info;
return NT_STATUS_OK;
}
-
-/***************************************************************************
- Free a user_info struct
-***************************************************************************/
-
-void free_user_info(struct auth_usersupplied_info **user_info)
-{
- TALLOC_FREE(*user_info);
-}
if (*wksname == '\\') wksname++;
/* Standard challenge/response authentication */
- if (!make_user_info_netlogon_network(&user_info,
+ if (!make_user_info_netlogon_network(talloc_tos(),
+ &user_info,
nt_username, nt_domain,
wksname,
p->remote_address,
auth_get_ntlm_challenge(auth_context, chal);
- if (!make_user_info_netlogon_interactive(&user_info,
+ if (!make_user_info_netlogon_interactive(talloc_tos(),
+ &user_info,
nt_username, nt_domain,
nt_workstation,
p->remote_address,
}
TALLOC_FREE(auth_context);
- free_user_info(&user_info);
+ TALLOC_FREE(user_info);
DEBUG(5,("%s: check_password returned status %s\n",
fn, nt_errstr(status)));
auth_context->get_ntlm_challenge(auth_context,
chal);
- if (!make_user_info_guest(remote_address, &user_info)) {
+ if (!make_user_info_guest(talloc_tos(), remote_address, &user_info)) {
TALLOC_FREE(auth_context);
return NT_STATUS_NO_MEMORY;
}
nt_status = auth_check_password_session_info(auth_context,
mem_ctx, user_info, session_info);
- free_user_info(&user_info);
+ TALLOC_FREE(user_info);
TALLOC_FREE(auth_context);
return nt_status;
}
END_PROFILE(SMBsesssetupX);
return;
}
- nt_status = make_user_info_for_reply_enc(&user_info, user,
- domain,
- sconn->remote_address,
- lm_resp, nt_resp);
+ nt_status = make_user_info_for_reply_enc(talloc_tos(),
+ &user_info, user,
+ domain,
+ sconn->remote_address,
+ lm_resp, nt_resp);
if (NT_STATUS_IS_OK(nt_status)) {
nt_status = auth_check_password_session_info(negprot_auth_context,
req, user_info, &session_info);
plaintext_auth_context->get_ntlm_challenge(
plaintext_auth_context, chal);
- if (!make_user_info_for_reply(&user_info,
+ if (!make_user_info_for_reply(talloc_tos(),
+ &user_info,
user, domain,
sconn->remote_address,
chal,
}
}
- free_user_info(&user_info);
+ TALLOC_FREE(user_info);
if (!NT_STATUS_IS_OK(nt_status)) {
data_blob_free(&nt_resp);
return False;
}
- status = make_user_info(&user_info, pdb_get_username(pdb_entry), pdb_get_username(pdb_entry),
+ status = make_user_info(mem_ctx,
+ &user_info, pdb_get_username(pdb_entry), pdb_get_username(pdb_entry),
pdb_get_domain(pdb_entry), pdb_get_domain(pdb_entry), lp_netbios_name(),
tsocket_address, NULL, &nt_resp, NULL, NULL, NULL,
AUTH_PASSWORD_RESPONSE);
struct tsocket_address *local;
NTSTATUS status;
int rc;
+ TALLOC_CTX *frame = talloc_stackframe();
rc = tsocket_address_inet_from_strings(mem_ctx,
"ip",
0,
&local);
if (rc < 0) {
+ TALLOC_FREE(frame);
return NT_STATUS_NO_MEMORY;
}
- status = make_user_info(&user_info, user, user, domain, domain,
+ status = make_user_info(frame, &user_info, user, user, domain, domain,
lp_netbios_name(), local, lm_resp, nt_resp, NULL, NULL,
NULL, AUTH_PASSWORD_RESPONSE);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(10, ("make_user_info failed: %s\n", nt_errstr(status)));
+ TALLOC_FREE(frame);
return status;
}
user_info->logon_parameters = logon_parameters;
/* We don't want any more mapping of the username */
user_info->mapped_state = True;
- status = check_sam_security_info3(challenge, talloc_tos(), user_info,
+ status = check_sam_security_info3(challenge, mem_ctx, user_info,
pinfo3);
- free_user_info(&user_info);
DEBUG(10, ("Authenticaticating user %s\\%s returned %s\n", domain,
user, nt_errstr(status)));
+ TALLOC_FREE(frame);
return status;
}