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;