Clear out a auth_context, and destroy the attached TALLOC_CTX
***************************************************************************/
-static void free_auth_context(struct auth_context **auth_context)
+static int auth_context_destructor(void *ptr)
{
- auth_methods *auth_method;
+ struct auth_context *ctx = talloc_get_type(ptr, struct auth_context);
+ struct auth_methods *am;
- if (*auth_context) {
- /* Free private data of context's authentication methods */
- for (auth_method = (*auth_context)->auth_method_list; auth_method; auth_method = auth_method->next) {
- TALLOC_FREE(auth_method->private_data);
- }
- talloc_destroy(*auth_context);
- *auth_context = NULL;
+ /* Free private data of context's authentication methods */
+ for (am = ctx->auth_method_list; am; am = am->next) {
+ TALLOC_FREE(am->private_data);
}
+
+ return 0;
}
/***************************************************************************
Make a auth_info struct
***************************************************************************/
-static NTSTATUS make_auth_context(struct auth_context **auth_context)
+static NTSTATUS make_auth_context(struct auth_context **auth_context)
{
- *auth_context = TALLOC_ZERO_P(talloc_autofree_context(),
- struct auth_context);
- if (!*auth_context) {
+ struct auth_context *ctx;
+
+ ctx = talloc_zero(talloc_autofree_context(), struct auth_context);
+ if (!ctx) {
DEBUG(0,("make_auth_context: talloc failed!\n"));
return NT_STATUS_NO_MEMORY;
}
- (*auth_context)->check_ntlm_password = check_ntlm_password;
- (*auth_context)->get_ntlm_challenge = get_ntlm_challenge;
- (*auth_context)->free = free_auth_context;
+ ctx->check_ntlm_password = check_ntlm_password;
+ ctx->get_ntlm_challenge = get_ntlm_challenge;
+
+ talloc_set_destructor((TALLOC_CTX *)ctx, auth_context_destructor);
+ *auth_context = ctx;
return NT_STATUS_OK;
}
nt_status = plaintext_auth_context->check_ntlm_password(plaintext_auth_context,
user_info, server_info);
- (plaintext_auth_context->free)(&plaintext_auth_context);
+ TALLOC_FREE(plaintext_auth_context);
free_user_info(&user_info);
return nt_status;
}
TALLOC_FREE(ans->ntlmssp_state);
}
if (ans->auth_context) {
- ans->auth_context->free(&ans->auth_context);
+ TALLOC_FREE(ans->auth_context);
}
if (ans->server_info) {
TALLOC_FREE(ans->server_info);
const struct auth_usersupplied_info *user_info,
struct auth_serversupplied_info **server_info);
NTSTATUS (*nt_status_squash)(NTSTATUS nt_status);
- void (*free)(struct auth_context **auth_context);
};
typedef struct auth_methods
user_info, &server_info);
}
- (auth_context->free)(&auth_context);
+ TALLOC_FREE(auth_context);
free_user_info(&user_info);
DEBUG(5,("%s: check_password returned status %s\n",
if (sconn->smb1.negprot.auth_context) {
DEBUG(3, ("get challenge: is this a secondary negprot? "
"sconn->negprot.auth_context is non-NULL!\n"));
- sconn->smb1.negprot.auth_context->free(
- &sconn->smb1.negprot.auth_context);
+ TALLOC_FREE(sconn->smb1.negprot.auth_context);
}
DEBUG(10, ("get challenge: creating negprot_global_auth_context\n"));
change_to_root_user();
if (sconn && sconn->smb1.negprot.auth_context) {
- struct auth_context *a = sconn->smb1.negprot.auth_context;
- a->free(&sconn->smb1.negprot.auth_context);
+ TALLOC_FREE(sconn->smb1.negprot.auth_context);
}
if (lp_log_writeable_files_on_exit()) {
}
if (!make_user_info_guest(&user_info)) {
- (auth_context->free)(&auth_context);
+ TALLOC_FREE(auth_context);
return NT_STATUS_NO_MEMORY;
}
nt_status = auth_context->check_ntlm_password(auth_context,
user_info,
server_info);
- (auth_context->free)(&auth_context);
+ TALLOC_FREE(auth_context);
free_user_info(&user_info);
return nt_status;
}
user_info,
&server_info);
- (plaintext_auth_context->free)(
- &plaintext_auth_context);
+ TALLOC_FREE(plaintext_auth_context);
}
}
}