I think rjk meant `setpgid', not `setpgrp'.
[u/mdw/putty] / ssh.c
diff --git a/ssh.c b/ssh.c
index 42e2077..8c71e6d 100644 (file)
--- a/ssh.c
+++ b/ssh.c
@@ -2757,7 +2757,7 @@ static int do_ssh1_login(Ssh ssh, unsigned char *in, int inlen, int ispkt)
 
     fflush(stdout);
     {
-       if ((flags & FLAG_INTERACTIVE) && !*ssh->cfg.username) {
+       if (!*ssh->cfg.username) {
            if (ssh_get_line && !ssh_getline_pw_only) {
                if (!ssh_get_line("login as: ",
                                  s->username, sizeof(s->username), FALSE)) {
@@ -4841,7 +4841,7 @@ static void do_ssh2_authconn(Ssh ssh, unsigned char *in, int inlen, int ispkt)
             * with change_username turned off we don't try to get
             * it again.
             */
-       } else if ((flags & FLAG_INTERACTIVE) && !*ssh->cfg.username) {
+       } else if (!*ssh->cfg.username) {
            if (ssh_get_line && !ssh_getline_pw_only) {
                if (!ssh_get_line("login as: ",
                                  s->username, sizeof(s->username), FALSE)) {
@@ -5003,7 +5003,8 @@ static void do_ssh2_authconn(Ssh ssh, unsigned char *in, int inlen, int ispkt)
                     * Additionally, if we'd just tried password
                     * authentication, we should break out of this
                     * whole loop so as to go back to the username
-                    * prompt.
+                    * prompt (iff we're configured to allow
+                    * username change attempts).
                     */
                    if (s->type == AUTH_TYPE_NONE) {
                        /* do nothing */
@@ -5017,7 +5018,10 @@ static void do_ssh2_authconn(Ssh ssh, unsigned char *in, int inlen, int ispkt)
                    } else {
                        c_write_str(ssh, "Access denied\r\n");
                        logevent("Access denied");
-                       if (s->type == AUTH_TYPE_PASSWORD) {
+                       if (s->type == AUTH_TYPE_PASSWORD &&
+                           ssh->cfg.change_username) {
+                           /* XXX perhaps we should allow
+                            * keyboard-interactive to do this too? */
                            s->we_are_in = FALSE;
                            break;
                        }