config: Allow lowercase suffixes for rekeylimit and ignore trailing

Signed-off-by: Nikhil V <nikhilgreyshines@gmail.com>
Reviewed-by: Jakub Jelen <jjelen@redhat.com>
Merge-Request: <https://gitlab.com/libssh/libssh-mirror/-/merge_requests/712>
This commit is contained in:
Nikhil V
2026-03-23 17:01:20 +00:00
committed by Jakub Jelen
parent 664e17345b
commit 068cbd543f
2 changed files with 16 additions and 12 deletions

View File

@@ -1560,6 +1560,7 @@ static int ssh_config_parse_line_internal(ssh_session session,
break;
}
switch (*endp) {
case 'g':
case 'G':
if (ll > LLONG_MAX / 1024) {
SSH_LOG(SSH_LOG_TRACE, "Possible overflow of rekey limit");
@@ -1568,6 +1569,7 @@ static int ssh_config_parse_line_internal(ssh_session session,
}
ll = ll * 1024;
FALL_THROUGH;
case 'm':
case 'M':
if (ll > LLONG_MAX / 1024) {
SSH_LOG(SSH_LOG_TRACE, "Possible overflow of rekey limit");
@@ -1576,6 +1578,7 @@ static int ssh_config_parse_line_internal(ssh_session session,
}
ll = ll * 1024;
FALL_THROUGH;
case 'k':
case 'K':
if (ll > LLONG_MAX / 1024) {
SSH_LOG(SSH_LOG_TRACE, "Possible overflow of rekey limit");
@@ -1589,12 +1592,8 @@ static int ssh_config_parse_line_internal(ssh_session session,
/* just the number */
break;
default:
/* Invalid suffix */
ll = -1;
break;
}
if (*endp != ' ' && *endp != '\0') {
CHECK_COND_OR_FAIL(1, "Invalid trailing characters");
/* Ignore invalid suffix and trailing garbage */
SSH_LOG(SSH_LOG_TRACE, "Ignoring invalid suffix");
break;
}
}
@@ -1663,12 +1662,8 @@ static int ssh_config_parse_line_internal(ssh_session session,
/* just the number */
break;
default:
/* Invalid suffix */
ll = -1;
break;
}
if (*endp != '\0') {
CHECK_COND_OR_FAIL(1, "Invalid trailing characters");
/* Ignore invalid suffix and trailing garbage */
SSH_LOG(SSH_LOG_TRACE, "Ignoring invalid suffix");
break;
}
}

View File

@@ -183,6 +183,8 @@ extern LIBSSH_THREAD int ssh_log_level;
"\tRekeyLimit 31M\n" \
"Host data3\n" \
"\tRekeyLimit 521K\n" \
"Host data4\n" \
"\tRekeyLimit 5k*n\n" \
"Host time1\n" \
"\tRekeyLimit default 3D\n" \
"Host time2\n" \
@@ -2106,6 +2108,13 @@ static void torture_config_rekey(void **state,
assert_int_equal(session->opts.rekey_data, 521 * 1024);
assert_int_equal(session->opts.rekey_time, 0);
/* 5k*n -> 5120 (Invalid suffix is ignored) */
torture_reset_config(session);
ssh_options_set(session, SSH_OPTIONS_HOST, "data4");
_parse_config(session, file, string, SSH_OK);
assert_int_equal(session->opts.rekey_data, 5 * 1024);
assert_int_equal(session->opts.rekey_time, 0);
/* default 3D */
torture_reset_config(session);
ssh_options_set(session, SSH_OPTIONS_HOST, "time1");