summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib/krb5/krb/copy_athctr.c39
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;