The unified diff between revisions [7fb3ca52..] and [8f25eab3..] is displayed below. It can also be downloaded as a raw diff.
#
#
# patch "auth.h"
# from [84e61bd4fb2b09bcc8e5bef98e4d5c71fde907a2]
# to [c541f307bc55bce59169119bfaac5608d66c9687]
#
# patch "cli-auth.c"
# from [eb6d2144c4d4b27aaa50b7b1a1f2b879a9c0a06f]
# to [3b308d18cc57b0b95f782bc7e4d8ea118a974343]
#
# patch "cli-authinteract.c"
# from [001567a2e62e0f5f87d73463ab4f6e1f85415f35]
# to [c65d9c192f42ce4654ec4e8d6765b11e4f5ca9a9]
#
# patch "cli-authpasswd.c"
# from [ac2864b6001ecb7272b258aeee75ed1287d745e2]
# to [f90967c3816ba60765b1027a373209206fc73b4f]
#
# patch "svr-tcpfwd.c"
# from [bfd47e1ced10186c0d9ce06dca0f0d3694e9c3df]
# to [aa3d9bd98b61f4a84f5b28b1debc66a2b398045b]
#
============================================================
--- auth.h 84e61bd4fb2b09bcc8e5bef98e4d5c71fde907a2
+++ auth.h c541f307bc55bce59169119bfaac5608d66c9687
@@ -52,6 +52,7 @@ void cli_auth_interactive();
void cli_auth_password();
int cli_auth_pubkey();
void cli_auth_interactive();
+char* getpass_or_cancel();
#define MAX_USERNAME_LEN 25 /* arbitrary for the moment */
============================================================
--- cli-auth.c eb6d2144c4d4b27aaa50b7b1a1f2b879a9c0a06f
+++ cli-auth.c 3b308d18cc57b0b95f782bc7e4d8ea118a974343
@@ -278,3 +278,18 @@ void cli_auth_try() {
TRACE(("leave cli_auth_try"))
}
+
+/* A helper for getpass() that exits if the user cancels. The returned
+ * password is statically allocated by getpass() */
+char* getpass_or_cancel()
+{
+ char* password = NULL;
+
+ password = getpass("Password: ");
+
+ /* 0x03 is a ctrl-c character in the buffer. */
+ if (password == NULL || strchr(password, '\3') != NULL) {
+ dropbear_close("Interrupted.");
+ }
+ return password;
+}
============================================================
--- cli-authinteract.c 001567a2e62e0f5f87d73463ab4f6e1f85415f35
+++ cli-authinteract.c c65d9c192f42ce4654ec4e8d6765b11e4f5ca9a9
@@ -115,7 +115,7 @@ void recv_msg_userauth_info_request() {
echo = buf_getbool(ses.payload);
if (!echo) {
- unsigned char* p = getpass(prompt);
+ unsigned char* p = getpass_or_cancel(prompt);
response = m_strdup(p);
m_burn(p, strlen(p));
} else {
============================================================
--- cli-authpasswd.c ac2864b6001ecb7272b258aeee75ed1287d745e2
+++ cli-authpasswd.c f90967c3816ba60765b1027a373209206fc73b4f
@@ -125,11 +125,8 @@ void cli_auth_password() {
password = gui_getpass("Password: ");
else
#endif
- password = getpass("Password: ");
+ password = getpass_or_cancel("Password: ");
- if (password == NULL)
- return 0;
-
buf_putbyte(ses.writepayload, SSH_MSG_USERAUTH_REQUEST);
buf_putstring(ses.writepayload, cli_opts.username,
============================================================
--- svr-tcpfwd.c bfd47e1ced10186c0d9ce06dca0f0d3694e9c3df
+++ svr-tcpfwd.c aa3d9bd98b61f4a84f5b28b1debc66a2b398045b
@@ -80,7 +80,7 @@ void recv_msg_global_request_remotetcp()
reqname = buf_getstring(ses.payload, &namelen);
wantreply = buf_getbool(ses.payload);
- if (namelen > MAXNAMLEN) {
+ if (namelen > MAX_NAME_LEN) {
TRACE(("name len is wrong: %d", namelen))
goto out;
}