diff options
author | Damien Miller <djm@mindrot.org> | 2003-05-14 19:23:56 +1000 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2003-05-14 19:23:56 +1000 |
commit | 4d995195354696ae0ab6dea7dfa3367fc144ce89 (patch) | |
tree | 40f9d059cad3709c748f2923b62c2f08f1574fe9 /sshconnect2.c | |
parent | 9d507dac1f78d87f2808ab247a44cd3860146375 (diff) | |
download | openssh-git-4d995195354696ae0ab6dea7dfa3367fc144ce89.tar.gz |
- (djm) Avoid KrbV leak for MIT Kerberos
Diffstat (limited to 'sshconnect2.c')
-rw-r--r-- | sshconnect2.c | 20 |
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 |