NTSTATUS (*set_ntlm_challenge)(struct auth4_context *auth_ctx, const uint8_t chal[8], const char *set_by);
+ /* Subtle! mem_ctx could be a pool and we want to steal session_info,
+ * so please talloc_steal it onto mem_ctx so it's not a pool object! */
NTSTATUS (*generate_session_info)(struct auth4_context *auth_context,
TALLOC_CTX *mem_ctx,
void *server_returned_info,
return NT_STATUS_LOGON_FAILURE;
}
- session_info = talloc_zero(mem_ctx, struct auth_session_info);
+ /* Don't put session_info in the pool! */
+ session_info = talloc_zero(NULL, struct auth_session_info);
if (!session_info) {
return NT_STATUS_NO_MEMORY;
}
+ talloc_reparent(NULL, mem_ctx, session_info);
session_info->unix_token = talloc_zero(session_info, struct security_unix_token);
if (!session_info->unix_token) {
talloc_set_name_const(logon_info, "struct PAC_LOGON_INFO");
auth_ctx->private_data = talloc_steal(auth_ctx, logon_info);
- *session_info = talloc_zero(mem_ctx, struct auth_session_info);
+ /* Don't put session_info in the pool! */
+ *session_info = talloc_zero(NULL, struct auth_session_info);
if (!*session_info) {
status = NT_STATUS_NO_MEMORY;
goto done;
}
+ talloc_reparent(NULL, mem_ctx, session_info);
status = NT_STATUS_OK;
done:
struct auth_session_info **session_info_out)
{
char *unix_username = (char *)server_returned_info;
- struct auth_session_info *session_info = talloc_zero(mem_ctx, struct auth_session_info);
+ /* Don't put session_info in the pool! */
+ struct auth_session_info *session_info = talloc_zero(NULL, struct auth_session_info);
if (!session_info) {
return NT_STATUS_NO_MEMORY;
}
+ talloc_reparent(NULL, mem_ctx, session_info);
session_info->unix_info = talloc_zero(session_info, struct auth_user_info_unix);
if (!session_info->unix_info) {