diff options
| author | Peter Eisentraut | 2000-01-20 21:51:09 +0000 |
|---|---|---|
| committer | Peter Eisentraut | 2000-01-20 21:51:09 +0000 |
| commit | 13f88750178ced2b948a3d2b8370f5231534577d (patch) | |
| tree | e9f1abb294831f1bea568ad35ba0b0817031c445 /src/bin | |
| parent | a959e3f7c04d2f8cca3e7895c3bb460d40de2280 (diff) | |
Added new pg_id to fix initdb problems
New INSTALL file
Fixed a copyright notice
Diffstat (limited to 'src/bin')
| -rw-r--r-- | src/bin/Makefile | 4 | ||||
| -rw-r--r-- | src/bin/initdb/initdb.sh | 65 | ||||
| -rw-r--r-- | src/bin/pg_id/Makefile | 33 | ||||
| -rw-r--r-- | src/bin/pg_id/pg_id.c | 91 | ||||
| -rw-r--r-- | src/bin/psql/copy.c | 5 |
5 files changed, 155 insertions, 43 deletions
diff --git a/src/bin/Makefile b/src/bin/Makefile index 451fab4bff3..9aaec450917 100644 --- a/src/bin/Makefile +++ b/src/bin/Makefile @@ -7,14 +7,14 @@ # # # IDENTIFICATION -# $Header: /cvsroot/pgsql/src/bin/Makefile,v 1.24 2000/01/19 20:08:23 petere Exp $ +# $Header: /cvsroot/pgsql/src/bin/Makefile,v 1.25 2000/01/20 21:51:02 petere Exp $ # #------------------------------------------------------------------------- SRCDIR= .. include ../Makefile.global -DIRS = pg_version psql pg_dump pg_passwd \ +DIRS = pg_id pg_version psql pg_dump pg_passwd \ scripts initdb initlocation ipcclean \ pg_ctl diff --git a/src/bin/initdb/initdb.sh b/src/bin/initdb/initdb.sh index 6db416e1c1a..52a66507e8c 100644 --- a/src/bin/initdb/initdb.sh +++ b/src/bin/initdb/initdb.sh @@ -26,7 +26,7 @@ # # # IDENTIFICATION -# $Header: /cvsroot/pgsql/src/bin/initdb/Attic/initdb.sh,v 1.81 2000/01/19 20:08:24 petere Exp $ +# $Header: /cvsroot/pgsql/src/bin/initdb/Attic/initdb.sh,v 1.82 2000/01/20 21:51:05 petere Exp $ # #------------------------------------------------------------------------- @@ -47,14 +47,7 @@ exit_nicely(){ CMDNAME=`basename $0` -if [ "$USER" = 'root' -o "$LOGNAME" = 'root' ] -then - echo "You cannot run $CMDNAME as root. Please log in (using, e.g., 'su')" - echo "as the (unprivileged) user that will own the server process." - exit 1 -fi -EffectiveUser=`id -n -u 2>/dev/null || whoami 2>/dev/null` if [ "$TMPDIR" ]; then TEMPFILE="$TMPDIR/initdb.$$" else @@ -95,7 +88,7 @@ else fi # Check if needed programs actually exist in path -for prog in postgres pg_version +for prog in postgres pg_version pg_id do if [ ! -x "$PGPATH/$prog" ] then @@ -109,6 +102,22 @@ do fi done + +# Gotta wait for pg_id existence check above +EffectiveUser=`$PGPATH/pg_id -n -u` +if [ -z "$EffectiveUser" ]; then + echo "Could not determine current user name. You are really hosed." + exit 1 +fi + +if [ `$PGPATH/pg_id -u` -eq 0 ] +then + echo "You cannot run $CMDNAME as root. Please log in (using, e.g., 'su')" + echo "as the (unprivileged) user that will own the server process." + exit 1 +fi + + # 0 is the default (non-)encoding MULTIBYTEID=0 # This is placed here by configure --enable-multibyte[=XXX]. @@ -124,12 +133,9 @@ template_only=0 # superuser be the same as the Unix user owning the server process: # The single user postgres backend will only connect as the database # user with the same name as the Unix user running it. That's -# a security measure. It might change in the future (why?), but for -# now the --username option is only a fallback if both id and whoami -# fail, and in that case the argument _must_ be the name of the effective -# user. +# a security measure. POSTGRES_SUPERUSERNAME="$EffectiveUser" -POSTGRES_SUPERUSERID="`id -u 2>/dev/null || echo 0`" +POSTGRES_SUPERUSERID=`$PGPATH/pg_id -u` while [ "$#" -gt 0 ] do @@ -150,17 +156,7 @@ do template_only=1 echo "Updating template1 database only." ;; -# The database superuser. See comments above. - --username|-u) - POSTGRES_SUPERUSERNAME="$2" - shift;; - --username=*) - POSTGRES_SUPERUSERNAME=`echo $1 | sed 's/^--username=//'` - ;; - -u*) - POSTGRES_SUPERUSERNAME=`echo $1 | sed 's/^-u//'` - ;; -# The sysid of the database superuser. See comments above. +# The sysid of the database superuser. Can be freely changed. --sysid|-i) POSTGRES_SUPERUSERID="$2" shift;; @@ -284,21 +280,6 @@ then exit 1 fi -#--------------------------------------------------------------------------- -# Figure out who the Postgres superuser for the new database system will be. -#--------------------------------------------------------------------------- - -# This means they have neither 'id' nor 'whoami'! -if [ -z "$POSTGRES_SUPERUSERNAME" ] -then - echo "$CMDNAME: Could not the determine current username. Please use the -u option." - exit 1 -fi - -echo "This database system will be initialized with username \"$POSTGRES_SUPERUSERNAME\"." -echo "This user will own all the data files and must also own the server process." -echo - #------------------------------------------------------------------------- # Find the input files @@ -355,6 +336,10 @@ fi trap 'echo "Caught signal." ; exit_nicely' 1 2 3 15 +# Let's go +echo "This database system will be initialized with username \"$POSTGRES_SUPERUSERNAME\"." +echo "This user will own all the data files and must also own the server process." +echo # ----------------------------------------------------------------------- # Create the data directory if necessary diff --git a/src/bin/pg_id/Makefile b/src/bin/pg_id/Makefile new file mode 100644 index 00000000000..1801becbe56 --- /dev/null +++ b/src/bin/pg_id/Makefile @@ -0,0 +1,33 @@ +#------------------------------------------------------------------------- +# +# Makefile +# Makefile for bin/pg_id +# +# Copyright (C) 2000 by PostgreSQL Global Development Team +# +# $Header: /cvsroot/pgsql/src/bin/pg_id/Attic/Makefile,v 1.14 2000/01/20 21:51:07 petere Exp $ +# +#------------------------------------------------------------------------- + +SRCDIR= ../.. +include ../../Makefile.global + +OBJS= pg_id.o + +all: pg_id + +pg_id: $(OBJS) + $(CC) -o pg_id $(OBJS) $(LDFLAGS) + +install: pg_id + $(INSTALL) $(INSTL_EXE_OPTS) pg_id$(X) $(BINDIR)/pg_id + +depend dep: + $(CC) -MM $(CFLAGS) *.c >depend + +clean: + rm -f pg_id $(OBJS) + +ifeq (depend,$(wildcard depend)) +include depend +endif diff --git a/src/bin/pg_id/pg_id.c b/src/bin/pg_id/pg_id.c new file mode 100644 index 00000000000..fcba3b3e3c5 --- /dev/null +++ b/src/bin/pg_id/pg_id.c @@ -0,0 +1,91 @@ +/* + * pg_id.c + * + * A crippled id utility for use in various shell scripts in use by PostgreSQL + * (in particular initdb) + * + * Copyright (C) 2000 by PostgreSQL Global Development Group + * + * $Header: /cvsroot/pgsql/src/bin/pg_id/Attic/pg_id.c,v 1.11 2000/01/20 21:51:07 petere Exp $ + */ +#include <c.h> + +#include <pwd.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <sys/types.h> + +int main(int argc, char * argv[]) +{ + int c; + int nameflag = 0, + realflag = 0, + userflag = 0; + const char * username = NULL; + + struct passwd * pw; + + while ((c = getopt(argc, argv, "nru")) != -1) + { + switch(c) + { + case 'n': + nameflag = 1; + break; + case 'r': + realflag = 1; + break; + case 'u': + userflag = 1; + break; + default: + fprintf(stderr, "Usage: %s [-n] [-r] [-u] [username]\n", argv[0]); + exit(1); + } + } + + if (argc - optind >= 1) + username = argv[optind]; + + if (nameflag && !userflag) + { + fprintf(stderr, "%s: -n must be used together with -u\n", argv[0]); + exit(1); + } + if (username && realflag) + { + fprintf(stderr, "%s: -r cannot be used when a user name is given\n", argv[0]); + exit(1); + } + + + if (username) + { + pw = getpwnam(username); + if (!pw) + { + fprintf(stderr, "%s: %s: no such user\n", argv[0], username); + exit(1); + } + } + else if (realflag) + pw = getpwuid(getuid()); + else + pw = getpwuid(geteuid()); + + if (!pw) + { + perror(argv[0]); + exit(1); + } + + if (!userflag) + printf("uid=%d(%s)\n", (int)pw->pw_uid, pw->pw_name); + else if (nameflag) + puts(pw->pw_name); + else + printf("%d\n", (int)pw->pw_uid); + + return 0; +} diff --git a/src/bin/psql/copy.c b/src/bin/psql/copy.c index 8f46e65b4c3..140aa983fa6 100644 --- a/src/bin/psql/copy.c +++ b/src/bin/psql/copy.c @@ -3,7 +3,7 @@ * * Copyright 2000 by PostgreSQL Global Development Team * - * $Header: /cvsroot/pgsql/src/bin/psql/copy.c,v 1.6 2000/01/18 23:30:23 petere Exp $ + * $Header: /cvsroot/pgsql/src/bin/psql/copy.c,v 1.7 2000/01/20 21:51:09 petere Exp $ */ #include <c.h> #include "copy.h" @@ -423,7 +423,10 @@ handleCopyIn(PGconn *conn, FILE *copystream, const char *prompt) if (firstload) { if (!strcmp(copybuf, "\\.")) + { copydone = true; + break; + } firstload = false; } } |
