diff --git a/mysql/exec.cgi b/mysql/exec.cgi index e08669ab2..3c4469c13 100755 --- a/mysql/exec.cgi +++ b/mysql/exec.cgi @@ -33,7 +33,7 @@ else { print "$text{'exec_none'}

\n"; } - open(OLD, "$commands_file.$in{'db'}"); + &open_readfile(OLD, "$commands_file.$in{'db'}"); while() { s/\r|\n//g; $already++ if ($_ eq $in{'cmd'}); diff --git a/mysql/mysql-lib.pl b/mysql/mysql-lib.pl index 36f2773a4..4b0066a1d 100644 --- a/mysql/mysql-lib.pl +++ b/mysql/mysql-lib.pl @@ -1,9 +1,9 @@ # mysql-lib.pl # Common MySQL functions -do '../web-lib.pl'; +BEGIN { push(@INC, ".."); }; +use WebminCore; &init_config(); -do '../ui-lib.pl'; if ($config{'mysql_libs'}) { $ENV{$gconfig{'ld_env'}} .= ':' if ($ENV{$gconfig{'ld_env'}}); $ENV{$gconfig{'ld_env'}} .= $config{'mysql_libs'}; @@ -150,6 +150,7 @@ sub list_databases local @rv; eval { # First try using SQL + local $main::error_must_die = 1; local $t = &execute_sql_safe($master_db, "show databases"); @rv = map { $_->[0] } @{$t->{'data'}}; }; @@ -168,35 +169,43 @@ return @rv; # Returns a list of tables in some database sub list_tables { -local ($db, $empty_denied, $include_views) = @_; -# XXX use SQL first -if ($db =~ /_/) { - open(DBS, "\"$config{'mysqlshow'}\" $authstr ".quotemeta($db)." % 2>&1 |"); - } -else { - open(DBS, "\"$config{'mysqlshow'}\" $authstr ".quotemeta($db)." 2>&1 |"); - } -local $t = &parse_mysql_table(DBS); -close(DBS); -if ($t =~ /access denied/i) { - if ($empty_denied) { - return ( ); +my ($db, $empty_denied, $include_views) = @_; +my @rv; +eval { + # First try using SQL + local $main::error_must_die = 1; + local $t = &execute_sql_safe($db, "show tables"); + @rv = map { $_->[0] } @{$t->{'data'}}; + }; +if ($@) { + # Fall back to mysqlshow command + local $tspec = $db =~ /_/ ? "%" : ""; + open(DBS, "\"$config{'mysqlshow'}\" $authstr ". + quotemeta($db)." $tspec 2>&1 |"); + local $t = &parse_mysql_table(DBS); + close(DBS); + if ($t =~ /access denied/i) { + if ($empty_denied) { + return ( ); + } + else { + &error($text{'edenied'}); + } } - else { - &error($text{'edenied'}); + elsif (!ref($t)) { + &error("".&html_escape($t).""); } + @rv = map { $_->[0] } @{$t->{'data'}}; } -elsif (!ref($t)) { - &error("$t"); - } -local %views; + +# Filter out views if (!$include_views) { - # Filter out views if (&supports_views()) { - %views = map { $_, 1 } &list_views($_[0]); + my %views = map { $_, 1 } &list_views($db); + @rv = grep { !$views{$_} } @rv; } } -return grep { !$views{$_} } map { $_->[0] } @{$t->{'data'}}; +return @rv; } # table_structure(database, table) diff --git a/web-lib-funcs.pl b/web-lib-funcs.pl index 96eb2eb98..ef9c565ff 100755 --- a/web-lib-funcs.pl +++ b/web-lib-funcs.pl @@ -7456,12 +7456,14 @@ but calls the unlock for you automatically when it is closed. =cut sub open_lock_tempfile { -my $file = @_ == 1 ? $_[0] : $_[1]; -$file =~ s/^[^\/]*//; -if ($file =~ /^\//) { - $main::open_templocks{$file} = &lock_file($file); +my ($fh, $file, $noerror, $notemp, $safe) = @_; +$fh = &callers_package($fh); +my $lockfile = $file; +$lockfile =~ s/^[^\/]*//; +if ($lockfile =~ /^\//) { + $main::open_templocks{$lockfile} = &lock_file($lockfile); } -return &open_tempfile(@_); +return &open_tempfile($fh, $file, $noerror, $notemp, $safe); } sub END