This is an automated email from the ASF dual-hosted git repository.
rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-jdkim.git
commit 8dd50bb8907549ce0cf43c5b4d216d14cab83ff2
Author: Emerson Pinter <[email protected]>
AuthorDate: Thu Mar 20 13:47:57 2025 -0300
Store SignatureRecord in FailException
With this change is possible to use other fields like selector to generate
a results header.
---
.../main/java/org/apache/james/jdkim/DKIMVerifier.java | 18 +++++++++---------
.../apache/james/jdkim/exceptions/FailException.java | 17 +++++++++++++----
.../james/jdkim/exceptions/PermFailException.java | 11 +++++++++--
3 files changed, 31 insertions(+), 15 deletions(-)
diff --git a/main/src/main/java/org/apache/james/jdkim/DKIMVerifier.java b/main/src/main/java/org/apache/james/jdkim/DKIMVerifier.java
index 546c01c..2648a5e 100644
--- a/main/src/main/java/org/apache/james/jdkim/DKIMVerifier.java
+++ b/main/src/main/java/org/apache/james/jdkim/DKIMVerifier.java
@@ -119,27 +119,27 @@ public class DKIMVerifier extends DKIMCommon {
.matches()) {
throw new PermFailException("inapplicable key identity local="
+ sign.getIdentityLocalPart() + " Pattern: "
- + pkr.getGranularityPattern().pattern(), sign.getIdentity().toString());
+ + pkr.getGranularityPattern().pattern(), sign);
}
if (!pkr.isHashMethodSupported(sign.getHashMethod())) {
throw new PermFailException("inappropriate hash for a="
- + sign.getHashKeyType() + "/" + sign.getHashMethod(), sign.getIdentity().toString());
+ + sign.getHashKeyType() + "/" + sign.getHashMethod(), sign);
}
if (!pkr.isKeyTypeSupported(sign.getHashKeyType())) {
throw new PermFailException("inappropriate key type for a="
- + sign.getHashKeyType() + "/" + sign.getHashMethod(), sign.getIdentity().toString());
+ + sign.getHashKeyType() + "/" + sign.getHashMethod(), sign);
}
if (pkr.isDenySubdomains()) {
if (!sign.getIdentity().toString().toLowerCase().endsWith(
("@" + sign.getDToken()).toLowerCase())) {
throw new PermFailException(
- "AUID in subdomain of SDID is not allowed by the public key record.", sign.getIdentity().toString());
+ "AUID in subdomain of SDID is not allowed by the public key record.", sign);
}
}
} catch (IllegalStateException e) {
- throw new PermFailException("Invalid public key: " + e.getMessage(), sign.getIdentity().toString());
+ throw new PermFailException("Invalid public key: " + e.getMessage(), sign);
}
}
@@ -179,16 +179,16 @@ public class DKIMVerifier extends DKIMCommon {
}
if (key == null) {
if (lastTempFailure != null) {
- if (sign != null) lastTempFailure.setRelatedRecordIdentity(sign.getIdentity().toString());
+ if (sign != null) lastTempFailure.setRelatedRecord(sign);
throw lastTempFailure;
} else if (lastPermFailure != null) {
- if (sign != null) lastPermFailure.setRelatedRecordIdentity(sign.getIdentity().toString());
+ if (sign != null) lastPermFailure.setRelatedRecord(sign);
throw lastPermFailure;
} // this is unexpected because the publicKeySelector always returns
// null or exception
else {
throw new PermFailException(
- "no key for signature [unexpected condition]", sign.getIdentity().toString());
+ "no key for signature [unexpected condition]", sign);
}
}
return key;
@@ -482,7 +482,7 @@ public class DKIMVerifier extends DKIMCommon {
signatureCheck(h, sign, headers, signature);
if (!signature.verify(decoded))
- throw new PermFailException("Header signature does not verify");
+ throw new PermFailException("Header signature does not verify", sign);
} catch (InvalidKeyException e) {
throw new PermFailException(e.getMessage(), e);
} catch (NoSuchAlgorithmException e) {
diff --git a/main/src/main/java/org/apache/james/jdkim/exceptions/FailException.java b/main/src/main/java/org/apache/james/jdkim/exceptions/FailException.java
index 17cc7d0..cf33fe0 100644
--- a/main/src/main/java/org/apache/james/jdkim/exceptions/FailException.java
+++ b/main/src/main/java/org/apache/james/jdkim/exceptions/FailException.java
@@ -19,11 +19,13 @@
package org.apache.james.jdkim.exceptions;
+import org.apache.james.jdkim.api.SignatureRecord;
+
public class FailException extends Exception {
private static final long serialVersionUID = 1584103235607992818L;
- private String relatedRecordIdentity = null;
+ private SignatureRecord relatedRecord = null;
public FailException(String error) {
super(error);
@@ -34,10 +36,17 @@ public class FailException extends Exception {
}
public String getRelatedRecordIdentity() {
- return relatedRecordIdentity;
+ if(relatedRecord != null) {
+ return relatedRecord.getIdentity().toString();
+ }
+ return null;
+ }
+
+ public SignatureRecord getRelatedRecord() {
+ return relatedRecord;
}
- public void setRelatedRecordIdentity(String relatedRecordIdentity) {
- this.relatedRecordIdentity = relatedRecordIdentity;
+ public void setRelatedRecord(SignatureRecord relatedRecord) {
+ this.relatedRecord = relatedRecord;
}
}
diff --git a/main/src/main/java/org/apache/james/jdkim/exceptions/PermFailException.java b/main/src/main/java/org/apache/james/jdkim/exceptions/PermFailException.java
index 2673e86..2fe72ff 100644
--- a/main/src/main/java/org/apache/james/jdkim/exceptions/PermFailException.java
+++ b/main/src/main/java/org/apache/james/jdkim/exceptions/PermFailException.java
@@ -20,6 +20,8 @@
package org.apache.james.jdkim.exceptions;
+import org.apache.james.jdkim.api.SignatureRecord;
+
public class PermFailException extends FailException {
private static final long serialVersionUID = 1304736020453821093L;
@@ -32,9 +34,14 @@ public class PermFailException extends FailException {
super(string, e);
}
- public PermFailException(String string, String signatureIdentity) {
+ public PermFailException(String string, SignatureRecord signatureRecord, Exception e) {
+ super(string, e);
+ setRelatedRecord(signatureRecord);
+ }
+
+ public PermFailException(String string, SignatureRecord signatureRecord) {
super(string);
- setRelatedRecordIdentity(signatureIdentity);
+ setRelatedRecord(signatureRecord);
}
}
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.