Отправлено: 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"
Помню что где то обсуждали, а результат не запомнил...
Вызывать можно функции, указанные в request, ну и некоторые другие. Я пересматривал этот набор - он вполне безопасен. Впрочем, я уже добавил параметр EnableUDF в letodb.ini, для возможности отключения udf.
Т.е. имя UDF функции должно начинаться с UDF_ (UDF_() - не проходит) - хак с выполнением стандартных и функций leto через механизм leto_udf на сервере отсекается. Ну и сделал более осмысленным описание ошибки для leto_wUsLog. Мне кажется такое решение более логичным существующего.
Прошу прощения, пропустил при коммите server.prg. Поправлю. Да, EnableUDF запрещает вызовы UDF. Может быть, имеет смысл еще добавить флаг UDFPrefix, который позволял бы вызовы только функций с именами UDF_*
Отправлено: 05.08.16 08:39. Заголовок: Как вариант, еще вме..
Как вариант, еще вместо одного letoudf.hrb можно использовать 2 (или более), например, letoudf_st.hrb и letoudf_us.hrb. Запуск letoudf_st.hrb не зависит от EnableUDF, запуск letoudf_us.hrb (и остальных), соответственно, зависит.
Отправлено: 05.08.16 09:48. Заголовок: Pasha пишет Может бы..
Pasha пишет
цитата:
Может быть, имеет смысл еще добавить флаг UDFPrefix
Я тоже за Но можно просто обойтись режимом 0 1 2 - спрефиксоом udf_ (пока не вижу причин нескольких префиксов, но может ошибаюсь) а то возникнет желание на каждого user уст. разрешено\нет udf, как с файловыми, mg ф-ими
Отправлено: 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
Отправлено: 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 ) сложновато для меня
Отправлено: 05.08.16 13:22. Заголовок: И последнее. Не хват..
И последнее. Не хватает команды типа ( если стоит EnableFileFunc = 0 и нет hrb, а теперь и режим 0 для udf) 1. CRATE TABLE myTable ... IF NOT EXISTS - трудно управлять созданием таблицы, особенно если нет созданных каталогов к ней, возможно по установке в ini (а может и всегда) разрешать автосоздание дирректорий при их отсутсвии 2. DROP TABLE myTable - удалить таблицу вместе с индексами
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
Отправлено: 05.08.16 20:00. Заголовок: SergKis пишет: Еще ..
SergKis пишет:
цитата:
Еще такая есть хотелка - класс для работы с Hash массивом с синхронизированными методами доступа к его элементам, для работы в udf
Добавил request на сервере для хеш-функций. Сделал префикс UDF_* обязательным по умолчанию для вызовов udf, с возможностью отключения этого режима. А функция hb_dbDrop поддерживается letodb уже давно, т.к. метод letoDrop реализован на клиенте.
DATA nPort INIT 2812 DATA ip DATA nTimeOut INIT -1 DATA DataPath INIT "" DATA LogFile INIT "" DATA lLower INIT .F. DATA lFileFunc INIT .F. DATA lAnyExt INIT .F. DATA lShare INIT .F. // .T. - new mode, which allows share tables with other processes DATA lNoSaveWA INIT .F. // .T. - new mode, which forces dbUseArea() each time "open table" is demanded DATA nDriver INIT 0 DATA lPass4M INIT .F. DATA lPass4L INIT .F. DATA lPass4D INIT .F. DATA cPassName INIT "leto_users" DATA lCryptTraffic INIT .F. DATA cTrigger DATA cPendingTrigger DATA nMaxVars DATA nMaxVarSize DATA nCacheRecords INIT 10 DATA nTables_max DATA nUsers_max DATA nDebugMode INIT 0 DATA lOptimize INIT .F. DATA nAutOrder DATA nMemoType DATA lForceOpt INIT .F. DATA lSetTrigger INIT .F. DATA lUDF INIT .T.
METHOD New()
ENDCLASS METHOD New() CLASS HApp LOCAL cIniName := "letodb.ini" LOCAL aIni, i, j, cTemp, cPath, nDriver LOCAL nPort := ::nPort // LOCAL nMaxVars, nMaxVarSize LOCAL nCacheRecords := ::nCacheRecords LOCAL nTables_max := NIL LOCAL nUsers_max := NIL LOCAL nDebugMode := 0 // LOCAL lOptimize := .F. // LOCAL nAutOrder LOCAL nMemoType // LOCAL lForceOpt := .F. // LOCAL lSetTrigger := .F. // LOCAL lUDF := .T.
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.
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...
Отправлено: 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
Отправлено: 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
Все даты в формате GMT
3 час. Хитов сегодня: 403
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет