Re: Extra functionality to createuser - Mailing list pgsql-hackers
From | Christopher Browne |
---|---|
Subject | Re: Extra functionality to createuser |
Date | |
Msg-id | CAFNqd5VA1fMLAh34hBo7OHLEoTK+bOMEVBeP1LH0c5PYem8X3g@mail.gmail.com Whole thread Raw |
In response to | Re: Extra functionality to createuser (Amit Kapila <amit.kapila16@gmail.com>) |
Responses |
Re: Extra functionality to createuser
|
List | pgsql-hackers |
On Tue, Nov 19, 2013 at 11:54 PM, Amit Kapila <amit.kapila16@gmail.com> wrote: > On further tests, I found inconsistency in behavior when some special > characters are used in role names. > > 1. Test for role name containing quotes > a. In psql, create a role containing quotes in role name. > create role amitk in role "test_ro'le_3"; > > b. Now if we try to make a new role member of this role using > createuser utility, it gives error > try-1 > createuser.exe -g test_ro'le_3 -p 5446 amitk_2 > createuser: creation of new role failed: ERROR: unterminated quoted > string at or near "'le_3;" > LINE 1: ... NOCREATEDB NOCREATEROLE INHERIT LOGIN IN ROLE test_ro'le_3; > try-2 > createuser.exe -g "test_ro'le_3" -p 5446 amitk > createuser: creation of new role failed: ERROR: unterminated quoted > string at or near "'le_3;" > LINE 1: ... NOCREATEDB NOCREATEROLE INHERIT LOGIN IN ROLE test_ro'le_3; > > c. If I try quoted string in new role to be created, it works fine. > createuser.exe -p 5446 am'itk_2 > > As quoted strings work well for role names, I think it should work > with -g option as well. > > 2. Test for role name containing special character ';' (semicolon) > a. create role "test;_1"; > > b. Now if we try to make a new role member of this role using > createuser utility, it gives error > try-1 > createuser.exe -g test;_1 -p 5446 amitk_4 > createuser: creation of new role failed: ERROR: syntax error at or near "_1" > LINE 1: ...RUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN IN ROLE test;_1; > try-2 ^ > createuser.exe -g "test;_1" -p 5446 amitk_4 > createuser: creation of new role failed: ERROR: syntax error at or near "_1" > LINE 1: ...RUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN IN ROLE test;_1; > ^ > try-3 > createuser.exe -g 'test;_1' -p 5446 amitk_4 > createuser: creation of new role failed: ERROR: syntax error at or > near "'test;_1'" > LINE 1: ...SER NOCREATEDB NOCREATEROLE INHERIT LOGIN IN ROLE 'test;_1'; > > c. If I try semicolon in new role to be created, it works fine. > createuser.exe -p 5446 amit;k_3 > > As semicolon work well for role names, I think it should work with -g > option as well. I was not unconscious of there being the potential for issue here; there is an easy answer of double quoting the string, thus: diff --git a/src/bin/scripts/createuser.c b/src/bin/scripts/createuser.c index 88b8f2a..04ec324 100644 --- a/src/bin/scripts/createuser.c +++ b/src/bin/scripts/createuser.c @@ -308,7 +308,7 @@ main(int argc, char *argv[]) if (conn_limit != NULL) appendPQExpBuffer(&sql, " CONNECTION LIMIT %s", conn_limit); if (roles != NULL) - appendPQExpBuffer(&sql, " IN ROLE %s", roles); + appendPQExpBuffer(&sql, " IN ROLE \"%s\"", roles); appendPQExpBufferStr(&sql, ";\n"); if (echo) (END) I was conscious of not quoting it. Note that other parameters are not quoted either, so I imagined I was being consistent with that. I have added the above change, as well as rebasing, per Peter's recommendation. -- When confronted by a difficult problem, solve it by reducing it to the question, "How would the Lone Ranger handle this?"
Attachment
pgsql-hackers by date: