Browse Source

[Fix] Restore simple dkim canonicalisation mode

tags/2.7
Vsevolod Stakhov 3 years ago
parent
commit
7835722102
1 changed files with 29 additions and 11 deletions
  1. 29
    11
      src/libserver/dkim.c

+ 29
- 11
src/libserver/dkim.c View File

@@ -1768,8 +1768,8 @@ rspamd_dkim_relaxed_body_step (struct rspamd_dkim_common_ctx *ctx, EVP_MD_CTX *c
EVP_DigestUpdate (ck, buf, cklen);
ctx->body_canonicalised += cklen;
msg_debug_dkim ("relaxed update signature with body buffer "
"(%z size, %z -> %z remain); %*s",
cklen, *remain, octets_remain, (int)cklen, buf);
"(%z size, %z -> %z remain)",
cklen, *remain, octets_remain);
*remain = octets_remain;

}
@@ -1785,44 +1785,62 @@ rspamd_dkim_simple_body_step (struct rspamd_dkim_common_ctx *ctx,
const gchar *h;
static gchar buf[BUFSIZ];
gchar *t;
guint len, inlen, added = 0;
guint len, inlen;
gssize octets_remain;

len = size;
inlen = sizeof (buf) - 1;
h = *start;
t = &buf[0];
octets_remain = *remain;

while (len && inlen) {
while (len > 0 && inlen > 0 && (octets_remain != 0)) {
if (*h == '\r' || *h == '\n') {
*t++ = '\r';
*t++ = '\n';

if (len > 1 && (*h == '\r' && h[1] == '\n')) {
h += 2;
len -= 2;

if (octets_remain >= 2) {
octets_remain -= 2; /* Input has just \n or \r so we actually add more octets */
}
else {
octets_remain --;
}
}
else {
h ++;
len --;
added ++;

if (octets_remain >= 2) {
octets_remain -= 2; /* Input has just \n or \r so we actually add more octets */
}
else {
octets_remain --;
}
}
break;
}

*t++ = *h++;
octets_remain --;
inlen--;
len--;
}

*start = h;

if (*remain != 0) {
gsize cklen = MIN(t - buf, *remain + added);
if (t - buf > 0) {
gsize cklen = t - buf;

EVP_DigestUpdate (ck, buf, cklen);
ctx->body_canonicalised += cklen;
*remain = *remain - (cklen - added);
msg_debug_dkim ("update signature with body buffer "
"(%z size, %z remain, %ud added)",
cklen, *remain, added);
msg_debug_dkim ("simple update signature with body buffer "
"(%z size, %z -> %z remain)",
cklen, *remain, octets_remain);
*remain = octets_remain;
}

return (len != 0);

Loading…
Cancel
Save