Before importing a certificate, free any previous one. Bug 1648
[exim.git] / src / src / deliver.c
index 40e13ee24f995b0e634900a2d11a47184d51cf27..543a618eb842b09d8df9a69ec412db9e572778b8 100644 (file)
@@ -3135,15 +3135,17 @@ while (!done)
       break;
 
       case '2':
-      addr->peercert = NULL;
       if (*ptr)
        (void) tls_import_cert(ptr, &addr->peercert);
+      else
+       addr->peercert = NULL;
       break;
 
       case '3':
-      addr->ourcert = NULL;
       if (*ptr)
        (void) tls_import_cert(ptr, &addr->ourcert);
+      else
+       addr->ourcert = NULL;
       break;
 
 # ifndef DISABLE_OCSP
@@ -4815,15 +4817,12 @@ print_address_error(address_item *addr, FILE *f, uschar *t)
 int count = Ustrlen(t);
 uschar *s = testflag(addr, af_pass_message)? addr->message : NULL;
 
-if (s == NULL)
-  {
-  if (addr->user_message != NULL) s = addr->user_message; else return;
-  }
+if (!s && !(s = addr->user_message))
+  return;
 
 fprintf(f, "\n    %s", t);
 
-while (*s != 0)
-  {
+while (*s)
   if (*s == '\\' && s[1] == 'n')
     {
     fprintf(f, "\n    ");
@@ -4840,7 +4839,6 @@ while (*s != 0)
       count = 0;
       }
     }
-  }
 }
 
 
@@ -4866,7 +4864,6 @@ Returns:       nothing
 static void
 print_dsn_diagnostic_code(const address_item *addr, FILE *f)
 {
-
 uschar *s = testflag(addr, af_pass_message) ? addr->message : NULL;
 
 /* af_pass_message and addr->message set ? print remote host answer */
@@ -4881,17 +4878,8 @@ if (s)
   s += 2;  /* skip ": " */
   fprintf(f, "Diagnostic-Code: smtp; ");
   }
-/* user_message set? use it instead */
-else if ((s = addr->user_message))
-  {
-  DEBUG(D_deliver)
-    debug_printf("DSN Diagnostic-Code: addr->user_message = %s\n", s);
-  /* local errors like timeout get 426 */
-  fprintf(f, "Diagnostic-Code: smtp; 426 ");
-  }
 /* no message available. do nothing */
-else
-  return;
+else return;
 
 while (*s)
   if (*s == '\\' && s[1] == 'n')