Bugzilla – Attachment 33 Details for
Bug 147
ssh dies if it gets SSH_MSG_USERAUTH_PASSWD_CHANGEREQ
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
does this untested patch help (most of the work by johan.andersson at appgate.com)
XU (text/plain), 4.21 KB, created by
Markus Friedl
on 2002-03-08 07:56:28 AEDT
(
hide
)
Description:
does this untested patch help (most of the work by johan.andersson at appgate.com)
Filename:
MIME Type:
Creator:
Markus Friedl
Created:
2002-03-08 07:56:28 AEDT
Size:
4.21 KB
patch
obsolete
>Index: readpass.c >=================================================================== >RCS file: /home/markus/cvs/ssh/readpass.c,v >retrieving revision 1.26 >diff -u -r1.26 readpass.c >--- readpass.c 13 Feb 2002 00:39:15 -0000 1.26 >+++ readpass.c 13 Feb 2002 22:57:02 -0000 >@@ -120,8 +120,11 @@ > return ssh_askpass(askpass, prompt); > } > >- if (readpassphrase(prompt, buf, sizeof buf, rppflags) == NULL) >+ if (readpassphrase(prompt, buf, sizeof buf, rppflags) == NULL) { >+ if (flags & RP_ALLOW_EOF) >+ return NULL; > return xstrdup(""); >+ } > > ret = xstrdup(buf); > memset(buf, 'x', sizeof buf); >Index: readpass.h >=================================================================== >RCS file: /home/markus/cvs/ssh/readpass.h,v >retrieving revision 1.6 >diff -u -r1.6 readpass.h >--- readpass.h 26 Jun 2001 17:27:24 -0000 1.6 >+++ readpass.h 4 Feb 2002 16:46:41 -0000 >@@ -14,5 +14,6 @@ > > #define RP_ECHO 0x0001 > #define RP_ALLOW_STDIN 0x0002 >+#define RP_ALLOW_EOF 0x0004 > > char *read_passphrase(const char *, int); >Index: sshconnect2.c >=================================================================== >RCS file: /home/markus/cvs/ssh/sshconnect2.c,v >retrieving revision 1.97 >diff -u -r1.97 sshconnect2.c >--- sshconnect2.c 25 Feb 2002 16:33:27 -0000 1.97 >+++ sshconnect2.c 25 Feb 2002 17:36:53 -0000 >@@ -172,6 +172,7 @@ > void input_userauth_error(int, u_int32_t, void *); > void input_userauth_info_req(int, u_int32_t, void *); > void input_userauth_pk_ok(int, u_int32_t, void *); >+void input_userauth_passwd_changereq(int, u_int32_t, void *); > > int userauth_none(Authctxt *); > int userauth_pubkey(Authctxt *); >@@ -439,7 +440,7 @@ > userauth_passwd(Authctxt *authctxt) > { > static int attempt = 0; >- char prompt[80]; >+ char prompt[150]; > char *password; > > if (attempt++ >= options.number_of_password_prompts) >@@ -461,13 +462,85 @@ > xfree(password); > packet_add_padding(64); > packet_send(); >+ >+ dispatch_set(SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ, >+ &input_userauth_passwd_changereq); >+ > return 1; > } >+/* >+ * parse PASSWD_CHANGEREQ, prompt user and send SSH2_MSG_USERAUTH_REQUEST >+ */ >+void >+input_userauth_passwd_changereq(int type, uint32_t seqnr, void *ctxt) >+{ >+ Authctxt *authctxt = ctxt; >+ char *info, *lang, *password = NULL, *retype = NULL; >+ char prompt[150]; >+ >+ debug2("input_userauth_passwd_changereq"); >+ >+ if (authctxt == NULL) >+ fatal("input_userauth_passwd_changereq: " >+ "no authentication context"); >+ >+ info = packet_get_string(NULL); >+ lang = packet_get_string(NULL); >+ if (strlen(info) > 0) >+ log("%s", info); >+ xfree(info); >+ xfree(lang); >+ packet_start(SSH2_MSG_USERAUTH_REQUEST); >+ packet_put_cstring(authctxt->server_user); >+ packet_put_cstring(authctxt->service); >+ packet_put_cstring(authctxt->method->name); >+ packet_put_char(1); /* additional info */ >+ snprintf(prompt, sizeof(prompt), >+ "Enter %.30s@%.128s's old password: ", >+ authctxt->server_user, authctxt->host); >+ password = read_passphrase(prompt, 0); >+ packet_put_cstring(password); >+ memset(password, 0, strlen(password)); >+ xfree(password); >+ password = NULL; >+ while (password == NULL) { >+ snprintf(prompt, sizeof(prompt), >+ "Enter %.30s@%.128s's new password: ", >+ authctxt->server_user, authctxt->host); >+ password = read_passphrase(prompt, RP_ALLOW_EOF); >+ if (password == NULL) { >+ /* bail out */ >+ return; >+ } >+ snprintf(prompt, sizeof(prompt), >+ "Retype %.30s@%.128s's new password: ", >+ authctxt->server_user, authctxt->host); >+ retype = read_passphrase(prompt, 0); >+ if (strcmp(password, retype) != 0) { >+ memset(password, 0, strlen(password)); >+ xfree(password); >+ log("Mismatch; try again, EOF to quit."); >+ password = NULL; >+ } >+ memset(retype, 0, strlen(retype)); >+ xfree(retype); >+ } >+ packet_put_cstring(password); >+ memset(password, 0, strlen(password)); >+ xfree(password); >+ packet_add_padding(64); >+ packet_send(); >+ >+ dispatch_set(SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ, >+ &input_userauth_passwd_changereq); >+} > > static void > clear_auth_state(Authctxt *authctxt) > { > /* XXX clear authentication state */ >+ dispatch_set(SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ, NULL); >+ > if (authctxt->last_key != NULL && authctxt->last_key_hint == -1) { > debug3("clear_auth_state: key_free %p", authctxt->last_key); > key_free(authctxt->last_key);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 147
: 33