110
110
const char *banner = session->serverbanner;
111
111
const char *openssh;
113
ssh_log(session, SSH_LOG_RARE, "Analyzing banner: %s", banner);
115
if (strncmp(banner, "SSH-", 4) != 0) {
116
ssh_set_error(session, SSH_FATAL, "Protocol mismatch: %s", banner);
113
if (banner == NULL) {
114
ssh_set_error(session, SSH_FATAL, "Invalid banner");
121
119
* Typical banners e.g. are:
121
* SSH-1.5-openSSH_5.4
122
* SSH-1.99-openSSH_3.0
125
* 012345678901234567890
127
if (strlen(banner) < 6 ||
128
strncmp(banner, "SSH-", 4) != 0) {
129
ssh_set_error(session, SSH_FATAL, "Protocol mismatch: %s", banner);
133
ssh_log(session, SSH_LOG_RARE, "Analyzing banner: %s", banner);
126
135
switch(banner[4]) {
129
if (banner[6] == '9') {
138
if (strlen(banner) > 6) {
139
if (banner[6] == '9') {
144
155
openssh = strstr(banner, "OpenSSH");
145
156
if (openssh != NULL) {
147
major = strtol(openssh + 8, (char **) NULL, 10);
148
minor = strtol(openssh + 10, (char **) NULL, 10);
149
session->openssh = SSH_VERSION_INT(major, minor, 0);
150
ssh_log(session, SSH_LOG_RARE,
151
"We are talking to an OpenSSH server version: %d.%d (%x)",
152
major, minor, session->openssh);
160
* The banner is typical:
162
* 012345678901234567890
164
if (strlen(openssh) > 9) {
165
major = strtol(openssh + 8, (char **) NULL, 10);
166
minor = strtol(openssh + 10, (char **) NULL, 10);
167
session->openssh = SSH_VERSION_INT(major, minor, 0);
168
ssh_log(session, SSH_LOG_RARE,
169
"We are talking to an OpenSSH client version: %d.%d (%x)",
170
major, minor, session->openssh);