diff --git a/Makefile.am b/Makefile.am index 46484175..63b67495 100644 --- a/Makefile.am +++ b/Makefile.am @@ -25,10 +25,6 @@ CFLAGS += -Wno-unused-parameter -Wno-unused-variable CFLAGS += -Ilibssh/include/ -Imsgpack/src CFLAGS += -rdynamic # for stack traces -if IS_DEVENV -CFLAGS += -DDEVENV -endif - # Set flags for gcc. gcc4 whines abouts silly stuff so it needs slightly # different flags. if IS_GCC diff --git a/configure.ac b/configure.ac index 47717977..878d3674 100644 --- a/configure.ac +++ b/configure.ac @@ -40,13 +40,6 @@ AC_CHECK_HEADERS( ] ) -AC_ARG_ENABLE( - devenv, - AC_HELP_STRING(--enable-devenv, "dev env (localhost, port 2200, no auth checks)"), - found_devenv=$enable_devenv -) -AM_CONDITIONAL(IS_DEVENV, test "x$found_devenv" = xyes) - # Is this a debug build? #found_debug=yes AC_ARG_ENABLE( diff --git a/options-table.c b/options-table.c index 342fd172..30c329c0 100644 --- a/options-table.c +++ b/options-table.c @@ -169,18 +169,6 @@ const struct options_table_entry session_options_table[] = { .default_num = 750 }, - { .name = "tmate-display-time", - .type = OPTIONS_TABLE_NUMBER, - .minimum = 1, - .maximum = INT_MAX, - .default_num = 30000 - }, - - { .name = "tmate-identity", - .type = OPTIONS_TABLE_STRING, - .default_str = "" - }, - { .name = "history-limit", .type = OPTIONS_TABLE_NUMBER, .minimum = 0, @@ -463,6 +451,46 @@ const struct options_table_entry session_options_table[] = { .default_str = " -_@" }, + { .name = "tmate-display-time", + .type = OPTIONS_TABLE_NUMBER, + .minimum = 1, + .maximum = INT_MAX, + .default_num = 30000 + }, + + { .name = "tmate-identity", + .type = OPTIONS_TABLE_STRING, + .default_str = "" + }, + + { .name = "tmate-server-host", + .type = OPTIONS_TABLE_STRING, + .default_str = "master.tmate.io" + }, + + { .name = "tmate-server-port", + .type = OPTIONS_TABLE_NUMBER, + .minimum = 1, + .maximum = 65535, + .default_num = 22 + }, + + { .name = "tmate-server-dsa-fingerprint", + .type = OPTIONS_TABLE_STRING, + .default_str = "f5:26:31:c3:8a:78:6e:5c:77:74:0f:41:5b:5f:21:88" + }, + + { .name = "tmate-server-rsa-fingerprint", + .type = OPTIONS_TABLE_STRING, + .default_str = "af:2d:81:c1:fe:49:70:2d:7f:09:a9:d7:4b:32:e3:be" + }, + + { .name = "tmate-server-ecdsa-fingerprint", + .type = OPTIONS_TABLE_STRING, + .default_str = "c7:a1:51:36:d2:bb:35:4b:0a:1a:c0:43:97:74:ea:42" + }, + + { .name = NULL } }; diff --git a/tmate-session.c b/tmate-session.c index c14def66..4f8e77a5 100644 --- a/tmate-session.c +++ b/tmate-session.c @@ -29,10 +29,11 @@ static void dns_cb(int errcode, struct evutil_addrinfo *addr, void *ptr) struct tmate_ssh_client *client; struct evutil_addrinfo *ai; struct timeval tv; + const char *host = ptr; if (errcode) { tmate_status_message("%s lookup failure. Retrying in %d seconds (%s)", - TMATE_HOST, TMATE_DNS_RETRY_TIMEOUT, + host, TMATE_DNS_RETRY_TIMEOUT, evutil_gai_strerror(errcode)); tv.tv_sec = TMATE_DNS_RETRY_TIMEOUT; @@ -44,7 +45,7 @@ static void dns_cb(int errcode, struct evutil_addrinfo *addr, void *ptr) return; } - tmate_status_message("Connecting to %s...", TMATE_HOST); + tmate_status_message("Connecting to %s...", host); for (ai = addr; ai; ai = ai->ai_next) { char buf[128]; @@ -79,6 +80,7 @@ static void dns_cb(int errcode, struct evutil_addrinfo *addr, void *ptr) static void lookup_and_connect(void) { struct evutil_addrinfo hints; + const char *tmate_server_host; if (!ev_dnsbase) ev_dnsbase = evdns_base_new(ev_base, 1); @@ -91,9 +93,11 @@ static void lookup_and_connect(void) hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; - tmate_info("Looking up %s...", TMATE_HOST); - (void)evdns_getaddrinfo(ev_dnsbase, TMATE_HOST, NULL, - &hints, dns_cb, NULL); + tmate_server_host = options_get_string(&global_s_options, + "tmate-server-host"); + tmate_info("Looking up %s...", tmate_server_host); + (void)evdns_getaddrinfo(ev_dnsbase, tmate_server_host, NULL, + &hints, dns_cb, tmate_server_host); } void tmate_session_init(void) diff --git a/tmate-ssh-client.c b/tmate-ssh-client.c index a930e28c..c4ad1de3 100644 --- a/tmate-ssh-client.c +++ b/tmate-ssh-client.c @@ -168,10 +168,11 @@ static void on_session_event(struct tmate_ssh_client *client) unsigned char *hash; ssize_t hash_len; char *hash_str; + char *server_hash_str; int match; int verbosity = SSH_LOG_NOLOG + debug_level; - int port = TMATE_PORT; + int port = options_get_number(&global_s_options, "tmate-server-port"); ssh_session session = client->session; ssh_channel channel = client->channel; @@ -241,24 +242,26 @@ static void on_session_event(struct tmate_ssh_client *client) if (ssh_get_publickey(session, &pubkey) < 0) tmate_fatal("ssh_get_publickey"); -#ifdef DEVENV - match = 1; -#else key_type = ssh_key_type(pubkey); + switch (key_type) { case SSH_KEYTYPE_DSS: - match = !strcmp(hash_str, TMATE_HOST_DSA_KEY); + server_hash_str = options_get_string(&global_s_options, + "tmate-server-dsa-fingerprint"); break; case SSH_KEYTYPE_RSA: - match = !strcmp(hash_str, TMATE_HOST_RSA_KEY); + server_hash_str = options_get_string(&global_s_options, + "tmate-server-rsa-fingerprint"); break; case SSH_KEYTYPE_ECDSA: - match = !strcmp(hash_str, TMATE_HOST_ECDSA_KEY); + server_hash_str = options_get_string(&global_s_options, + "tmate-server-ecdsa-fingerprint"); break; default: - match = 0; + server_hash_str = ""; } -#endif + + match = !strcmp(hash_str, server_hash_str); ssh_key_free(pubkey); ssh_clean_pubkey_hash(&hash); diff --git a/tmate.h b/tmate.h index 673f3a6d..ab202cf7 100644 --- a/tmate.h +++ b/tmate.h @@ -72,17 +72,6 @@ extern void tmate_decoder_commit(struct tmate_decoder *decoder, size_t len); /* tmate-ssh-client.c */ -#ifdef DEVENV -#define TMATE_HOST "localhost" -#define TMATE_PORT 2200 -#else -#define TMATE_HOST "master.tmate.io" -#define TMATE_PORT 22 -#define TMATE_HOST_DSA_KEY "f5:26:31:c3:8a:78:6e:5c:77:74:0f:41:5b:5f:21:88" -#define TMATE_HOST_RSA_KEY "af:2d:81:c1:fe:49:70:2d:7f:09:a9:d7:4b:32:e3:be" -#define TMATE_HOST_ECDSA_KEY "c7:a1:51:36:d2:bb:35:4b:0a:1a:c0:43:97:74:ea:42" -#endif - enum tmate_ssh_client_state_types { SSH_NONE, SSH_INIT,