--- ldirectord.fix 2005-05-03 10:25:29.000000000 +0000 +++ ldirectord 2005-04-28 17:14:29.000000000 +0000 @@ -826,8 +826,8 @@ } elsif ($rcmd =~ /^service\s*=\s*(.*)/) { lc($1); $1 =~ /(\w+)/ && ($1 eq "http" || $1 eq "https" || $1 eq "ldap" - || $1 eq "ftp" || $1 eq "none" || $1 eq "smtp" || $1 eq "pop" || $1 eq "imap" || $1 eq "nntp" || $1 eq "dns" || $1 eq "mysql") - or &config_error($line, "service must be http, https, ftp, smtp, pop, imap, ldap, nntp, dns, mysql or none"); + || $1 eq "ftp" || $1 eq "none" || $1 eq "smtp" || $1 eq "pop" || $1 eq "imap" || $1 eq "nntp" || $1 eq "dns" || $1 eq "mysql" || $1 eq "pgsql") + or &config_error($line, "service must be http, https, ftp, smtp, pop, imap, ldap, nntp, dns, mysql, pgsql or none"); $vsrv{service} = $1; if($vsrv{service} eq "ftp" and $vsrv{login} eq "") { @@ -1005,6 +1005,9 @@ elsif ($vsrv->{port} eq "3306") { $vsrv->{service} = "mysql"; } + elsif ($vsrv->{port} eq "5432") { + $vsrv->{service} = "pgsql"; + } else { $vsrv->{service} = "none"; } @@ -1607,6 +1610,8 @@ $$r{num_connects} = 0 if (check_dns($v, $r)); } elsif ($$v{service} eq "mysql") { $$r{num_connects} = 0 if (check_mysql($v, $r)); + } elsif ($$v{service} eq "pgsql") { + $$r{num_connects} = 0 if (check_pgsql($v, $r)); } else { $$r{num_connects} = 0 if (check_none($v, $r)); } @@ -1971,11 +1976,20 @@ return 0; } - sub check_mysql { + check_sql(@_, "mysql", "database"); +} + +sub check_pgsql +{ + check_sql(@_, "Pg", "dbname"); +} + +sub check_sql +{ require DBI; - my ($v, $r) = @_; + my ($v, $r, $dbd, $dbname) = @_; my $port=(defined $$v{checkport}?$$v{checkport}:$$r{port}); my ($dbh, $sth, $query, $rows, $result); # Local variables $query = $$r{request}; @@ -1986,8 +2000,8 @@ return 1; } $result=2; # Set result flag. Only ok if ends up at zero. - &ld_debug(2, "Checking mysql server=$$r{server} port=$port\n"); - $dbh = DBI->connect("dbi:mysql:database=$$v{database};host=$$r{server};port=$port", $$v{login}, $$v{passwd}); + &ld_debug(2, "Checking $$v{server} server=$$r{server} port=$port\n"); + $dbh = DBI->connect("dbi:$dbd:$dbname=$$v{database};host=$$r{server};port=$port", $$v{login}, $$v{passwd}); unless ($dbh) { &ld_debug(4, "Failed to bind to $$r{server} with $dbh->err"); service_set($v, $r, "down");