My inclination would be to just make the timeout signed to match
time_t. No need for ugly casts then and parse_timeout() parses the
number as an int anyway (rejecting negative values). As far as I
can see there is no way for these values to be larger than an int.
- todd
Index: channels.c
==================================================================RCS file:
/cvs/src/usr.bin/ssh/channels.c,v
retrieving revision 1.430
diff -u -p -u -r1.430 channels.c
--- channels.c 10 Mar 2023 03:01:51 -0000 1.430
+++ channels.c 1 Jun 2023 16:32:38 -0000
@@ -146,7 +146,7 @@ struct permission_set {
/* Used to record timeouts per channel type */
struct ssh_channel_timeout {
char *type_pattern;
- u_int timeout_secs;
+ int timeout_secs;
};
/* Master structure for channels state */
@@ -304,11 +304,11 @@ channel_lookup(struct ssh *ssh, int id)
*/
void
channel_add_timeout(struct ssh *ssh, const char *type_pattern,
- u_int timeout_secs)
+ int timeout_secs)
{
struct ssh_channels *sc = ssh->chanctxt;
- debug2_f("channel type \"%s\" timeout %u seconds",
+ debug2_f("channel type \"%s\" timeout %d seconds",
type_pattern, timeout_secs);
sc->timeouts = xrecallocarray(sc->timeouts, sc->ntimeouts,
sc->ntimeouts + 1, sizeof(*sc->timeouts));
@@ -332,7 +332,7 @@ channel_clear_timeouts(struct ssh *ssh)
sc->ntimeouts = 0;
}
-static u_int
+static int
lookup_timeout(struct ssh *ssh, const char *type)
{
struct ssh_channels *sc = ssh->chanctxt;
Index: channels.h
==================================================================RCS file:
/cvs/src/usr.bin/ssh/channels.h,v
retrieving revision 1.149
diff -u -p -u -r1.149 channels.h
--- channels.h 4 Mar 2023 03:22:59 -0000 1.149
+++ channels.h 1 Jun 2023 16:28:59 -0000
@@ -207,7 +207,7 @@ struct Channel {
/* Last traffic seen for OPEN channels */
time_t lastused;
/* Inactivity timeout deadline in seconds (0 = no timeout) */
- u_int inactive_deadline;
+ int inactive_deadline;
};
#define CHAN_EXTENDED_IGNORE 0
@@ -305,7 +305,7 @@ int channel_close_fd(struct ssh *, Chan
void channel_send_window_changes(struct ssh *);
/* channel inactivity timeouts */
-void channel_add_timeout(struct ssh *, const char *, u_int);
+void channel_add_timeout(struct ssh *, const char *, int);
void channel_clear_timeouts(struct ssh *);
/* mux proxy support */
Index: servconf.c
==================================================================RCS file:
/cvs/src/usr.bin/ssh/servconf.c,v
retrieving revision 1.393
diff -u -p -u -r1.393 servconf.c
--- servconf.c 24 May 2023 23:01:06 -0000 1.393
+++ servconf.c 1 Jun 2023 16:31:34 -0000
@@ -908,7 +908,7 @@ process_permitopen(struct ssh *ssh, Serv
/* Parse a ChannelTimeout clause "pattern=interval" */
static int
-parse_timeout(const char *s, char **typep, u_int *secsp)
+parse_timeout(const char *s, char **typep, int *secsp)
{
char *cp, *sdup;
int secs;
@@ -934,7 +934,7 @@ parse_timeout(const char *s, char **type
if (typep != NULL)
*typep = xstrdup(sdup);
if (secsp != NULL)
- *secsp = (u_int)secs;
+ *secsp = secs;
free(sdup);
return 0;
}
@@ -942,7 +942,8 @@ parse_timeout(const char *s, char **type
void
process_channel_timeouts(struct ssh *ssh, ServerOptions *options)
{
- u_int i, secs;
+ int secs;
+ u_int i;
char *type;
debug3_f("setting %u timeouts", options->num_channel_timeouts);