mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Strip quotes when parsing my.cnf
Remove leading/trailing single or double quotes when parsing the my.cnf file in mysql_user and mysql_db. Do this so that these modules parse the my.cnf file the same way that the mysql client does. From: http://dev.mysql.com/doc/refman/5.0/en/option-files.html You can optionally enclose the value within single quotation marks or double quotation marks, which is useful if the value contains a “#” comment character. Fixes #2405
This commit is contained in:
parent
9be44c201a
commit
c9990b801e
2 changed files with 69 additions and 6 deletions
|
@ -129,6 +129,37 @@ def db_create(cursor, db, encoding, collation):
|
||||||
res = cursor.execute(query)
|
res = cursor.execute(query)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def strip_quotes(s):
|
||||||
|
""" Remove surrounding single or double quotes
|
||||||
|
|
||||||
|
>>> print strip_quotes('hello')
|
||||||
|
hello
|
||||||
|
>>> print strip_quotes('"hello"')
|
||||||
|
hello
|
||||||
|
>>> print strip_quotes("'hello'")
|
||||||
|
hello
|
||||||
|
>>> print strip_quotes("'hello")
|
||||||
|
'hello
|
||||||
|
|
||||||
|
"""
|
||||||
|
single_quote = "'"
|
||||||
|
double_quote = '"'
|
||||||
|
|
||||||
|
if s.startswith(single_quote) and s.endswith(single_quote):
|
||||||
|
s = s.strip(single_quote)
|
||||||
|
elif s.startswith(double_quote) and s.endswith(double_quote):
|
||||||
|
s = s.strip(double_quote)
|
||||||
|
return s
|
||||||
|
|
||||||
|
|
||||||
|
def config_get(config, section, option):
|
||||||
|
""" Calls ConfigParser.get and strips quotes
|
||||||
|
|
||||||
|
See: http://dev.mysql.com/doc/refman/5.0/en/option-files.html
|
||||||
|
"""
|
||||||
|
return strip_quotes(config.get(section, option))
|
||||||
|
|
||||||
|
|
||||||
def load_mycnf():
|
def load_mycnf():
|
||||||
config = ConfigParser.RawConfigParser()
|
config = ConfigParser.RawConfigParser()
|
||||||
mycnf = os.path.expanduser('~/.my.cnf')
|
mycnf = os.path.expanduser('~/.my.cnf')
|
||||||
|
@ -141,14 +172,14 @@ def load_mycnf():
|
||||||
# We support two forms of passwords in .my.cnf, both pass= and password=,
|
# We support two forms of passwords in .my.cnf, both pass= and password=,
|
||||||
# as these are both supported by MySQL.
|
# as these are both supported by MySQL.
|
||||||
try:
|
try:
|
||||||
passwd = config.get('client', 'password')
|
passwd = config_get(config, 'client', 'password')
|
||||||
except (ConfigParser.NoOptionError):
|
except (ConfigParser.NoOptionError):
|
||||||
try:
|
try:
|
||||||
passwd = config.get('client', 'pass')
|
passwd = config_get(config, 'client', 'pass')
|
||||||
except (ConfigParser.NoOptionError):
|
except (ConfigParser.NoOptionError):
|
||||||
return False
|
return False
|
||||||
try:
|
try:
|
||||||
creds = dict(user=config.get('client', 'user'),passwd=passwd)
|
creds = dict(user=config_get(config, 'client', 'user'),passwd=passwd)
|
||||||
except (ConfigParser.NoOptionError):
|
except (ConfigParser.NoOptionError):
|
||||||
return False
|
return False
|
||||||
return creds
|
return creds
|
||||||
|
|
|
@ -252,6 +252,38 @@ def privileges_grant(cursor, user,host,db_table,priv):
|
||||||
query = query + " WITH GRANT OPTION"
|
query = query + " WITH GRANT OPTION"
|
||||||
cursor.execute(query)
|
cursor.execute(query)
|
||||||
|
|
||||||
|
|
||||||
|
def strip_quotes(s):
|
||||||
|
""" Remove surrounding single or double quotes
|
||||||
|
|
||||||
|
>>> print strip_quotes('hello')
|
||||||
|
hello
|
||||||
|
>>> print strip_quotes('"hello"')
|
||||||
|
hello
|
||||||
|
>>> print strip_quotes("'hello'")
|
||||||
|
hello
|
||||||
|
>>> print strip_quotes("'hello")
|
||||||
|
'hello
|
||||||
|
|
||||||
|
"""
|
||||||
|
single_quote = "'"
|
||||||
|
double_quote = '"'
|
||||||
|
|
||||||
|
if s.startswith(single_quote) and s.endswith(single_quote):
|
||||||
|
s = s.strip(single_quote)
|
||||||
|
elif s.startswith(double_quote) and s.endswith(double_quote):
|
||||||
|
s = s.strip(double_quote)
|
||||||
|
return s
|
||||||
|
|
||||||
|
|
||||||
|
def config_get(config, section, option):
|
||||||
|
""" Calls ConfigParser.get and strips quotes
|
||||||
|
|
||||||
|
See: http://dev.mysql.com/doc/refman/5.0/en/option-files.html
|
||||||
|
"""
|
||||||
|
return strip_quotes(config.get(section, option))
|
||||||
|
|
||||||
|
|
||||||
def load_mycnf():
|
def load_mycnf():
|
||||||
config = ConfigParser.RawConfigParser()
|
config = ConfigParser.RawConfigParser()
|
||||||
mycnf = os.path.expanduser('~/.my.cnf')
|
mycnf = os.path.expanduser('~/.my.cnf')
|
||||||
|
@ -264,16 +296,16 @@ def load_mycnf():
|
||||||
# We support two forms of passwords in .my.cnf, both pass= and password=,
|
# We support two forms of passwords in .my.cnf, both pass= and password=,
|
||||||
# as these are both supported by MySQL.
|
# as these are both supported by MySQL.
|
||||||
try:
|
try:
|
||||||
passwd = config.get('client', 'password')
|
passwd = config_get(config, 'client', 'password')
|
||||||
except (ConfigParser.NoOptionError):
|
except (ConfigParser.NoOptionError):
|
||||||
try:
|
try:
|
||||||
passwd = config.get('client', 'pass')
|
passwd = config_get(config, 'client', 'pass')
|
||||||
except (ConfigParser.NoOptionError):
|
except (ConfigParser.NoOptionError):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# If .my.cnf doesn't specify a user, default to user login name
|
# If .my.cnf doesn't specify a user, default to user login name
|
||||||
try:
|
try:
|
||||||
user = config.get('client', 'user')
|
user = config_get(config, 'client', 'user')
|
||||||
except (ConfigParser.NoOptionError):
|
except (ConfigParser.NoOptionError):
|
||||||
user = getpass.getuser()
|
user = getpass.getuser()
|
||||||
creds = dict(user=user,passwd=passwd)
|
creds = dict(user=user,passwd=passwd)
|
||||||
|
|
Loading…
Reference in a new issue