aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlvaro Herrera <alvherre@alvh.no-ip.org>2020-02-10 12:14:58 -0300
committerAlvaro Herrera <alvherre@alvh.no-ip.org>2020-02-10 12:14:58 -0300
commitca902add69291b50fe4fc0d7c2bb57b6da13b3db (patch)
tree65f065e5c80f61c8e20d8a64c38441327053959b
parentbdd19e48a8c14e4e2a5edac7a6dc23de842ccdd6 (diff)
downloadpostgresql-ca902add69291b50fe4fc0d7c2bb57b6da13b3db.tar.gz
postgresql-ca902add69291b50fe4fc0d7c2bb57b6da13b3db.zip
createuser: fix parsing of --connection-limit argument
The original coding failed to quote the argument properly. Reported-by: Daniel Gustafsson Discussion: 1B8AE66C-85AB-4728-9BB4-612E8E61C219@yesql.se
-rw-r--r--src/bin/scripts/createuser.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/bin/scripts/createuser.c b/src/bin/scripts/createuser.c
index 3420e62fdd9..8dde7acfb00 100644
--- a/src/bin/scripts/createuser.c
+++ b/src/bin/scripts/createuser.c
@@ -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;
char newuser_buf[128];
@@ -89,6 +89,8 @@ main(int argc, char *argv[])
while ((c = getopt_long(argc, argv, "h:p:U:g:wWedDsSaArRiIlLc:PE",
long_options, &optindex)) != -1)
{
+ char *endptr;
+
switch (c)
{
case 'h':
@@ -145,7 +147,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;
@@ -300,8 +309,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;