Полезная информация

Заказывай стафф с атрибутикой Mozilla и... пусть все вокруг завидуют тебе! Быть уникальным - быть с Mozilla!

№107-09-2006 19:31:53

Dima_0
Участник
 
Группа: Members
Зарегистрирован: 29-08-2005
Сообщений: 5

Проблемы при авторизации в UserGate

У меня выход в Интернет происходит через прокси-сервер. На этом прокси-сервере стоит UserGate 2.8. Логины пользователей – это фамилии русскими буквами + инициалы. В UserGate настроена HTTP-авторизация.
  Проблема в том, что при выходе в Интернет выскакивает окно, в котором надо ввести логин и пароль доступа. Если логин содержит только английские буквы ни каких проблем, а если русские, то авторизация не происходит и окошко выскакивает еще раз.
  В IE все работает и английскими и с русскими буквами.

  Я пробовал ставить у себя UserGate v2.8, v4.0, v4.1 и проверял с помощью IE, FireFox v1.0, v1.5, v2.0b2. Результат один и тот же: в IE все работает, а в FireFox нет. :cry:
Что делать? Очень хочется пользоваться FireFox не только дома, но и на работе.

Отсутствует

 

№208-09-2006 19:16:19

Dima_0
Участник
 
Группа: Members
Зарегистрирован: 29-08-2005
Сообщений: 5

Re: Проблемы при авторизации в UserGate

Ну что же, сам спросил, сам и отвечаю.

Все дело в переводе из 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;
   

LossyCopyUTF16toASCII

(user, userpass);
    userpass.Append(':'); // always send a ':' (see bug 129565)
    if (password)
       

LossyAppendUTF16toASCII

(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);

Как очевидно из названия функция преобразует с потерями.

Ну вот, ошибка найдена. Как мне теперь сообщить об этом разработчикам? Если учесть, что английский я очень плохо знаю, еле-еле читать получается.

Отсутствует

 

№309-09-2006 03:41:23

Unghost
Призрак-админ
 
Группа: Administrators
Откуда: Moscow, Russia
Зарегистрирован: 08-10-2004
Сообщений: 11771

Re: Проблемы при авторизации в UserGate

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.

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]