# HG changeset patch # User Matt Johnston # Date 1138209272 0 # Node ID 50da8d4b5acda8af9197443ed1c69cce4796bc75 # Parent 475a818dd6e7687b8978602088be58d13edd532c# Parent 92b9b182c615936302999515368d971f79363ff2 merge of c9dc9c734d4724866a86987356e6aedeed1c93dd and fe38e5c38c2e7d5a4bb76aee511d345f1c2d5ac2 diff -r 92b9b182c615 -r 50da8d4b5acd auth.h --- a/auth.h Wed Jan 25 17:13:38 2006 +0000 +++ b/auth.h Wed Jan 25 17:14:32 2006 +0000 @@ -52,6 +52,7 @@ 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 */ diff -r 92b9b182c615 -r 50da8d4b5acd cli-auth.c --- a/cli-auth.c Wed Jan 25 17:13:38 2006 +0000 +++ b/cli-auth.c Wed Jan 25 17:14:32 2006 +0000 @@ -278,3 +278,18 @@ 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; +} diff -r 92b9b182c615 -r 50da8d4b5acd cli-authinteract.c --- a/cli-authinteract.c Wed Jan 25 17:13:38 2006 +0000 +++ b/cli-authinteract.c Wed Jan 25 17:14:32 2006 +0000 @@ -115,7 +115,7 @@ 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 { diff -r 92b9b182c615 -r 50da8d4b5acd cli-authpasswd.c --- a/cli-authpasswd.c Wed Jan 25 17:13:38 2006 +0000 +++ b/cli-authpasswd.c Wed Jan 25 17:14:32 2006 +0000 @@ -125,10 +125,7 @@ password = gui_getpass("Password: "); else #endif - password = getpass("Password: "); - - if (password == NULL) - return 0; + password = getpass_or_cancel("Password: "); buf_putbyte(ses.writepayload, SSH_MSG_USERAUTH_REQUEST); diff -r 92b9b182c615 -r 50da8d4b5acd svr-tcpfwd.c --- a/svr-tcpfwd.c Wed Jan 25 17:13:38 2006 +0000 +++ b/svr-tcpfwd.c Wed Jan 25 17:14:32 2006 +0000 @@ -80,7 +80,7 @@ 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; }