Перейти до

где поправить чтобы был тримминг пробелов имени-пароля


Рекомендованные сообщения

Подскажите, где поправить чтобы был тримминг пробелов имени пароля пришедшие от авторизатора?

А еще и приведение имени к нижнему регистру.

Ссылка на сообщение
Поделиться на других сайтах

Подскажите, где поправить чтобы был тримминг пробелов имени пароля пришедшие от авторизатора?

А еще и приведение имени к нижнему регистру.

В плагине mod_auth_ia.

Ваш К.О. :blink:

Ссылка на сообщение
Поделиться на других сайтах

это понятно что проще отмазаться чем помочь )))

я то нашел где, нашел реализацию alltrim, но в cpp - бум-бум и как воткнуть не знаю ))

Вероятно в

int AUTH_IA::RecvData(char * buffer, int bufferSize)
{
...
char login[PASSWD_LEN];  //TODO why PASSWD_LEN ?
memset(login, 0, PASSWD_LEN);

Decrypt(&ctxS, login, buffer + 8, PASSWD_LEN / 8);

sip = *((uint32_t*)&outerAddr.sin_addr);
sport = htons(outerAddr.sin_port);

// ГДЕ ТО ТУТ ===============================

user_iter user;
if (users->FindByName(login, &user) == 0)
   {
   printfd(__FILE__, "User %s FOUND!\n", user->GetLogin().c_str());
   PacketProcessor(buffer, dataLen, sip, sport, protoVer, &user);

...

 

способ трима нашел такой:

#include <string.h>

/* SqueezeSpaces:  удаляет из s группы пробелов _по краям_ */
int SqueezeSpaces(char *s)
{
   char *startp, *endp;

   if (s == NULL)
       return EOF;
   for (startp = s; *startp == ' '; startp++)
       ;
   if (startp-s > 0) {
       endp = startp;
       startp = s;
       while (*startp++ = *endp++)
           ;
   }
   endp = s+strlen(s);
   while (*--endp == ' ')
       *endp = '\0';
   return 1;        
}

Ссылка на сообщение
Поделиться на других сайтах

Да, втыкать там. Код грязновастенький, но вроде рабочий (не проверял). Можно разместить его (без include) прямо в этом файле где-нибуть в конце, и в начале сделать объявление:

int SqueezeSpaces(char *s);

Воткнуть примерно так:

SqueezeSpaces(login);

Проверку возвращаемого значения можно не делать т.к. login у нас расположен на стеке и никогда не будет NULL.

Если при компиляции будет ругаться на EOF - можно заменить на 0.

Ссылка на сообщение
Поделиться на других сайтах

Код для приведения к нижнему регистру:

void strtolower(char * val)
{
   if (val == NULL)
       return;
   while ((*val = tolower(*val)))
       ++val;
}

Для его использования нужно подключить заголовочный файл:

#include <cctype>

Объявляется вверху файла так:

void strtolower(char * val);

Используется в том-же месте так:

strtolower(login);

Ссылка на сообщение
Поделиться на других сайтах

Спасибо!

Со SqueezeSpaces собралось,

чет предупредило только

inetaccess.cpp: In function 'int SqueezeSpaces(char*)':
inetaccess.cpp:722: warning: suggest parentheses around assignment used as truth value

Ссылка на сообщение
Поделиться на других сайтах

Спасибо!

Со SqueezeSpaces собралось,

чет предупредило только

inetaccess.cpp: In function 'int SqueezeSpaces(char*)':
inetaccess.cpp:722: warning: suggest parentheses around assignment used as truth value

Не критично, но можешь заменить:

while (*startp++ = *endp++)

на

while ((*startp++ = *endp++))

Ссылка на сообщение
Поделиться на других сайтах

Не совсем понимаю как происходит поиск здесь:

user_iter user;
if (users->FindByName(login, &user) == 0)

Логин я переведу в нижний регистр, затем как сделать чтобы поиск производился по именам переведенным в нижний регистр?

А затем, уже после найденного имени, укажу что

login=user->GetLogin();

Ссылка на сообщение
Поделиться на других сайтах

попробовал еще и паролю трим сделать, не вышло, даже размер выходного файла не изменился :)

...
map<string, int>::iterator pi;

SqueezeSpaces(packetName);

pi = packetTypes.find(packetName);

if (pi == packetTypes.end())
...

Ссылка на сообщение
Поделиться на других сайтах

попробовал еще и паролю трим сделать, не вышло, даже размер выходного файла не изменился :)

...
map<string, int>::iterator pi;

SqueezeSpaces(packetName);

pi = packetTypes.find(packetName);

if (pi == packetTypes.end())
...

packetName похож на пароль? ;)

 

Я так понял, в базе все тоже хранится в разных регистрах? Тогда проще забить. Реально.

Привести ВСЕ в регистронезависимую форму простыми правками не получится. А пароли так и вобще невозможно (разве только сам авторизатор править).

Дело в том что они нигде не передаются от клиента к серверу. Они используются только для шифрования пакетов. И если на клиентской стороне пакет был зашифрован паролем в неправильном регистре и с пробелами то на сервере для его корректной расшифровки нужно будет откуда-то взять такой-же пароль в таком-же регистре и с такими-же пробелами. А это невозможно.

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...