diff options
author | Andrew Bartlett <abartlet@samba.org> | 2003-11-23 00:23:26 +0000 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2003-11-23 00:23:26 +0000 |
commit | 8ade0cf1b6eba966fdb3f2544a83c979195cef75 (patch) | |
tree | b072e66ce609decf86950c44a139c5e455191450 | |
parent | 13a6b9833e7fdd5e4624ccf844e0f9932d9597c1 (diff) | |
download | samba-8ade0cf1b6eba966fdb3f2544a83c979195cef75.tar.gz samba-8ade0cf1b6eba966fdb3f2544a83c979195cef75.tar.bz2 samba-8ade0cf1b6eba966fdb3f2544a83c979195cef75.zip |
(Merge from 3.0)
Patch by emil@disksites.com <Emil Rasamat> to ensure we always always
free() each auth method. (We had relied on the use of talloc() only,
despite providing the free() callback)
Andrew Bartlett
(This used to be commit 58c4963a8389dff4d925548217fabed1c9932abd)
-rw-r--r-- | source3/auth/auth.c | 15 | ||||
-rw-r--r-- | source3/auth/auth_server.c | 2 |
2 files changed, 15 insertions, 2 deletions
diff --git a/source3/auth/auth.c b/source3/auth/auth.c index 20dccc6592..1b49699fbc 100644 --- a/source3/auth/auth.c +++ b/source3/auth/auth.c @@ -321,9 +321,20 @@ static NTSTATUS check_ntlm_password(const struct auth_context *auth_context, static void free_auth_context(struct auth_context **auth_context) { - if (*auth_context != NULL) + auth_methods *auth_method; + + 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) { + if (auth_method->free_private_data) { + auth_method->free_private_data (&auth_method->private_data); + auth_method->private_data = NULL; + } + } + talloc_destroy((*auth_context)->mem_ctx); - *auth_context = NULL; + *auth_context = NULL; + } } /*************************************************************************** diff --git a/source3/auth/auth_server.c b/source3/auth/auth_server.c index b57293943c..41adc21784 100644 --- a/source3/auth/auth_server.c +++ b/source3/auth/auth_server.c @@ -143,8 +143,10 @@ static void free_server_private_data(void **private_data_pointer) { struct cli_state **cli = (struct cli_state **)private_data_pointer; if (*cli && (*cli)->initialised) { + DEBUG(10, ("Shutting down smbserver connection\n")); cli_shutdown(*cli); } + *private_data_pointer = NULL; } /**************************************************************************** |