commit - 02ba25e35f334db5515fa4c115f106d5116fdf0c
commit + 2c88ced1adfb34a5ba4231b0a4f890234c9f3991
blob - 13e61d3659c3073073f0e2ff9aaef932b5feadcf
blob + 7f577bbab83315027f318f2574d1e6d74f1444a9
--- main.c
+++ main.c
now = time(NULL);
if (addtime && !dkim_signature_printf(message, "t=%lld; ",
(long long)now))
- return;
+ goto fail;
if (addexpire != 0 && !dkim_signature_printf(message, "x=%lld; ",
now + addexpire < now ? INT64_MAX : now + addexpire))
- return;
+ goto fail;
if (canonbody == CANON_SIMPLE && !message->has_body) {
if (EVP_DigestUpdate(message->dctx, "\r\n", 2) <= 0) {
dkim_errx(message, "Can't update hash context");
- return;
+ goto fail;
}
}
if (EVP_DigestFinal_ex(message->dctx, bdigest, &digestsz) == 0) {
dkim_errx(message, "Can't finalize hash context");
- return;
+ goto fail;
}
EVP_EncodeBlock(digest, bdigest, digestsz);
if (!dkim_signature_printf(message, "bh=%s; h=", digest))
- return;
+ goto fail;
/* Reverse order for ease of use of RFC6367 section 5.4.2 */
for (i = 0; message->headers[i] != NULL; i++)
continue;
pkey) != 1) {
dkim_errx(message, "Failed to initialize signature "
"context");
- return;
+ goto fail;
}
} else {
if (EVP_DigestInit_ex(message->dctx, hash_md, NULL) != 1) {
dkim_errx(message, "Failed to initialize hash context");
- return;
+ goto fail;
}
}
for (i--; i >= 0; i--) {
2) <= 0) {
dkim_errx(message, "Failed to update signature "
"context");
- return;
+ goto fail;
}
} else {
if (EVP_DigestUpdate(message->dctx, message->headers[i],
EVP_DigestUpdate(message->dctx, "\r\n", 2) <= 0) {
dkim_errx(message, "Failed to update digest "
"context");
- return;
+ goto fail;
}
}
if ((tsdomain = dkim_domain_select(message, message->headers[i])) != NULL)
if (!dkim_signature_printf(message, "%s%s",
message->headers[i + 1] == NULL ? "" : ":",
message->headers[i]))
- return;
+ goto fail;
}
dkim_signature_printf(message, "; d=%s; b=", sdomain);
if (!dkim_signature_normalize(message))
- return;
+ goto fail;
if ((tmp = strdup(message->signature.signature)) == NULL) {
dkim_err(message, "Can't create DKIM signature");
- return;
+ goto fail;
}
dkim_parse_header(message, tmp, 1);
if (!sephash) {
strlen(tmp)) != 1) {
dkim_errx(message, "Failed to update signature "
"context");
- return;
+ goto fail;
}
} else {
if (EVP_DigestUpdate(message->dctx, tmp, strlen(tmp)) != 1) {
dkim_errx(message, "Failed to update digest context");
- return;
+ goto fail;
}
}
free(tmp);
if (!sephash) {
if (EVP_DigestSignFinal(message->dctx, NULL, &linelen) != 1) {
dkim_errx(message, "Can't finalize signature context");
- return;
+ goto fail;
}
#ifdef HAVE_ED25519
} else {
if (EVP_DigestFinal_ex(message->dctx, bdigest,
&digestsz) != 1) {
dkim_errx(message, "Can't finalize hash context");
- return;
+ goto fail;
}
EVP_MD_CTX_reset(message->dctx);
if (EVP_DigestSignInit(message->dctx, NULL, NULL, NULL,
pkey) != 1) {
dkim_errx(message, "Failed to initialize signature "
"context");
- return;
+ goto fail;
}
if (EVP_DigestSign(message->dctx, NULL, &linelen, bdigest,
digestsz) != 1) {
dkim_errx(message, "Failed to finalize signature");
- return;
+ goto fail;
}
#endif
}
if ((tmp = malloc(linelen)) == NULL) {
dkim_err(message, "Can't allocate space for signature");
- return;
+ goto fail;
}
if (!sephash) {
if (EVP_DigestSignFinal(message->dctx, tmp, &linelen) != 1) {
dkim_errx(message, "Failed to finalize signature");
- return;
+ goto fail;
}
#ifdef HAVE_ED25519
} else {
if (EVP_DigestSign(message->dctx, tmp, &linelen, bdigest,
digestsz) != 1) {
dkim_errx(message, "Failed to finalize signature");
- return;
+ goto fail;
}
#endif
}
if ((b = malloc((((linelen + 2) / 3) * 4) + 1)) == NULL) {
dkim_err(message, "Can't create DKIM signature");
- return;
+ goto fail;
}
EVP_EncodeBlock(b, tmp, linelen);
free(tmp);
osmtpd_filter_dataline(ctx, "%s", tmp);
}
free(tmp);
+ return;
+fail:
+ osmtpd_filter_dataline(ctx, ".");
}
int