Skip to content
Snippets Groups Projects
Commit f3bc86d9 authored by Deucе's avatar Deucе :ok_hand_tone4:
Browse files

Fix SSH fingerprinting.

A hex nybble is not 8 bits, and C strings need to be termianted.
parent 282069f9
No related branches found
No related tags found
No related merge requests found
Pipeline #5870 passed
...@@ -781,7 +781,7 @@ read_item(str_list_t listfile, struct bbslist *entry, char *bbsname, int id, int ...@@ -781,7 +781,7 @@ read_item(str_list_t listfile, struct bbslist *entry, char *bbsname, int id, int
for (i = 0; i < 20; i++) { for (i = 0; i < 20; i++) {
if (!(isxdigit(fp[i*2]) && isxdigit(fp[i*2+1]))) if (!(isxdigit(fp[i*2]) && isxdigit(fp[i*2+1])))
break; break;
entry->ssh_fingerprint[i] = (HEX_CHAR_TO_INT(fp[i*2]) * 256) + HEX_CHAR_TO_INT(fp[i*2+1]); entry->ssh_fingerprint[i] = (HEX_CHAR_TO_INT(fp[i*2]) * 16) + HEX_CHAR_TO_INT(fp[i*2+1]);
} }
if (i == 20) if (i == 20)
entry->has_fingerprint = true; entry->has_fingerprint = true;
...@@ -1745,6 +1745,7 @@ add_bbs(char *listpath, struct bbslist *bbs) ...@@ -1745,6 +1745,7 @@ add_bbs(char *listpath, struct bbslist *bbs)
for (int i = 0; i < 20; i++) { for (int i = 0; i < 20; i++) {
sprintf(&fp[i * 2], "%02x", bbs->ssh_fingerprint[i]); sprintf(&fp[i * 2], "%02x", bbs->ssh_fingerprint[i]);
} }
fp[sizeof(fp)-1] = 0;
iniSetString(&inifile, bbs->name, "SSHFingerprint", fp, &ini_style); iniSetString(&inifile, bbs->name, "SSHFingerprint", fp, &ini_style);
} }
iniSetBool(&inifile, bbs->name, "SFTPPublicKey", bbs->sftp_public_key, &ini_style); iniSetBool(&inifile, bbs->name, "SFTPPublicKey", bbs->sftp_public_key, &ini_style);
......
...@@ -922,15 +922,17 @@ ssh_connect(struct bbslist *bbs) ...@@ -922,15 +922,17 @@ ssh_connect(struct bbslist *bbs)
int i; int i;
slen = 0; slen = 0;
if (bbs->has_fingerprint) {
char ofpstr[41];
for (i = 0; i < sizeof(server_fp); i++) { for (i = 0; i < sizeof(server_fp); i++) {
sprintf(&fpstr[i * 2], "%02x", server_fp[i]); sprintf(&fpstr[i * 2], "%02x", server_fp[i]);
} }
fpstr[sizeof(fpstr)-1] = 0;
if (bbs->has_fingerprint) {
char ofpstr[41];
for (i = 0; i < sizeof(server_fp); i++) { for (i = 0; i < sizeof(server_fp); i++) {
sprintf(&ofpstr[i * 2], "%02x", bbs->ssh_fingerprint[i]); sprintf(&ofpstr[i * 2], "%02x", bbs->ssh_fingerprint[i]);
} }
ofpstr[sizeof(ofpstr)-1] = 0;
asprintf(&uifc.helpbuf, "`Fingerprint Changed`\n\n" asprintf(&uifc.helpbuf, "`Fingerprint Changed`\n\n"
"The server fingerprint has changed from the last known good connection.\n" "The server fingerprint has changed from the last known good connection.\n"
"This may indicate someone is evesdropping on your connection.\n" "This may indicate someone is evesdropping on your connection.\n"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment