У меня выход в Интернет происходит через прокси-сервер. На этом прокси-сервере стоит UserGate 2.8. Логины пользователей – это фамилии русскими буквами + инициалы. В UserGate настроена HTTP-авторизация.
Проблема в том, что при выходе в Интернет выскакивает окно, в котором надо ввести логин и пароль доступа. Если логин содержит только английские буквы ни каких проблем, а если русские, то авторизация не происходит и окошко выскакивает еще раз.
В IE все работает и английскими и с русскими буквами.
Я пробовал ставить у себя UserGate v2.8, v4.0, v4.1 и проверял с помощью IE, FireFox v1.0, v1.5, v2.0b2. Результат один и тот же: в IE все работает, а в FireFox нет.
Что делать? Очень хочется пользоваться FireFox не только дома, но и на работе.
Отсутствует
Ну что же, сам спросил, сам и отвечаю.
Все дело в переводе из Unicode16 в ASCII. После того как логин и пароль к прокси-серверу были введены FireFox перевод их в Unicode (он называет его UTF16). А перед отправлением на прокси-сервер переводит обратно в ASCII, но не верно!!! Он просто берет младшую часть Unicode! Для английских букв это не важно их Unicode имеет 0 в старшей части, а вот русские буквы превращаются в какую-то ерунду.
Пример преобразования букв ASCII->Unicode->ASCII
Char ASCII Unicode ASCII
А 0xC0 0x0410 0x10
Б 0xC1 0x0411 0x11
В 0xC2 0x0412 0x12
A 0x41 0x0041 0x41
B 0x42 0x0042 0x42
C 0x43 0x0043 0x43
Для знатоков скажу, что это происходит в mozilla\netwerk\protocol\http\src\nsHttpBasicAuth.cpp
Функция называется nsHttpBasicAuth::GenerateCredentials
// we work with ASCII around here
nsCAutoString userpass;
(user, userpass);
userpass.Append(':'); // always send a ':' (see bug 129565)
if (password)
(password, userpass);
// plbase64.h provides this worst-case output buffer size calculation.
// use calloc, since PL_Base64Encode does not null terminate.
*creds = (char *) calloc(6 + ((userpass.Length() + 2)/3)*4 + 1, 1);
if (!*creds)
return NS_ERROR_OUT_OF_MEMORY;
memcpy(*creds, "Basic ", 6);
PL_Base64Encode(userpass.get(), userpass.Length(), *creds + 6);
Как очевидно из названия функция преобразует с потерями.
Ну вот, ошибка найдена. Как мне теперь сообщить об этом разработчикам? Если учесть, что английский я очень плохо знаю, еле-еле читать получается.
Отсутствует
Dima_0
Ну вот, ошибка найдена. Как мне теперь сообщить об этом разработчикам?
https://bugzilla.mozilla.org/enter_bug.cgi?product=Core
Do not meddle in the affairs of Wizards, for they are subtle and quick to anger.
Отсутствует