УкраїнськаEnglishmRussian
Вход/Новый
В теме нет новых постов

[BugFixed] Падение в OSCADA::TUser::auth


Автор Сообщение
Сообщение создано: 10. 10. 2017 [10:38]
fido_max
Maxim Kochetkov
Contributor
Создатель темы
Зарегистрирован(а) с: 28.10.2010
Сообщения: 129
1. Создаем нового пользователя в QT-конфигураторе.
2. ID пишем русскими буквами.
3. Нажимаем кнопку сохранить, либо срабатывает автосохранение.
4. В свойствах нового пользователя меняем БД, в которую его сохранять, и сохраняем.
5. Закрываем скаду с сохранением.
6. Запускаем скаду.
7. При попытке логина этим пользователем получаем падение.
Вложенный файл

RPMK_core_2017-10-09_15.13.crash (Тип файла: application/octet-stream, Размер: 135.04 килобайт) — 2465 загрузок
AGLKS_core_2017-10-10_10.24.crash (Тип файла: application/octet-stream, Размер: 240.89 килобайт) — 2457 загрузок
Сообщение создано: 10. 10. 2017 [16:43]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
У меня нет таких проблем.
Собственно добавил пользователя и установил пароль из дампа "AGLKS_core_2017-10-10_10.24.crash". Как результат:
- всё сохранилось;
- успешно аутентифицировался от нового пользователя;
- успешно аутентифицировался при запуске.

P.S. Отчёт о падении указывает на проблему при сравнении хешей, после функции crypt_r(), что может быть только если эта функция возвращает NULL, что сильно экзотично и я вообще не ожидал от неё такого.
P.P.S. Однако проверку на NULL добавил, хотя у меня сообщений об ошибке этой функции сейчас нет.

Ставлю статус как "Fixed", хотя у меня и нет этой проблемы.

Learn, learn and learn better than work, work and work.
Сообщение создано: 10. 10. 2017 [17:04]
fido_max
Maxim Kochetkov
Contributor
Создатель темы
Зарегистрирован(а) с: 28.10.2010
Сообщения: 129
В консоле такое еще остается:
Core dump process for back trace purchase to file AGLKS_core_2017-10-10_10.33.crash
106 ../sysdeps/x86_64/strlen.S: Нет такого файла или каталога.
Python Exception <class 'gdb.error'> No type named std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, float>>.:
Python Exception <class 'gdb.error'> value of type `crypt_data' requires 131232 bytes, which is more than max-value-size:
Python Exception <class 'gdb.error'> value of type `crypt_data' requires 131232 bytes, which is more than max-value-size:

Проблема есть, когда один и тот же пользователь с русскими буквами в двух БД: в основной без пароля, а в другой с паролем. Пароль может быть любым, а имя пользователя написано обязательно русскими буквами. Если ID пользователя написано латиницей, то падения не происходит.

[Сообщение редактировалось 1 раз(а), в последний раз 10.10.2017 в 17:05.]
Сообщение создано: 10. 10. 2017 [17:18]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"fido_max" wrote:

В консоле такое еще остается:
Core dump process for back trace purchase to file AGLKS_core_2017-10-10_10.33.crash
106 ../sysdeps/x86_64/strlen.S: Нет такого файла или каталога.
Python Exception <class 'gdb.error'> No type named std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, float>>.:
Python Exception <class 'gdb.error'> value of type `crypt_data' requires 131232 bytes, which is more than max-value-size:
Python Exception <class 'gdb.error'> value of type `crypt_data' requires 131232 bytes, which is more than max-value-size:

Это не существенно и внутренние дела gdb.

"fido_max" wrote:

Проблема есть, когда один и тот же пользователь с русскими буквами в двух БД: в основной без пароля, а в другой с паролем. Пароль может быть любым, а имя пользователя написано обязательно русскими буквами. Если ID пользователя написано латиницей, то падения не происходит.

Пусть он будет хоть в десяти, а грузится он по факту с первой, поэтому это не ключевой момент.

P.S. Пароль убрал — проблем нет.
P.P.S. Добавил пользователя с другого дампа — тоже никаких проблем.

Learn, learn and learn better than work, work and work.
Сообщение создано: 11. 10. 2017 [08:37]
fido_max
Maxim Kochetkov
Contributor
Создатель темы
Зарегистрирован(а) с: 28.10.2010
Сообщения: 129
Проблема остается.

./openscada_start: строка 128: 5490 Ошибка сегментирования (стек памяти сброшен на диск) $pCmd $@
Program rezult: 139
Core dump process for back trace purchase to file AGLKS_core_2017-10-11_08.33.crash
106 ../sysdeps/x86_64/strlen.S: Нет такого файла или каталога.
Python Exception <class 'gdb.error'> No type named std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, float>>.:
Python Exception <class 'gdb.error'> value of type `crypt_data' requires 131232 bytes, which is more than max-value-size:
Python Exception <class 'gdb.error'> value of type `crypt_data' requires 131232 bytes, which is more than max-value-size:

Воспроизвести можно даже проще.

1. Создаем пользователя русскими буквами. Ничего больше не настраиваем кроме ID при создании. Не сохраняем.
2. Пытаемся им залогинится - получаем падение.

На пользователя с латинскими буквами говорит ошибка аутентификации и не падает.

Проблема в русских буквах и отсутствии пароля
Вложенный файл

AGLKS_core_2017-10-11_08.33.crash (Тип файла: application/octet-stream, Размер: 253.6 килобайт) — 2425 загрузок
Сообщение создано: 11. 10. 2017 [08:49]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"fido_max" wrote:

Проблема остается.

Я ещё и не выгружал проверки-исправления!

"fido_max" wrote:

./openscada_start: строка 128: 5490 Ошибка сегментирования (стек памяти сброшен на диск) $pCmd $@
Program rezult: 139
Core dump process for back trace purchase to file AGLKS_core_2017-10-11_08.33.crash
106 ../sysdeps/x86_64/strlen.S: Нет такого файла или каталога.
Python Exception <class 'gdb.error'> No type named std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, float>>.:
Python Exception <class 'gdb.error'> value of type `crypt_data' requires 131232 bytes, which is more than max-value-size:
Python Exception <class 'gdb.error'> value of type `crypt_data' requires 131232 bytes, which is more than max-value-size:

Воспроизвести можно даже проще.

1. Создаем пользователя русскими буквами. Ничего больше не настраиваем кроме ID при создании. Не сохраняем.
2. Пытаемся им залогинится - получаем падение.

Я сразу так делал и у меня ничего не падает.

Вот и увидел это сообщение от crypt_r(): АГЛКС > Безопасность: Error crypt_r(): Некорректный аргумент (22). После которого оно обычно и падало и которое из-за отсутствия установки пароля вообще, поскольку пустой это тоже установка пароля, в случае с хешем.

Добавил принудительную установку пустого пароля в конструкторе.

Learn, learn and learn better than work, work and work.
Сообщение создано: 11. 10. 2017 [17:24]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"roman" wrote:

Я ещё и не выгружал проверки-исправления!

Выгрузил.

Learn, learn and learn better than work, work and work.



1661