pg_ctl - tighten command parameter checking - Mailing list pgsql-hackers
From | Oliver Elphick |
---|---|
Subject | pg_ctl - tighten command parameter checking |
Date | |
Msg-id | 1013858952.4369.92.camel@linda Whole thread Raw |
Responses |
Re: pg_ctl - tighten command parameter checking
Re: pg_ctl - tighten command parameter checking Re: pg_ctl - tighten command parameter checking |
List | pgsql-hackers |
The attached patch improves the command parameter checking of pg_ctl. At present, there is nothing to check that the parameter given with a parameter-taking option is actually valid. For example, -l can be given without a following logfile name; on a strict POSIX shell such as ash, you will get a subsequent failure because of too many shifts, but bash will let it pass without showing any error. The patch checks that each parameter is not empty and is not another option. A consequence of this change is that no command-line parameter can begin with "-" (except for the parameter to -o); this seems a reasonable restriction. For consistency and clarity, I have also changed every occurrence of "shift ... var=$1" to "var=$2 ... shift". -- Oliver Elphick Oliver.Elphick@lfix.co.uk Isle of Wight http://www.lfix.co.uk/oliver GPG: 1024D/3E1D0C1C: CA12 09E0 E8D5 8870 5839 932A 614D 4C34 3E1D 0C1C "But as many as received him, to them gave he power to become the sons of God, even to them that believe on his name" John 1:12 *** postgresql-7.2.orig/src/bin/pg_ctl/pg_ctl.sh Sat Sep 29 04:09:32 2001 --- postgresql-7.2/src/bin/pg_ctl/pg_ctl.sh Sat Feb 16 10:50:36 2002 *************** *** 127,156 **** exit 0 ;; -D) - shift # pass environment into new postmaster ! PGDATA="$1" export PGDATA ;; -l) logfile="$2" shift;; -l*) logfile=`echo "$1" | sed 's/^-l//'` ;; -m) shutdown_mode="$2" shift;; -m*) shutdown_mode=`echo "$1" | sed 's/^-m//'` ;; -o) shift - POSTOPTS="$1" ;; -p) shift - po_path="$1" ;; -s) silence_echo=: --- 127,197 ---- exit 0 ;; -D) # pass environment into new postmaster ! PGDATA="$2" ! if [ -z "$PGDATA" -o `echo x$PGDATA | cut -c1-2` = "x-" ] ! then ! echo "$CMDNAME: option '-D' specified without a data directory" ! exit 1 ! fi export PGDATA + shift ;; -l) logfile="$2" + if [ -z "$logfile" -o `echo x$logfile | cut -c1-2` = "x-" ] + then + echo "$CMDNAME: option '-l' specified without a logfile" + exit 1 + fi shift;; -l*) logfile=`echo "$1" | sed 's/^-l//'` + if [ -z "$logfile" -o `echo x$logfile | cut -c1-2` = "x-" ] + then + echo "$CMDNAME: option '-l' specified without a logfile" + exit 1 + fi ;; -m) shutdown_mode="$2" + if [ -z "$shutdown_mode" -o `echo x$shutdown_mode | cut -c1-2` = "x-" ] + then + echo "$CMDNAME: option '-m' specified without a shutdown mode" + exit 1 + fi shift;; -m*) shutdown_mode=`echo "$1" | sed 's/^-m//'` + if [ -z "$shutdown_mode" -o `echo x$shutdown_mode | cut -c1-2` = "x-" ] + then + echo "$CMDNAME: option '-m' specified without a shutdown mode" + exit 1 + fi ;; -o) + POSTOPTS="$2" + if [ -z "$POSTOPTS" ] + then + echo "$CMDNAME: option '-o' specified without any passed options" + exit 1 + fi + if [ `echo x$POSTOPTS | cut -c1-2` != x- ] + then + echo "$CMDNAME: option -o must be followed by one or more further options + to pass to the postmaster" + exit 1 + fi shift ;; -p) + po_path="$2" + if [ -z "$po_path" -o `echo x$po_path | cut -c1-2` = "x-" ] + then + echo "$CMDNAME: option '-p' specified without a path" + exit 1 + fi shift ;; -s) silence_echo=:
pgsql-hackers by date: