Implement "testing" flag lookup logic
[exim.git] / src / src / dk.c
index 30dfc78be81291556bf5f3a042661c371e69fb9f..4d963f1a8b70ba3dd50112a1314c18bdd66a4de9 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/dk.c,v 1.4 2005/06/24 08:23:21 tom Exp $ */
+/* $Cambridge: exim/src/src/dk.c,v 1.6 2005/06/27 15:11:59 tom Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -138,6 +138,13 @@ void dk_exim_verify_finish(void) {
   /* Flag end-of-message. */
   dk_internal_status = dk_end(dk_context, &dk_flags);
 
+  /* dk_flags now has the selector flags (if there was one).
+     It seems that currently only the "t=" flag is supported
+     in selectors. */
+  if (dk_flags & DK_FLAG_SET)
+    if (dk_flags & DK_FLAG_TESTING)
+      dk_verify_block->testing = TRUE;
+
   /* Grab address/domain information. */
   p = dk_address(dk_context);
   if (p != NULL) {
@@ -165,12 +172,13 @@ void dk_exim_verify_finish(void) {
     }
   }
 
-  /* TODO: This call should be removed with lib version >= 0.67 */
+  /* Now grab the domain-wide DK policy */
   dk_flags = dk_policy(dk_context);
 
-  /* Grab domain policy */
   if (dk_flags & DK_FLAG_SET) {
-    if (dk_flags & DK_FLAG_TESTING)
+    /* Selector "t=" flag has precedence, don't overwrite it if
+       the selector has set it above. */
+    if ((dk_flags & DK_FLAG_TESTING) && !dk_verify_block->testing)
       dk_verify_block->testing = TRUE;
     if (dk_flags & DK_FLAG_SIGNSALL)
       dk_verify_block->signsall = TRUE;
@@ -384,8 +392,8 @@ uschar *dk_exim_sign(int dk_fd,
     /* Looks like a filename, load the private key. */
     memset(big_buffer,0,big_buffer_size);
     privkey_fd = open(CS dk_private_key,O_RDONLY);
-    read(privkey_fd,big_buffer,16383);
-    close(privkey_fd);
+    (void)read(privkey_fd,big_buffer,16383);
+    (void)close(privkey_fd);
     dk_private_key = big_buffer;
   }