summaryrefslogtreecommitdiff
path: root/sshconnect2.c
diff options
context:
space:
mode:
authorDamien Miller <djm@mindrot.org>2003-05-14 19:23:56 +1000
committerDamien Miller <djm@mindrot.org>2003-05-14 19:23:56 +1000
commit4d995195354696ae0ab6dea7dfa3367fc144ce89 (patch)
tree40f9d059cad3709c748f2923b62c2f08f1574fe9 /sshconnect2.c
parent9d507dac1f78d87f2808ab247a44cd3860146375 (diff)
downloadopenssh-git-4d995195354696ae0ab6dea7dfa3367fc144ce89.tar.gz
- (djm) Avoid KrbV leak for MIT Kerberos
Diffstat (limited to 'sshconnect2.c')
-rw-r--r--sshconnect2.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/sshconnect2.c b/sshconnect2.c
index f91f5b27..36d592b4 100644
--- a/sshconnect2.c
+++ b/sshconnect2.c
@@ -1130,12 +1130,10 @@ userauth_hostbased(Authctxt *authctxt)
#if KRB5
static int
-ssh_krb5_helper(krb5_data *ap)
+ssh_krb5_helper(krb5_data *ap, krb5_context *context)
{
krb5_context xcontext = NULL; /* XXX share with ssh1 */
krb5_auth_context xauth_context = NULL;
-
- krb5_context *context;
krb5_auth_context *auth_context;
krb5_error_code problem;
const char *tkfile;
@@ -1191,8 +1189,6 @@ ssh_krb5_helper(krb5_data *ap)
krb5_cc_close(*context, ccache);
if (*auth_context)
krb5_auth_con_free(*context, *auth_context);
- if (*context)
- krb5_free_context(*context);
return (ret);
}
@@ -1200,9 +1196,11 @@ int
userauth_kerberos(Authctxt *authctxt)
{
krb5_data ap;
+ krb5_context *context;
+ int ret = 0;
- if (ssh_krb5_helper(&ap) == 0)
- return (0);
+ if (ssh_krb5_helper(&ap, context) == 0)
+ goto out;
packet_start(SSH2_MSG_USERAUTH_REQUEST);
packet_put_cstring(authctxt->server_user);
@@ -1214,10 +1212,14 @@ userauth_kerberos(Authctxt *authctxt)
#ifdef HEIMDAL
krb5_data_free(&ap);
#else
-# warning "XXX - leaks ap data on MIT kerberos"
+ krb5_free_data_contents(*context, &ap);
#endif
+ ret = 1;
- return (1);
+out:
+ if (*context)
+ krb5_free_context(*context);
+ return ret;
}
#endif