From 32da7ce14a86d991568460d35bc5b045aa6d1bd4 Mon Sep 17 00:00:00 2001 From: Martin Pitt <martin@piware.de> Date: Mon, 31 Jan 2005 23:27:17 +0000 Subject: [PATCH] initial Perl version of pg_wrapper --- postgresql-common-1/Makefile | 19 +-------- postgresql-common-1/TODO | 2 + postgresql-common-1/pg_wrapper | 72 ++++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+), 18 deletions(-) create mode 100755 postgresql-common-1/pg_wrapper diff --git a/postgresql-common-1/Makefile b/postgresql-common-1/Makefile index 5b9fedf4..b81445e3 100644 --- a/postgresql-common-1/Makefile +++ b/postgresql-common-1/Makefile @@ -5,21 +5,9 @@ BINDIR = $(PREFIX)/bin SBINDIR = $(PREFIX)/sbin MANDIR = $(PREFIX)/man -CFLAGS = -g -Wall - -PROGS = pg_wrapper - -LINKS = pg_exec pg_default psql pg_dump pg_dumpall createdb createuser dropdb dropuser pg_restore clusterdb vacuumdb psql - -SRCS = pg_wrapper.c pg_default.c pg_files.c pg_exec.c - -OBJS = pg_wrapper.o pg_default.o pg_files.o pg_exec.o - -all: pg_wrapper +LINKS = clusterdb createdb createlang createuser dropdb droplang dropuser pg_dump pg_dumpall pg_restore psql vacuumdb vacuumlo clean: - -rm $(PROGS) $(LINKS) $(OBJS) - -rm *~ install: pg_wrapper [ -z "$(DESTDIR)" ] || mkdir -p "$(DESTDIR)" @@ -34,8 +22,3 @@ install: pg_wrapper for f in $(LINKS); do \ ln -sf pg_wrapper $$f; \ done - -pg_wrapper: $(OBJS) - gcc $(CFLAGS) $(OBJS) -o $@ - -$(OBJS): pg_wrapper.h diff --git a/postgresql-common-1/TODO b/postgresql-common-1/TODO index 84c07c4c..f4980a20 100644 --- a/postgresql-common-1/TODO +++ b/postgresql-common-1/TODO @@ -48,3 +48,5 @@ Write manpages for: pg_lsclusters, pg_{create,start,stop,reload}cluster add $CONFDIR/port, add support for that in pg_{create,start}cluster and pg_lscclusters, prefer this in init scripts +determine db version of the default port in pg_wrapper + diff --git a/postgresql-common-1/pg_wrapper b/postgresql-common-1/pg_wrapper new file mode 100755 index 00000000..fcec548f --- /dev/null +++ b/postgresql-common-1/pg_wrapper @@ -0,0 +1,72 @@ +#!/usr/bin/perl -w + +# configuration +$mapfile = "/etc/postgresql-common/user_clusters"; +$confroot = "/etc/postgresql"; +$binroot = "/usr/lib/postgresql"; +$socketdir = "/var/run/postgresql"; + +@commands = qw/clusterdb createdb createlang createuser dropdb droplang dropuser pg_dump + pg_dumpall pg_restore psql vacuumdb vacuumlo/; + +# Return parameter from a PostgreSQL configuration file. +# Parameters: <version> <cluster> <parameter name> +sub get_conf_value { + return 0 unless $_[0] && $_[1]; + open F, "$confroot/$_[0]/$_[1]/postgresql.conf" or die "Could not open configuration file: $!"; + while (<F>) { + return $1 if /^\s*$_[2]\s*=\s*(\w+)\b/; + } + return 0; +} + +# Return the PostgreSQL version, cluster, and database to connect to. Return +# ("","","") if $mapfile does not exist or has no entry for the current user +sub get_version_cluster_db { + my ($user, $pwd, $uid, $gid) = getpwuid $>; + my $group = (getgrgid $gid)[0]; + + if (! open MAP, $mapfile) { + print "Warning: could not open $mapfile, connecting to default port\n"; + return ('','',$user); + } + while (<MAP>) { + s/(.*?)#.*/$1/; + next if /^\s*$/; + ($u,$g,$v,$c,$db) = split; + if (!$db) { + print "Warning: ignoring invalid line $. in $mapfile\n"; + next; + } + if (($u eq "*" || $u eq $user) && ($g eq "*" || $g eq $group)) { + return ($v,$c, ($db eq "*") ? '' : $db); + } + } + return ('','',''); +} + +# +# main +# + +$cmd = (split '/', $0)[-1]; +grep { $cmd eq $_ } @commands or die "pg_wrapper: invalid command name $cmd"; + +# Determine $version, $cluster, $db, $port +($version, $cluster, $db) = get_version_cluster_db(); +if ($version && $cluster) { + $port = (get_conf_value $version, $cluster, 'port'); +} else { + $version = "8.0"; # TODO: determine version from default port +} + +#print "pg_wrapper debug: version $version, cluster $cluster, port $port, db $db\n"; + +$ENV{'PGPORT'} = "$port" if $port; +$ENV{'PGHOST'} = $socketdir; +$ENV{'PGDATABASE'} = $db if $db; + +@args = ("$binroot/$version/bin/$cmd"); +push @args, @ARGV; +exec @args; + -- GitLab