napTu 4 Опубликовано: 2010-09-06 14:19:17 Share Опубликовано: 2010-09-06 14:19:17 Подскажите, где поправить чтобы был тримминг пробелов имени пароля пришедшие от авторизатора? А еще и приведение имени к нижнему регистру. Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2010-09-07 07:00:14 Share Опубліковано: 2010-09-07 07:00:14 Подскажите, где поправить чтобы был тримминг пробелов имени пароля пришедшие от авторизатора? А еще и приведение имени к нижнему регистру. В плагине mod_auth_ia. Ваш К.О. Ссылка на сообщение Поделиться на других сайтах
napTu 4 Опубліковано: 2010-09-07 12:02:27 Автор Share Опубліковано: 2010-09-07 12:02:27 это понятно что проще отмазаться чем помочь ))) я то нашел где, нашел реализацию 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; } Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2010-09-07 13:53:38 Share Опубліковано: 2010-09-07 13:53:38 Да, втыкать там. Код грязновастенький, но вроде рабочий (не проверял). Можно разместить его (без include) прямо в этом файле где-нибуть в конце, и в начале сделать объявление: int SqueezeSpaces(char *s); Воткнуть примерно так: SqueezeSpaces(login); Проверку возвращаемого значения можно не делать т.к. login у нас расположен на стеке и никогда не будет NULL. Если при компиляции будет ругаться на EOF - можно заменить на 0. Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2010-09-07 14:02:33 Share Опубліковано: 2010-09-07 14:02:33 Код для приведения к нижнему регистру: void strtolower(char * val) { if (val == NULL) return; while ((*val = tolower(*val))) ++val; } Для его использования нужно подключить заголовочный файл: #include <cctype> Объявляется вверху файла так: void strtolower(char * val); Используется в том-же месте так: strtolower(login); Ссылка на сообщение Поделиться на других сайтах
napTu 4 Опубліковано: 2010-09-07 14:35:19 Автор Share Опубліковано: 2010-09-07 14:35:19 Спасибо! Со SqueezeSpaces собралось, чет предупредило только inetaccess.cpp: In function 'int SqueezeSpaces(char*)': inetaccess.cpp:722: warning: suggest parentheses around assignment used as truth value Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2010-09-07 14:41:46 Share Опубліковано: 2010-09-07 14:41:46 Спасибо! Со 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++)) Ссылка на сообщение Поделиться на других сайтах
napTu 4 Опубліковано: 2010-09-07 14:42:12 Автор Share Опубліковано: 2010-09-07 14:42:12 Не совсем понимаю как происходит поиск здесь: user_iter user; if (users->FindByName(login, &user) == 0) Логин я переведу в нижний регистр, затем как сделать чтобы поиск производился по именам переведенным в нижний регистр? А затем, уже после найденного имени, укажу что login=user->GetLogin(); Ссылка на сообщение Поделиться на других сайтах
napTu 4 Опубліковано: 2010-09-07 22:35:24 Автор Share Опубліковано: 2010-09-07 22:35:24 попробовал еще и паролю трим сделать, не вышло, даже размер выходного файла не изменился ... map<string, int>::iterator pi; SqueezeSpaces(packetName); pi = packetTypes.find(packetName); if (pi == packetTypes.end()) ... Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2010-09-08 07:02:16 Share Опубліковано: 2010-09-08 07:02:16 попробовал еще и паролю трим сделать, не вышло, даже размер выходного файла не изменился ... map<string, int>::iterator pi; SqueezeSpaces(packetName); pi = packetTypes.find(packetName); if (pi == packetTypes.end()) ... packetName похож на пароль? Я так понял, в базе все тоже хранится в разных регистрах? Тогда проще забить. Реально. Привести ВСЕ в регистронезависимую форму простыми правками не получится. А пароли так и вобще невозможно (разве только сам авторизатор править). Дело в том что они нигде не передаются от клиента к серверу. Они используются только для шифрования пакетов. И если на клиентской стороне пакет был зашифрован паролем в неправильном регистре и с пробелами то на сервере для его корректной расшифровки нужно будет откуда-то взять такой-же пароль в таком-же регистре и с такими-же пробелами. А это невозможно. Ссылка на сообщение Поделиться на других сайтах
napTu 4 Опубліковано: 2010-09-08 08:32:28 Автор Share Опубліковано: 2010-09-08 08:32:28 Тогда проще забить. Реально. Поковыряв вчера код тоже так подумал Еще раз спасибо за разъяснения Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВхід
Уже зарегистрированы? Войдите здесь.
Войти сейчас