#!<> use INSTALL::common; use INSTALL::global; use INSTALL::parameter; use INSTALL::os; my $pParameters = \%INSTALL::parameter::variables; #============================================================================== #------------------------ Default global values #============================================================================== $pParameters->{asphome} = "<>"; $pParameters->{com_layer} = "<>"; INSTALL::common::set_standard_globals; my $pGlobals = \%INSTALL::global::variables; my $pOS = \%INSTALL::os::Details; sub usage { printf("usage: list-databases mysql|postgresql\n"); exit(1); } $database = ""; if ($#ARGV == 0) { ($param) = @ARGV; if ($param ne "mysql" && $param ne "postgresql") { usage(); } $database = $param; } else { usage(); } if ($database eq "postgresql") { $default = GetDefaultPostgresPort(); @list = split(/\n/, `ls -1 /tmp/.s.PGSQL.*`); foreach (@list) { s/\/tmp\/\.s\.PGSQL\.//; if (TestForInternalDB($_) == 1 || $_ == $default) { next; } print; print("\n"); } } elsif ($database eq "mysql") { ScanForMySQL(); } print "\n"; ############################################################## sub TestForInternalDB() { my $arg = $_; my $retval = 0; open(SERVICES, "/etc/services"); foreach () { if (/casp(\d+).*InternalDB$/) { if ($1 == $arg) { $retval = 1; last; } } } close(SERVICES); return($retval); } sub ScanForMySQL() { my %ports; if ($pOS->{os} =~ /linux/i) { local *PROC; opendir(PROC, "/proc"); while ($pid = readdir(PROC)) { if ($pid =~ /\d+/) { open(CMD, "/proc/".$pid."/cmdline"); $cmdline = ; close(CMD); if ($cmdline =~ /mysqld/) { open(ENVIRON, "/proc/".$pid."/environ"); $environ = ; close(ENVIRON); %keyvalues=split(/[\0=]/,$environ); $port=$keyvalues{MYSQL_TCP_PORT}; if ($port) { $ports{$port}="xx"; } else { $ports{"3306"}="xx"; } } } } closedir(PROC); foreach (keys(%ports)) { print("$_\n"); } return(1); } else { return(error("Unsupported platform: $pOS->{os}")); } } sub GetDefaultPostgresPort() { my $postgres_file; if ($pOS->{os} =~ /linux/i) { for($pOS->{distribution_flavor}) { /RedHat/i && do { $postgres_file = "/etc/rc.d/init.d/postgresql"; last; }; /SuSE/i && do { $postgres_file = "/sbin/init.d/postgres"; last; }; return(error("Unsupported distribution: $pOS->{distribution}","Distribution flavor: $pOS->{distribution_flavor}")); } open (PGINIT,$postgres_file); foreach () { if (/^PGPORT=(\d+)$/) { return $1; } } } else { return(error("Unsupported platform: $pOS->{os}")); } }