mysql_user: Match both single quotes and backticks when checking curr… (#40092)

* mysql_user: Match quotes, double quotes and backticks when checking current privileges

* Add changelog fragment for PR #40092
pull/40092/merge
plumbeo 6 years ago committed by John R Barker
parent 945ee39a89
commit 4d93c440b9

@ -0,0 +1,2 @@
bugfixes:
- "mysql_user: match backticks, single and double quotes when checking user privileges."

@ -427,14 +427,14 @@ def privileges_get(cursor, user, host):
return x return x
for grant in grants: for grant in grants:
res = re.match("GRANT (.+) ON (.+) TO '.*'@'.*'( IDENTIFIED BY PASSWORD '.+')? ?(.*)", grant[0]) res = re.match("""GRANT (.+) ON (.+) TO (['`"]).*\\3@(['`"]).*\\4( IDENTIFIED BY PASSWORD (['`"]).+\5)? ?(.*)""", grant[0])
if res is None: if res is None:
raise InvalidPrivsError('unable to parse the MySQL grant string: %s' % grant[0]) raise InvalidPrivsError('unable to parse the MySQL grant string: %s' % grant[0])
privileges = res.group(1).split(", ") privileges = res.group(1).split(", ")
privileges = [pick(x) for x in privileges] privileges = [pick(x) for x in privileges]
if "WITH GRANT OPTION" in res.group(4): if "WITH GRANT OPTION" in res.group(7):
privileges.append('GRANT') privileges.append('GRANT')
if "REQUIRE SSL" in res.group(4): if "REQUIRE SSL" in res.group(7):
privileges.append('REQUIRESSL') privileges.append('REQUIRESSL')
db = res.group(2) db = res.group(2)
output[db] = privileges output[db] = privileges

Loading…
Cancel
Save