Copyright year updates (things touched in 2016)
[exim.git] / src / src / transport.c
index a6ad3ed345ebb0a458364ac119a228e21b2e9321..8ac6f30a095303578d4a359878cdd5b7f4b0cf1e 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) University of Cambridge 1995 - 2015 */
+/* Copyright (c) University of Cambridge 1995 - 2016 */
 /* See the file NOTICE for conditions of use and distribution. */
 
 /* General functions concerned with transportation, and generic options for all
@@ -66,7 +66,7 @@ optionlist optionlist_transports[] = {
                  (void *)offsetof(transport_instance, driver_name) },
   { "envelope_to_add",   opt_bool|opt_public,
                  (void *)(offsetof(transport_instance, envelope_to_add)) },
-#ifdef EXPERIMENTAL_EVENT
+#ifndef DISABLE_EVENT
   { "event_action",     opt_stringptr | opt_public,
                  (void *)offsetof(transport_instance, event_action) },
 #endif
@@ -84,6 +84,8 @@ optionlist optionlist_transports[] = {
                  (void *)offsetof(transport_instance, home_dir) },
   { "initgroups",       opt_bool|opt_public,
                  (void *)offsetof(transport_instance, initgroups) },
+  { "max_parallel",     opt_stringptr|opt_public,
+                 (void *)offsetof(transport_instance, max_parallel) },
   { "message_size_limit", opt_stringptr|opt_public,
                  (void *)offsetof(transport_instance, message_size_limit) },
   { "rcpt_include_affixes", opt_bool|opt_public,
@@ -653,7 +655,7 @@ for (h = header_list; h != NULL; h = h->next) if (h->type != htype_old)
            errno = ERRNO_CHHEADER_FAIL;
            return FALSE;
            }
-       len = Ustrlen(s);
+       len = s ? Ustrlen(s) : 0;
        if (strncmpic(h->text, s, len) != 0) continue;
        ss = h->text + len;
        while (*ss == ' ' || *ss == '\t') ss++;
@@ -931,7 +933,8 @@ if ((options & topt_no_body) == 0)
   {
   nl_check_length = abs(nl_check_length);
   nl_partial_match = 0;
-  lseek(deliver_datafile, SPOOL_DATA_START_OFFSET, SEEK_SET);
+  if (lseek(deliver_datafile, SPOOL_DATA_START_OFFSET, SEEK_SET) < 0)
+    return FALSE;
   while ((len = read(deliver_datafile, deliver_in_buffer,
            DELIVER_IN_BUFFER_SIZE)) > 0)
     {
@@ -1066,7 +1069,7 @@ if (dkim_private_key && dkim_domain && dkim_selector)
       uschar *dkim_strict_result = expand_string(dkim_strict);
       if (dkim_strict_result)
        if ( (strcmpic(dkim_strict,US"1") == 0) ||
-            (strcmpic(dkim_strict,US"true") == 0) ) 
+            (strcmpic(dkim_strict,US"true") == 0) )
          {
          /* Set errno to something halfway meaningful */
          save_errno = EACCES;
@@ -1203,7 +1206,7 @@ transport_write_message(address_item *addr, int fd, int options,
 BOOL use_crlf;
 BOOL last_filter_was_NL = TRUE;
 int rc, len, yield, fd_read, fd_write, save_errno;
-int pfd[2];
+int pfd[2] = {-1, -1};
 pid_t filter_pid, write_pid;
 
 transport_filter_timed_out = FALSE;
@@ -1211,7 +1214,10 @@ transport_filter_timed_out = FALSE;
 /* If there is no filter command set up, call the internal function that does
 the actual work, passing it the incoming fd, and return its result. */
 
-if (transport_filter_argv == NULL)
+if (  !transport_filter_argv
+   || !*transport_filter_argv
+   || !**transport_filter_argv
+   )
   return internal_transport_write_message(addr, fd, options, size_limit,
     add_headers, remove_headers, check_string, escape_string,
     rewrite_rules, rewrite_existflags);
@@ -1853,7 +1859,7 @@ test but the code should work */
 
   if (!bContinuation)
     {
-    Ustrcpy (new_message_id, message_id); 
+    Ustrcpy (new_message_id, message_id);
     dbfn_close(dbm_file);
     return FALSE;
     }