On-line: PSP, гостей 1. Всего: 2 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 4156
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.05.15 22:44. Заголовок: Вопросы новичка... (продолжение)


Взял последнюю версию с "Новая страница с бинарниками", установил на Win2008 Server, чуток помучился с портом...
Собрал на МиниГуи+BCC 551 - \MiniGui\batch\hbmk2.bat rddleto.hbp
Получил rddleto.lib - 131072 байт - правильный ли размер ?
И еще Warning-и лезут:
lib\.hbmk\win\bcc\rddsys.c:
source\client\letocl.c:
source\client\leto1.c:
source\client\letomgmn.c:
source\common\blowfish.c:
source\common\common_c.c:
source\common\hbip.c:
TLIB 4.5 Copyright (c) 1987, 1999 Inprise Corporation
/P32 lib\rddleto.lib -+ lib\.hbmk\win\bcc\rddsys.obj -+ lib\.hbmk\win\bcc\letocl.obj -+ lib\.hbmk\win\bcc\leto1.obj -+ lib\.hbmk\win\bcc\letomgmn.obj -+ lib\.hbmk\win\bcc\blowfish.obj -+ lib\.hbmk\win\bcc\common_c.obj -+ lib\.hbmk\win\bcc\hbip.objWarning: 'rddsys' not found in library
Warning: 'letocl' not found in library
Warning: 'leto1' not found in library
Warning: 'letomgmn' not found in library
Warning: 'blowfish' not found in library
Warning: 'common_c' not found in library
Warning: 'hbip' not found in library

Так должно быть или нет ?

Вопрос сразу напрашивается с путями - как писать правильно "\" или "/" :
Local cPathServer := "//127.0.0.1:2812/"
cPathServer := cPathServer +"DATE_TEST_PATH\test.dbf"

Помню что где то обсуждали, а результат не запомнил...

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


постоянный участник


Пост N: 1225
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 02.08.16 23:20. Заголовок: Pasha пишет: Вызыва..


Pasha пишет:

 цитата:
Вызывать можно функции, указанные в request, ну и некоторые другие. Я пересматривал этот набор - он вполне безопасен.
Впрочем, я уже добавил параметр EnableUDF в letodb.ini, для возможности отключения udf.



Для себя внес изменения в letofunc.c


 цитата:
const char * szErrUDF = "-UDF"; 
..
void leto_udf( PUSERSTRU pUStru, const char* szData ) // mt?
..

if( uiCommand == 0 )
{
leto_wUsLog(pUStru,"ERROR! UDF: not a valid command\r\n", 0);
return;
}

nParam = leto_GetParam( szData, &pp2, &pp3, NULL, NULL );
// leto_writelog( NULL, 0, "UDF: %s, CMD=%d\r\n", pp2, uiCommand );

if( strlen( pp2 ) < 5 || hb_strnicmp( pp2, "UDF_", 4 ) != 0 )
{
leto_wUsLog(pUStru,"ERROR! UDF: not a valid name\r\n", 0);

leto_SendAnswer( pUStru, szErrUDF, 4 );
pUStru->bAnswerSent = 1;

return;
}

if( nParam < ( uiCommand == 1 ? 3 : ( uiCommand == 3 ? 1 : 2 ) ) )
leto_SendAnswer( pUStru, szErr2, 4 );
else
..



Т.е. имя UDF функции должно начинаться с UDF_ (UDF_() - не проходит) - хак с выполнением стандартных и функций leto через механизм leto_udf на сервере отсекается. Ну и сделал более осмысленным описание ошибки для leto_wUsLog.
Мне кажется такое решение более логичным существующего.


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



Пост N: 1129
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.08.16 18:08. Заголовок: Pasha Скачал letodb-..


Pasha
Скачал letodb-code-618295e5b48bf8ef2a50ca089ba73af8f1b57b85б :
 цитата:
... + added EnableUDF option in letodb.ini


но в HAPP нет считывания с letodb.ini EnableUGF и нет установки
 
leto_SetAppOptions( iif( Empty(::DataPath ),Nil,::DataPath ), ::nDriver, ::lFileFunc, ;
::lAnyExt, ::lPass4L, ::lPass4M, ::lPass4D, ::cPassName, ::lCryptTraffic, ;
::lShare, ::lNoSaveWA, nMaxVars, nMaxVarSize, nCacheRecords, nTables_max, nUsers_max, ;
nDebugMode, lOptimize, nAutOrder, nMemoType, lForceOpt, ::cTrigger, ::cPendingTrigger, lSetTrigger ) // нет 25 элемента

или я не там смотрю.

 цитата:
EnableUDF = 1 - если 1 (по умолчанию), разрешено использование udf-функций;


EnableUDF = 0 что делает, отключает все вызовы udf ?
Если да, то чем отличается услановка в 0 и работа сервера без letoudf.hrb ?



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




Пост N: 3475
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 05.08.16 08:21. Заголовок: Прошу прощения, проп..


Прошу прощения, пропустил при коммите server.prg. Поправлю.
Да, EnableUDF запрещает вызовы UDF. Может быть, имеет смысл еще добавить флаг UDFPrefix, который позволял бы вызовы только функций с именами UDF_*

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


Пост N: 1231
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 05.08.16 08:39. Заголовок: Как вариант, еще вме..


Как вариант, еще вместо одного letoudf.hrb можно использовать 2 (или более), например, letoudf_st.hrb и letoudf_us.hrb.
Запуск letoudf_st.hrb не зависит от EnableUDF, запуск letoudf_us.hrb (и остальных), соответственно, зависит.


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


Пост N: 1232
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 05.08.16 08:41. Заголовок: Pasha пишет: Может ..


Pasha пишет:

 цитата:
Может быть, имеет смысл еще добавить флаг UDFPrefix


Имеет, мой голос - за

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



Пост N: 1130
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.08.16 09:48. Заголовок: Pasha пишет Может бы..


Pasha пишет
 цитата:
Может быть, имеет смысл еще добавить флаг UDFPrefix


Я тоже за
Но можно просто обойтись режимом
0
1
2 - спрефиксоом udf_ (пока не вижу причин нескольких префиксов, но может ошибаюсь)
а то возникнет желание на каждого user уст. разрешено\нет udf, как с файловыми, mg ф-ими

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


Пост N: 1234
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 05.08.16 10:17. Заголовок: SergKis пишет: а то..


SergKis пишет:

 цитата:
а то возникнет желание на каждого user уст. разрешено


можно и на уровне функций, т.е. доступна ли функция a() пользователю b

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



Пост N: 1131
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.08.16 11:01. Заголовок: Петр пишет можно и н..


Петр пишет
 цитата:
можно и на уровне функций, т.е. доступна ли функция a() пользователю b


Скорее возникает желание в udf знать что то с LETO_USERGETRIGHTS( nUserStru ) (такой нет) + доп. установку на user в Pass_File = "leto_users" доплнительных данных (байт 10-20). Например так на клиенте
LETO_USERPARAM( cUserName, cParam ) --> lSuccess
LETO_USERPARAM( cUserName ) --> cParam
и на сервере
LETO_USERPARAM( nUserStru [, cUserName ] ) --> cParam
LETO_USERGETRIGHTS( nUserStru[, cUserName ] ) --> cRights


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



Пост N: 1132
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.08.16 11:06. Заголовок: Еще такая есть хотел..


Еще такая есть хотелка - класс для работы с Hash массивом с синхронизированными методами доступа к его элементам, для работы в udf

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



Пост N: 1134
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.08.16 11:51. Заголовок: И еще есть желание (..


И еще есть желание (многие сервера обеспечивают) иметь алиасные пути к файлам и таблицам, например секция в letodb.ini (привязка разработки к реальном данным на сервере)
[ALIAS]
\TMP\ = \TEST\TABL\BLS\
\WRK\ = \TEST\WRK\
\MY1\ = \TEST\MY1\
\MY2\ = \TEST\MY2\
на клиенте пишем
\tmp\table01.dbf
\tmp\table02.dbf
на сервере происходит подмена на реальное значение \TMP\ и т.д.
в 2-х поточной версии для dbf я это делал, для файловых ф-й ( C ) сложновато для меня





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



Пост N: 1135
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.08.16 13:22. Заголовок: И последнее. Не хват..


И последнее. Не хватает команды типа ( если стоит EnableFileFunc = 0 и нет hrb, а теперь и режим 0 для udf)
1. CRATE TABLE myTable ... IF NOT EXISTS - трудно управлять созданием таблицы, особенно если нет созданных каталогов к ней, возможно по установке в ini (а может и всегда) разрешать автосоздание дирректорий при их отсутсвии
2. DROP TABLE myTable - удалить таблицу вместе с индексами

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



Пост N: 1136
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.08.16 15:15. Заголовок: PS Реализация CREATE..


PS
Реализация CREATE TABLE ... IF NOT EXISTS могла бы выглядеть к примеру так:
 
FUNCTION hs_createtable( nUserStru, cCommand )
...
LOCAL cRecData
LOCAL lTable := .F., lAutoCreate := leto_GetAppOptions( 26 ) // к примеру
...
IF Lower(cName) = "/mem:"
cDataPath := ""
cName := Substr(cName, 2)
ELSE
cDataPath := leto_GetAppOptions( 1 )
ENDIF
cFileName := cDataPath + cName

IF !empty(cDataPath)
// обработка алиаса, если использовать механизм
cFileName := SetAlias2Path( cFileName ) // заменяем ALIAS (если есть) на реальный путь
//
If lAutoCreate
lTable := hb_FileExists(cFileName)
If ! lTable
CreateDir(cFileName)
EndIf
EndIf
ENDIF


If ! lTable

BEGIN SEQUENCE WITH { |e|break( e ) }
leto_SetUserEnv( nUserStru )
dbCreate( cFileName, aStru, leto_Driver( nDriver ), .T. , cRealAlias )
RECOVER USING oError
lres := .F.
END SEQUENCE

EndIf
...


STATIC FUNCTION CreateDir( cDBF )
LOCAL aCt := {}
LOCAL i := RAt(DEF_SEP, cDBF)
LOCAL cCt := Left(cDBF, i-1)

DO WHILE ! hb_DirExists( cCt )
i := RAt(DEF_SEP, cCt)
IF i == 0 ; EXIT
ENDIF
AAdd( aCt , subs(cCt, i+1) )
cCt := Left( cCt, i-1)
ENDDO
i := Len( aCt )
DO WHILE i > 0
cCt += (DEF_SEP + aCt[i--])
MakeDir( cCt )
ENDDO

RETURN .T.


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




Пост N: 3476
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 05.08.16 20:00. Заголовок: SergKis пишет: Еще ..


SergKis пишет:

 цитата:
Еще такая есть хотелка - класс для работы с Hash массивом с синхронизированными методами доступа к его элементам, для работы в udf



Добавил request на сервере для хеш-функций.
Сделал префикс UDF_* обязательным по умолчанию для вызовов udf, с возможностью отключения этого режима.
А функция hb_dbDrop поддерживается letodb уже давно, т.к. метод letoDrop реализован на клиенте.

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



Пост N: 1137
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.08.16 20:39. Заголовок: Pasha :sm36: А что..


Pasha
А что по поводу варианта
 цитата:
CREATE TABLE ... IF NOT EXISTS



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



Пост N: 1138
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.08.16 21:51. Заголовок: Pasha HApp разсогла..


Pasha
HApp разсогласовался по переменным DATA и LOCAL в Method New, потому прошла ошибка
 
ELSEIF aIni[i,2,j,1] == "ENABLEUDF"
::lUDF := ( aIni[i,2,j,2] == '1' )
...
leto_SetAppOptions( iif( Empty(::DataPath ),Nil,::DataPath ), ::nDriver, ::lFileFunc, ;
::lAnyExt, ::lPass4L, ::lPass4M, ::lPass4D, ::cPassName, ::lCryptTraffic, ;
::lShare, ::lNoSaveWA, nMaxVars, nMaxVarSize, nCacheRecords, nTables_max, nUsers_max, ;
nDebugMode, lOptimize, nAutOrder, nMemoType, lForceOpt, ::cTrigger, ::cPendingTrigger, lSetTrigger, lUDF )

Предлагаю Скрытый текст




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



Пост N: 1140
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 07.08.16 00:26. Заголовок: Pasha Что то в посл..


Pasha
Что то в последней версии udf не работает. Сборка borland, hb из последнего Minigui.

клиент
 
Function Test_Udf( cPath )
Local c,i,j,k,lRes

IF Empty( cPath )
cPath := "//127.0.0.1:2812/"
ELSE
cPath := "//" + cPath + Iif( Right(cPath,1) $ "/\", "", "/" )
ENDIF

? "Connect to " + cPath + " - "
IF ( leto_Connect( cPath ) ) == -1
nRes := leto_Connect_Err()
?? "Error", nRes
IF nRes == LETO_ERR_LOGIN
?? "Login failed"
ELSEIF nRes == LETO_ERR_RECV
?? "Recv Error"
ELSEIF nRes == LETO_ERR_SEND
?? "Send Error"
ELSE
?? "No connection"
ENDIF
Return Nil
ELSE
?? "Ok"
ENDIF
?

If leto_UdfExist("leto_GetAppOptions")
? "leto_GetAppOptions found"
Else
? "not found "+"leto_GetAppOptions"
EndIf

If leto_UdfExist('hb_DiskSpace')
? "hb_DiskSpace found", leto_udf( "hb_DiskSpace", "C:\", HB_DISK_FREE )
Else
? "not found "+"hb_DiskSpace"
EndIf
If leto_UdfExist('UDF_AppendRec')
? 'UDF_AppendRec - found'
Else
? 'UDF_AppendRec - not found'
EndIf
? "Press any key to finish..."
?
Inkey(0)

Return Nil

результат

Connect to //127.0.0.1:2812/ - Ok

not found leto_GetAppOptions
not found hb_DiskSpace
UDF_AppendRec - not found
Press any key to finish...


letodb.ini
Port = 2812
DataPath = .
EnableFileFunc = 1
EnableUDF = 1

letodb.log
08/07/16 00:04:18: Leto DB Server has been started.
Leto DB Server v.2.17b2 ! INIT: DataPath=., ShareTables=0, MaxUsers=500, MaxTables=5000, CacheRecords=10
08/07/16 00:04:18: C:\LETO\letodb-code-0324bd6820c3d9644f815b7dac76309859220501\bin\letoudf.hrb has been loaded.
08/07/16 00:11:54: Send STOP to server...
08/07/16 00:11:57: Server has been closed.

сборка leto-core-6bc3... тот же пример
----------------------------------------------
letodb.ini
Port = 2812
DataPath = .
EnableFileFunc = 1

результат

Connect to //127.0.0.1:2812/ - Ok

leto_GetAppOptions found
hb_DiskSpace found 422226853888
UDF_AppendRec - found
Press any key to finish...


letodb.log
08/06/16 23:47:17: Leto DB Server has been started.
Leto DB Server v.2.17b2 ! INIT: DataPath=., ShareTables=0, MaxUsers=500, MaxTables=5000, CacheRecords=10
08/06/16 23:47:17: C:\LETO\letodb-code-6bc3e8f667ff4d65caeb620eafca574aba1bd166\bin\letoudf.hrb has been loaded.
08/06/16 23:49:51: Send STOP to server...
08/06/16 23:49:54: Server has been closed.



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




Пост N: 3478
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.08.16 08:56. Заголовок: Почему-то не был вид..


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

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



Пост N: 1141
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 07.08.16 09:21. Заголовок: Pasha Что не то le..


Pasha
Что не то
 
letodb.ini
Port = 2812
DataPath = .
EnableFileFunc = 1
EnableUDF = 1

letodb.log
08/07/16 09:10:27: Leto DB Server has been started.
Leto DB Server v.2.17b2 ! INIT: DataPath=., ShareTables=0, MaxUsers=500, MaxTables=5000, CacheRecords=10
08/07/16 09:10:27: C:\LETO\letodb-code-7e89fed2f632e34d814bf8518ec08707be6b0e45\bin\letoudf.hrb has been loaded.
08/07/16 09:17:03: Send STOP to server...
08/07/16 09:17:06: Server has been closed.

letodb_0.log
127.0.0.1 LENOVO Test_Udf.exe
ERROR! UDF: not a valid name
ERROR! UDF: not a valid name

клиент пересобран с rddleto.lib из этой сборки
результат

Connect to //127.0.0.1:2812/ - Ok

not found leto_GetAppOptions
not found hb_DiskSpace
UDF_AppendRec - found
Press any key to finish...




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



Пост N: 1142
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 07.08.16 09:42. Заголовок: Pasha Не очень пони..


Pasha
Не очень понимаю режим с EnableUDF = 0
Для меня важно, что бы удаленный "продвинутый" user не смог через вызов leto_udf("...") сломать инфу сервера (сборку всех серверов не проконтролируешь на request функций), т.е.
leto_ferase, leto_fRename, leto_drop, leto_memowrit,leto_FileWrite, leto_dirremove, Leto_FileAttr, ...
dbCreate, fErase, fRename, fCreate, hb_memowrit, StrFile, hb_DirBase, hb_progname, exename, ...
leto_getAppOptions( ... ), что дает доступ к путям, файлам настройки, паролей сервера
может еще какие, сразу не вспомнишь.
Все это, если надо можно организовать в hrb




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




Пост N: 3479
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.08.16 09:57. Заголовок: Из readme: Ena..


Из readme:
EnableUDF = 1 - если 1 (по умолчанию), разрешено использование udf-функций с префиксом "UDF_",
если 2, разрешено использование udf-функций с любыми именами,
если 0, вызовы udf-функций запрещены;

По умолчанию, при значении параметра 1, разрешены только вызовы функций с префиксом udf_, т.е. вызов UDF_AppendRec разрешен, а hb_DiskSpace, dbCreate и пр. - нет.
При значении 2 разрешены вызовы всех функций.
При значении 0 вызовы udf запрещены.
Если хочется ограничить вызовы опасных функций, то пусть будет значение по умолчанию, в для hb_DiskSpace и пр. надо сделать обертки в letoudf.hrb: например udf_DiskSpace

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

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