#define MAX_STDIN_BACKLOG 4096
-void *logctx;
+static void *logctx;
static struct termios orig_termios;
#endif
#if defined(XCASE)
GET_BOOL("XCASE", XCASE, c_lflag, );
+#endif
+#if defined(IUTF8)
+ GET_BOOL("IUTF8", IUTF8, c_iflag, );
#endif
/* Configuration of ECHO */
#if defined(ECHOCTL)
printf(" -P port connect to specified port\n");
printf(" -l user connect with specified username\n");
printf(" -batch disable all interactive prompts\n");
+ printf(" -proxycmd command\n");
+ printf(" use 'command' as local proxy\n");
printf(" -sercfg configuration-string (e.g. 19200,8,n,1,X)\n");
printf(" Specify the serial configuration (serial only)\n");
printf("The following options only apply to SSH connections:\n");
printf(" -N don't start a shell/command (SSH-2 only)\n");
printf(" -nc host:port\n");
printf(" open tunnel in place of session (SSH-2 only)\n");
+ printf(" -sshlog file\n");
+ printf(" -sshrawlog file\n");
+ printf(" log protocol details to a file\n");
printf(" -shareexists\n");
printf(" test whether a connection-sharing upstream exists\n");
exit(1);
static void version(void)
{
- printf("plink: %s\n", ver);
- exit(1);
+ char *buildinfo_text = buildinfo("\n");
+ printf("plink: %s\n%s\n", ver, buildinfo_text);
+ sfree(buildinfo_text);
+ exit(0);
}
void frontend_net_error_pending(void) {}
const int share_can_be_downstream = TRUE;
const int share_can_be_upstream = TRUE;
+const int buildinfo_gtk_relevant = FALSE;
+
int main(int argc, char **argv)
{
int sending;
} else if (!strcmp(p, "-shareexists")) {
just_test_share_exists = TRUE;
} else if (!strcmp(p, "-fuzznet")) {
- conf_set_int(conf, CONF_proxy_type, PROXY_CMD);
+ conf_set_int(conf, CONF_proxy_type, PROXY_FUZZ);
conf_set_str(conf, CONF_proxy_telnet_command,
- "cat %host");
+ "%host");
} else {
fprintf(stderr, "plink: unknown option \"%s\"\n", p);
errors = 1;
perror("pipe");
exit(1);
}
+ /* We don't want the signal handler to block if the pipe's full. */
+ nonblock(signalpipe[0]);
+ nonblock(signalpipe[1]);
+ cloexec(signalpipe[0]);
+ cloexec(signalpipe[1]);
putty_signal(SIGWINCH, sigwinch);
/*
uxsel_init();
/*
- * Unix Plink doesn't provide any way to add forwardings after the
+ * Plink doesn't provide any way to add forwardings after the
* connection is set up, so if there are none now, we can safely set
* the "simple" flag.
*/
/* nodelay is only useful if stdin is a terminal device */
int nodelay = conf_get_int(conf, CONF_tcp_nodelay) && isatty(0);
+ /* This is a good place for a fuzzer to fork us. */
+#ifdef __AFL_HAVE_MANUAL_CONTROL
+ __AFL_INIT();
+#endif
+
error = back->init(NULL, &backhandle, conf,
conf_get_str(conf, CONF_host),
conf_get_int(conf, CONF_port),
ret = select(maxfd, &rset, &wset, &xset, NULL);
}
+ if (ret < 0 && errno == EINTR)
+ continue;
+
if (ret < 0) {
perror("select");
exit(1);