| 253 |
buf[i] = 0; |
buf[i] = 0; |
| 254 |
} |
} |
| 255 |
|
|
| 256 |
|
static void normalize_generic_order(char *buf, char default_strings[], int default_strings_len) |
| 257 |
|
{ |
| 258 |
|
char listed[KEX_DH_MAX + 1]; |
| 259 |
|
char allowed[KEX_DH_MAX + 1]; |
| 260 |
|
int i, j; |
| 261 |
|
|
| 262 |
|
memset(listed, 0, sizeof(listed)); |
| 263 |
|
memset(allowed, 0, sizeof(allowed)); |
| 264 |
|
for (i = 0; i < default_strings_len ; i++) { |
| 265 |
|
allowed[default_strings[i]] = 1; |
| 266 |
|
} |
| 267 |
|
|
| 268 |
|
for (i = 0; buf[i] != 0; i++) { |
| 269 |
|
int num = buf[i] - '0'; |
| 270 |
|
|
| 271 |
|
if (num < 0 || num > default_strings_len |
| 272 |
|
|| !allowed[num] |
| 273 |
|
|| listed[num]) { |
| 274 |
|
memmove(buf + i, buf + i + 1, strlen(buf + i + 1) + 1); |
| 275 |
|
i--; |
| 276 |
|
} else { |
| 277 |
|
listed[num] = 1; |
| 278 |
|
} |
| 279 |
|
} |
| 280 |
|
|
| 281 |
|
for (j = 0; j < default_strings_len ; j++) { |
| 282 |
|
int num = default_strings[j]; |
| 283 |
|
|
| 284 |
|
if (!listed[num]) { |
| 285 |
|
buf[i] = num + '0'; |
| 286 |
|
i++; |
| 287 |
|
} |
| 288 |
|
} |
| 289 |
|
|
| 290 |
|
buf[i] = 0; |
| 291 |
|
} |
| 292 |
|
|
| 293 |
|
static void normalize_kex_order(char FAR * buf) |
| 294 |
|
{ |
| 295 |
|
static char default_strings[] = { |
| 296 |
|
KEX_ECDH_SHA2_256, |
| 297 |
|
KEX_ECDH_SHA2_384, |
| 298 |
|
KEX_ECDH_SHA2_521, |
| 299 |
|
KEX_DH_GEX_SHA256, |
| 300 |
|
KEX_DH_GEX_SHA1, |
| 301 |
|
KEX_DH_GRP14_SHA1, |
| 302 |
|
KEX_DH_GRP1_SHA1, |
| 303 |
|
KEX_DH_NONE, |
| 304 |
|
}; |
| 305 |
|
|
| 306 |
|
normalize_generic_order(buf, default_strings, NUM_ELEM(default_strings)); |
| 307 |
|
} |
| 308 |
|
|
| 309 |
|
static void normalize_host_key_order(char FAR * buf) |
| 310 |
|
{ |
| 311 |
|
static char default_strings[] = { |
| 312 |
|
KEY_ECDSA256, |
| 313 |
|
KEY_ECDSA384, |
| 314 |
|
KEY_ECDSA521, |
| 315 |
|
KEY_RSA, |
| 316 |
|
KEY_DSA, |
| 317 |
|
KEY_NONE, |
| 318 |
|
}; |
| 319 |
|
|
| 320 |
|
normalize_generic_order(buf, default_strings, NUM_ELEM(default_strings)); |
| 321 |
|
} |
| 322 |
|
|
| 323 |
|
static void normalize_mac_order(char FAR * buf) |
| 324 |
|
{ |
| 325 |
|
static char default_strings[] = { |
| 326 |
|
HMAC_SHA1, |
| 327 |
|
HMAC_MD5, |
| 328 |
|
HMAC_NONE, |
| 329 |
|
}; |
| 330 |
|
|
| 331 |
|
normalize_generic_order(buf, default_strings, NUM_ELEM(default_strings)); |
| 332 |
|
} |
| 333 |
|
|
| 334 |
|
static void normalize_comp_order(char FAR * buf) |
| 335 |
|
{ |
| 336 |
|
static char default_strings[] = { |
| 337 |
|
COMP_NONE, |
| 338 |
|
COMP_ZLIB, |
| 339 |
|
COMP_DELAYED, |
| 340 |
|
}; |
| 341 |
|
|
| 342 |
|
normalize_generic_order(buf, default_strings, NUM_ELEM(default_strings)); |
| 343 |
|
} |
| 344 |
|
|
| 345 |
|
|
| 346 |
/* Remove local settings from the shared memory block. */ |
/* Remove local settings from the shared memory block. */ |
| 347 |
static void clear_local_settings(PTInstVar pvar) |
static void clear_local_settings(PTInstVar pvar) |
| 348 |
{ |
{ |
| 400 |
READ_STD_STRING_OPTION(CipherOrder); |
READ_STD_STRING_OPTION(CipherOrder); |
| 401 |
normalize_cipher_order(settings->CipherOrder); |
normalize_cipher_order(settings->CipherOrder); |
| 402 |
|
|
| 403 |
|
// KEX order |
| 404 |
|
READ_STD_STRING_OPTION(KexOrder); |
| 405 |
|
normalize_kex_order(settings->KexOrder); |
| 406 |
|
// Host Key algorithm order |
| 407 |
|
READ_STD_STRING_OPTION(HostKeyOrder); |
| 408 |
|
normalize_host_key_order(settings->HostKeyOrder); |
| 409 |
|
// H-MAC order |
| 410 |
|
READ_STD_STRING_OPTION(MacOrder); |
| 411 |
|
normalize_mac_order(settings->MacOrder); |
| 412 |
|
// Compression algorithm order |
| 413 |
|
READ_STD_STRING_OPTION(CompOrder); |
| 414 |
|
normalize_comp_order(settings->CompOrder); |
| 415 |
|
|
| 416 |
read_string_option(fileName, "KnownHostsFiles", "ssh_known_hosts", |
read_string_option(fileName, "KnownHostsFiles", "ssh_known_hosts", |
| 417 |
settings->KnownHostsFiles, |
settings->KnownHostsFiles, |
| 418 |
sizeof(settings->KnownHostsFiles)); |
sizeof(settings->KnownHostsFiles)); |
| 495 |
WritePrivateProfileString("TTSSH", "CipherOrder", |
WritePrivateProfileString("TTSSH", "CipherOrder", |
| 496 |
settings->CipherOrder, fileName); |
settings->CipherOrder, fileName); |
| 497 |
|
|
| 498 |
|
WritePrivateProfileString("TTSSH", "KexOrder", |
| 499 |
|
settings->KexOrder, fileName); |
| 500 |
|
|
| 501 |
|
WritePrivateProfileString("TTSSH", "HostKeyOrder", |
| 502 |
|
settings->HostKeyOrder, fileName); |
| 503 |
|
|
| 504 |
|
WritePrivateProfileString("TTSSH", "MacOrder", |
| 505 |
|
settings->MacOrder, fileName); |
| 506 |
|
|
| 507 |
|
WritePrivateProfileString("TTSSH", "CompOrder", |
| 508 |
|
settings->CompOrder, fileName); |
| 509 |
|
|
| 510 |
WritePrivateProfileString("TTSSH", "KnownHostsFiles", |
WritePrivateProfileString("TTSSH", "KnownHostsFiles", |
| 511 |
settings->KnownHostsFiles, fileName); |
settings->KnownHostsFiles, fileName); |
| 512 |
|
|
| 940 |
|
|
| 941 |
// 設定を myproposal に反映するのは、接続直前のここだけ。 (2006.6.26 maya) |
// 設定を myproposal に反映するのは、接続直前のここだけ。 (2006.6.26 maya) |
| 942 |
SSH2_update_cipher_myproposal(pvar); |
SSH2_update_cipher_myproposal(pvar); |
| 943 |
|
SSH2_update_kex_myproposal(pvar); |
| 944 |
|
SSH2_update_host_key_myproposal(pvar); |
| 945 |
|
SSH2_update_hmac_myproposal(pvar); |
| 946 |
SSH2_update_compression_myproposal(pvar); |
SSH2_update_compression_myproposal(pvar); |
| 947 |
} |
} |
| 948 |
} |
} |