Skip to content

Commit

Permalink
Add casts when storing values in a struct timespec.
Browse files Browse the repository at this point in the history
Fixes -Wconversion warnings on some 32-bit systems where time_t is
still 32-bit.
  • Loading branch information
millert committed Sep 27, 2023
1 parent 9cc57f4 commit 1398289
Show file tree
Hide file tree
Showing 11 changed files with 29 additions and 28 deletions.
4 changes: 2 additions & 2 deletions lib/eventlog/parse_json.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
Expand Down
3 changes: 2 additions & 1 deletion lib/iolog/iolog_legacy.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion lib/iolog/iolog_timing.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
8 changes: 4 additions & 4 deletions logsrvd/iolog_writer.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down Expand Up @@ -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;
Expand Down
8 changes: 4 additions & 4 deletions logsrvd/logsrvd_conf.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down Expand Up @@ -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);

Expand All @@ -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);

Expand Down Expand Up @@ -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);

Expand Down
4 changes: 2 additions & 2 deletions logsrvd/logsrvd_journal.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
12 changes: 6 additions & 6 deletions logsrvd/logsrvd_local.c
Original file line number Diff line number Diff line change
Expand Up @@ -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') {
Expand Down Expand Up @@ -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));
Expand Down Expand Up @@ -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");
Expand Down
8 changes: 4 additions & 4 deletions logsrvd/sendlog.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion plugins/sudoers/defaults.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 == '-') {
Expand Down
2 changes: 1 addition & 1 deletion plugins/sudoers/iolog.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
4 changes: 2 additions & 2 deletions plugins/sudoers/log_client.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down

0 comments on commit 1398289

Please sign in to comment.