POP3 Клиент - проблемы с паролем в UNICODE
От: KARDAN  
Дата: 13.03.07 07:28
Оценка:
Всем привет! Помогите новичку.
Прога задумана работать как POP3-клиент. Но пролбема в передачи пароля пользователя. При использовании пароля с Английской розкладкой всё работает нормально, но как только используеться Русская разкладка(шрифт), то пароль разпознает как не правильный. Соединение с сервером по POP3 проходит нормально. Вот пример кода:

char pass[256] = "Пароль";// если назначить "Parol" - работает нормально
char chSend[1024] = {0}, chRecv[1024] = {0};
int szBuff = 0, btRecv = 0;

szBuff = sprintf_s(chSend, 1024,"PASS %s\r\n", pass);
if (send(sClient, chSend, szBuff, 0) == SOCKET_ERROR)
{
    return -1;
}
btRecv = recv(sClient, chRecv, sizeof(chRecv), 0);


Подскажите как отправить пароль в Русской разкладке?
Я не волшебник, но хочу научится!!!
Re: POP3 Клиент - проблемы с паролем в UNICODE
От: DOOM Россия  
Дата: 13.03.07 07:45
Оценка:
Здравствуйте, KARDAN, Вы писали:

KAR>Всем привет! Помогите новичку.

KAR>Прога задумана работать как POP3-клиент. Но пролбема в передачи пароля пользователя. При использовании пароля с Английской розкладкой всё работает нормально, но как только используеться Русская разкладка(шрифт), то пароль разпознает как не правильный. Соединение с сервером по POP3 проходит нормально. Вот пример кода:
KAR>

KAR>char pass[256] = "Пароль";// если назначить "Parol" - работает нормально
KAR>char chSend[1024] = {0}, chRecv[1024] = {0};
KAR>int szBuff = 0, btRecv = 0;

KAR>szBuff = sprintf_s(chSend, 1024,"PASS %s\r\n", pass);
KAR>if (send(sClient, chSend, szBuff, 0) == SOCKET_ERROR)
KAR>{
KAR>    return -1;
KAR>}
KAR>btRecv = recv(sClient, chRecv, sizeof(chRecv), 0);

KAR>


KAR>Подскажите как отправить пароль в Русской раcкладке?


RFC1939:

Keywords and arguments consist of printable ASCII characters.

Получается, что по стандарту — никак. Только семибитная кодировка. Если надо поддержку с конкретным POP3 сервером, то смотри в какой кодировке он пароли сохраняет (или принимает, при заведении пользователя).
Re[2]: POP3 Клиент - проблемы с паролем в UNICODE
От: KARDAN  
Дата: 13.03.07 08:12
Оценка:
то есть, если я правильно понял, надо дописать вид кодировки:

szBuff = sprintf_s(chSend, 1024,"PASS =?Windows-1251?%s?=\r\n", pass); // примерно так?

Или что-то в этом роде?
Я не волшебник, но хочу научится!!!
Re[3]: POP3 Клиент - проблемы с паролем в UNICODE
От: DOOM Россия  
Дата: 13.03.07 08:20
Оценка:
Здравствуйте, KARDAN, Вы писали:

KAR>то есть, если я правильно понял, надо дописать вид кодировки:

KAR>

KAR>szBuff = sprintf_s(chSend, 1024,"PASS =?Windows-1251?%s?=\r\n", pass); // примерно так?

KAR>

KAR> Или что-то в этом роде?

Ни в коем случае! Та приписка не имеет отношения к протоколу POP3, это порождение времен MIME.
Еще раз — общего решения нет. Для конкретного POP3 сервера надо смотреть, что он использет.
Re: POP3 Клиент - проблемы с паролем в UNICODE
От: KARDAN  
Дата: 13.03.07 08:24
Оценка:
А как можно найти это? Допустим почтовик Kerio Mail Server .
Может подскажешь приблизительно, может есть примеры?
Я не волшебник, но хочу научится!!!
Re[2]: POP3 Клиент - проблемы с паролем в UNICODE
От: DOOM Россия  
Дата: 13.03.07 08:30
Оценка:
Здравствуйте, KARDAN, Вы писали:

KAR>А как можно найти это? Допустим почтовик Kerio Mail Server .

KAR>Может подскажешь приблизительно, может есть примеры?

По хорошему надо копаться в доках этого Kerio... Но ты можешь попробовать такое решение (что-то мне подсказывает, что вероятность успеха велика) — срезай восьмой бит на клиенте (зануляй его).
Re[3]: POP3 Клиент - проблемы с паролем в UNICODE
От: KARDAN  
Дата: 13.03.07 08:40
Оценка:
DOO>срезай восьмой бит на клиенте (зануляй его).
Чесно я в програмировании, по 10-ти бальной системе, наверное 1 с минусом. Я понимаю, что символ 'П' это 1байт = 8 битам, но на этом мои познания закнсиваються.
Если не сложно пример можешь привести.
Я не волшебник, но хочу научится!!!
Re[4]: POP3 Клиент - проблемы с паролем в UNICODE
От: KARDAN  
Дата: 13.03.07 09:03
Оценка:
DOOM, а если попробывать перевест с UNICODE в ASCII используя WideCharToMultiByte ?
Я не волшебник, но хочу научится!!!
Re[4]: POP3 Клиент - проблемы с паролем в UNICODE
От: DOOM Россия  
Дата: 13.03.07 09:36
Оценка:
Здравствуйте, KARDAN, Вы писали:

DOO>>срезай восьмой бит на клиенте (зануляй его).

KAR>Чесно я в програмировании, по 10-ти бальной системе, наверное 1 с минусом. Я понимаю, что символ 'П' это 1байт = 8 битам, но на этом мои познания закнсиваються.
KAR>Если не сложно пример можешь привести.


for (i = 0;i < l;i++)
{
    str[i] &= 0x8f; //первый бит и занулится... и "П" (емли оно в cp1251) превратится в "O".
}
Re[5]: POP3 Клиент - проблемы с паролем в UNICODE
От: DOOM Россия  
Дата: 13.03.07 09:37
Оценка:
Здравствуйте, KARDAN, Вы писали:

KAR>DOOM, а если попробывать перевест с UNICODE в ASCII используя WideCharToMultiByte ?


В ANSI ты хотел сказать, ASCII все же 7-ми битная. Вообще тоже стоит попробовать...
Re[5]: POP3 Клиент - проблемы с паролем в UNICODE
От: KARDAN  
Дата: 13.03.07 10:08
Оценка:
for (i = 0;i < l;i++)
{
    str[i] &= 0x8f; //первый бит и занулится... и "П" (емли оно в cp1251) превратится в "O".
}


l — а это длинна чего или как правильно инициализировать?
Я не волшебник, но хочу научится!!!
Re[6]: POP3 Клиент - проблемы с паролем в UNICODE
От: DOOM Россия  
Дата: 13.03.07 10:11
Оценка:
Здравствуйте, KARDAN, Вы писали:


KAR>
KAR>for (i = 0;i < l;i++)
KAR>{
KAR>    str[i] &= 0x8f; //первый бит и занулится... и "П" (емли оно в cp1251) превратится в "O".
KAR>}
KAR>


KAR>l — а это длинна чего или как правильно инициализировать?


l = strlen(str);
Re[5]: POP3 Клиент - проблемы с паролем в UNICODE
От: shadow08  
Дата: 13.03.07 13:41
Оценка: :)
Здравствуйте, DOOM, Вы писали:

DOO>
DOO>for (i = 0;i < l;i++)
DOO>{
DOO>    str[i] &= 0x8f; //первый бит и занулится... и "П" (емли оно в cp1251) превратится в "O".
DOO>}
DOO>

перед глазами мелькает ручка граблей и слышится звук удара... 0x7f
Re[6]: POP3 Клиент - проблемы с паролем в UNICODE
От: DOOM Россия  
Дата: 13.03.07 13:49
Оценка:
Здравствуйте, shadow08, Вы писали:

S>Здравствуйте, DOOM, Вы писали:


DOO>>
DOO>>for (i = 0;i < l;i++)
DOO>>{
DOO>>    str[i] &= 0x8f; //первый бит и занулится... и "П" (емли оно в cp1251) превратится в "O".
DOO>>}
DOO>>

S>перед глазами мелькает ручка граблей и слышится звук удара... 0x7f

Дааааа... Старость не радость. Пора в отпуск.
Re[7]: POP3 Клиент - проблемы с паролем в UNICODE
От: KARDAN  
Дата: 13.03.07 14:16
Оценка:

str[i] &= 0x8f; // тогда это получаеться 9bit что-ли

и если не сложно, 0x7f — разьясните хочу понять, что именно значит?
Я не волшебник, но хочу научится!!!
Re[8]: POP3 Клиент - проблемы с паролем в UNICODE
От: shadow08  
Дата: 13.03.07 16:27
Оценка:
Здравствуйте, KARDAN, Вы писали:

KAR>и если не сложно, 0x7f — разьясните хочу понять, что именно значит?

Нам нужно старший бит байта сделать нулевым. То есть, например,
из бинарного 11001111 (16ричное 0xCF) сделать 01001111 (0x4F)
Для этого применяем побитове умножение ( & ) с байтом 01111111. Это и есть — 0x7F
Re[5]: POP3 Клиент - проблемы с паролем в UNICODE
От: Pasha1st  
Дата: 13.03.07 16:27
Оценка:
DOO>
DOO>for (i = 0;i < l;i++)
DOO>{
DOO>    str[i] &= 0x8f; //первый бит и занулится... и "П" (емли оно в cp1251) превратится в "O".
DOO>}
DOO>


Поправочка, str[i] &= 0x7f;
Re[9]: POP3 Клиент - проблемы с паролем в UNICODE
От: KARDAN  
Дата: 14.03.07 08:59
Оценка:
shadow08, спосибо теперь понятно.
Я не волшебник, но хочу научится!!!
Re[10]: POP3 Клиент - проблемы с паролем в UNICODE
От: KARDAN  
Дата: 14.03.07 13:09
Оценка:
Попытка с занулением первого(старшего)бита не решила проблему. Попробывал использовать MultiByteToWideChar и WideCharToMultiByte, OemToChar и CharToOem, подставляя значения к этим фунциям, но результат, отрицательный.
Может у когото есть ещё варианты?
Я не волшебник, но хочу научится!!!
Re[11]: POP3 Клиент - проблемы с паролем в UNICODE
От: DOOM Россия  
Дата: 14.03.07 13:20
Оценка:
Здравствуйте, KARDAN, Вы писали:

KAR>Попытка с занулением первого(старшего)бита не решила проблему. Попробывал использовать MultiByteToWideChar и WideCharToMultiByte, OemToChar и CharToOem, подставляя значения к этим фунциям, но результат, отрицательный.

KAR>Может у когото есть ещё варианты?

Если какой-нибудь Outlook Express или еще какой почтовый клиент способен найти общий язык с этим сервером, перехвати его сетевую сессию и посмотри, что отсылает он...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.