Hello!
I've encountered a problem when building Virtuoso in a path that has a
plus (+) symbol. Where the sticker URI is passed into VAD_PACK as
relative, it all seems to work fine:
VAD Sticker vad_dav.xml creation...
VAD Sticker vad_fs.xml creation...
PASSED: DB.DBA.VAD_PACK('vad_fs.xml', '.', 'bpel_filesystem.vad')
PASSED: commit work
PASSED: checkpoint
PASSED: DB.DBA.VAD_PACK('vad_dav.xml', '.', 'bpel_dav.vad')
PASSED: commit work
PASSED: checkpoint
But when an absolute path is used containing a plus symbol:
***FAILED: execution of
DB.DBA.VAD_PACK('/build/buildd/virtuoso-opensource-5.0.6+wgd1~ppa2/binsrc/tutorial/make_tutorial_fs_vad.xml',
'.', 'tutorial_filesystem.vad')
------------ SQL ERROR -------------
*** Error 42000: [Virtuoso Driver][Virtuoso Server]FA004: Access to
/build/buildd/virtuoso-opensource-5.0.6
wgd1~ppa2/binsrc/tutorial/make_tutorial_fs_vad.xml is denied due to
access control in ini file
in
file_to_string:(BIF),
DB.DBA.VAD_PACK,
<Top Level>
at line 0 of Top-Level:
DB.DBA.VAD_PACK('/build/buildd/virtuoso-opensource-5.0.6
wgd1~ppa2/binsrc/tutorial/make_tutorial_fs_vad.xml', '.',
'tutorial_filesystem.vad')
------------------------------------
Note that the plus sign between 5.0.6 and wgd1 in the path has become as
space in the FA004 error message, which is taken directly from the same
fname variable that is used in the call to is_allowed.
I have tried digging through the code to find out where exactly the
problem lies, but I've never looked at this code base before and my head
is starting to spin now, so I thought I'd post the problem here and hope
that some nice person gives me a few pointers on this.
I guess it must have something to do with the path being treated as a
URI, so the + is interpreted as a space, as per the spec. Anyway, this
is presumably what causes is_allowed to return false in
bif_file_to_string (since it all builds correctly without a plus sign in
the path), and that would seem to make enough sense given that it's
actually the wrong path, only I can't quite work out where the + is
getting converted to a space.
Can anybody help me out here?
Thanks,
Will