createuser: fix parsing of --connection-limit argument
authorAlvaro Herrera <[email protected]>
Mon, 10 Feb 2020 15:14:58 +0000 (12:14 -0300)
committerAlvaro Herrera <[email protected]>
Mon, 10 Feb 2020 15:14:58 +0000 (12:14 -0300)
The original coding failed to quote the argument properly.

Reported-by: Daniel Gustafsson
Discussion: 1B8AE66C-85AB-4728-9BB4-612E8E61C219@yesql.se

src/bin/scripts/createuser.c

index 1b192af678090af00f361c0cf1cdbf54d58aad58..b9af6303882646183233eacc685798ffe0dc9ca8 100644 (file)
@@ -62,7 +62,7 @@ main(int argc, char *argv[])
    enum trivalue prompt_password = TRI_DEFAULT;
    bool        echo = false;
    bool        interactive = false;
-   char       *conn_limit = NULL;
+   int         conn_limit = -2;    /* less than minimum valid value */
    bool        pwprompt = false;
    char       *newpassword = NULL;
 
@@ -88,6 +88,8 @@ main(int argc, char *argv[])
    while ((c = getopt_long(argc, argv, "h:p:U:g:wWedDsSaArRiIlLc:PEN",
                            long_options, &optindex)) != -1)
    {
+       char   *endptr;
+
        switch (c)
        {
            case 'h':
@@ -144,7 +146,14 @@ main(int argc, char *argv[])
                login = TRI_NO;
                break;
            case 'c':
-               conn_limit = pg_strdup(optarg);
+               conn_limit = strtol(optarg, &endptr, 10);
+               if (*endptr != '\0' || conn_limit < -1) /* minimum valid value */
+               {
+                   fprintf(stderr,
+                           _("%s: invalid value for --connection-limit: %s\n"),
+                           progname, optarg);
+                   exit(1);
+               }
                break;
            case 'P':
                pwprompt = true;
@@ -305,8 +314,8 @@ main(int argc, char *argv[])
        appendPQExpBufferStr(&sql, " REPLICATION");
    if (replication == TRI_NO)
        appendPQExpBufferStr(&sql, " NOREPLICATION");
-   if (conn_limit != NULL)
-       appendPQExpBuffer(&sql, " CONNECTION LIMIT %s", conn_limit);
+   if (conn_limit >= -1)
+       appendPQExpBuffer(&sql, " CONNECTION LIMIT %d", conn_limit);
    if (roles.head != NULL)
    {
        SimpleStringListCell *cell;