diff --git a/ssh.h b/ssh.h index aa6a6075..b438b35b 100644 --- a/ssh.h +++ b/ssh.h @@ -1107,49 +1107,51 @@ int platform_ssh_share(const char *name, Conf *conf, void platform_ssh_share_cleanup(const char *name); /* - * SSH-1 message type codes. + * List macro defining the SSH-1 message type codes. */ -#define SSH1_MSG_DISCONNECT 1 /* 0x1 */ -#define SSH1_SMSG_PUBLIC_KEY 2 /* 0x2 */ -#define SSH1_CMSG_SESSION_KEY 3 /* 0x3 */ -#define SSH1_CMSG_USER 4 /* 0x4 */ -#define SSH1_CMSG_AUTH_RSA 6 /* 0x6 */ -#define SSH1_SMSG_AUTH_RSA_CHALLENGE 7 /* 0x7 */ -#define SSH1_CMSG_AUTH_RSA_RESPONSE 8 /* 0x8 */ -#define SSH1_CMSG_AUTH_PASSWORD 9 /* 0x9 */ -#define SSH1_CMSG_REQUEST_PTY 10 /* 0xa */ -#define SSH1_CMSG_WINDOW_SIZE 11 /* 0xb */ -#define SSH1_CMSG_EXEC_SHELL 12 /* 0xc */ -#define SSH1_CMSG_EXEC_CMD 13 /* 0xd */ -#define SSH1_SMSG_SUCCESS 14 /* 0xe */ -#define SSH1_SMSG_FAILURE 15 /* 0xf */ -#define SSH1_CMSG_STDIN_DATA 16 /* 0x10 */ -#define SSH1_SMSG_STDOUT_DATA 17 /* 0x11 */ -#define SSH1_SMSG_STDERR_DATA 18 /* 0x12 */ -#define SSH1_CMSG_EOF 19 /* 0x13 */ -#define SSH1_SMSG_EXIT_STATUS 20 /* 0x14 */ -#define SSH1_MSG_CHANNEL_OPEN_CONFIRMATION 21 /* 0x15 */ -#define SSH1_MSG_CHANNEL_OPEN_FAILURE 22 /* 0x16 */ -#define SSH1_MSG_CHANNEL_DATA 23 /* 0x17 */ -#define SSH1_MSG_CHANNEL_CLOSE 24 /* 0x18 */ -#define SSH1_MSG_CHANNEL_CLOSE_CONFIRMATION 25 /* 0x19 */ -#define SSH1_SMSG_X11_OPEN 27 /* 0x1b */ -#define SSH1_CMSG_PORT_FORWARD_REQUEST 28 /* 0x1c */ -#define SSH1_MSG_PORT_OPEN 29 /* 0x1d */ -#define SSH1_CMSG_AGENT_REQUEST_FORWARDING 30 /* 0x1e */ -#define SSH1_SMSG_AGENT_OPEN 31 /* 0x1f */ -#define SSH1_MSG_IGNORE 32 /* 0x20 */ -#define SSH1_CMSG_EXIT_CONFIRMATION 33 /* 0x21 */ -#define SSH1_CMSG_X11_REQUEST_FORWARDING 34 /* 0x22 */ -#define SSH1_CMSG_AUTH_RHOSTS_RSA 35 /* 0x23 */ -#define SSH1_MSG_DEBUG 36 /* 0x24 */ -#define SSH1_CMSG_REQUEST_COMPRESSION 37 /* 0x25 */ -#define SSH1_CMSG_AUTH_TIS 39 /* 0x27 */ -#define SSH1_SMSG_AUTH_TIS_CHALLENGE 40 /* 0x28 */ -#define SSH1_CMSG_AUTH_TIS_RESPONSE 41 /* 0x29 */ -#define SSH1_CMSG_AUTH_CCARD 70 /* 0x46 */ -#define SSH1_SMSG_AUTH_CCARD_CHALLENGE 71 /* 0x47 */ -#define SSH1_CMSG_AUTH_CCARD_RESPONSE 72 /* 0x48 */ +#define SSH1_MESSAGE_TYPES(X, y) \ + X(y, SSH1_MSG_DISCONNECT, 1) \ + X(y, SSH1_SMSG_PUBLIC_KEY, 2) \ + X(y, SSH1_CMSG_SESSION_KEY, 3) \ + X(y, SSH1_CMSG_USER, 4) \ + X(y, SSH1_CMSG_AUTH_RSA, 6) \ + X(y, SSH1_SMSG_AUTH_RSA_CHALLENGE, 7) \ + X(y, SSH1_CMSG_AUTH_RSA_RESPONSE, 8) \ + X(y, SSH1_CMSG_AUTH_PASSWORD, 9) \ + X(y, SSH1_CMSG_REQUEST_PTY, 10) \ + X(y, SSH1_CMSG_WINDOW_SIZE, 11) \ + X(y, SSH1_CMSG_EXEC_SHELL, 12) \ + X(y, SSH1_CMSG_EXEC_CMD, 13) \ + X(y, SSH1_SMSG_SUCCESS, 14) \ + X(y, SSH1_SMSG_FAILURE, 15) \ + X(y, SSH1_CMSG_STDIN_DATA, 16) \ + X(y, SSH1_SMSG_STDOUT_DATA, 17) \ + X(y, SSH1_SMSG_STDERR_DATA, 18) \ + X(y, SSH1_CMSG_EOF, 19) \ + X(y, SSH1_SMSG_EXIT_STATUS, 20) \ + X(y, SSH1_MSG_CHANNEL_OPEN_CONFIRMATION, 21) \ + X(y, SSH1_MSG_CHANNEL_OPEN_FAILURE, 22) \ + X(y, SSH1_MSG_CHANNEL_DATA, 23) \ + X(y, SSH1_MSG_CHANNEL_CLOSE, 24) \ + X(y, SSH1_MSG_CHANNEL_CLOSE_CONFIRMATION, 25) \ + X(y, SSH1_SMSG_X11_OPEN, 27) \ + X(y, SSH1_CMSG_PORT_FORWARD_REQUEST, 28) \ + X(y, SSH1_MSG_PORT_OPEN, 29) \ + X(y, SSH1_CMSG_AGENT_REQUEST_FORWARDING, 30) \ + X(y, SSH1_SMSG_AGENT_OPEN, 31) \ + X(y, SSH1_MSG_IGNORE, 32) \ + X(y, SSH1_CMSG_EXIT_CONFIRMATION, 33) \ + X(y, SSH1_CMSG_X11_REQUEST_FORWARDING, 34) \ + X(y, SSH1_CMSG_AUTH_RHOSTS_RSA, 35) \ + X(y, SSH1_MSG_DEBUG, 36) \ + X(y, SSH1_CMSG_REQUEST_COMPRESSION, 37) \ + X(y, SSH1_CMSG_AUTH_TIS, 39) \ + X(y, SSH1_SMSG_AUTH_TIS_CHALLENGE, 40) \ + X(y, SSH1_CMSG_AUTH_TIS_RESPONSE, 41) \ + X(y, SSH1_CMSG_AUTH_CCARD, 70) \ + X(y, SSH1_SMSG_AUTH_CCARD_CHALLENGE, 71) \ + X(y, SSH1_CMSG_AUTH_CCARD_RESPONSE, 72) \ + /* end of list */ #define SSH1_AUTH_RHOSTS 1 /* 0x1 */ #define SSH1_AUTH_RSA 2 /* 0x2 */ @@ -1163,68 +1165,79 @@ void platform_ssh_share_cleanup(const char *name); #define SSH1_PROTOFLAGS_SUPPORTED 0 /* 0x1 */ /* - * SSH-2 message type codes. + * List macro defining SSH-2 message type codes. Some of these depend + * on particular contexts (i.e. a previously negotiated kex or auth + * method) */ -#define SSH2_MSG_DISCONNECT 1 /* 0x1 */ -#define SSH2_MSG_IGNORE 2 /* 0x2 */ -#define SSH2_MSG_UNIMPLEMENTED 3 /* 0x3 */ -#define SSH2_MSG_DEBUG 4 /* 0x4 */ -#define SSH2_MSG_SERVICE_REQUEST 5 /* 0x5 */ -#define SSH2_MSG_SERVICE_ACCEPT 6 /* 0x6 */ -#define SSH2_MSG_KEXINIT 20 /* 0x14 */ -#define SSH2_MSG_NEWKEYS 21 /* 0x15 */ -#define SSH2_MSG_KEXDH_INIT 30 /* 0x1e */ -#define SSH2_MSG_KEXDH_REPLY 31 /* 0x1f */ -#define SSH2_MSG_KEX_DH_GEX_REQUEST_OLD 30 /* 0x1e */ -#define SSH2_MSG_KEX_DH_GEX_REQUEST 34 /* 0x22 */ -#define SSH2_MSG_KEX_DH_GEX_GROUP 31 /* 0x1f */ -#define SSH2_MSG_KEX_DH_GEX_INIT 32 /* 0x20 */ -#define SSH2_MSG_KEX_DH_GEX_REPLY 33 /* 0x21 */ -#define SSH2_MSG_KEXGSS_INIT 30 /* 0x1e */ -#define SSH2_MSG_KEXGSS_CONTINUE 31 /* 0x1f */ -#define SSH2_MSG_KEXGSS_COMPLETE 32 /* 0x20 */ -#define SSH2_MSG_KEXGSS_HOSTKEY 33 /* 0x21 */ -#define SSH2_MSG_KEXGSS_ERROR 34 /* 0x22 */ -#define SSH2_MSG_KEXGSS_GROUPREQ 40 /* 0x28 */ -#define SSH2_MSG_KEXGSS_GROUP 41 /* 0x29 */ -#define SSH2_MSG_KEXRSA_PUBKEY 30 /* 0x1e */ -#define SSH2_MSG_KEXRSA_SECRET 31 /* 0x1f */ -#define SSH2_MSG_KEXRSA_DONE 32 /* 0x20 */ -#define SSH2_MSG_KEX_ECDH_INIT 30 /* 0x1e */ -#define SSH2_MSG_KEX_ECDH_REPLY 31 /* 0x1f */ -#define SSH2_MSG_KEX_ECMQV_INIT 30 /* 0x1e */ -#define SSH2_MSG_KEX_ECMQV_REPLY 31 /* 0x1f */ -#define SSH2_MSG_USERAUTH_REQUEST 50 /* 0x32 */ -#define SSH2_MSG_USERAUTH_FAILURE 51 /* 0x33 */ -#define SSH2_MSG_USERAUTH_SUCCESS 52 /* 0x34 */ -#define SSH2_MSG_USERAUTH_BANNER 53 /* 0x35 */ -#define SSH2_MSG_USERAUTH_PK_OK 60 /* 0x3c */ -#define SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ 60 /* 0x3c */ -#define SSH2_MSG_USERAUTH_INFO_REQUEST 60 /* 0x3c */ -#define SSH2_MSG_USERAUTH_INFO_RESPONSE 61 /* 0x3d */ -#define SSH2_MSG_GLOBAL_REQUEST 80 /* 0x50 */ -#define SSH2_MSG_REQUEST_SUCCESS 81 /* 0x51 */ -#define SSH2_MSG_REQUEST_FAILURE 82 /* 0x52 */ -#define SSH2_MSG_CHANNEL_OPEN 90 /* 0x5a */ -#define SSH2_MSG_CHANNEL_OPEN_CONFIRMATION 91 /* 0x5b */ -#define SSH2_MSG_CHANNEL_OPEN_FAILURE 92 /* 0x5c */ -#define SSH2_MSG_CHANNEL_WINDOW_ADJUST 93 /* 0x5d */ -#define SSH2_MSG_CHANNEL_DATA 94 /* 0x5e */ -#define SSH2_MSG_CHANNEL_EXTENDED_DATA 95 /* 0x5f */ -#define SSH2_MSG_CHANNEL_EOF 96 /* 0x60 */ -#define SSH2_MSG_CHANNEL_CLOSE 97 /* 0x61 */ -#define SSH2_MSG_CHANNEL_REQUEST 98 /* 0x62 */ -#define SSH2_MSG_CHANNEL_SUCCESS 99 /* 0x63 */ -#define SSH2_MSG_CHANNEL_FAILURE 100 /* 0x64 */ -#define SSH2_MSG_USERAUTH_GSSAPI_RESPONSE 60 -#define SSH2_MSG_USERAUTH_GSSAPI_TOKEN 61 -#define SSH2_MSG_USERAUTH_GSSAPI_EXCHANGE_COMPLETE 63 -#define SSH2_MSG_USERAUTH_GSSAPI_ERROR 64 -#define SSH2_MSG_USERAUTH_GSSAPI_ERRTOK 65 -#define SSH2_MSG_USERAUTH_GSSAPI_MIC 66 +#define SSH2_MESSAGE_TYPES(X, K, A, y) \ + X(y, SSH2_MSG_DISCONNECT, 1) \ + X(y, SSH2_MSG_IGNORE, 2) \ + X(y, SSH2_MSG_UNIMPLEMENTED, 3) \ + X(y, SSH2_MSG_DEBUG, 4) \ + X(y, SSH2_MSG_SERVICE_REQUEST, 5) \ + X(y, SSH2_MSG_SERVICE_ACCEPT, 6) \ + X(y, SSH2_MSG_KEXINIT, 20) \ + X(y, SSH2_MSG_NEWKEYS, 21) \ + K(y, SSH2_MSG_KEXDH_INIT, 30, SSH2_PKTCTX_DHGROUP) \ + K(y, SSH2_MSG_KEXDH_REPLY, 31, SSH2_PKTCTX_DHGROUP) \ + K(y, SSH2_MSG_KEX_DH_GEX_REQUEST_OLD, 30, SSH2_PKTCTX_DHGEX) \ + K(y, SSH2_MSG_KEX_DH_GEX_REQUEST, 34, SSH2_PKTCTX_DHGEX) \ + K(y, SSH2_MSG_KEX_DH_GEX_GROUP, 31, SSH2_PKTCTX_DHGEX) \ + K(y, SSH2_MSG_KEX_DH_GEX_INIT, 32, SSH2_PKTCTX_DHGEX) \ + K(y, SSH2_MSG_KEX_DH_GEX_REPLY, 33, SSH2_PKTCTX_DHGEX) \ + K(y, SSH2_MSG_KEXGSS_INIT, 30, SSH2_PKTCTX_GSSKEX) \ + K(y, SSH2_MSG_KEXGSS_CONTINUE, 31, SSH2_PKTCTX_GSSKEX) \ + K(y, SSH2_MSG_KEXGSS_COMPLETE, 32, SSH2_PKTCTX_GSSKEX) \ + K(y, SSH2_MSG_KEXGSS_HOSTKEY, 33, SSH2_PKTCTX_GSSKEX) \ + K(y, SSH2_MSG_KEXGSS_ERROR, 34, SSH2_PKTCTX_GSSKEX) \ + K(y, SSH2_MSG_KEXGSS_GROUPREQ, 40, SSH2_PKTCTX_GSSKEX) \ + K(y, SSH2_MSG_KEXGSS_GROUP, 41, SSH2_PKTCTX_GSSKEX) \ + K(y, SSH2_MSG_KEXRSA_PUBKEY, 30, SSH2_PKTCTX_RSAKEX) \ + K(y, SSH2_MSG_KEXRSA_SECRET, 31, SSH2_PKTCTX_RSAKEX) \ + K(y, SSH2_MSG_KEXRSA_DONE, 32, SSH2_PKTCTX_RSAKEX) \ + K(y, SSH2_MSG_KEX_ECDH_INIT, 30, SSH2_PKTCTX_DHGEX) \ + K(y, SSH2_MSG_KEX_ECDH_REPLY, 31, SSH2_PKTCTX_DHGEX) \ + X(y, SSH2_MSG_USERAUTH_REQUEST, 50) \ + X(y, SSH2_MSG_USERAUTH_FAILURE, 51) \ + X(y, SSH2_MSG_USERAUTH_SUCCESS, 52) \ + X(y, SSH2_MSG_USERAUTH_BANNER, 53) \ + A(y, SSH2_MSG_USERAUTH_PK_OK, 60, SSH2_PKTCTX_PUBLICKEY) \ + A(y, SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ, 60, SSH2_PKTCTX_PASSWORD) \ + A(y, SSH2_MSG_USERAUTH_INFO_REQUEST, 60, SSH2_PKTCTX_KBDINTER) \ + A(y, SSH2_MSG_USERAUTH_INFO_RESPONSE, 61, SSH2_PKTCTX_KBDINTER) \ + A(y, SSH2_MSG_USERAUTH_GSSAPI_RESPONSE, 60, SSH2_PKTCTX_GSSAPI) \ + A(y, SSH2_MSG_USERAUTH_GSSAPI_TOKEN, 61, SSH2_PKTCTX_GSSAPI) \ + A(y, SSH2_MSG_USERAUTH_GSSAPI_EXCHANGE_COMPLETE, 63, SSH2_PKTCTX_GSSAPI) \ + A(y, SSH2_MSG_USERAUTH_GSSAPI_ERROR, 64, SSH2_PKTCTX_GSSAPI) \ + A(y, SSH2_MSG_USERAUTH_GSSAPI_ERRTOK, 65, SSH2_PKTCTX_GSSAPI) \ + A(y, SSH2_MSG_USERAUTH_GSSAPI_MIC, 66, SSH2_PKTCTX_GSSAPI) \ + X(y, SSH2_MSG_GLOBAL_REQUEST, 80) \ + X(y, SSH2_MSG_REQUEST_SUCCESS, 81) \ + X(y, SSH2_MSG_REQUEST_FAILURE, 82) \ + X(y, SSH2_MSG_CHANNEL_OPEN, 90) \ + X(y, SSH2_MSG_CHANNEL_OPEN_CONFIRMATION, 91) \ + X(y, SSH2_MSG_CHANNEL_OPEN_FAILURE, 92) \ + X(y, SSH2_MSG_CHANNEL_WINDOW_ADJUST, 93) \ + X(y, SSH2_MSG_CHANNEL_DATA, 94) \ + X(y, SSH2_MSG_CHANNEL_EXTENDED_DATA, 95) \ + X(y, SSH2_MSG_CHANNEL_EOF, 96) \ + X(y, SSH2_MSG_CHANNEL_CLOSE, 97) \ + X(y, SSH2_MSG_CHANNEL_REQUEST, 98) \ + X(y, SSH2_MSG_CHANNEL_SUCCESS, 99) \ + X(y, SSH2_MSG_CHANNEL_FAILURE, 100) \ + /* end of list */ -/* Virtual packet type, for packets too short to even have a type */ -#define SSH_MSG_NO_TYPE_CODE 0x100 +#define DEF_ENUM_UNIVERSAL(y, name, value) name = value, +#define DEF_ENUM_CONTEXTUAL(y, name, value, context) name = value, +enum { + SSH1_MESSAGE_TYPES(DEF_ENUM_UNIVERSAL, y) + SSH2_MESSAGE_TYPES(DEF_ENUM_UNIVERSAL, + DEF_ENUM_CONTEXTUAL, DEF_ENUM_CONTEXTUAL, y) + /* Virtual packet type, for packets too short to even have a type */ + SSH_MSG_NO_TYPE_CODE = 256 +}; +#undef DEF_ENUM_UNIVERSAL +#undef DEF_ENUM_CONTEXTUAL /* Given that virtual packet types exist, this is how big the dispatch * table has to be */ diff --git a/sshcommon.c b/sshcommon.c index 757580ff..3b7fc6a8 100644 --- a/sshcommon.c +++ b/sshcommon.c @@ -560,112 +560,24 @@ void add_to_commasep(strbuf *buf, const char *data) * string names. */ -#define translate(x) if (type == x) return #x -#define translatek(x,ctx) if (type == x && (pkt_kctx == ctx)) return #x -#define translatea(x,ctx) if (type == x && (pkt_actx == ctx)) return #x +#define TRANSLATE_UNIVERSAL(y, name, value) \ + if (type == value) return #name; +#define TRANSLATE_KEX(y, name, value, ctx) \ + if (type == value && pkt_kctx == ctx) return #name; +#define TRANSLATE_AUTH(y, name, value, ctx) \ + if (type == value && pkt_actx == ctx) return #name; + const char *ssh1_pkt_type(int type) { - translate(SSH1_MSG_DISCONNECT); - translate(SSH1_SMSG_PUBLIC_KEY); - translate(SSH1_CMSG_SESSION_KEY); - translate(SSH1_CMSG_USER); - translate(SSH1_CMSG_AUTH_RSA); - translate(SSH1_SMSG_AUTH_RSA_CHALLENGE); - translate(SSH1_CMSG_AUTH_RSA_RESPONSE); - translate(SSH1_CMSG_AUTH_PASSWORD); - translate(SSH1_CMSG_REQUEST_PTY); - translate(SSH1_CMSG_WINDOW_SIZE); - translate(SSH1_CMSG_EXEC_SHELL); - translate(SSH1_CMSG_EXEC_CMD); - translate(SSH1_SMSG_SUCCESS); - translate(SSH1_SMSG_FAILURE); - translate(SSH1_CMSG_STDIN_DATA); - translate(SSH1_SMSG_STDOUT_DATA); - translate(SSH1_SMSG_STDERR_DATA); - translate(SSH1_CMSG_EOF); - translate(SSH1_SMSG_EXIT_STATUS); - translate(SSH1_MSG_CHANNEL_OPEN_CONFIRMATION); - translate(SSH1_MSG_CHANNEL_OPEN_FAILURE); - translate(SSH1_MSG_CHANNEL_DATA); - translate(SSH1_MSG_CHANNEL_CLOSE); - translate(SSH1_MSG_CHANNEL_CLOSE_CONFIRMATION); - translate(SSH1_SMSG_X11_OPEN); - translate(SSH1_CMSG_PORT_FORWARD_REQUEST); - translate(SSH1_MSG_PORT_OPEN); - translate(SSH1_CMSG_AGENT_REQUEST_FORWARDING); - translate(SSH1_SMSG_AGENT_OPEN); - translate(SSH1_MSG_IGNORE); - translate(SSH1_CMSG_EXIT_CONFIRMATION); - translate(SSH1_CMSG_X11_REQUEST_FORWARDING); - translate(SSH1_CMSG_AUTH_RHOSTS_RSA); - translate(SSH1_MSG_DEBUG); - translate(SSH1_CMSG_REQUEST_COMPRESSION); - translate(SSH1_CMSG_AUTH_TIS); - translate(SSH1_SMSG_AUTH_TIS_CHALLENGE); - translate(SSH1_CMSG_AUTH_TIS_RESPONSE); - translate(SSH1_CMSG_AUTH_CCARD); - translate(SSH1_SMSG_AUTH_CCARD_CHALLENGE); - translate(SSH1_CMSG_AUTH_CCARD_RESPONSE); + SSH1_MESSAGE_TYPES(TRANSLATE_UNIVERSAL, y); return "unknown"; } const char *ssh2_pkt_type(Pkt_KCtx pkt_kctx, Pkt_ACtx pkt_actx, int type) { - translatea(SSH2_MSG_USERAUTH_GSSAPI_RESPONSE,SSH2_PKTCTX_GSSAPI); - translatea(SSH2_MSG_USERAUTH_GSSAPI_TOKEN,SSH2_PKTCTX_GSSAPI); - translatea(SSH2_MSG_USERAUTH_GSSAPI_EXCHANGE_COMPLETE,SSH2_PKTCTX_GSSAPI); - translatea(SSH2_MSG_USERAUTH_GSSAPI_ERROR,SSH2_PKTCTX_GSSAPI); - translatea(SSH2_MSG_USERAUTH_GSSAPI_ERRTOK,SSH2_PKTCTX_GSSAPI); - translatea(SSH2_MSG_USERAUTH_GSSAPI_MIC, SSH2_PKTCTX_GSSAPI); - translate(SSH2_MSG_DISCONNECT); - translate(SSH2_MSG_IGNORE); - translate(SSH2_MSG_UNIMPLEMENTED); - translate(SSH2_MSG_DEBUG); - translate(SSH2_MSG_SERVICE_REQUEST); - translate(SSH2_MSG_SERVICE_ACCEPT); - translate(SSH2_MSG_KEXINIT); - translate(SSH2_MSG_NEWKEYS); - translatek(SSH2_MSG_KEXDH_INIT, SSH2_PKTCTX_DHGROUP); - translatek(SSH2_MSG_KEXDH_REPLY, SSH2_PKTCTX_DHGROUP); - translatek(SSH2_MSG_KEX_DH_GEX_REQUEST_OLD, SSH2_PKTCTX_DHGEX); - translatek(SSH2_MSG_KEX_DH_GEX_REQUEST, SSH2_PKTCTX_DHGEX); - translatek(SSH2_MSG_KEX_DH_GEX_GROUP, SSH2_PKTCTX_DHGEX); - translatek(SSH2_MSG_KEX_DH_GEX_INIT, SSH2_PKTCTX_DHGEX); - translatek(SSH2_MSG_KEX_DH_GEX_REPLY, SSH2_PKTCTX_DHGEX); - translatek(SSH2_MSG_KEXRSA_PUBKEY, SSH2_PKTCTX_RSAKEX); - translatek(SSH2_MSG_KEXRSA_SECRET, SSH2_PKTCTX_RSAKEX); - translatek(SSH2_MSG_KEXRSA_DONE, SSH2_PKTCTX_RSAKEX); - translatek(SSH2_MSG_KEX_ECDH_INIT, SSH2_PKTCTX_ECDHKEX); - translatek(SSH2_MSG_KEX_ECDH_REPLY, SSH2_PKTCTX_ECDHKEX); - translatek(SSH2_MSG_KEXGSS_INIT, SSH2_PKTCTX_GSSKEX); - translatek(SSH2_MSG_KEXGSS_CONTINUE, SSH2_PKTCTX_GSSKEX); - translatek(SSH2_MSG_KEXGSS_COMPLETE, SSH2_PKTCTX_GSSKEX); - translatek(SSH2_MSG_KEXGSS_HOSTKEY, SSH2_PKTCTX_GSSKEX); - translatek(SSH2_MSG_KEXGSS_ERROR, SSH2_PKTCTX_GSSKEX); - translatek(SSH2_MSG_KEXGSS_GROUPREQ, SSH2_PKTCTX_GSSKEX); - translatek(SSH2_MSG_KEXGSS_GROUP, SSH2_PKTCTX_GSSKEX); - translate(SSH2_MSG_USERAUTH_REQUEST); - translate(SSH2_MSG_USERAUTH_FAILURE); - translate(SSH2_MSG_USERAUTH_SUCCESS); - translate(SSH2_MSG_USERAUTH_BANNER); - translatea(SSH2_MSG_USERAUTH_PK_OK, SSH2_PKTCTX_PUBLICKEY); - translatea(SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ, SSH2_PKTCTX_PASSWORD); - translatea(SSH2_MSG_USERAUTH_INFO_REQUEST, SSH2_PKTCTX_KBDINTER); - translatea(SSH2_MSG_USERAUTH_INFO_RESPONSE, SSH2_PKTCTX_KBDINTER); - translate(SSH2_MSG_GLOBAL_REQUEST); - translate(SSH2_MSG_REQUEST_SUCCESS); - translate(SSH2_MSG_REQUEST_FAILURE); - translate(SSH2_MSG_CHANNEL_OPEN); - translate(SSH2_MSG_CHANNEL_OPEN_CONFIRMATION); - translate(SSH2_MSG_CHANNEL_OPEN_FAILURE); - translate(SSH2_MSG_CHANNEL_WINDOW_ADJUST); - translate(SSH2_MSG_CHANNEL_DATA); - translate(SSH2_MSG_CHANNEL_EXTENDED_DATA); - translate(SSH2_MSG_CHANNEL_EOF); - translate(SSH2_MSG_CHANNEL_CLOSE); - translate(SSH2_MSG_CHANNEL_REQUEST); - translate(SSH2_MSG_CHANNEL_SUCCESS); - translate(SSH2_MSG_CHANNEL_FAILURE); + SSH2_MESSAGE_TYPES(TRANSLATE_UNIVERSAL, TRANSLATE_KEX, TRANSLATE_AUTH, y); return "unknown"; } -#undef translate -#undef translatec + +#undef TRANSLATE_UNIVERSAL +#undef TRANSLATE_KEX +#undef TRANSLATE_AUTH