Bug 6008 - Locating mysql/psql commands on Installer.pm

In Installer.pm when is looking for the system command to dump a file into the database
it might fail if the web user doesn't have it in its path. So we add before a search with
"which" and "whereis" commands, if they fail the command is itself without path.

E.g.: with OpenBSD 4.8 the web user "www" doesn't have the path to the installed mysql bin:
/usr/local/bin/mysql and fails in the web installer.

Signed-off-by: Chris Cormack <chris@bigballofwax.co.nz>

Seems to work fine, has a good default for if it fails to find that
path

Signed-off-by: Paul Poulain <paul.poulain@biblibre.com>
tested on my linux box, no visible change, worked before, work after. Will hopefully improve behaviour for OpenBSD
This commit is contained in:
Salvador Zaragoza Rubio 2011-03-30 17:40:43 +02:00 committed by Paul Poulain
parent 953b8a5af9
commit 2b2a034ca8

13
C4/Installer.pm Normal file → Executable file
View file

@ -508,8 +508,13 @@ sub load_sql {
my $datadir = C4::Context->config('intranetdir') . "/installer/data/$self->{dbms}";
my $error;
my $strcmd;
my $cmd;
if ( $self->{dbms} eq 'mysql' ) {
$strcmd = "mysql "
$cmd = qx(which mysql 2>/dev/null || whereis mysql 2>/dev/null);
chomp $cmd;
$cmd = $1 if ($cmd && $cmd =~ /^(.+?)[\r\n]+$/);
$cmd = 'mysql' if (!$cmd || !-x $cmd);
$strcmd = "$cmd "
. ( $self->{hostname} ? " -h $self->{hostname} " : "" )
. ( $self->{port} ? " -P $self->{port} " : "" )
. ( $self->{user} ? " -u $self->{user} " : "" )
@ -517,7 +522,11 @@ sub load_sql {
. " $self->{dbname} ";
$error = qx($strcmd --default-character-set=utf8 <$filename 2>&1 1>/dev/null);
} elsif ( $self->{dbms} eq 'Pg' ) {
$strcmd = "psql "
$cmd = qx(which psql 2>/dev/null || whereis psql 2>/dev/null);
chomp $cmd;
$cmd = $1 if ($cmd && $cmd =~ /^(.+?)[\r\n]+$/);
$cmd = 'psql' if (!$cmd || !-x $cmd);
$strcmd = "$cmd "
. ( $self->{hostname} ? " -h $self->{hostname} " : "" )
. ( $self->{port} ? " -p $self->{port} " : "" )
. ( $self->{user} ? " -U $self->{user} " : "" )