const char *principal_string;
char *broken_principal_string;
krb5_principal client_principal;
+ krb5_principal broken_principal;
const char *authtime_string;
time_t authtime;
TALLOC_CTX *mem_ctx = tctx;
}
/* Break the client principal */
- krb5_free_principal(smb_krb5_context->krb5_context, client_principal);
-
broken_principal_string = talloc_strdup(mem_ctx, principal_string);
broken_principal_string[0]++;
ret = krb5_parse_name(smb_krb5_context->krb5_context,
- broken_principal_string, &client_principal);
+ broken_principal_string, &broken_principal);
if (ret) {
krb5_free_keyblock_contents(smb_krb5_context->krb5_context,
krbtgt_keyblock_p);
krb5_free_keyblock_contents(smb_krb5_context->krb5_context,
&server_keyblock);
+ krb5_free_principal(smb_krb5_context->krb5_context, client_principal);
torture_fail(tctx, talloc_asprintf(tctx,
"(saved test) parsing of broken client principal failed: %s",
smb_get_krb5_error_message(smb_krb5_context->krb5_context, ret, mem_ctx)));
smb_krb5_context->krb5_context,
krbtgt_keyblock_p,
&server_keyblock,
- client_principal,
+ broken_principal,
authtime, &pac_data);
if (NT_STATUS_IS_OK(nt_status)) {
krb5_free_keyblock_contents(smb_krb5_context->krb5_context,
krbtgt_keyblock_p);
krb5_free_keyblock_contents(smb_krb5_context->krb5_context,
&server_keyblock);
+ krb5_free_principal(smb_krb5_context->krb5_context, client_principal);
+ krb5_free_principal(smb_krb5_context->krb5_context, broken_principal);
torture_fail(tctx, "(saved test) PAC decoding DID NOT fail on modified principal");
}
- /* Finally... Bugger up the signature, and check we fail the checksum */
- tmp_blob.data[tmp_blob.length - 2]++;
+ krb5_free_principal(smb_krb5_context->krb5_context, broken_principal);
+
+ /*
+ * Finally... Bugger up the KDC signature, and check we fail the checksum.
+ *
+ * Corrupt the byte eighth from the end to account for any padding.
+ */
+ torture_assert_int_greater(tctx, tmp_blob.length, 8, "PAC data blob is smaller than expected");
+ tmp_blob.data[tmp_blob.length - 9]++;
nt_status = kerberos_decode_pac(mem_ctx,
tmp_blob,
krbtgt_keyblock_p);
krb5_free_keyblock_contents(smb_krb5_context->krb5_context,
&server_keyblock);
+ krb5_free_principal(smb_krb5_context->krb5_context, client_principal);
torture_fail(tctx, "(saved test) PAC decoding DID NOT fail on broken checksum");
}
krbtgt_keyblock_p);
krb5_free_keyblock_contents(smb_krb5_context->krb5_context,
&server_keyblock);
+ krb5_free_principal(smb_krb5_context->krb5_context, client_principal);
return true;
}