diff options
author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2020-02-10 12:14:58 -0300 |
---|---|---|
committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2020-02-10 12:14:58 -0300 |
commit | 8fa8e011563744f61d29024ab187a189124a6551 (patch) | |
tree | 71fe28e6677f8ff7e6d8c7e5f6a4a009236d1a66 /src | |
parent | b048f558dd7c26a0c630a2cff29d3d8981eaf6b9 (diff) | |
download | postgresql-8fa8e011563744f61d29024ab187a189124a6551.tar.gz postgresql-8fa8e011563744f61d29024ab187a189124a6551.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
Diffstat (limited to 'src')
-rw-r--r-- | src/bin/scripts/createuser.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/bin/scripts/createuser.c b/src/bin/scripts/createuser.c index 45b6a7c32a5..e781ecab2fb 100644 --- a/src/bin/scripts/createuser.c +++ b/src/bin/scripts/createuser.c @@ -60,7 +60,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]; @@ -88,6 +88,8 @@ main(int argc, char *argv[]) while ((c = getopt_long(argc, argv, "h:p:U:g:wWedDsSrRiIlLc:PE", long_options, &optindex)) != -1) { + char *endptr; + switch (c) { case 'h': @@ -142,7 +144,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; @@ -297,8 +306,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; |