X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/9e5d6b5595f1b8a37fab6eaaa7b8f133e7ac3ff5..dcdf4e3e2e614d612f7d4d884c856c7b67caf5e3:/src/src/dkim.c diff --git a/src/src/dkim.c b/src/src/dkim.c index 0ac1aeccf..e303776c2 100644 --- a/src/src/dkim.c +++ b/src/src/dkim.c @@ -1,10 +1,10 @@ -/* $Cambridge: exim/src/src/dkim.c,v 1.5 2009/10/15 08:06:23 tom Exp $ */ +/* $Cambridge: exim/src/src/dkim.c,v 1.11 2009/12/15 08:23:15 tom Exp $ */ /************************************************* * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) University of Cambridge 2009 */ +/* Copyright (c) University of Cambridge, 1995 - 2007 */ /* See the file NOTICE for conditions of use and distribution. */ /* Code for DKIM support. Other DKIM relevant code is in @@ -19,7 +19,6 @@ pdkim_ctx *dkim_verify_ctx = NULL; pdkim_signature *dkim_signatures = NULL; pdkim_signature *dkim_cur_sig = NULL; -uschar *dkim_cur_signer = NULL; int dkim_exim_query_dns_txt(char *name, char *answer) { dns_answer dnsa; @@ -202,10 +201,12 @@ void dkim_exim_verify_finish(void) { sig = sig->next; } - /* Chop the last colon from the domain list */ - if ((dkim_signers != NULL) && - (Ustrlen(dkim_signers) > 0)) - dkim_signers[Ustrlen(dkim_signers)-1] = '\0'; + /* NULL-terminate and chop the last colon from the domain list */ + if (dkim_signers != NULL) { + dkim_signers[dkim_signers_ptr] = '\0'; + if (Ustrlen(dkim_signers) > 0) + dkim_signers[Ustrlen(dkim_signers)-1] = '\0'; + } } @@ -390,6 +391,7 @@ uschar *dkim_exim_sign(int dkim_fd, uschar *rc = NULL; pdkim_signature *signature; int pdkim_canon; + int pdkim_rc; int sread; char buf[4096]; int save_errno = 0; @@ -429,7 +431,7 @@ uschar *dkim_exim_sign(int dkim_fd, if (Ustrcmp(dkim_canon, "relaxed") == 0) pdkim_canon = PDKIM_CANON_RELAXED; else if (Ustrcmp(dkim_canon, "simple") == 0) - pdkim_canon = PDKIM_CANON_RELAXED; + pdkim_canon = PDKIM_CANON_SIMPLE; else { log_write(0, LOG_MAIN, "DKIM: unknown canonicalization method '%s', defaulting to 'relaxed'.\n",dkim_canon); pdkim_canon = PDKIM_CANON_RELAXED; @@ -510,8 +512,11 @@ uschar *dkim_exim_sign(int dkim_fd, goto CLEANUP; } - if (pdkim_feed_finish(ctx,&signature) != PDKIM_OK) + pdkim_rc = pdkim_feed_finish(ctx,&signature); + if (pdkim_rc != PDKIM_OK) { + log_write(0, LOG_MAIN|LOG_PANIC, "DKIM: signing failed (RC %d)", pdkim_rc); goto CLEANUP; + } rc = store_get(strlen(signature->signature_header)+3); Ustrcpy(rc,US signature->signature_header); @@ -524,6 +529,6 @@ uschar *dkim_exim_sign(int dkim_fd, store_pool = old_pool; errno = save_errno; return rc; -}; +} #endif