diff --git a/scripts-available/CDB_Groups.sql b/scripts-available/CDB_Groups.sql index 4efe102..af45c15 100644 --- a/scripts-available/CDB_Groups.sql +++ b/scripts-available/CDB_Groups.sql @@ -2,14 +2,8 @@ CREATE OR REPLACE FUNCTION cartodb.CDB_Group_CreateGroup(group_name text) RETURNS VOID AS $$ -DECLARE - cdb_group_role TEXT; BEGIN - cdb_group_role := cartodb._CDB_Group_GroupRole(group_name); - IF NOT EXISTS ( SELECT 1 FROM pg_roles WHERE rolname = cdb_group_role ) - THEN - EXECUTE 'CREATE ROLE "' || cdb_group_role || '" NOLOGIN;'; - END IF; + EXECUTE 'CREATE ROLE "' || cartodb._CDB_Group_GroupRole(group_name) || '" NOLOGIN;'; END $$ LANGUAGE PLPGSQL; @@ -114,12 +108,18 @@ FUNCTION cartodb._CDB_Group_GroupRole(group_name text) RETURNS TEXT AS $$ DECLARE group_role TEXT; + max_length constant INTEGER := 60; BEGIN IF group_name !~ '^[a-zA-Z_][a-zA-Z0-9_]*$' THEN RAISE EXCEPTION 'Group name (%) must be a valid identifier. See http://www.postgresql.org/docs/9.2/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS', group_name; END IF; - RETURN 'g_' || md5(current_database()) || '_' || group_name; + group_role := current_database() || '_g_' || group_name; + IF LENGTH(group_role) > max_length + THEN + RAISE EXCEPTION 'Group name should be shorter. Resulting role must have less than % characters, but it is longer: %', max_length, group_role; + END IF; + RETURN group_role; END $$ LANGUAGE PLPGSQL; diff --git a/scripts-available/CDB_Organizations.sql b/scripts-available/CDB_Organizations.sql index 6ca48c2..3de6cf5 100644 --- a/scripts-available/CDB_Organizations.sql +++ b/scripts-available/CDB_Organizations.sql @@ -31,9 +31,10 @@ $$ LANGUAGE PLPGSQL VOLATILE; CREATE OR REPLACE FUNCTION cartodb._CDB_Organization_Admin_Role_Name() RETURNS TEXT -AS 'SELECT ''cdb_org_admin''::text || ''_'' || md5(current_database());' +AS 'SELECT current_database() || ''_admin''::text;' LANGUAGE SQL IMMUTABLE; +-- Administrator role creation on extension install DO LANGUAGE 'plpgsql' $$ DECLARE cdb_org_admin_role_name TEXT; diff --git a/test/organization/test.sh b/test/organization/test.sh index bf62953..f7354d1 100644 --- a/test/organization/test.sh +++ b/test/organization/test.sh @@ -530,6 +530,11 @@ function test_not_valid_group_names() { sql postgres "select cartodb._CDB_Group_GroupRole(' group_1$_a ');" fails sql postgres "select cartodb._CDB_Group_GroupRole('group _1$_a');" fails sql postgres "select cartodb._CDB_Group_GroupRole('groupña');" fails + sql postgres "select cartodb._CDB_Group_GroupRole('a123456789012345678901234567890123456789012345678901234567890');" fails +} + +function test_administrator_name_generation() { + sql postgres "select cartodb._CDB_Organization_Admin_Role_Name();" } #################################################### TESTS END HERE ####################################################