Add casts when storing values in a struct timespec.

Fixes -Wconversion warnings on some 32-bit systems where time_t is
still 32-bit.
This commit is contained in:
Todd C. Miller
2023-09-27 15:11:10 -06:00
parent 9cc57f4936
commit 1398289fab
11 changed files with 29 additions and 28 deletions

View File

@@ -382,11 +382,11 @@ json_store_timespec(struct json_item *item, struct timespec *ts)
if (item->type != JSON_NUMBER)
continue;
if (strcmp(item->name, "seconds") == 0) {
ts->tv_sec = item->u.number;
ts->tv_sec = (time_t)item->u.number;
continue;
}
if (strcmp(item->name, "nanoseconds") == 0) {
ts->tv_nsec = item->u.number;
ts->tv_nsec = (long)item->u.number;
continue;
}
}

View File

@@ -84,7 +84,8 @@ iolog_parse_loginfo_legacy(FILE *fp, const char *iolog_dir,
goto done;
}
*ep = '\0';
evlog->submit_time.tv_sec = sudo_strtonum(cp, 0, TIME_T_MAX, &errstr);
evlog->submit_time.tv_sec =
(time_t)sudo_strtonum(cp, 0, TIME_T_MAX, &errstr);
if (errstr != NULL) {
sudo_warn(U_("%s: time stamp %s: %s"), iolog_dir, cp, errstr);
goto done;

View File

@@ -105,7 +105,7 @@ iolog_parse_delay(const char *cp, struct timespec *delay,
}
memcpy(numbuf, cp, len);
numbuf[len] = '\0';
delay->tv_sec = sudo_strtonum(numbuf, 0, TIME_T_MAX, &errstr);
delay->tv_sec = (time_t)sudo_strtonum(numbuf, 0, TIME_T_MAX, &errstr);
if (errstr != NULL) {
sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO,
"%s: number of seconds is %s", numbuf, errstr);

View File

@@ -150,8 +150,8 @@ evlog_new(TimeSpec *submit_time, InfoMessage **info_msgs, size_t infolen,
/* Submit time. */
if (submit_time != NULL) {
evlog->submit_time.tv_sec = submit_time->tv_sec;
evlog->submit_time.tv_nsec = submit_time->tv_nsec;
evlog->submit_time.tv_sec = (time_t)submit_time->tv_sec;
evlog->submit_time.tv_nsec = (long)submit_time->tv_nsec;
}
/* Default values */
@@ -891,8 +891,8 @@ update_elapsed_time(TimeSpec *delta, struct timespec *elapsed)
debug_decl(update_elapsed_time, SUDO_DEBUG_UTIL);
/* Cannot use timespecadd since msg doesn't use struct timespec. */
elapsed->tv_sec += delta->tv_sec;
elapsed->tv_nsec += delta->tv_nsec;
elapsed->tv_sec += (time_t)delta->tv_sec;
elapsed->tv_nsec += (long)delta->tv_nsec;
while (elapsed->tv_nsec >= 1000000000) {
elapsed->tv_sec++;
elapsed->tv_nsec -= 1000000000;

View File

@@ -588,7 +588,7 @@ cb_server_timeout(struct logsrvd_config *config, const char *str, size_t offset)
const char *errstr;
debug_decl(cb_server_timeout, SUDO_DEBUG_UTIL);
timeout = sudo_strtonum(str, 0, TIME_T_MAX, &errstr);
timeout = (time_t)sudo_strtonum(str, 0, TIME_T_MAX, &errstr);
if (errstr != NULL)
debug_return_bool(false);
@@ -794,7 +794,7 @@ cb_relay_timeout(struct logsrvd_config *config, const char *str, size_t offset)
const char *errstr;
debug_decl(cb_relay_timeout, SUDO_DEBUG_UTIL);
timeout = sudo_strtonum(str, 0, TIME_T_MAX, &errstr);
timeout = (time_t)sudo_strtonum(str, 0, TIME_T_MAX, &errstr);
if (errstr != NULL)
debug_return_bool(false);
@@ -810,7 +810,7 @@ cb_relay_connect_timeout(struct logsrvd_config *config, const char *str, size_t
const char *errstr;
debug_decl(cb_relay_connect_timeout, SUDO_DEBUG_UTIL);
timeout = sudo_strtonum(str, 0, TIME_T_MAX, &errstr);
timeout = (time_t)sudo_strtonum(str, 0, TIME_T_MAX, &errstr);
if (errstr != NULL)
debug_return_bool(false);
@@ -843,7 +843,7 @@ cb_retry_interval(struct logsrvd_config *config, const char *str, size_t offset)
const char *errstr;
debug_decl(cb_retry_interval, SUDO_DEBUG_UTIL);
interval = sudo_strtonum(str, 0, TIME_T_MAX, &errstr);
interval = (time_t)sudo_strtonum(str, 0, TIME_T_MAX, &errstr);
if (errstr != NULL)
debug_return_bool(false);

View File

@@ -443,8 +443,8 @@ journal_restart(RestartMessage *msg, uint8_t *buf, size_t buflen,
}
/* Seek forward to resume point. */
target.tv_sec = msg->resume_point->tv_sec;
target.tv_nsec = msg->resume_point->tv_nsec;
target.tv_sec = (time_t)msg->resume_point->tv_sec;
target.tv_nsec = (long)msg->resume_point->tv_nsec;
if (!journal_seek(&target, closure)) {
sudo_warn(U_("unable to seek to [%lld, %ld] in journal file %s"),
(long long)target.tv_sec, target.tv_nsec, journal_path);

View File

@@ -404,8 +404,8 @@ store_exit_local(ExitMessage *msg, uint8_t *buf, size_t len,
debug_decl(store_exit_local, SUDO_DEBUG_UTIL);
if (msg->run_time != NULL) {
evlog->run_time.tv_sec = msg->run_time->tv_sec;
evlog->run_time.tv_nsec = msg->run_time->tv_nsec;
evlog->run_time.tv_sec = (time_t)msg->run_time->tv_sec;
evlog->run_time.tv_nsec = (long)msg->run_time->tv_nsec;
}
evlog->exit_value = msg->exit_value;
if (msg->signal != NULL && msg->signal[0] != '\0') {
@@ -459,8 +459,8 @@ store_restart_local(RestartMessage *msg, uint8_t *buf, size_t len,
int iofd;
debug_decl(store_restart_local, SUDO_DEBUG_UTIL);
target.tv_sec = msg->resume_point->tv_sec;
target.tv_nsec = msg->resume_point->tv_nsec;
target.tv_sec = (time_t)msg->resume_point->tv_sec;
target.tv_nsec = (long)msg->resume_point->tv_nsec;
/* We must allocate closure->evlog for iolog_path. */
closure->evlog = calloc(1, sizeof(*closure->evlog));
@@ -544,8 +544,8 @@ store_alert_local(AlertMessage *msg, uint8_t *buf, size_t len,
if (closure->evlog == NULL)
closure->evlog = evlog;
}
alert_time.tv_sec = msg->alert_time->tv_sec;
alert_time.tv_nsec = msg->alert_time->tv_nsec;
alert_time.tv_sec = (time_t)msg->alert_time->tv_sec;
alert_time.tv_nsec = (long)msg->alert_time->tv_nsec;
if (!eventlog_alert(evlog, 0, &alert_time, msg->reason, NULL)) {
closure->errstr = _("error logging alert event");

View File

@@ -1142,8 +1142,8 @@ handle_commit_point(TimeSpec *commit_point, struct client_closure *closure)
sudo_debug_printf(SUDO_DEBUG_INFO, "%s: commit point: [%lld, %d]",
__func__, (long long)commit_point->tv_sec, commit_point->tv_nsec);
closure->committed.tv_sec = commit_point->tv_sec;
closure->committed.tv_nsec = commit_point->tv_nsec;
closure->committed.tv_sec = (time_t)commit_point->tv_sec;
closure->committed.tv_nsec = (long)commit_point->tv_nsec;
debug_return_bool(true);
}
@@ -1518,14 +1518,14 @@ parse_timespec(struct timespec *ts, char *strval)
*nsecstr++ = '\0';
ts->tv_nsec = 0;
ts->tv_sec = sudo_strtonum(strval, 0, TIME_T_MAX, &errstr);
ts->tv_sec = (time_t)sudo_strtonum(strval, 0, TIME_T_MAX, &errstr);
if (errstr != NULL) {
sudo_warnx(U_("%s: %s"), strval, U_(errstr));
debug_return_bool(false);
}
if (nsecstr != NULL) {
ts->tv_nsec = sudo_strtonum(nsecstr, 0, LONG_MAX, &errstr);
ts->tv_nsec = (long)sudo_strtonum(nsecstr, 0, LONG_MAX, &errstr);
if (errstr != NULL) {
sudo_warnx(U_("%s: %s"), nsecstr, U_(errstr));
debug_return_bool(false);

View File

@@ -999,7 +999,7 @@ store_timespec(const char *str, struct sudo_defs_types *def)
ts.tv_sec++;
nsec -= 1000000000;
}
ts.tv_nsec = nsec;
ts.tv_nsec = (long)nsec;
}
}
if (sign == '-') {

View File

@@ -498,7 +498,7 @@ iolog_deserialize_info(struct log_details *details, char * const user_info[],
continue;
}
if (strncmp(*cur, "log_server_timeout=", sizeof("log_server_timeout=") - 1) == 0) {
details->server_timeout.tv_sec =
details->server_timeout.tv_sec = (time_t)
sudo_strtonum(*cur + sizeof("log_server_timeout=") - 1, 1,
TIME_T_MAX, NULL);
continue;

View File

@@ -1513,8 +1513,8 @@ handle_commit_point(TimeSpec *commit_point, struct client_closure *closure)
debug_return_bool(false);
}
closure->committed.tv_sec = commit_point->tv_sec;
closure->committed.tv_nsec = commit_point->tv_nsec;
closure->committed.tv_sec = (time_t)commit_point->tv_sec;
closure->committed.tv_nsec = (long)commit_point->tv_nsec;
sudo_debug_printf(SUDO_DEBUG_INFO,
"%s: received [%lld, %d], elapsed [%lld, %ld], committed [%lld, %ld]",
__func__, (long long)commit_point->tv_sec, commit_point->tv_nsec,