X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/cbe2d68fd7c7c7bac692b3a2d200a5d2429ab201..77603464f5b4231df69eb20ca278062bd7aae9fb:/unix/uxcons.c diff --git a/unix/uxcons.c b/unix/uxcons.c index 80ed246e..6579155e 100644 --- a/unix/uxcons.c +++ b/unix/uxcons.c @@ -16,6 +16,8 @@ int console_batch_mode = FALSE; +static void *console_logctx = NULL; + /* * Clean up and exit. */ @@ -29,25 +31,38 @@ void cleanup_exit(int code) exit(code); } +void set_busy_status(void *frontend, int status) +{ +} + void update_specials_menu(void *frontend) { } -void verify_ssh_host_key(void *frontend, char *host, int port, char *keytype, - char *keystr, char *fingerprint) +void notify_remote_exit(void *frontend) +{ +} + +void timer_change_notify(long next) +{ +} + +int verify_ssh_host_key(void *frontend, char *host, int port, char *keytype, + char *keystr, char *fingerprint, + void (*callback)(void *ctx, int result), void *ctx) { int ret; static const char absentmsg_batch[] = "The server's host key is not cached. You have no guarantee\n" "that the server is the computer you think it is.\n" - "The server's key fingerprint is:\n" + "The server's %s key fingerprint is:\n" "%s\n" "Connection abandoned.\n"; static const char absentmsg[] = "The server's host key is not cached. You have no guarantee\n" "that the server is the computer you think it is.\n" - "The server's key fingerprint is:\n" + "The server's %s key fingerprint is:\n" "%s\n" "If you trust this host, enter \"y\" to add the key to\n" "PuTTY's cache and carry on connecting.\n" @@ -63,7 +78,7 @@ void verify_ssh_host_key(void *frontend, char *host, int port, char *keytype, "cached. This means that either the server administrator\n" "has changed the host key, or you have actually connected\n" "to another computer pretending to be the server.\n" - "The new key fingerprint is:\n" + "The new %s key fingerprint is:\n" "%s\n" "Connection abandoned.\n"; static const char wrongmsg[] = @@ -72,7 +87,7 @@ void verify_ssh_host_key(void *frontend, char *host, int port, char *keytype, "cached. This means that either the server administrator\n" "has changed the host key, or you have actually connected\n" "to another computer pretending to be the server.\n" - "The new key fingerprint is:\n" + "The new %s key fingerprint is:\n" "%s\n" "If you were expecting this change and trust the new key,\n" "enter \"y\" to update PuTTY's cache and continue connecting.\n" @@ -93,22 +108,22 @@ void verify_ssh_host_key(void *frontend, char *host, int port, char *keytype, ret = verify_host_key(host, port, keytype, keystr); if (ret == 0) /* success - key matched OK */ - return; + return 1; if (ret == 2) { /* key was different */ if (console_batch_mode) { - fprintf(stderr, wrongmsg_batch, fingerprint); - cleanup_exit(1); + fprintf(stderr, wrongmsg_batch, keytype, fingerprint); + return 0; } - fprintf(stderr, wrongmsg, fingerprint); + fprintf(stderr, wrongmsg, keytype, fingerprint); fflush(stderr); } if (ret == 1) { /* key was absent */ if (console_batch_mode) { - fprintf(stderr, absentmsg_batch, fingerprint); - cleanup_exit(1); + fprintf(stderr, absentmsg_batch, keytype, fingerprint); + return 0; } - fprintf(stderr, absentmsg, fingerprint); + fprintf(stderr, absentmsg, keytype, fingerprint); fflush(stderr); } @@ -126,25 +141,26 @@ void verify_ssh_host_key(void *frontend, char *host, int port, char *keytype, if (line[0] != '\0' && line[0] != '\r' && line[0] != '\n') { if (line[0] == 'y' || line[0] == 'Y') store_host_key(host, port, keytype, keystr); + return 1; } else { fprintf(stderr, abandoned); - cleanup_exit(0); + return 0; } } /* - * Ask whether the selected cipher is acceptable (since it was + * Ask whether the selected algorithm is acceptable (since it was * below the configured 'warn' threshold). - * cs: 0 = both ways, 1 = client->server, 2 = server->client */ -void askcipher(void *frontend, char *ciphername, int cs) +int askalg(void *frontend, const char *algtype, const char *algname, + void (*callback)(void *ctx, int result), void *ctx) { static const char msg[] = - "The first %scipher supported by the server is\n" + "The first %s supported by the server is\n" "%s, which is below the configured warning threshold.\n" "Continue with connection? (y/n) "; static const char msg_batch[] = - "The first %scipher supported by the server is\n" + "The first %s supported by the server is\n" "%s, which is below the configured warning threshold.\n" "Connection abandoned.\n"; static const char abandoned[] = "Connection abandoned.\n"; @@ -152,17 +168,11 @@ void askcipher(void *frontend, char *ciphername, int cs) char line[32]; if (console_batch_mode) { - fprintf(stderr, msg_batch, - (cs == 0) ? "" : - (cs == 1) ? "client-to-server " : "server-to-client ", - ciphername); - cleanup_exit(1); + fprintf(stderr, msg_batch, algtype, algname); + return 0; } - fprintf(stderr, msg, - (cs == 0) ? "" : - (cs == 1) ? "client-to-server " : "server-to-client ", - ciphername); + fprintf(stderr, msg, algtype, algname); fflush(stderr); { @@ -177,10 +187,10 @@ void askcipher(void *frontend, char *ciphername, int cs) } if (line[0] == 'y' || line[0] == 'Y') { - return; + return 1; } else { fprintf(stderr, abandoned); - cleanup_exit(0); + return 0; } } @@ -188,7 +198,8 @@ void askcipher(void *frontend, char *ciphername, int cs) * Ask whether to wipe a session log file before writing to it. * Returns 2 for wipe, 1 for append, 0 for cancel (don't log). */ -int askappend(void *frontend, Filename filename) +int askappend(void *frontend, Filename filename, + void (*callback)(void *ctx, int result), void *ctx) { static const char msgtemplate[] = "The session log file \"%.*s\" already exists.\n" @@ -258,9 +269,15 @@ void old_keyfile_warning(void) fputs(message, stderr); } +void console_provide_logctx(void *logctx) +{ + console_logctx = logctx; +} + void logevent(void *frontend, const char *string) { - log_eventlog(logctx, string); + if (console_logctx) + log_eventlog(console_logctx, string); } int console_get_line(const char *prompt, char *str, @@ -272,6 +289,7 @@ int console_get_line(const char *prompt, char *str, if (console_batch_mode) { if (maxlen > 0) str[0] = '\0'; + return 0; } else { tcgetattr(0, &oldmode); newmode = oldmode; @@ -294,8 +312,9 @@ int console_get_line(const char *prompt, char *str, if (is_pw) fputs("\n", stdout); + + return 1; } - return 1; } void frontend_keypress(void *handle) @@ -305,3 +324,18 @@ void frontend_keypress(void *handle) */ return; } + +int is_interactive(void) +{ + return isatty(0); +} + +/* + * X11-forwarding-related things suitable for console. + */ + +const char platform_x11_best_transport[] = "unix"; + +char *platform_get_x_display(void) { + return dupstr(getenv("DISPLAY")); +}