sync_git_2024.86 tag/DROPBEAR_2024.86

This commit is contained in:
clearrml 2024-12-22 17:07:32 +02:00
parent af3488e293
commit 07f1f1d5f9
8 changed files with 50 additions and 13 deletions

View File

@ -69,7 +69,8 @@ void read_config_file(char* filename, FILE* config_file, cli_runopts* options) {
while (buf_getline(buf, config_file) == DROPBEAR_SUCCESS) { while (buf_getline(buf, config_file) == DROPBEAR_SUCCESS) {
char* commentStart = NULL; char* commentStart = NULL;
cfg_option cfg_opt; cfg_option cfg_opt;
int found, i; int found;
size_t i;
/* Update line number counter. */ /* Update line number counter. */
linenum++; linenum++;

View File

@ -317,7 +317,8 @@ static void check_close(struct Channel *channel) {
if ((channel->recv_eof && !write_pending(channel)) if ((channel->recv_eof && !write_pending(channel))
/* have a server "session" and child has exited */ /* have a server "session" and child has exited */
|| (channel->type->check_close && close_allowed)) { || (channel->writefd != FD_UNINIT
&& channel->type->check_close && close_allowed)) {
close_chan_fd(channel, channel->writefd, SHUT_WR); close_chan_fd(channel, channel->writefd, SHUT_WR);
} }

View File

@ -337,7 +337,8 @@ static int checkusername(const char *username, unsigned int userlen) {
if (!ses.authstate.pw_name) { if (!ses.authstate.pw_name) {
TRACE(("leave checkusername: user '%s' doesn't exist", username)) TRACE(("leave checkusername: user '%s' doesn't exist", username))
dropbear_log(LOG_WARNING, dropbear_log(LOG_WARNING,
"Login attempt for nonexistent user"); "Login attempt for nonexistent user from %s",
svr_ses.addrstring);
ses.authstate.checkusername_failed = 1; ses.authstate.checkusername_failed = 1;
return DROPBEAR_FAILURE; return DROPBEAR_FAILURE;
} }

View File

@ -226,7 +226,7 @@ static void main_noinetd(int argc, char ** argv, const char* multipath) {
if (ses.exitflag) { if (ses.exitflag) {
unlink(svr_opts.pidfile); unlink(svr_opts.pidfile);
dropbear_exit("Terminated by signal"); dropbear_close("Terminated by signal");
} }
if (val == 0) { if (val == 0) {

View File

@ -4,7 +4,7 @@
*******************************************************************/ *******************************************************************/
#ifndef DROPBEAR_VERSION #ifndef DROPBEAR_VERSION
#define DROPBEAR_VERSION "2024.85" #define DROPBEAR_VERSION "2024.86"
#endif #endif
/* IDENT_VERSION_PART is the optional part after "SSH-2.0-dropbear". Refer to RFC4253 for requirements. */ /* IDENT_VERSION_PART is the optional part after "SSH-2.0-dropbear". Refer to RFC4253 for requirements. */

View File

@ -1,9 +1,9 @@
attrs==21.2.0 attrs==21.2.0
iniconfig==1.1.1 iniconfig==2.0.0
packaging==21.0 packaging==24.1
pluggy==1.0.0 pluggy==1.5.0
py==1.10.0 psutil==6.0.0
pyparsing==2.4.7 pyparsing==2.4.7
pytest==6.2.5 pytest==8.3.2
toml==0.10.2 toml==0.10.2
psutil==5.9.0 asyncssh==2.17.0

View File

@ -69,9 +69,9 @@ def test_bg_sleep(request, fd, dropbear):
def test_idle(request, dropbear): def test_idle(request, dropbear):
# Idle test, -I 1 should make it return before the 2 second timeout # Idle test, -I 1 should make it return before the 5 second timeout
r = dbclient(request, "-I", "1", "echo zong; sleep 10", r = dbclient(request, "-I", "1", "echo zong; sleep 10",
capture_output=True, timeout=2, text=True) capture_output=True, timeout=5, text=True)
r.check_returncode() r.check_returncode()
assert r.stdout.rstrip() == "zong" assert r.stdout.rstrip() == "zong"

34
test/test_concurrent.py Normal file
View File

@ -0,0 +1,34 @@
"""
Tests opening and closing several (up to 4) channels concurrently.
"""
from test_dropbear import *
import asyncssh
import asyncio
import random
async def run(addr, port):
async with asyncssh.connect(addr, port = port) as conn:
chans = []
MAX=4
for x in range(10000):
if len(chans) < MAX:
pipes = await conn.open_session(command = "df")
chans.append(pipes)
l = len(chans)
print(f" add, len {l}")
if random.random() < 0.2:
i = random.randrange(0, len(chans))
l = len(chans)
print(f" del {i}/{l}")
del chans[i]
def test_concurrent(request, dropbear):
opt = request.config.option
host = opt.remote or LOCALADDR
port = int(opt.port)
asyncio.run(run(host, port))