On-line: PSP, гостей 4. Всего: 5 [подробнее..]
АвторСообщение



Пост N: 26
Зарегистрирован: 22.01.14
ссылка на сообщение  Отправлено: 15.02.17 14:05. Заголовок: Система авторизации


Проконсультируйте по системе авторизации в LetoDb.
С помощью консольной утилиты console.exe создал пользователя
Admin c паролем и права у него YYY. На сервере создался файлик leto_users
в котором вижу пользователя Admin, закодированный пароль, права.
(Предварительно в letodb.ini прописал параметр Pass_File = "Leto_users").
Остановил службу сервера LetoDb.
Далее в letodb.ini прописал параметр Pass_for_Login = 1, чтобы включить авторизацию
пользователя для соединения с сервером. Запустил службу сервера LetoDb.
В своей задаче пытаюсь соединиться с сервером
//LETO_CONNECT( cAddress, [ cUserName ], [ cPassword ], [ nTimeOut ], [ nBufRefreshTime ] )
IF leto_Connect( _Server, "Admin" ) == -1
nRes := leto_Connect_Err()
IF nRes == LETO_ERR_LOGIN
cErrText := "Login failed"
ELSEIF nRes == LETO_ERR_RECV
cErrText := "Recv Error"
ELSEIF nRes == LETO_ERR_SEND
cErrText := "Send Error"
ELSE
cErrText := "Нет соединения с сервером... Запустите сервер!"
ENDIF
MsgAlert( cErrText , "Предупреждение!" )
Return nil
EndIf

_Server указан правильно. При соединении пишет Login failed. Теперь и из консольной утилиты не
могу подсоединиться к серверу и из manage.exe. Пишет Login failed.
Если отключить систему авторизации - все работает нормально.
Что я делаю не правильно? LetoDb-2.17-b3.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 21 , стр: 1 2 All [только новые]


Администратор




Пост N: 3528
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 15.02.17 14:14. Заголовок: При вызове leto_Conn..


При вызове leto_Connect надо указывать еще и пароль, т.е.

IF leto_Connect( _Server, "Admin", <cPassw> ) == -1
...

регистр существенен.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 27
Зарегистрирован: 22.01.14
ссылка на сообщение  Отправлено: 15.02.17 14:24. Заголовок: Пробую: IF leto_Co..




Пробую:
IF leto_Connect( _Server, "Admin", 123456789 ) == -1
...
При соединении пишет Login failed

IF leto_Connect( _Server, "Admin", "123456789" ) == -1
...
При соединении пишет Login failed

Пробовал вместо пароля вставлять из Leto_users значение - результат тот-же.


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3529
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 15.02.17 15:27. Заголовок: Проделал те же дейст..


Проделал те же действия, и коннект успешно выполнился.
Попробуйте пересоздать пользователя, и убедитесь, что имя и пароль для leto_UserAdd и leto_Connect в точности совпадают, вплоть до хвостовых пробелов. Если их нет в leto_Connect, то не должно быть и в leto_UserAdd

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 28
Зарегистрирован: 22.01.14
ссылка на сообщение  Отправлено: 15.02.17 17:41. Заголовок: Странно все как-то....


Странно все как-то...
Все начинаю с нуля, теперь еще не создается файл с пользователями.

Вот мой файл настроек:
letodb.ini

[MAIN]
DataPath = d:\LetoDb\DB\
Pass_for_Login = 1
Pass_File = "leto_users"
EnableFileFunc = 1
Debug = 10

Вот логи сервера:
letodb.log


02/15/17 17:25:10: Leto DB Server has been started.


Leto DB Server v.2.17b3 ! INIT: DataPath=d:\LetoDb\DB, ShareTables=0, MaxUsers=500, MaxTables=5000, CacheRecords=10

02/15/17 17:25:10: D:\LetoDb\letoudf.hrb has been loaded.


DEBUG! new connect 127.0.0.1 (0 : 1 : 1)

DEBUG! close connect 127.0.0.1 ееееееееее console.exe users=(0 : 1 : 1), tables=(0 : 0)

DEBUG! close connect (null) (null) (null) users=(0 : 0 : 1), tables=(0 : 0)

DEBUG! new connect 127.0.0.1 (0 : 0 : 1)

DEBUG! close connect 127.0.0.1 ееееееееее console.exe users=(0 : 0 : 1), tables=(0 : 0)

DEBUG! close connect (null) (null) (null) users=(0 : 65535 : 1), tables=(0 : 0)

DEBUG! new connect 127.0.0.1 (0 : 65535 : 1)

DEBUG! close connect 127.0.0.1 ееееееееее console.exe users=(0 : 65535 : 1), tables=(0 : 0)

DEBUG! close connect (null) (null) (null) users=(0 : 65534 : 1), tables=(0 : 0)

DEBUG! new connect 127.0.0.1 (0 : 65534 : 1)

DEBUG! close connect 127.0.0.1 ееееееееее manage.exe users=(0 : 65534 : 1), tables=(0 : 0)

DEBUG! close connect (null) (null) (null) users=(0 : 65533 : 1), tables=(0 : 0)


letodb_0.log

127.0.0.1

intro;2.17b3;ееееееееее;console.exe;;;EN;mm/dd/yy;F
mgmt;00;
admin;uadd;user;9496E301679D4D81D0C96F6EA75D660A;YYY;
intro;2.17b3;ееееееееее;console.exe;;;EN;mm/dd/yy;F
mgmt;00;
intro;2.17b3;ееееееееее;console.exe;;;EN;mm/dd/yy;F
intro;2.17b3;ееееееееее;console.exe;user;75677BD6B1AD8E84B59C59E7CBEFC355;EN;mm/dd/yy;F
intro;2.17b3;ееееееееее;console.exe;user;2CC3B305C0510AD5111BD8A4B7FF5DA4;EN;mm/dd/yy;F
intro;2.17b3;ееееееееее;manage.exe;user;2796E4DFA96D58FCDCC83A7EC48ABA31;EN;mm/dd/yy;F

Пробовал с серверами как Daemon_mode так и Service_mode (Bin файлы с сайта Kresin.ru).

Пользователи создаются, но затем не могу соединиться с сервером с созданным пользователем.
Пользователей создаю console.exe.
Где хранятся имена и пароли пользователей? В файле из параметра Pass_File = ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1365
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.02.17 19:10. Заголовок: ZAlex пишет Где хран..


ZAlex пишет
 цитата:
Где хранятся имена и пароли пользователей?


В своем модуле (без manage.exe)
1. нет файла leto_users на сервере (в нем через ; хранятся user;password_кодированный;YYYNNNNNN; CRLF ...)
2. Pass_for_Login = 0
3. leto_connect("//127.0.0.1:2812/temp/") // соединились
4. leto_useradd("user1", "12345")
5. leto_useradd("user2", "aaaaa")
6. leto_useradd("user3", "bbbbb")
файла leto_users на сервере не будет, пока не остановим сервер или не дадим
7. leto_userflush(), т.е. работать можно и без файла, подгружая пользователей leto_useradd(...)
повторно (если есть уже) он не введется.
8. теперь, остановив сервер, можем изменить Pass_for_Login = 1 и запустить сервер снова
9. leto_connect("//127.0.0.1:2812/temp/", "user2", "aaaaa")
При неверном user или password получаем nRes := leto_Connect_Err()
ELSEIF nRes == LETO_ERR_LOGIN ; cErr += "Login failed" // 2
как то так работает.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1366
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.02.17 19:17. Заголовок: PS Если добавляем но..


PS
Если добавляем новых пользователей, в файле leto_users их не будет (обработка при коннекте есть)
до команды leto_userflush()

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1367
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.02.17 19:28. Заголовок: Авторизация работает..


Авторизация работает, но не хватает при connect из internet управления переменными в соединении (для защиты данных) EnableFileFunc = 0\1 и EnableUDF = 0\1\2, т.е. для соединения поставить EnableFileFunc = 0 и EnableUDF = 0 или 1 другому.
Сейчас ставим для таких соединений старую двухпоточную версию без hrb и EnableFileFunc = 0 и сервера в режиме Share_Tables = 1


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 29
Зарегистрирован: 22.01.14
ссылка на сообщение  Отправлено: 15.02.17 19:50. Заголовок: Спасибо за участие! ..


Спасибо за участие!
По такому же сценарию и делаю:
1. сервер остановлен.
2. Устанавливаю Pass_for_Login = 0
3. В программе пишу
IF leto_Connect( _Server ) == -1
....
LETO_USERADD( "user1", "1111" , "YYY" )
LETO_USERADD( "user2", "2222" , "YYY")
LETO_USERADD( "user3", "3333" , "YYY")

LETO_USERFLUSH()

4. Запускаю сервер.
5. Запускаю программу
6. В letodb_0.log вижу
iintro;2.17b3;xxxxxxxxxxx;BPK.exe;;;RU1251;DD.MM.YYYY;T
admin;uadd;user1;75766973BBF1FC91;YYY;
admin;uadd;user2;6A3A289AA6060C5B;YYY;
admin;uadd;user3;E75025DF4454C1C6;YYY;
admin;flush;
.
.
значит пользователи добавились.
7. Останавливаю сервер.
8. Устанавливаю параметр Pass_for_Login = 1
9. В программе пишу
IF leto_Connect( _Server, "user1", "1111" ) == -1
...
10. Запускаю сервер
11. Запускаю программу - пишет "Login failed"
12. В letodb_0.log вижу
intro;2.17b3;xxxxxxxxxxxxx;BPK.exe;user1;ECB53BE723F1E421;RU1251;DD.MM.YYYY;T
Почему пароль для user1 при создании и затем при выполнении модуля не совпадают?
Или это не то?
Сервер и клиента запускаю на Windows 7, машины в доменной сети.
Буду пробовать дома, может дело в правах пользователя. На Win7 вхожу не под админской учетной
записью.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1368
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.02.17 20:01. Заголовок: У нас сервера работа..


У нас сервера работают не как сервис, а как DAEMON изначально.
Запуск letodb.exe test и останов letodb.exe stop.
На чужих компах нормально с сервисами не дают работать админы.
Может старт\стоп сервиса не перечитывает ini ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6291
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.02.17 22:23. Заголовок: ZAlex А если пробну..


ZAlex
А если пробнуть по простому без L:P ?
В 2013 году я пробовал перевести с Clipper на Harbour + Leto и работало нормально , правда остался на Harbour + Ads

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 30
Зарегистрирован: 22.01.14
ссылка на сообщение  Отправлено: 15.02.17 22:36. Заголовок: Пробовал сервер как ..


Пробовал сервер как DAEMON - результат тот-же.
Менял переменные EnableFileFunc 0\1 , EnableUDF 0\1\2 в разных сочетаниях - не помогает.

Дома запускал под административной учеткой в разных вариантах DAEMON SERVICE - результат тот-же.
Что еще предпринять? Без авторизации все отлично работает, но по политике безопасности фирмы требуется авторизация. А что с логами - это правильно закодированные пароли? Почему не совпадают? В исходниках сервера не смотрел, но это подозрительно.



Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 31
Зарегистрирован: 22.01.14
ссылка на сообщение  Отправлено: 15.02.17 22:42. Заголовок: Dima А если пробнут..


Dima

 цитата:
А если пробнуть по простому без L:P ?


Не понял. Т.е. без LetoDb?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6292
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.02.17 22:45. Заголовок: ZAlex пишет: Не пон..


ZAlex пишет:

 цитата:
Не понял.


Без логина и пароля

Я когда тестил , подключался примерно так и все работало без всяких отдельных прог
 
iniret:=IniLeto()

if hb_HHasKey(iniret,'Home')
aHeader := iniret['Home']
pathleto:="//"+aHeader['IP adress']+":"+aHeader['Port']+"/"+aHeader['Path']
ipleto:="//"+aHeader['IP adress']+":"+aHeader['Port']+"/"
endif


if LETO_CONNECT(pathleto)==-1
nRes := leto_Connect_Err()
IF nRes == LETO_ERR_LOGIN
msg({"Login failed",""},,"Ошибка")
ELSEIF nRes == LETO_ERR_RECV
msg({"Recv Error",""},,"Ошибка")
ELSEIF nRes == LETO_ERR_SEND
msg({"Send Error",""},,"Ошибка")
ELSE
msg({"No connection",""},,"Ошибка")
ENDIF
quit
return nil
endif



Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 32
Зарегистрирован: 22.01.14
ссылка на сообщение  Отправлено: 15.02.17 23:17. Заголовок: Без логина и пароля ..


Без логина и пароля все работает отлично, но желательно иметь авторизацию.
Если сервер LetoDb имеет возможность такую возможность, почему бы не воспользоваться?
А желательно иметь сквозную авторизацию: залогинился на компьютер с доменной учеткой и ее использовать для соединения с сервером.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 33
Зарегистрирован: 22.01.14
ссылка на сообщение  Отправлено: 16.02.17 13:07. Заголовок: Версии компилятора и..


Версии компилятора и линковщика могут как-то влиять? У меня такие инструменты:
Компилятор Harbour
Version: 3.2.0dev (r1607181832)
Built on: Jul 20 2016

Линковщик
Embarcadero C++ 7.00 for Win32 Copyright (c) 1993-2015 Embarcadero Technologies, Inc.

Библиотека клиента и сервер Leto DB Server v.2.17b3.
Все-же меня смущает, что закодированный пароль(сохраненный) и используемый для авторизации в логах разные. Где искать причину?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3530
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 16.02.17 14:33. Заголовок: Авторизацию делал не..


Авторизацию делал не я, вот сижу разбираю, как она работает. Почему у Вас не работает - непонятно, у меня при тех же вводных все получилось. Даже имя и пароль сделал такие же - "user1" и "1111".
Пароль при добавлении пользователя и при авторизации передается в зашифрованном виде.
Ключ для шифровки каждый раз используется разный, поэтому и в логе зашифрованный пароль получается разный.
Сеансовый ключ генерируется сервером при коннекте пользователя, и затем используется во время сеанса.
Конечно, алгоритм его получения очень простой. Не все мне в этом алгоритме понятно, если Александр заглянет в эту тему, может быть он прояснит.

Дополню:
Клиент передает на сервер зашифрованный сеансовым ключем пароль при добавлении пользователя и его авторизации.
Сервер расшифровывает этот пароль тем же сеансовым ключем, а в файл leto_users записывает пароль, зашифрованный стандартным ключем, ну и при считывании этого файла расшифровывает его тем же стандартным ключем.
Неясен для меня такой момент: почему в файле leto_users и в команде uadd зашифрованный пароль получается одинаковым, ведь он шифруется разным ключем.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 34
Зарегистрирован: 22.01.14
ссылка на сообщение  Отправлено: 16.02.17 15:55. Заголовок: По файлу leto_users ..


По файлу leto_users - почему-то он не создается, когда добавляю пользователя командой LETO_USERADD( ...) и LETO_USERFLUSH() . Первый раз (когда создавал пользователя console.exe) этот файлик создался. После этого даже пустой не создается. Такое впечатление, что где-то в какой-то переменной хранится отметка о его создании. Компьютер полностью выключал и по новому запускал сервер. Может где-то здесь собака зарыта. Переносил сервер на другой комп - безрезультатно. Или дело в клиенте?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3531
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 17.02.17 08:05. Заголовок: Для службы letodb эт..


Для службы letodb этот файл может быть создан в папке c:\windows\system32.
Для демона он конечно будет в папке letodb.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 35
Зарегистрирован: 22.01.14
ссылка на сообщение  Отправлено: 17.02.17 23:54. Заголовок: Методом проб и ошибо..


Методом проб и ошибок пришел к такому результату:
- если в файле настроек letodb.ini параметр Pass_File с начальным пробелом - то файл с пользователями создается, корректируется и читается, если без пробела не читается и не создается.
- а вот параметр DataPath д.б. без начальных пробелов.
При таких условиях у меня начала работать авторизация. Чудно немного, но...

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3532
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 18.02.17 12:49. Заголовок: Задавать параметр Pa..


Задавать параметр Pass_File в letodb.ini необязательно, по умолчанию у него и так значение leto_users.
Наверное, дело в неточности примера задания этого параметра в readme.txt:

Pass_File = "leto_users"

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

Pass_File = leto_users


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 21 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 193
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет