OSDN Git Service

fc7f66af433ca5d284c7ef5b35cf38cf992b02c8
[pg-rex/syncrep.git] / src / bin / scripts / dropuser
1 #!/bin/sh
2 #-------------------------------------------------------------------------
3 #
4 # dropuser--
5 #    Utility for removing a user from the PostgreSQL database.
6 #
7 # Copyright (c) 1994, Regents of the University of California
8 #
9 #
10 # IDENTIFICATION
11 #    $Header: /cvsroot/pgsql/src/bin/scripts/Attic/dropuser,v 1.11 2001/01/21 05:16:45 momjian Exp $
12 #
13 # Note - this should NOT be setuid.
14 #
15 #-------------------------------------------------------------------------
16
17 CMDNAME=`basename $0`
18 PATHNAME=`echo $0 | sed "s,$CMDNAME\$,,"`
19
20 PSQLOPT=
21 forcedel=t
22 DelUser=
23
24 # Check for echo -n vs echo \c
25
26 if echo '\c' | grep -s c >/dev/null 2>&1
27 then
28     ECHO_N="echo -n"
29     ECHO_C=""
30 else
31     ECHO_N="echo"
32     ECHO_C='\c'
33 fi
34
35
36 while [ $# -gt 0 ]
37 do
38     case "$1" in
39         --help|-\?)
40                 usage=t
41                 break
42                 ;;
43 # options passed on to psql
44         --host|-h)
45                 PSQLOPT="$PSQLOPT -h $2"
46                 shift;;
47         -h*)
48                 PSQLOPT="$PSQLOPT $1"
49                 ;;
50         --host=*)
51                 PSQLOPT="$PSQLOPT -h "`echo $1 | sed 's/^--host=//'`
52                 ;;
53         --port|-p)
54                 PSQLOPT="$PSQLOPT -p $2"
55                 shift;;
56         -p*)
57                 PSQLOPT="$PSQLOPT $1"
58                 ;;
59         --port=*)
60                 PSQLOPT="$PSQLOPT -p "`echo $1 | sed 's/^--port=//'`
61                 ;;
62 # Note: These two specify the user to connect as (like in psql),
63 #       not the user you're dropping.
64         --username|-U)
65                 PSQLOPT="$PSQLOPT -U $2"
66                 shift;;
67         -U*)
68                 PSQLOPT="$PSQLOPT $1"
69                 ;;
70         --username=*)
71                 PSQLOPT="$PSQLOPT -U "`echo $1 | sed 's/^--username=//'`
72                 ;;
73         --password|-W)
74                 PSQLOPT="$PSQLOPT -W"
75                 ;;
76         --echo|-e)
77                 PSQLOPT="$PSQLOPT -e"
78                 ;;
79         --quiet|-q)
80                 PSQLOPT="$PSQLOPT -o /dev/null"
81                 ;;
82 # other options
83         --interactive|-i)
84                 forcedel=f
85                 ;;
86         -*)
87                 echo "$CMDNAME: invalid option: $1" 1>&2
88                 echo "Try '$CMDNAME --help' for more information." 1>&2
89                 exit 1
90                 ;;
91          *)
92                 DelUser="$1"
93                 ;;
94     esac
95     shift;
96 done
97
98
99 if [ "$usage" ]; then
100         echo "$CMDNAME removes a PostgreSQL user."
101         echo
102         echo "Usage:"
103         echo "  $CMDNAME [options] [username]"
104         echo
105         echo "Options:"
106         echo "  -h, --host=HOSTNAME             Database server host"
107         echo "  -p, --port=PORT                 Database server port"
108         echo "  -U, --username=USERNAME         Username to connect as (not the one to drop)"
109         echo "  -W, --password                  Prompt for password to connect"
110         echo "  -i, --interactive               Prompt before deleting anything"
111         echo "  -e, --echo                      Show the query being sent to the backend"
112         echo "  -q, --quiet                     Don't write any messages"
113         echo
114         echo "Report bugs to <pgsql-bugs@postgresql.org>."
115         exit 0
116 fi
117
118 # Prompt for username if missing
119
120 if [ -z "$DelUser" ]; then
121         $ECHO_N "Enter name of user to delete: "$ECHO_C
122         read DelUser
123         [ $? -ne 0 ] && exit 1
124 fi
125
126
127 if [ "$forcedel" = f ]; then
128         echo "User \"$DelUser\" will be permanently deleted."
129         $ECHO_N "Are you sure? (y/n) "$ECHO_C
130         read REPLY
131
132         [ $? -eq 1 ] && exit 1
133         [ "$REPLY" != "y" -a "$REPLY" != "Y" ] && exit 0
134 fi
135
136
137 DelUser=`echo "$DelUser" | sed 's/\"/\\\"/g'`
138
139 ${PATHNAME}psql $PSQLOPT -d template1 -c "DROP USER \"$DelUser\""
140
141 if [ $? -ne 0 ]; then
142         echo "$CMDNAME: deletion of user \"$DelUser\" failed" 1>&2
143         exit 1
144 fi
145
146 exit 0