Bugzilla #890
[exim.git] / src / src / dkim.c
index 2a53f154f6b09710f40fd4a6f86af6d8a8c5f6b4..3109168a33c44005ae6d44e940ef4aacf4007314 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/dkim.c,v 1.2 2009/06/10 07:34:04 tom Exp $ */
+/* $Cambridge: exim/src/src/dkim.c,v 1.4 2009/10/13 18:32:05 tom Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -235,21 +235,33 @@ uschar *dkim_exim_expand_query(int what) {
 
   switch(what) {
     case DKIM_ALGO:
-      return dkim_cur_sig->algo?
-              (uschar *)(dkim_cur_sig->algo)
-              :dkim_exim_expand_defaults(what);
+      switch(dkim_cur_sig->algo) {
+        case PDKIM_ALGO_RSA_SHA1:
+          return US"rsa-sha1";
+        case PDKIM_ALGO_RSA_SHA256:
+        default:
+          return US"rsa-sha256";
+      }
     case DKIM_BODYLENGTH:
       return (dkim_cur_sig->bodylength >= 0)?
               (uschar *)string_sprintf(OFF_T_FMT,(LONGLONG_T)dkim_cur_sig->bodylength)
               :dkim_exim_expand_defaults(what);
     case DKIM_CANON_BODY:
-      return dkim_cur_sig->canon_body?
-              (uschar *)(dkim_cur_sig->canon_body)
-              :dkim_exim_expand_defaults(what);
+      switch(dkim_cur_sig->canon_body) {
+        case PDKIM_CANON_RELAXED:
+          return US"relaxed";
+        case PDKIM_CANON_SIMPLE:
+        default:
+          return US"simple";
+      }
     case DKIM_CANON_HEADERS:
-      return dkim_cur_sig->canon_headers?
-              (uschar *)(dkim_cur_sig->canon_headers)
-              :dkim_exim_expand_defaults(what);
+      switch(dkim_cur_sig->canon_headers) {
+        case PDKIM_CANON_RELAXED:
+          return US"relaxed";
+        case PDKIM_CANON_SIMPLE:
+        default:
+          return US"simple";
+      }
     case DKIM_COPIEDHEADERS:
       return dkim_cur_sig->copiedheaders?
               (uschar *)(dkim_cur_sig->copiedheaders)
@@ -444,7 +456,13 @@ uschar *dkim_exim_sign(int dkim_fd,
     /* Looks like a filename, load the private key. */
     memset(big_buffer,0,big_buffer_size);
     privkey_fd = open(CS dkim_private_key,O_RDONLY);
-    (void)read(privkey_fd,big_buffer,16383);
+    if (privkey_fd < 0) {
+      log_write(0, LOG_MAIN|LOG_PANIC, "unable to open "
+        "private key file for reading: %s", dkim_private_key);
+      rc = NULL;
+      goto CLEANUP;
+    }
+    (void)read(privkey_fd,big_buffer,(big_buffer_size-2));
     (void)close(privkey_fd);
     dkim_private_key = big_buffer;
   }