]> granicus.if.org Git - postgresql/commitdiff
createuser: Disable prompting by default
authorPeter Eisentraut <peter_e@gmx.net>
Tue, 7 Feb 2012 12:55:34 +0000 (14:55 +0200)
committerPeter Eisentraut <peter_e@gmx.net>
Tue, 7 Feb 2012 12:55:34 +0000 (14:55 +0200)
Do not prompt when options were not specified.  Assume --no-createdb,
--no-createrole, --no-superuser by default.

Also disable prompting for user name in dropdb, unless --interactive
was specified.

reviewed by Josh Kupershmidt

doc/src/sgml/ref/createuser.sgml
doc/src/sgml/ref/dropuser.sgml
src/bin/scripts/createuser.c
src/bin/scripts/dropuser.c

index 4cbfd69148c799b7b419d19dbba75cc951cca54d..9942cd66f610636b02831fe0e9e5831e19eab4bb 100644 (file)
@@ -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>
index 724fe40df267da997d7f88dddc1e4fbbe65f842f..bc6feafe9f21016c0a4327135b85fe152ddbbb6b 100644 (file)
@@ -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>
index 54e51b607397dd904107fc6012a3f722539958af..20a1a52a3ae0a7fbbbab3d1f9cf7050a39bf03ba 100644 (file)
@@ -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"));
 }
index 2843b233f90cb07b59c0655ea395cf9474346c4b..85b73a42ac206a0783a61639f61d4d08099017cf 100644 (file)
@@ -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"));