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;
 	}