diff --git a/doc/src/sgml/ref/createuser.sgml b/doc/src/sgml/ref/createuser.sgml index 4cbfd69148c799b7b419d19dbba75cc951cca54d..9942cd66f610636b02831fe0e9e5831e19eab4bb 100644 --- a/doc/src/sgml/ref/createuser.sgml +++ b/doc/src/sgml/ref/createuser.sgml @@ -102,7 +102,8 @@ PostgreSQL documentation <term><option>--no-createdb</></term> <listitem> <para> - The new user will not be allowed to create databases. + The new user will not be allowed to create databases. This is the + default. </para> </listitem> </varlistentry> @@ -152,6 +153,20 @@ PostgreSQL documentation </listitem> </varlistentry> + <varlistentry> + <term><option>--interactive</></term> + <listitem> + <para> + Prompt for the user name if none is specified on the command line, and + also prompt for whichever of the options + <option>-d</option>/<option>-D</option>, + <option>-r</option>/<option>-R</option>, + <option>-s</option>/<option>-S</option> is not specified on the command + line. (This was the default behavior up to PostgreSQL 9.1.) + </para> + </listitem> + </varlistentry> + <varlistentry> <term><option>-l</></term> <term><option>--login</></term> @@ -215,7 +230,8 @@ PostgreSQL documentation <term><option>--no-createrole</></term> <listitem> <para> - The new user will not be allowed to create new roles. + The new user will not be allowed to create new roles. This is the + default. </para> </listitem> </varlistentry> @@ -235,7 +251,7 @@ PostgreSQL documentation <term><option>--no-superuser</></term> <listitem> <para> - The new user will not be a superuser. + The new user will not be a superuser. This is the default. </para> </listitem> </varlistentry> @@ -286,11 +302,6 @@ PostgreSQL documentation </variablelist> </para> - <para> - You will be prompted for a name and other missing information if it - is not specified on the command line. - </para> - <para> <application>createuser</application> also accepts the following command-line arguments for connection parameters: @@ -422,6 +433,14 @@ PostgreSQL documentation server: <screen> <prompt>$ </prompt><userinput>createuser joe</userinput> +</screen> + </para> + + <para> + To create a user <literal>joe</literal> on the default database + server with prompting for some additional attributes: +<screen> +<prompt>$ </prompt><userinput>createuser --interactive joe</userinput> <computeroutput>Shall the new role be a superuser? (y/n) </computeroutput><userinput>n</userinput> <computeroutput>Shall the new role be allowed to create databases? (y/n) </computeroutput><userinput>n</userinput> <computeroutput>Shall the new role be allowed to create more new roles? (y/n) </computeroutput><userinput>n</userinput> @@ -430,7 +449,7 @@ PostgreSQL documentation <para> To create the same user <literal>joe</literal> using the - server on host <literal>eden</>, port 5000, avoiding the prompts and + server on host <literal>eden</>, port 5000, with attributes explicitly specified, taking a look at the underlying command: <screen> <prompt>$ </prompt><userinput>createuser -h eden -p 5000 -S -D -R -e joe</userinput> diff --git a/doc/src/sgml/ref/dropuser.sgml b/doc/src/sgml/ref/dropuser.sgml index 724fe40df267da997d7f88dddc1e4fbbe65f842f..bc6feafe9f21016c0a4327135b85fe152ddbbb6b 100644 --- a/doc/src/sgml/ref/dropuser.sgml +++ b/doc/src/sgml/ref/dropuser.sgml @@ -62,7 +62,9 @@ PostgreSQL documentation <listitem> <para> Specifies the name of the <productname>PostgreSQL</productname> user to be removed. - You will be prompted for a name if none is specified on the command line. + You will be prompted for a name if none is specified on the command + line and the <option>-i</option>/<option>--interactive</option> option + is used. </para> </listitem> </varlistentry> @@ -83,7 +85,8 @@ PostgreSQL documentation <term><option>--interactive</></term> <listitem> <para> - Prompt for confirmation before actually removing the user. + Prompt for confirmation before actually removing the user, and prompt + for the user name if none is specified on the command line. </para> </listitem> </varlistentry> diff --git a/src/bin/scripts/createuser.c b/src/bin/scripts/createuser.c index 54e51b607397dd904107fc6012a3f722539958af..20a1a52a3ae0a7fbbbab3d1f9cf7050a39bf03ba 100644 --- a/src/bin/scripts/createuser.c +++ b/src/bin/scripts/createuser.c @@ -39,6 +39,7 @@ main(int argc, char *argv[]) {"no-login", no_argument, NULL, 'L'}, {"replication", no_argument, NULL, 1}, {"no-replication", no_argument, NULL, 2}, + {"interactive", no_argument, NULL, 3}, /* adduser is obsolete, undocumented spelling of superuser */ {"adduser", no_argument, NULL, 'a'}, {"no-adduser", no_argument, NULL, 'A'}, @@ -52,12 +53,13 @@ main(int argc, char *argv[]) const char *progname; int optindex; int c; - char *newuser = NULL; + const char *newuser = NULL; char *host = NULL; char *port = NULL; char *username = NULL; enum trivalue prompt_password = TRI_DEFAULT; bool echo = false; + bool interactive = false; char *conn_limit = NULL; bool pwprompt = false; char *newpassword = NULL; @@ -154,6 +156,9 @@ main(int argc, char *argv[]) case 2: replication = TRI_NO; break; + case 3: + interactive = true; + break; default: fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit(1); @@ -175,7 +180,17 @@ main(int argc, char *argv[]) } if (newuser == NULL) - newuser = simple_prompt("Enter name of role to add: ", 128, true); + { + if (interactive) + newuser = simple_prompt("Enter name of role to add: ", 128, true); + else + { + if (getenv("PGUSER")) + newuser = getenv("PGUSER"); + else + newuser = get_user_name(progname); + } + } if (pwprompt) { @@ -195,7 +210,7 @@ main(int argc, char *argv[]) if (superuser == 0) { - if (yesno_prompt("Shall the new role be a superuser?")) + if (interactive && yesno_prompt("Shall the new role be a superuser?")) superuser = TRI_YES; else superuser = TRI_NO; @@ -210,7 +225,7 @@ main(int argc, char *argv[]) if (createdb == 0) { - if (yesno_prompt("Shall the new role be allowed to create databases?")) + if (interactive && yesno_prompt("Shall the new role be allowed to create databases?")) createdb = TRI_YES; else createdb = TRI_NO; @@ -218,7 +233,7 @@ main(int argc, char *argv[]) if (createrole == 0) { - if (yesno_prompt("Shall the new role be allowed to create more new roles?")) + if (interactive && yesno_prompt("Shall the new role be allowed to create more new roles?")) createrole = TRI_YES; else createrole = TRI_NO; @@ -316,7 +331,7 @@ help(const char *progname) printf(_("\nOptions:\n")); printf(_(" -c, --connection-limit=N connection limit for role (default: no limit)\n")); printf(_(" -d, --createdb role can create new databases\n")); - printf(_(" -D, --no-createdb role cannot create databases\n")); + printf(_(" -D, --no-createdb role cannot create databases (default)\n")); printf(_(" -e, --echo show the commands being sent to the server\n")); printf(_(" -E, --encrypted encrypt stored password\n")); printf(_(" -i, --inherit role inherits privileges of roles it is a\n" @@ -327,9 +342,11 @@ help(const char *progname) printf(_(" -N, --unencrypted do not encrypt stored password\n")); printf(_(" -P, --pwprompt assign a password to new role\n")); printf(_(" -r, --createrole role can create new roles\n")); - printf(_(" -R, --no-createrole role cannot create roles\n")); + printf(_(" -R, --no-createrole role cannot create roles (default)\n")); printf(_(" -s, --superuser role will be superuser\n")); - printf(_(" -S, --no-superuser role will not be superuser\n")); + printf(_(" -S, --no-superuser role will not be superuser (default)\n")); + printf(_(" --interactive prompt for missing role name and attributes rather\n" + " than using defaults\n")); printf(_(" --replication role can initiate replication\n")); printf(_(" --no-replication role cannot initiate replication\n")); printf(_(" --help show this help, then exit\n")); @@ -340,7 +357,5 @@ help(const char *progname) printf(_(" -U, --username=USERNAME user name to connect as (not the one to create)\n")); printf(_(" -w, --no-password never prompt for password\n")); printf(_(" -W, --password force password prompt\n")); - printf(_("\nIf one of -d, -D, -r, -R, -s, -S, and ROLENAME is not specified, you will\n" - "be prompted interactively.\n")); printf(_("\nReport bugs to <pgsql-bugs@postgresql.org>.\n")); } diff --git a/src/bin/scripts/dropuser.c b/src/bin/scripts/dropuser.c index 2843b233f90cb07b59c0655ea395cf9474346c4b..85b73a42ac206a0783a61639f61d4d08099017cf 100644 --- a/src/bin/scripts/dropuser.c +++ b/src/bin/scripts/dropuser.c @@ -106,7 +106,16 @@ main(int argc, char *argv[]) } if (dropuser == NULL) - dropuser = simple_prompt("Enter name of role to drop: ", 128, true); + { + if (interactive) + dropuser = simple_prompt("Enter name of role to drop: ", 128, true); + else + { + fprintf(stderr, _("%s: missing required argument role name\n"), progname); + fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); + exit(1); + } + } if (interactive) { @@ -148,7 +157,8 @@ help(const char *progname) printf(_(" %s [OPTION]... [ROLENAME]\n"), progname); printf(_("\nOptions:\n")); printf(_(" -e, --echo show the commands being sent to the server\n")); - printf(_(" -i, --interactive prompt before deleting anything\n")); + printf(_(" -i, --interactive prompt before deleting anything, and prompt for\n" + " role name if not specified\n")); printf(_(" --if-exists don't report error if user doesn't exist\n")); printf(_(" --help show this help, then exit\n")); printf(_(" --version output version information, then exit\n"));