Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Cетевые протоколы и технологии

Cетевые протоколы и технологии TCP/IP стек

Ответ
 
Опции темы Опции просмотра
Старый 24.03.2013, 03:28   #1
Sich1981
Junior Member
 
Регистрация: 17.03.2013
Возраст: 36
Сообщений: 27
Вес репутации: 100/19
Sich1981 will become famous soon enoughSich1981 will become famous soon enough
По умолчанию Помогите разобраться с HTTPCheckAuth

Разбираюсь с TCP/IP стеком.

Пытаюсь реализовать нескольких пользователей с различными правами доступа.

В структуру Appconfig добавил:
Код:
 
    BYTE admin_log [16];
    BYTE admin_pass [16];
    BYTE User1_log [16];
    BYTE User1_pass [16];
через веб интерфейс запрашиваю логин, пароль. Все работает.

Проблема возникает в функции BYTE HTTPCheckAuth(BYTE* cUser, BYTE* cPass)

для сравнения введенного логина/пароля используется функция:
strcmppgm2ram (a, b)
a - Pointer to string in RAM
b - Pointer to string in ROM

Выражение вида
Код:
 if(strcmppgm2ram((char *)cUser,(ROM char *)AppConfig.admin_log) == 0
        && strcmppgm2ram((char *)cPass, (ROM char *)AppConfig.admin_pass) == 0)
        return 0x80;        // We accept this combination
компилируется, но при логине не пускает.

Уже голова плохо соображает, туплю страшно. ПОмогите разобраться
Sich1981 вне форума   Ответить с цитированием
Старый 24.03.2013, 10:18   #2
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,299
Вес репутации: 4442/102
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: Помогите разобраться с HTTPCheckAuth

Цитата:
Сообщение от Sich1981 Посмотреть сообщение
Разбираюсь с TCP/IP стеком.

Пытаюсь реализовать нескольких пользователей с различными правами доступа.

В структуру Appconfig добавил:
Код:
 
    BYTE admin_log [16];
    BYTE admin_pass [16];
    BYTE User1_log [16];
    BYTE User1_pass [16];
через веб интерфейс запрашиваю логин, пароль. Все работает.

Проблема возникает в функции BYTE HTTPCheckAuth(BYTE* cUser, BYTE* cPass)

для сравнения введенного логина/пароля используется функция:
strcmppgm2ram (a, b)
a - Pointer to string in RAM
b - Pointer to string in ROM

Выражение вида
Код:
 if(strcmppgm2ram((char *)cUser,(ROM char *)AppConfig.admin_log) == 0
        && strcmppgm2ram((char *)cPass, (ROM char *)AppConfig.admin_pass) == 0)
        return 0x80;        // We accept this combination
компилируется, но при логине не пускает.

Уже голова плохо соображает, туплю страшно. ПОмогите разобраться
не пробовал strcmp(a,b) ? без добавок (ROM char*)
ampersant вне форума   Ответить с цитированием
Старый 24.03.2013, 11:28   #3
Vanizma
Senior Member
 
Аватар для Vanizma
 
Регистрация: 30.04.2008
Адрес: Pskov
Сообщений: 4,139
Вес репутации: 4300/119
Vanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond repute
Отправить сообщение для Vanizma с помощью ICQ
По умолчанию Re: Помогите разобраться с HTTPCheckAuth

Цитата:
Сообщение от Sich1981 Посмотреть сообщение
Разбираюсь с TCP/IP стеком.

Пытаюсь реализовать нескольких пользователей с различными правами доступа.

В структуру Appconfig добавил:
Код:
 
    BYTE admin_log [16];
    BYTE admin_pass [16];
    BYTE User1_log [16];
    BYTE User1_pass [16];
через веб интерфейс запрашиваю логин, пароль. Все работает.

Проблема возникает в функции BYTE HTTPCheckAuth(BYTE* cUser, BYTE* cPass)

для сравнения введенного логина/пароля используется функция:
strcmppgm2ram (a, b)
a - Pointer to string in RAM
b - Pointer to string in ROM

Выражение вида
Код:
 if(strcmppgm2ram((char *)cUser,(ROM char *)AppConfig.admin_log) == 0
        && strcmppgm2ram((char *)cPass, (ROM char *)AppConfig.admin_pass) == 0)
        return 0x80;        // We accept this combination
компилируется, но при логине не пускает.

Уже голова плохо соображает, туплю страшно. ПОмогите разобраться
AppConfig в RAM хранится же.
__________________

Vanizma вне форума   Ответить с цитированием
Старый 24.03.2013, 14:26   #4
Sich1981
Junior Member
 
Регистрация: 17.03.2013
Возраст: 36
Сообщений: 27
Вес репутации: 100/19
Sich1981 will become famous soon enoughSich1981 will become famous soon enough
По умолчанию Re: Помогите разобраться с HTTPCheckAuth

Цитата:
Сообщение от ampersant Посмотреть сообщение
не пробовал strcmp(a,b) ? без добавок (ROM char*)
Попробовал, получилось, спасибо. Что-то в 2 часа ночи уже плохо соображал.
Sich1981 вне форума   Ответить с цитированием
Старый 24.03.2013, 20:32   #5
Sich1981
Junior Member
 
Регистрация: 17.03.2013
Возраст: 36
Сообщений: 27
Вес репутации: 100/19
Sich1981 will become famous soon enoughSich1981 will become famous soon enough
По умолчанию Re: Помогите разобраться с HTTPCheckAuth

Опять, появился вопрос, решил новую тему не начинать, продолжу в этой.

Завис на проверке вводимой строки (только латинские буквы + цифры)
при установке пользовательского пароля .
Конечно проверку можно было организовать ява скриптом или использовать новые возможности HTML 5 (проверка с помощью регулярных выражений). Но на стороне сервера проверку производить все равно нужно, поэтому засунул обработчик в функцию HTTPPost.

Код:
 char* str;
char symb;
char len;
BYTE i;

  strcpy((char*)str,(char*)curHTTP.data+6);
        len=strlen((char*)str);
        if (len<5 || len>15)
        goto PassFailure;
    
    for (i=0; i<len;)
        {
        symb = (char)str[i];
        if (symb >= 'a' && symb <= 'z') i++;
        else if (symb >= 'A' && symb <= 'Z') i++;
        else if (symb >= '0' && symb <= '9') i++;
        else goto PassFailure;
        }
Вылез интересный баг. При отладке обратил внимание на то, что при длине вводимой строки до 9 символов включительно, все работает адекватно, а при длине 10 и больше символов обработчик вылетает в PassFailure. Пробовал убрать проверку по длине строки, баг не пропадает.
Что бы это могло быть?
Sich1981 вне форума   Ответить с цитированием
Старый 24.03.2013, 22:33   #6
Sich1981
Junior Member
 
Регистрация: 17.03.2013
Возраст: 36
Сообщений: 27
Вес репутации: 100/19
Sich1981 will become famous soon enoughSich1981 will become famous soon enough
По умолчанию Re: Помогите разобраться с HTTPCheckAuth

Сам разобрался, проблема была в методе POST.
Надо было во время проверять
Код:
 HTTP_READ_INCOMPLETE
и возвращать
Код:
return HTTP_IO_NEED_DATA
Sich1981 вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться с tmr0 freiheit303 Вопросы начинающих 1 10.01.2011 19:22
Помогите разобраться с программой на Си Smolman Вопросы начинающих 3 19.02.2010 23:27
Помогите разобраться в работе схемы Милашка Вопросы начинающих 2 02.06.2009 02:11
Помогите разобраться misha_j Вопросы начинающих 3 24.01.2009 22:09
Помогите новичку разобраться с GSM-модемом Oleg555 Общетехнические вопросы 3 24.12.2008 18:11


Часовой пояс GMT +3, время: 18:44.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot