Skip to content

Commit

Permalink
Exclude granting dbo twhilesystem datbase creation
Browse files Browse the repository at this point in the history
Signed-off-by: ANJU BHARTI <[email protected]>
  • Loading branch information
ANJU BHARTI committed Sep 24, 2024
1 parent 0636924 commit ed3dc1f
Showing 1 changed file with 29 additions and 8 deletions.
37 changes: 29 additions & 8 deletions contrib/babelfishpg_tsql/src/dbcmds.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,16 @@

#define NOT_FOUND -1

/*
* Return true if database is any of the three
* system databases "master", "tempdb", "msdb"
* else return false
*/
#define IS_BBF_SYSTEM_DB(dbname) \
((strlen(dbname) == 6 && (strncmp(dbname, "master", 6) == 0)) || \
((strlen(dbname) == 6 && strncmp(dbname, "tempdb", 6) == 0)) || \
(strlen(dbname) == 4 && (strncmp(dbname, "msdb", 4) == 0)))

Oid sys_babelfish_db_seq_oid = InvalidOid;

static Oid get_sys_babelfish_db_seq_oid(void);
Expand Down Expand Up @@ -104,7 +114,8 @@ gen_createdb_subcmds(const char *dbname, const char *owner)
appendStringInfo(&query, "CREATE ROLE dummy CREATEROLE INHERIT; ");
appendStringInfo(&query, "CREATE ROLE dummy INHERIT CREATEROLE ROLE sysadmin IN ROLE dummy; ");
appendStringInfo(&query, "GRANT CREATE, CONNECT, TEMPORARY ON DATABASE dummy TO dummy; ");
appendStringInfo(&query, "GRANT dummy TO dummy; ");
if (!IS_BBF_SYSTEM_DB(dbname))
appendStringInfo(&query, "GRANT dummy TO dummy; ");

if (guest)
{
Expand All @@ -125,9 +136,17 @@ gen_createdb_subcmds(const char *dbname, const char *owner)
res = raw_parser(query.data, RAW_PARSE_DEFAULT);

if (guest)
expected_stmt_num = list_length(logins) > 0 ? 10 : 9;
if (!IS_BBF_SYSTEM_DB(dbname))
expected_stmt_num = list_length(logins) > 0 ? 10 : 9;
else
expected_stmt_num = list_length(logins) > 0 ? 9 : 8;
else
expected_stmt_num = 7;
{
expected_stmt_num = 6;

if (!IS_BBF_SYSTEM_DB(dbname))
expected_stmt_num++;
}

if (list_length(res) != expected_stmt_num)
ereport(ERROR,
Expand All @@ -145,11 +164,13 @@ gen_createdb_subcmds(const char *dbname, const char *owner)
stmt = parsetree_nth_stmt(res, i++);
update_GrantStmt(stmt, get_database_name(MyDatabaseId), NULL, dbo, NULL);

/* Grant dbo role to owner */
stmt = parsetree_nth_stmt(res, i++);

update_GrantRoleStmt(stmt, list_make1(make_accesspriv_node(dbo)),
list_make1(make_rolespec_node(owner)));
if (!IS_BBF_SYSTEM_DB(dbname))
{
/* Grant dbo role to owner */
stmt = parsetree_nth_stmt(res, i++);
update_GrantRoleStmt(stmt, list_make1(make_accesspriv_node(dbo)),
list_make1(make_rolespec_node(owner)));
}

if (guest)
{
Expand Down

0 comments on commit ed3dc1f

Please sign in to comment.