-if ($step && $step==1){
- #First Step
- #Checking ALL perl Modules and services needed are installed.
- #Whenever there is an error, adding a report to the page
- # I suppose here that Apache user can access /usr/bin/
- # If mysql or zebra are in some fancy directory not in PATH
- # Performing a disk search.
- $template->param(language=>1);
- my $problem;
-
- unless ($] >= 5.006001) { # Bug 179
- $template->param("problems"=>1,"perlversion"=>1);
- $problem=1;
- }
- unless (-x "/usr/bin/perl") {
- my $realperl=`which perl`;
- $realperl=`find / -name perl` unless ($realperl);
- chomp $realperl;
- $template->param("problems"=>1,'perllocation'=>1) unless ($realperl);
- $problem=1 unless($realperl);
- }
- unless (-x "/usr/local/bin/mysql") {
- my $mysql=`which mysql`;
- $mysql=`find / -name mysql` unless ($mysql);
- chomp $mysql;
- $template->param("problems"=>1,'mysql'=>1) unless ($mysql);
- $problem=1 unless($mysql);
- }
- unless (-x "/usr/local/bin/zebraidx" ||-x "/usr/local/bin/zebraidx-2.0") {
- my $zebra=`which zebraidx`;
- $zebra=`which zebraidx-2.0` unless ($zebra);
- $zebra=`find / -name "zebraidx*"` unless ($zebra);
- chomp $zebra;
- $template->param("problems"=>1,'zebra'=>1) unless ($zebra);
- $problem=1 unless ($zebra);
- }
- unless (-x "/usr/local/bin/zebrasrv" ||-x "/usr/local/bin/zebrasrv-2.0") {
- my $zebra=`which zebrasrv`;
- $zebra=`which zebrasrv-2.0` unless ($zebra);
- $zebra=`find / -name "zebrasrv*"` unless ($zebra);
- chomp $zebra;
- $template->param("problems"=>1,'zebra'=>1) unless ($zebra);
- $problem=1 unless ($zebra);
- }
- unless (-x "/usr/local/bin/yaz-client") {
- my $yaz=`which yaz-client`;
- $yaz=`find / -name "yaz-client*"` unless ($yaz);
- chomp $yaz;
- $template->param("problems"=>1,'yaz'=>1) unless ($yaz);
- $problem=1 unless ($yaz);
- }
- # We could here use a special find
- my @missing = ();
- unless (eval {require ZOOM}) {
- push @missing, {name=>"ZOOM"};
- }
- unless (eval {require LWP::Simple}) {
- push @missing, {name=>"LWP::Simple"};
- }
- unless (eval {require XML::Simple}) {
- push @missing, {name=>"XML::Simple"};
- }
- unless (eval {require MARC::File::XML}) {
- push @missing, {name=>"MARC::File::XML"};
- }
- unless (eval {require MARC::File::USMARC}) {
- push @missing, {name=>"MARC::File::USMARC"};
- }
- unless (eval {require DBI}) { push @missing,{name=>"DBI"} };
- unless (eval {require Date::Manip}) { push @missing,{name=>"Date::Manip"} };
- unless (eval {require DBD::mysql}) { push @missing,{name=>"DBD::mysql"} };
- unless (eval {require HTML::Template}) { push @missing,{name=>"HTML::Template::Pro"} };
- unless (eval {require HTML::Template}) { push @missing,{name=>"Date::Calc"} };
- unless (eval {require Digest::MD5}) { push @missing,{name=>"Digest::MD5"} };
- unless (eval {require MARC::Record}) { push @missing,{name=>"MARC::Record"} };
- unless (eval {require Mail::Sendmail}) { push @missing,{name=>"Mail::Sendmail",usagemail=>1} };
- unless (eval {require List::MoreUtils}) { push @missing,{name=>"List::MoreUtils"} };
-# The following modules are not mandatory, depends on how the library want to use Koha
- unless (eval {require PDF::API2}) {
- if ($#missing>=0) { # only when $#missing >= 0 so this isn't fatal
- push @missing,{name=>"PDF::API2",usagebarcode=>1};
- }
- }
- unless (eval {require GD::Barcorde}) {
- if ($#missing>=0) { # only when $#missing >= 0 so this isn't fatal
- push @missing,{name=>"GD::Barcode",usagebarcode=>1,usagespine=>1};
- }
- }
- unless (eval {require Data::Random}) {
- if ($#missing>=0) { # only when $#missing >= 0 so this isn't fatal
- push @missing,{name=>"Data::Random",usagebarcode=>1};
+ #Check if user have all necessary grants on this database.
+ my $rq =
+ $dbh->prepare(
+ "SHOW GRANTS FOR \'$info{user}\'\@'$info{hostname}'");
+ $rq->execute;
+ my $grantaccess;
+ while ( my ($line) = $rq->fetchrow ) {
+ my $dbname = $info{dbname};
+ if ( $line =~ m/^GRANT (.*?) ON `$dbname`\.\*/ || index( $line, '*.*' ) > 0 ) {
+ $grantaccess = 1
+ if (
+ index( $line, 'ALL PRIVILEGES' ) > 0
+ || ( ( index( $line, 'SELECT' ) > 0 )
+ && ( index( $line, 'INSERT' ) > 0 )
+ && ( index( $line, 'UPDATE' ) > 0 )
+ && ( index( $line, 'DELETE' ) > 0 )
+ && ( index( $line, 'CREATE' ) > 0 )
+ && ( index( $line, 'DROP' ) > 0 ) )
+ );
+ }
+ }
+ unless ($grantaccess) {
+ $rq =
+ $dbh->prepare("SHOW GRANTS FOR \'$info{user}\'\@'\%'");
+ $rq->execute;
+ while ( my ($line) = $rq->fetchrow ) {
+ my $dbname = $info{dbname};
+ if ( $line =~ m/$dbname/ || index( $line, '*.*' ) > 0 )
+ {
+ $grantaccess = 1
+ if (
+ index( $line, 'ALL PRIVILEGES' ) > 0
+ || ( ( index( $line, 'SELECT' ) > 0 )
+ && ( index( $line, 'INSERT' ) > 0 )
+ && ( index( $line, 'UPDATE' ) > 0 )
+ && ( index( $line, 'DELETE' ) > 0 )
+ && ( index( $line, 'CREATE' ) > 0 )
+ && ( index( $line, 'DROP' ) > 0 ) )
+ );
+ }
+ }
+ }
+ $template->param( "checkgrantaccess" => $grantaccess );
+ } # End mysql connect check...
+
+ elsif ( $info{dbms} eq "Pg" ) {
+ # Check if database has been created...
+ my $rv = $dbh->do( "SELECT * FROM pg_catalog.pg_database WHERE datname = \'$info{dbname}\';" );
+ if ( $rv == 1 ) {
+ $template->param( 'checkdatabasecreated' => 1 );
+ }
+
+ # Check if user has all necessary grants on this database...
+ my $rq = $dbh->do( "SELECT u.usesuper
+ FROM pg_catalog.pg_user as u
+ WHERE u.usename = \'$info{user}\';" );
+ if ( $rq == 1 ) {
+ $template->param( "checkgrantaccess" => 1 );
+ }
+ } # End Pg connect check...
+ }
+ else {
+ $template->param( "error" => DBI::err, "message" => DBI::errstr );
+ }