More care with time types
authorJeremy Harris <jgh146exb@wizmail.org>
Fri, 6 Jun 2014 14:58:54 +0000 (15:58 +0100)
committerJeremy Harris <jgh146exb@wizmail.org>
Fri, 6 Jun 2014 14:58:54 +0000 (15:58 +0100)
12 files changed:
src/exim_monitor/em_globals.c
src/src/deliver.c
src/src/dmarc.c
src/src/exim_lock.c
src/src/globals.c
src/src/globals.h
src/src/ip.c
src/src/smtp_in.c
src/src/spool_in.c
src/src/spool_out.c
src/src/tod.c
src/src/transports/appendfile.c

index d5205d08f60379d530f6cdc644d09032e4456abd..671bd7f030167a81bd00b42255d5958b85b1a278 100644 (file)
@@ -130,7 +130,7 @@ int     body_zerocount         = 0;
 
 BOOL    deliver_firsttime      = FALSE;
 BOOL    deliver_freeze         = FALSE;
 
 BOOL    deliver_firsttime      = FALSE;
 BOOL    deliver_freeze         = FALSE;
-int     deliver_frozen_at      = 0;
+time_t  deliver_frozen_at      = 0;
 BOOL    deliver_manual_thaw    = FALSE;
 
 #ifndef DISABLE_DKIM
 BOOL    deliver_manual_thaw    = FALSE;
 
 #ifndef DISABLE_DKIM
index c2f769da64058791d71c31a615b717b04d070b5c..32cba9a91b49f543d76ccc3f0ce0e4ff71f19acf 100644 (file)
@@ -863,16 +863,12 @@ if (log_extra_selector & LX_smtp_confirmation &&
 /* Time on queue and actual time taken to deliver */
 
 if ((log_extra_selector & LX_queue_time) != 0)
 /* Time on queue and actual time taken to deliver */
 
 if ((log_extra_selector & LX_queue_time) != 0)
-  {
   s = string_append(s, &size, &ptr, 2, US" QT=",
   s = string_append(s, &size, &ptr, 2, US" QT=",
-    readconf_printtime(time(NULL) - received_time));
-  }
+    readconf_printtime( (int) ((long)time(NULL) - (long)received_time)) );
 
 if ((log_extra_selector & LX_deliver_time) != 0)
 
 if ((log_extra_selector & LX_deliver_time) != 0)
-  {
   s = string_append(s, &size, &ptr, 2, US" DT=",
     readconf_printtime(addr->more_errno));
   s = string_append(s, &size, &ptr, 2, US" DT=",
     readconf_printtime(addr->more_errno));
-  }
 
 /* string_cat() always leaves room for the terminator. Release the
 store we used to build the line after writing it. */
 
 /* string_cat() always leaves room for the terminator. Release the
 store we used to build the line after writing it. */
@@ -6497,7 +6493,8 @@ if (addr_senddsn != NULL)
     DEBUG(D_deliver) debug_printf("sending error message to: %s\n", sender_address);
   
     /* build unique id for MIME boundary */
     DEBUG(D_deliver) debug_printf("sending error message to: %s\n", sender_address);
   
     /* build unique id for MIME boundary */
-    snprintf(boundaryStr, 63, "%l-eximdsn-%d", (long) time(NULL), rand());      
+    snprintf(boundaryStr, sizeof(boundaryStr)-1, TIME_T_FMT "-eximdsn-%d",
+      time(NULL), rand());
     DEBUG(D_deliver) debug_printf("DSN: MIME boundary: %s\n", boundaryStr);
   
     if (errors_reply_to != NULL) fprintf(f,"Reply-To: %s\n", errors_reply_to);
     DEBUG(D_deliver) debug_printf("DSN: MIME boundary: %s\n", boundaryStr);
   
     if (errors_reply_to != NULL) fprintf(f,"Reply-To: %s\n", errors_reply_to);
@@ -7172,7 +7169,7 @@ if (addr_defer == NULL)
 
   if ((log_extra_selector & LX_queue_time_overall) != 0)
     log_write(0, LOG_MAIN, "Completed QT=%s",
 
   if ((log_extra_selector & LX_queue_time_overall) != 0)
     log_write(0, LOG_MAIN, "Completed QT=%s",
-      readconf_printtime(time(NULL) - received_time));
+      readconf_printtime( (int) ((long)time(NULL) - (long)received_time)) );
   else
     log_write(0, LOG_MAIN, "Completed");
 
   else
     log_write(0, LOG_MAIN, "Completed");
 
index ca1c29bbb5bfdaf34cc2092e44c147116620aaaf..bc2ea4c08438594c024c873873684e8e0a4a2459 100644 (file)
@@ -451,7 +451,7 @@ int dmarc_write_history_file()
   /* Generate the contents of the history file */
   history_buffer = string_sprintf("job %s\n", message_id);
   history_buffer = string_sprintf("%sreporter %s\n", history_buffer, primary_hostname);
   /* Generate the contents of the history file */
   history_buffer = string_sprintf("job %s\n", message_id);
   history_buffer = string_sprintf("%sreporter %s\n", history_buffer, primary_hostname);
-  history_buffer = string_sprintf("%sreceived %ld\n", history_buffer, time(NULL));
+  history_buffer = string_sprintf("%sreceived " TIME_T_FMT "\n", history_buffer, time(NULL));
   history_buffer = string_sprintf("%sipaddr %s\n", history_buffer, sender_host_address);
   history_buffer = string_sprintf("%sfrom %s\n", history_buffer, header_from_sender);
   history_buffer = string_sprintf("%smfrom %s\n", history_buffer,
   history_buffer = string_sprintf("%sipaddr %s\n", history_buffer, sender_host_address);
   history_buffer = string_sprintf("%sfrom %s\n", history_buffer, header_from_sender);
   history_buffer = string_sprintf("%smfrom %s\n", history_buffer,
index 0d3475138293aa64f924f801d6f231d7465c65f4..37d9744771217b245aaf386faf3d337524984c08 100644 (file)
@@ -175,7 +175,7 @@ int  fd = -1;
 int  hd = -1;
 int  md = -1;
 int  yield = 0;
 int  hd = -1;
 int  md = -1;
 int  yield = 0;
-int  now = time(NULL);
+time_t now = time(NULL);
 BOOL use_lockfile = FALSE;
 BOOL use_fcntl = FALSE;
 BOOL use_flock = FALSE;
 BOOL use_lockfile = FALSE;
 BOOL use_fcntl = FALSE;
 BOOL use_flock = FALSE;
@@ -300,8 +300,10 @@ if (use_lockfile)
   lockname = malloc(len + 8);
   sprintf(lockname, "%s.lock", filename);
   hitchname = malloc(len + 32 + (int)strlen(primary_hostname));
   lockname = malloc(len + 8);
   sprintf(lockname, "%s.lock", filename);
   hitchname = malloc(len + 32 + (int)strlen(primary_hostname));
+
+  /* Presumably, this must match appendfile.c */
   sprintf(hitchname, "%s.%s.%08x.%08x", lockname, primary_hostname,
   sprintf(hitchname, "%s.%s.%08x.%08x", lockname, primary_hostname,
-    now, (int)getpid());
+    (unsigned int)now, (unsigned int)getpid());
 
   if (verbose)
     printf("exim_lock: lockname =  %s\n           hitchname = %s\n", lockname,
 
   if (verbose)
     printf("exim_lock: lockname =  %s\n           hitchname = %s\n", lockname,
index 761db61812683ca6d9d7eb1fa520d6b5e02d956d..d3f99877c20ee1ff051ca02e926bd9eb0753893f 100644 (file)
@@ -573,7 +573,7 @@ BOOL    deliver_drop_privilege = FALSE;
 BOOL    deliver_firsttime      = FALSE;
 BOOL    deliver_force          = FALSE;
 BOOL    deliver_freeze         = FALSE;
 BOOL    deliver_firsttime      = FALSE;
 BOOL    deliver_force          = FALSE;
 BOOL    deliver_freeze         = FALSE;
-int     deliver_frozen_at      = 0;
+time_t  deliver_frozen_at      = 0;
 uschar *deliver_home           = NULL;
 uschar *deliver_host           = NULL;
 uschar *deliver_host_address   = NULL;
 uschar *deliver_home           = NULL;
 uschar *deliver_host           = NULL;
 uschar *deliver_host_address   = NULL;
index cf9b61eff3d0dc653744b20c3893edebc569d490..2bedcf523c795d0d01f6b4225e65e8853e10abc5 100644 (file)
@@ -323,7 +323,7 @@ extern BOOL    deliver_drop_privilege; /* TRUE for unprivileged delivery */
 extern BOOL    deliver_firsttime;      /* True for first delivery attempt */
 extern BOOL    deliver_force;          /* TRUE if delivery was forced */
 extern BOOL    deliver_freeze;         /* TRUE if delivery is frozen */
 extern BOOL    deliver_firsttime;      /* True for first delivery attempt */
 extern BOOL    deliver_force;          /* TRUE if delivery was forced */
 extern BOOL    deliver_freeze;         /* TRUE if delivery is frozen */
-extern int     deliver_frozen_at;      /* Time of freezing */
+extern time_t  deliver_frozen_at;      /* Time of freezing */
 extern uschar *deliver_home;           /* Home directory for pipes */
 extern uschar *deliver_host;           /* (First) host for routed local deliveries */
                                        /* Remote host for filter */
 extern uschar *deliver_home;           /* Home directory for pipes */
 extern uschar *deliver_host;           /* (First) host for routed local deliveries */
                                        /* Remote host for filter */
index 1d4e368ecce4a7d102ad3311aa8947831ac2eac7..b492b9da1566d0c03dcc8aec11e4356aa458749e 100644 (file)
@@ -403,7 +403,7 @@ ip_recv(int sock, uschar *buffer, int buffsize, int timeout)
 {
 fd_set select_inset;
 struct timeval tv;
 {
 fd_set select_inset;
 struct timeval tv;
-int start_recv = time(NULL);
+time_t start_recv = time(NULL);
 int rc;
 
 /* Wait until the socket is ready */
 int rc;
 
 /* Wait until the socket is ready */
index 4ea6cd404db668e3ebde2185dd21cb6ee226477f..dbaa3280c92bade08ffbdb3eadd303e85286486b 100644 (file)
@@ -1317,7 +1317,8 @@ for (i = 0; i < smtp_ch_index; i++)
 if (s != NULL) s[ptr] = 0; else s = US"";
 log_write(0, LOG_MAIN, "no MAIL in SMTP connection from %s D=%s%s",
   host_and_ident(FALSE),
 if (s != NULL) s[ptr] = 0; else s = US"";
 log_write(0, LOG_MAIN, "no MAIL in SMTP connection from %s D=%s%s",
   host_and_ident(FALSE),
-  readconf_printtime(time(NULL) - smtp_connection_start), s);
+  readconf_printtime( (int) ((long)time(NULL) - (long)smtp_connection_start)),
+  s);
 }
 
 
 }
 
 
index 5e604fa15913be92227096540ea130ae9460ae19..6dcb512e42c9c75d7a59ef53d1378b6a197dfcd4 100644 (file)
@@ -492,7 +492,7 @@ for (;;)
     if (Ustrncmp(p, "rozen", 5) == 0)
       {
       deliver_freeze = TRUE;
     if (Ustrncmp(p, "rozen", 5) == 0)
       {
       deliver_freeze = TRUE;
-      deliver_frozen_at = Uatoi(big_buffer + 7);
+      sscanf(big_buffer+7, TIME_T_FMT, &deliver_frozen_at);
       }
     break;
 
       }
     break;
 
index 01b70341d12794fa3072c2bba1868a2fdbc5a7f0..67ac8bce790c542c596ce453cb94dd1c72faba4f 100644 (file)
@@ -210,7 +210,7 @@ if (authenticated_sender != NULL)
 if (allow_unqualified_recipient) fprintf(f, "-allow_unqualified_recipient\n");
 if (allow_unqualified_sender) fprintf(f, "-allow_unqualified_sender\n");
 if (deliver_firsttime) fprintf(f, "-deliver_firsttime\n");
 if (allow_unqualified_recipient) fprintf(f, "-allow_unqualified_recipient\n");
 if (allow_unqualified_sender) fprintf(f, "-allow_unqualified_sender\n");
 if (deliver_firsttime) fprintf(f, "-deliver_firsttime\n");
-if (deliver_freeze) fprintf(f, "-frozen %d\n", deliver_frozen_at);
+if (deliver_freeze) fprintf(f, "-frozen " TIME_T_FMT "\n", deliver_frozen_at);
 if (dont_deliver) fprintf(f, "-N\n");
 if (host_lookup_deferred) fprintf(f, "-host_lookup_deferred\n");
 if (host_lookup_failed) fprintf(f, "-host_lookup_failed\n");
 if (dont_deliver) fprintf(f, "-N\n");
 if (host_lookup_deferred) fprintf(f, "-host_lookup_deferred\n");
 if (host_lookup_failed) fprintf(f, "-host_lookup_failed\n");
index 427227c688eda6d10259bc48c94a8a9c9c537785..0297e375e5c7940ed5200271c026136927071894 100644 (file)
@@ -74,8 +74,8 @@ if (type == tod_log) type = log_timezone? tod_log_zone : tod_log_bare;
 
 else if (type == tod_epoch)
   {
 
 else if (type == tod_epoch)
   {
-  (void) sprintf(CS timebuf, "%d", (int)now);  /* Unix epoch format */
-  return timebuf;
+  (void) sprintf(CS timebuf, TIME_T_FMT, now);  /* Unix epoch format */
+  return timebuf;      /* NB the above will be wrong if time_t is FP */
   }
 
 else if (type == tod_zulu)
   }
 
 else if (type == tod_zulu)
index db3b5aeeea0e670bdb68111a3c0a227654def106..f56862beca3fcbb40e5d2c8c7f088e49c1a94e59 100644 (file)
@@ -1620,6 +1620,7 @@ if (!isdirectory)
 
   if (ob->use_lockfile)
     {
 
   if (ob->use_lockfile)
     {
+    /* cf. exim_lock.c */
     lockname = string_sprintf("%s.lock", filename);
     hitchname = string_sprintf( "%s.%s.%08x.%08x", lockname, primary_hostname,
       (unsigned int)(time(NULL)), (unsigned int)getpid());
     lockname = string_sprintf("%s.lock", filename);
     hitchname = string_sprintf( "%s.%s.%08x.%08x", lockname, primary_hostname,
       (unsigned int)(time(NULL)), (unsigned int)getpid());