mirror of
https://github.com/mailscope/kumomta.git
synced 2026-10-28 17:26:14 +00:00
103 lines
3.0 KiB
Rust
103 lines
3.0 KiB
Rust
/// DKIM error status
|
|
pub enum Status {
|
|
Permfail,
|
|
Tempfail,
|
|
}
|
|
|
|
quick_error! {
|
|
#[derive(Debug, PartialEq, Clone)]
|
|
/// DKIM errors
|
|
pub enum DKIMError {
|
|
UnsupportedHashAlgorithm(value: String) {
|
|
display("unsupported hash algorithm: {}", value)
|
|
}
|
|
UnsupportedCanonicalizationType(value: String) {
|
|
display("unsupported canonicalization: {}", value)
|
|
}
|
|
SignatureSyntaxError(err: String) {
|
|
display("signature syntax error: {}", err)
|
|
}
|
|
SignatureMissingRequiredTag(name: &'static str) {
|
|
display("signature missing required tag ({})", name)
|
|
}
|
|
IncompatibleVersion {
|
|
display("incompatible version")
|
|
}
|
|
DomainMismatch {
|
|
display("domain mismatch")
|
|
}
|
|
FromFieldNotSigned {
|
|
display("From field not signed")
|
|
}
|
|
SignatureExpired {
|
|
display("signature expired")
|
|
}
|
|
UnacceptableSignatureHeader {
|
|
display("unacceptable signature header")
|
|
}
|
|
UnsupportedQueryMethod {
|
|
display("unsupported query method")
|
|
}
|
|
KeyUnavailable(err: String) {
|
|
display("key unavailable: {}", err)
|
|
}
|
|
UnknownInternalError(err: String) {
|
|
display("internal error: {}", err)
|
|
}
|
|
NoKeyForSignature {
|
|
display("no key for signature")
|
|
}
|
|
KeySyntaxError {
|
|
display("key syntax error")
|
|
}
|
|
KeyIncompatibleVersion {
|
|
display("key incompatible version")
|
|
}
|
|
InappropriateKeyAlgorithm {
|
|
display("inappropriate key algorithm")
|
|
}
|
|
SignatureDidNotVerify {
|
|
display("signature did not verify")
|
|
}
|
|
BodyHashDidNotVerify {
|
|
display("body hash did not verify")
|
|
}
|
|
MalformedBody {
|
|
display("malformed email body")
|
|
}
|
|
FailedToSign(err: String) {
|
|
display("failed sign: {}", err)
|
|
}
|
|
BuilderError(err: &'static str) {
|
|
display("failed to build object: {}", err)
|
|
}
|
|
}
|
|
}
|
|
|
|
impl DKIMError {
|
|
pub fn status(self) -> Status {
|
|
use DKIMError::*;
|
|
match self {
|
|
SignatureSyntaxError(_)
|
|
| SignatureMissingRequiredTag(_)
|
|
| IncompatibleVersion
|
|
| DomainMismatch
|
|
| FromFieldNotSigned
|
|
| SignatureExpired
|
|
| UnacceptableSignatureHeader
|
|
| UnsupportedQueryMethod
|
|
| NoKeyForSignature
|
|
| KeySyntaxError
|
|
| KeyIncompatibleVersion
|
|
| InappropriateKeyAlgorithm
|
|
| SignatureDidNotVerify
|
|
| BodyHashDidNotVerify
|
|
| MalformedBody
|
|
| UnsupportedCanonicalizationType(_)
|
|
| UnsupportedHashAlgorithm(_) => Status::Permfail,
|
|
KeyUnavailable(_) | UnknownInternalError(_) => Status::Tempfail,
|
|
BuilderError(_) | FailedToSign(_) => unreachable!(),
|
|
}
|
|
}
|
|
}
|