diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/krb5/krb/copy_athctr.c | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/src/lib/krb5/krb/copy_athctr.c b/src/lib/krb5/krb/copy_athctr.c index 5f30ac4af4..5756a991ca 100644 --- a/src/lib/krb5/krb/copy_athctr.c +++ b/src/lib/krb5/krb/copy_athctr.c @@ -37,26 +37,29 @@ krb5_authenticator **authto; return retval; } - if (retval = krb5_copy_checksum(authfrom->checksum, &tempto->checksum)) { - krb5_free_principal(tempto->client); - xfree(tempto); - return retval; + if (authfrom->checksum && + (retval = krb5_copy_checksum(authfrom->checksum, &tempto->checksum))) { + krb5_free_principal(tempto->client); + xfree(tempto); + return retval; } - if (!(tempto->subkey = - (krb5_keyblock *)malloc(sizeof(*tempto->subkey)))) { - krb5_free_checksum(tempto->checksum); - krb5_free_principal(tempto->client); - xfree(tempto); - return ENOMEM; - } - if (retval = krb5_copy_keyblock(authfrom->subkey, - tempto->subkey)) { - xfree(tempto->subkey); - krb5_free_checksum(tempto->checksum); - krb5_free_principal(tempto->client); - xfree(tempto); - return retval; + if (authfrom->subkey) { + if (!(tempto->subkey = + (krb5_keyblock *)malloc(sizeof(*tempto->subkey)))) { + krb5_free_checksum(tempto->checksum); + krb5_free_principal(tempto->client); + xfree(tempto); + return ENOMEM; + } + if (retval = krb5_copy_keyblock(authfrom->subkey, + tempto->subkey)) { + xfree(tempto->subkey); + krb5_free_checksum(tempto->checksum); + krb5_free_principal(tempto->client); + xfree(tempto); + return retval; + } } *authto = tempto; |
