Hello,
We're using Inline-C in a Perl CGI-engine to connect to a C-written
shared library (libblow.so) for decrypting strings with BlowFish (to obfuscate
the
details and the used key). This is delivered to a production environment
as:
# ls -ld /usr/local/sisis-pap/lib/.Inline
drwxr-xr-x 4 bin bin 4096 Jan 25 12:32 /usr/local/sisis-pap/lib/.Inline
# find /usr/local/sisis-pap/lib/.Inline
/usr/local/sisis-pap/lib/.Inline
/usr/local/sisis-pap/lib/.Inline/config-x86_64-linux-thread-multi-5.026002
/usr/local/sisis-pap/lib/.Inline/lib
/usr/local/sisis-pap/lib/.Inline/lib/auto
/usr/local/sisis-pap/lib/.Inline/lib/auto/SisisAdminInstall_pl_64f0
/usr/local/sisis-pap/lib/.Inline/lib/auto/SisisAdminInstall_pl_64f0/SisisAdminInstall_pl_64f0.inl
/usr/local/sisis-pap/lib/.Inline/lib/auto/SisisAdminInstall_pl_64f0/SisisAdminInstall_pl_64f0.so
/usr/local/sisis-pap/lib/.Inline/lib/auto/SisisAdmin_64f0
/usr/local/sisis-pap/lib/.Inline/lib/auto/SisisAdmin_64f0/SisisAdmin_64f0.inl
/usr/local/sisis-pap/lib/.Inline/lib/auto/SisisAdmin_64f0/SisisAdmin_64f0.so
/usr/local/sisis-pap/lib/.Inline/build
/usr/local/sisis-pap/lib/.Inline/.lock
# ldd
#
/usr/local/sisis-pap/lib/.Inline/lib/auto/SisisAdminInstall_pl_64f0/SisisAdminInstall_pl_64f0.so
linux-vdso.so.1 (0x00007ffc223fb000)
libblow.so => /usr/local/sisis-pap/lib/libblow.so (0x00007efdeb377000)
libssl.so.1.1 => /usr/local/sisis-pap/lib/libssl.so.1.1
(0x00007efdeb109000)
...
and works just fine. Note: the things below .Inline are there and not
compiled on the flight on first use of the Inline-C code.
The only problem is, that the dir .Inline must be writeable by the
apache-process which runs as 'nobody'. This is checked in Inline.pm as:
#==============================================================================
# Find the 'Inline' directory to use.
#==============================================================================
my $TEMP_DIR;
sub find_temp_dir {
return $TEMP_DIR if $TEMP_DIR;
my ($temp_dir, $home, $bin, $cwd, $env);
$temp_dir = '';
$env = $ENV{PERL_INLINE_DIRECTORY} || '';
$home = $ENV{HOME} ? abs_path($ENV{HOME}) : '';
if ($env and
-d $env and
-w $env) {
$temp_dir = $env;
}
...
Why is the check '-w $env' made there, at the beginning? Of course, if
something really
must be compiled, it must be writable, but not in any use case, like
ours.
matthias
--
Matthias Apitz, ✉ [email protected], http://www.unixarea.de/ +49-176-38902045
Public GnuPG key: http://www.unixarea.de/key.pub
October, 7 -- The GDR was different: Peace instead of Bundeswehr and wars,
Druschba
instead of Nazis, to live instead of to survive.