Improve log output when DKIM signing operation fails.
[exim.git] / src / src / dkim.c
index 0ac1aeccfd1fa4f6927beda572921511f751a0c8..e303776c29a1199272b2b1317439f9ad495a6f26 100644 (file)
@@ -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