Created attachment 2966 [details] uuidlibv12.zip Немогу подключить расширение uuidlib (zip архив с исходниками приложен). Максиум чего удалось достич на тестовой (пустой) базе: $ fbsql.superserver -u SYSDBA -p masterkey localhost:/var/lib/firebird/example_db.fdb Database: localhost:/var/lib/firebird/example_db.fdb, User: SYSDBA SQL> select '{' || UPPER(GUID_CREATE()) || '}' from rdb$database; Statement failed, SQLCODE = -902 Access to UDF/BLOB-filter module "uuidlib" is denied by server administrator SQL> exit; Настораживает следующие: результат приведённый выше получается только когда в /usr/lib64/firebird/UDF/ присутствуют uuidlib.so _и_ uuidlib (одно собственно файл библиотеки, другое -- на него ссылка, что именно что -- значение не имет), а в uuidUDF.sql прописан uuidlib. В других случаях, таких как: 1) присутствует только uuidlib (он-же приписан в uuidUDF.sql); 2) присутствует только uuidlib.so (он-же приписан в uuidUDF.sql); 3) присутствует только uuidlib.so (но в uuidUDF.sql приписан uuidlib); диагностика тестового запроса другая: $ fbsql.superserver -u SYSDBA -p masterkey localhost:/var/lib/firebird/example_db.fdb Database: localhost:/var/lib/firebird/example_db.fdb, User: SYSDBA SQL> select '{' || UPPER(GUID_CREATE()) || '}' from rdb$database; CONCATENATION ====================================== Statement failed, SQLCODE = -902 Unable to complete network request to host "localhost". -Error reading data from the connection. SQL> exit;
(In reply to comment #0) > Created an attachment (id=2966) [details] > uuidlibv12.zip > > Немогу подключить расширение uuidlib (zip архив с исходниками приложен). Максиум > чего удалось достич на тестовой (пустой) базе: > > $ fbsql.superserver -u SYSDBA -p masterkey localhost:/var/lib/firebird/example_db.fdb > Database: localhost:/var/lib/firebird/example_db.fdb, User: SYSDBA > SQL> select '{' || UPPER(GUID_CREATE()) || '}' from rdb$database; > Statement failed, SQLCODE = -902 > Access to UDF/BLOB-filter module "uuidlib" is denied by server administrator > SQL> exit; еще не проверял у себя, но думаю надо разрешить доступ к external functions в firebird.conf хотя с FB я пока не очень дружу...
(In reply to comment #1) ... > еще не проверял у себя, но думаю надо разрешить доступ к external functions в firebird.conf > хотя с FB я пока не очень дружу... Возможно, но я непонимаю как это сделать. PS: Больше всего меня настараживает необходимость наличия uuidlib.so и uuidlib в UDF/ -- как-то оно подозрительно выглядит.
> PS: Больше всего меня настараживает необходимость наличия uuidlib.so и uuidlib в UDF/ -- > как-то оно подозрительно выглядит. потому что UDF -- это User-Defined Function (UDF) ?-) попробуйте #UdfAccess = Restrict UDF поменять на UdfAccess = Full UDF
(In reply to comment #3) > > PS: Больше всего меня настараживает необходимость наличия uuidlib.so и uuidlib в UDF/ -- > > как-то оно подозрительно выглядит. > > потому что UDF -- это User-Defined Function (UDF) ?-) Какя связь? Судя по найденым ссылкам и по коду makefile (см. https://bugzilla.altlinux.org/attachment.cgi?id=2966) для win файл с функциями должен называться <имя>.dll, а для linux -- просто <имя>... Требование называть файл <имя>.so -- я понимаю, а требования иметь идентичные <имя> и <имя>.so -- уже нет. > > попробуйте > #UdfAccess = Restrict UDF > поменять на > UdfAccess = Full UDF Так наблюдаю: $ fbsql.superserver -u SYSDBA -p masterkey localhost:/var/lib/firebird/example_db.fdb Database: localhost:/var/lib/firebird/example_db.fdb, User: SYSDBA SQL> select '{' || UPPER(GUID_CREATE()) || '}' from rdb$database; Statement failed, SQLCODE = -104 invalid request BLR at offset 73 -function GUID_CREATE is not defined -module name or entrypoint could not be found SQL> exit; Указание полного пути а библиотеке $ sudo -H sed -i 's:uuidlib:/usr/lib64/firebird/UDF/uuidlib:' /usr/lib64/firebird/UDF/uuidUDF.sql непомогло...
(In reply to comment #4) > $ fbsql.superserver -u SYSDBA -p masterkey localhost:/var/lib/firebird/example_db.fdb > Database: localhost:/var/lib/firebird/example_db.fdb, User: SYSDBA > SQL> select '{' || UPPER(GUID_CREATE()) || '}' from rdb$database; > Statement failed, SQLCODE = -104 > invalid request BLR at offset 73 > -function GUID_CREATE is not defined > -module name or entrypoint could not be found > SQL> exit; > по аналогии с PgSQL: надо выполнить SQL конкретного UDF для конкретной базы. как это сделать в FB, не подскажу. Смысл в том, что в базе не присутствуют SQL-функции из uuidUDF.sql, описанные в библиотеке uuidlib.
(In reply to comment #5) > (In reply to comment #4) > > $ fbsql.superserver -u SYSDBA -p masterkey localhost:/var/lib/firebird/example_db.fdb > > Database: localhost:/var/lib/firebird/example_db.fdb, User: SYSDBA > > SQL> select '{' || UPPER(GUID_CREATE()) || '}' from rdb$database; > > Statement failed, SQLCODE = -104 > > invalid request BLR at offset 73 > > -function GUID_CREATE is not defined > > -module name or entrypoint could not be found > > SQL> exit; > > > по аналогии с PgSQL: надо выполнить SQL конкретного UDF для конкретной базы. > как это сделать в FB, не подскажу. > Смысл в том, что в базе не присутствуют SQL-функции из uuidUDF.sql, описанные в > библиотеке uuidlib. Но в конфигурации по умолчанию (при закоментированной/раскоментированной строке с UdfAccess = Restrict UDF) он похоже выполняется, т. к. ругонь идёт именно на модуль uuidlib, а не на функцию его содержащую...
> Но в конфигурации по умолчанию (при закоментированной/раскоментированной > строке с UdfAccess = Restrict UDF) он похоже выполняется, т. к. ругонь идёт именно на > модуль uuidlib, а не на функцию его содержащую... > Access to UDF/BLOB-filter module "uuidlib" is denied by server administrator тут явно дело в правах-) когда все разрешили всплыла ошибка мне кажется логично... а есть какой-нибудь модуль, который известно как подключается и 100% работает?-))
(In reply to comment #7) > > Но в конфигурации по умолчанию (при закоментированной/раскоментированной > > строке с UdfAccess = Restrict UDF) он похоже выполняется, т. к. ругонь идёт именно на > > модуль uuidlib, а не на функцию его содержащую... > > > Access to UDF/BLOB-filter module "uuidlib" is denied by server administrator > тут явно дело в правах-) Похоже... Но в каких именно, и где именно настраивающихся -- я не знаю. > когда все разрешили всплыла ошибка > мне кажется логично... а есть какой-нибудь модуль, который известно как > подключается и 100% работает?-)) Мне -- нет. PS: Я с firebird`ом первый раз столкнулся (заказчику нежно базу под ним для специфической системы создать).
ок. тогда я буду пытаться разбираться. завтра расскажу о достигнутом
Что получилось у меня Как мне кажется первое что надо сделать это инициализировать SQL функции fbsql.superserver -u SYSDBA -p masterkey localhost:test Database: localhost:test, User: SYSDBA SQL> DECLARE EXTERNAL FUNCTION UUID_CREATE CON> CSTRING(22) CON> RETURNS PARAMETER 1 CON> ENTRY_POINT 'fn_uuid_create' MODULE_NAME 'uuidlib'; SQL> DECLARE EXTERNAL FUNCTION GUID_CREATE CON> CSTRING(36) CON> RETURNS PARAMETER 1 CON> ENTRY_POINT 'fn_guid_create' MODULE_NAME 'uuidlib'; SQL> DECLARE EXTERNAL FUNCTION UUID_TO_GUID CON> CSTRING(22) CON> CSTRING(36) CON> RETURNS PARAMETER 2 CON> ENTRY_POINT 'fn_expand_uuid' MODULE_NAME 'uuidlib'; Statement failed, SQLCODE = -104 Dynamic SQL Error -SQL error code = -104 -Token unknown - line 3, column 3 -CSTRING Это подозрительно, но ладно-) SQL> show function GUID_CREATE; Function GUID_CREATE: Function library is uuidlib Entry point is fn_guid_create Returns CSTRING(36) CHARACTER SET NONE функция есть. Второе пробовать их использовать SQL> select '{' || UPPER(GUID_CREATE()) || '}' from rdb$database; Statement failed, SQLCODE = -104 invalid request BLR at offset 73 -function GUID_CREATE is not defined -module name or entrypoint could not be found вот тут я пока не знаю что делать-( советы такие: Have you put rfunc.dll in correct subdirectory ? Has Firebird allowed access to this directory (in firebird.conf) ? Have you used correct entrypoint names (they are case sensitive) ? Have you verified that Firebird is really trying open correct dll (e.g. using FileMon from Sysinternals tools) ?
Вот что получилось у меня... Исходные данные: 1. sudo -H rm -f /usr/lib64/firebird/UDF/uuidUDF.sql (для исключения конфликтов) 2. UdfAccess = Full UDF в /etc/firebird/firebird.conf $ fbsql.superserver -u SYSDBA -p masterkey localhost:/var/lib/firebird/example_db.fdb Database: localhost:/var/lib/firebird/example_db.fdb, User: SYSDBA SQL> show function ; There are no user-defined functions in this database SQL> DECLARE EXTERNAL FUNCTION GUID_CREATE CON> CSTRING(36) CON> RETURNS PARAMETER 1 CON> ENTRY_POINT 'fn_guid_create' MODULE_NAME '/usr/lib64/firebird/UDF/uuidlib'; SQL> show function ; GUID_CREATE SQL> select '{' || UPPER(GUID_CREATE()) || '}' from rdb$database; Statement failed, SQLCODE = -902 Access to UDF/BLOB-filter module "/usr/lib64/firebird/UDF/uuidlib" is denied by server administrator SQL> DROP EXTERNAL FUNCTION GUID_CREATE; SQL> show function ; There are no user-defined functions in this database SQL> DECLARE EXTERNAL FUNCTION GUID_CREATE CON> CSTRING(36) CON> RETURNS PARAMETER 1 CON> ENTRY_POINT 'fn_guid_create' MODULE_NAME 'uuidlib'; SQL> show function ; GUID_CREATE SQL> select '{' || UPPER(GUID_CREATE()) || '}' from rdb$database; Statement failed, SQLCODE = -104 invalid request BLR at offset 73 -function GUID_CREATE is not defined -module name or entrypoint could not be found SQL> exit; Неполучилось... Выставляю UdfAccess = Restrict UDF и перезапускаю сервер: $ fbsql.superserver -u SYSDBA -p masterkey localhost:/var/lib/firebird/example_db.fdb Database: localhost:/var/lib/firebird/example_db.fdb, User: SYSDBA SQL> show function ; GUID_CREATE SQL> select '{' || UPPER(GUID_CREATE()) || '}' from rdb$database; Statement failed, SQLCODE = -902 Access to UDF/BLOB-filter module "uuidlib" is denied by server administrator SQL> DROP EXTERNAL FUNCTION GUID_CREATE; SQL> show function ; There are no user-defined functions in this database SQL> DECLARE EXTERNAL FUNCTION GUID_CREATE CON> CSTRING(36) CON> RETURNS PARAMETER 1 CON> ENTRY_POINT 'fn_guid_create' MODULE_NAME '/usr/lib64/firebird/UDF/uuidlib'; SQL> show function ; GUID_CREATE SQL> select '{' || UPPER(GUID_CREATE()) || '}' from rdb$database; Statement failed, SQLCODE = -902 Access to UDF/BLOB-filter module "/usr/lib64/firebird/UDF/uuidlib" is denied by server administrator SQL> exit;
> Неполучилось... Выставляю UdfAccess = Restrict UDF и перезапускаю сервер: вот тут я обманул. надо UdfAccess = Full для проверки (разрешает использовать UDF в любом месте) UdfAccess = Restrict UDF этот вариант в теории разрешает использовать UDF из директории FBROOT/UDF
(In reply to comment #12) > > Неполучилось... Выставляю UdfAccess = Restrict UDF и перезапускаю сервер: > вот тут я обманул. > надо > UdfAccess = Full > для проверки (разрешает использовать UDF в любом месте) Не исключено, что не всё в порядке с данной библиотекой (выстовлено UdfAccess = Full): $ fbsql.superserver -u SYSDBA -p masterkey localhost:/var/lib/firebird/example_db.fdb Database: localhost:/var/lib/firebird/example_db.fdb, User: SYSDBA SQL> show function; GUID_CREATE SQL> DROP EXTERNAL FUNCTION GUID_CREATE; SQL> DECLARE EXTERNAL FUNCTION GUID_CREATE CON> CSTRING(36) CON> RETURNS PARAMETER 1 CON> ENTRY_POINT 'fn_guid_create' MODULE_NAME '/usr/lib64/firebird/UDF/uuidlib'; SQL> show function GUID_CREATE; Function GUID_CREATE: Function library is /usr/lib64/firebird/UDF/uuidlib Entry point is fn_guid_create Returns CSTRING(36) CHARACTER SET NONE SQL> select '{' || UPPER(GUID_CREATE()) || '}' from rdb$database; CONCATENATION ====================================== Statement failed, SQLCODE = -902 Unable to complete network request to host "localhost". -Error reading data from the connection. SQL> DROP EXTERNAL FUNCTION GUID_CREATE; Statement failed, SQLCODE = -902 Unable to complete network request to host "localhost". -Error reading data from the connection. SQL> exit; Statement failed, SQLCODE = -902 Unable to complete network request to host "localhost". -Error writing data to the connection. -Broken pipe Statement failed, SQLCODE = -902 Unable to complete network request to host "localhost". -Error writing data to the connection. -Broken pipe Вторая попытка: $ fbsql.superserver -u SYSDBA -p masterkey localhost:/var/lib/firebird/example_db.fdb Database: localhost:/var/lib/firebird/example_db.fdb, User: SYSDBA SQL> show function GUID_CREATE; Function GUID_CREATE: Function library is /usr/lib64/firebird/UDF/uuidlib Entry point is fn_guid_create Returns CSTRING(36) CHARACTER SET NONE SQL> DROP EXTERNAL FUNCTION GUID_CREATE; SQL> DECLARE EXTERNAL FUNCTION GUID_CREATE CON> CSTRING(36) CON> RETURNS PARAMETER 1 CON> ENTRY_POINT 'fn_guid_create' MODULE_NAME '/usr/lib64/firebird/UDF/uuidlib.so'; SQL> show function GUID_CREATE; Function GUID_CREATE: Function library is /usr/lib64/firebird/UDF/uuidlib.so Entry point is fn_guid_create Returns CSTRING(36) CHARACTER SET NONE SQL> select '{' || UPPER(GUID_CREATE()) || '}' from rdb$database; CONCATENATION ====================================== Statement failed, SQLCODE = -902 Unable to complete network request to host "localhost". -Error reading data from the connection. SQL> show function GUID_CREATE; Statement failed, SQLCODE = -902 Unable to complete network request to host "localhost". -Error reading data from the connection. SQL> exit; Statement failed, SQLCODE = -902 Unable to complete network request to host "localhost". -Error writing data to the connection. -Broken pipe Statement failed, SQLCODE = -902 Unable to complete network request to host "localhost". -Error writing data to the connection. -Broken pipe При этом в /var/log/firebird/firebird.log: xxx.lan (Client) Mon Oct 6 15:19:56 2008 /usr/lib64/firebird/../../../usr/bin/fbguard: /usr/lib64/firebird/../../../usr/bin/fbserver terminated abnormally (-1) xxx.lan (Client) Mon Oct 6 15:19:56 2008 /usr/lib64/firebird/../../../usr/bin/fbguard: guardian starting ../../../usr/bin/fbserver Можно ли добиться от сервера болие внятной диогностики?
большей информативности мне добится не удалось strace -p<pid> -) ps: что на счет провайда для mod_php5?
(In reply to comment #14) > большей информативности мне добится не удалось > strace -p<pid> > -) > ps: что на счет провайда для mod_php5? В работе: до конца недели думаю будет.
Похоже дело в самой uuidlibv12. Сделал успешную попытку заменить её на FreeadhocUDF (http://www.udf.adhoc-data.de/index_eng.html): 1. Выкачал ftp://ftp.adhoc-data.de/FreeAdhocUDF/adhoc20080303/source/FreeAdhocUDFsource20080303.tar.gz 2. Собрал (Makefile пришлось править) 3. sudo -H ln -f FreeAdhocUDF_fb2x64.so /usr/lib64/firebird/UDF/FreeAdhocUDF.so Установил UdfAccess = Restrict UDF и перезапустил сервер. $ fbsql.superserver -u SYSDBA -p masterkey localhost:/var/lib/firebird/example_db.fdb Database: localhost:/var/lib/firebird/example_db.fdb, User: SYSDBA SQL> DROP EXTERNAL FUNCTION GUID_CREATE; SQL> DECLARE EXTERNAL FUNCTION GUID_CREATE CON> RETURNS CSTRING(36) FREE_IT CON> ENTRY_POINT 'uuid4' MODULE_NAME 'FreeAdhocUDF'; SQL> select '{' || UPPER(GUID_CREATE()) || '}' from rdb$database; CONCATENATION ====================================== {35917C9C-B7EC-4B7B-AAF3-F8247A65ECDE} SQL> exit;
тогда не бага
(In reply to comment #17) > тогда не бага Да
Возможная причина неработоспасобности uuidlib -- отсутстаие определения переменных окружения TMP/TEMP для пользователя firebird (см. http://tech.groups.yahoo.com/group/firebird-support/message/93932). Различия по коду данные переменные использующему: 1. файл uuid.c у uuidlib (та, что валится): ... char * tmp = getenv("TMP"); if (!tmp) { tmp = getenv("TEMP"); } char * tmpStr; tmpStr = (char *) malloc(strlen(tmp) + 20); ... 2. файл uuid.c у FreeAdhocUDF (та, что работает): ... char *tmpStr; char *tmp = getenv("TMP"); if (!tmp) { tmp = getenv("TEMP"); if (!tmp) { tmp = "/tmp"; } } tmpStr = (char *) malloc(strlen(tmp) + 20); ...