diff --git a/src/syncterm/term.c b/src/syncterm/term.c index cb43e6ac5c875695dc7529c3269de978e438c433..25d6b4e89c1b76f909a411dc29dda5e24cdc9901 100644 --- a/src/syncterm/term.c +++ b/src/syncterm/term.c @@ -3992,34 +3992,40 @@ do_paste(void) void send_login(struct bbslist *bbs) { + const size_t userlen = strlen(bbs->user); + const size_t passlen = strlen(bbs->password); + const size_t syspasslen = strlen(bbs->syspass); + const size_t derbufsz = userlen + passlen + syspasslen + 3 + 1; + size_t derbufpos = 0; + char *derbuf = malloc(derbufsz); + if ((bbs->conn_type != CONN_TYPE_RLOGIN) && (bbs->conn_type != CONN_TYPE_RLOGIN_REVERSED) && (bbs->conn_type != CONN_TYPE_SSH)) { if (bbs->conn_type != CONN_TYPE_SSHNA) { if (bbs->user[0]) { - conn_send(bbs->user, strlen(bbs->user), 0); - conn_send( - cterm->emulation == CTERM_EMULATION_ATASCII ? "\x9b" : "\r", - 1, - 0); - SLEEP(10); + memcpy(&derbuf[derbufpos], bbs->user, userlen); + derbufpos += userlen; + derbuf[derbufpos++] = '\r'; + derbuf[derbufpos] = 0; } } if (bbs->password[0]) { - conn_send(bbs->password, strlen(bbs->password), 0); - conn_send( - cterm->emulation == CTERM_EMULATION_ATASCII ? "\x9b" : "\r", - 1, - 0); - SLEEP(10); + memcpy(&derbuf[derbufpos], bbs->password, passlen); + derbufpos += passlen; + derbuf[derbufpos++] = '\r'; + derbuf[derbufpos] = 0; } } if (bbs->syspass[0]) { - conn_send(bbs->syspass, strlen(bbs->syspass), 0); - conn_send(cterm->emulation == CTERM_EMULATION_ATASCII ? "\x9b" : "\r", - 1, - 0); + memcpy(&derbuf[derbufpos], bbs->syspass, syspasslen); + derbufpos += syspasslen; + derbuf[derbufpos++] = '\r'; + derbuf[derbufpos] = 0; } + if (derbufpos) + conn_send(derbuf, derbufpos, 0); + free(derbuf); } static void