From 6b92b69fe678a9efb444e6985c319d17103945a1 Mon Sep 17 00:00:00 2001 From: Stijn Opheide Date: Thu, 18 Oct 2012 19:27:18 +0200 Subject: [PATCH] added the GRANT privilege for a mysql user (WITH GRANT OPTION) --- library/mysql_user | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/library/mysql_user b/library/mysql_user index 7194b9f360..0f3b8b6897 100755 --- a/library/mysql_user +++ b/library/mysql_user @@ -170,11 +170,13 @@ def privileges_get(cursor, user,host): cursor.execute("SHOW GRANTS FOR %s@%s", (user,host)) grants = cursor.fetchall() for grant in grants: - res = re.match("GRANT\ (.+)\ ON\ (.+)\ TO", grant[0]) + res = re.match("GRANT\ (.+)\ ON\ (.+)\ TO\ '.+'@'.+'[\ IDENTIFIED\ BY\ PASSWORD\ '.+']?\ ?(.*)", grant[0]) if res is None: module.fail_json(msg="unable to parse the MySQL grant string") privileges = res.group(1).split(", ") privileges = ['ALL' if x=='ALL PRIVILEGES' else x for x in privileges] + if res.group(3) == "WITH GRANT OPTION": + privileges.append('GRANT') db = res.group(2).replace('`', '') output[db] = privileges return output @@ -205,8 +207,12 @@ def privileges_revoke(cursor, user,host,db_table): cursor.execute(query) def privileges_grant(cursor, user,host,db_table,priv): - priv_string = ",".join(priv) + + priv_string = ",".join(filter(lambda x: x != 'GRANT', priv)) query = "GRANT %s ON %s TO '%s'@'%s'" % (priv_string,db_table,user,host) + if 'GRANT' in priv: + query = query + " WITH GRANT OPTION" + cursor.execute(query) def load_mycnf():