From feba2a94829481052821af892129ca1acd7da473 Mon Sep 17 00:00:00 2001 From: dpage Date: Tue, 13 Oct 2009 10:24:38 +0000 Subject: [PATCH] Reverse engineer empty (not NULL) ACLs correctly. git-svn-id: svn://svn.pgadmin.org/trunk/pgadmin3@8069 a7884b65-44f6-0310-8a51-81a127f17b15 --- CHANGELOG | 1 + pgadmin/schema/pgObject.cpp | 68 +++++++++++++++++++++---------------- 2 files changed, 39 insertions(+), 30 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 8f373da88..a1a0b2901 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -36,6 +36,7 @@ Changes Date Dev Ver Change details ---------- --- ------ -------------- +2009-10-13 DP 1.10.1 Reverse engineer empty (not NULL) ACLs correctly. 2009-10-08 DP 1.12.0 Add 'SELECT Script' for functions and 'EXEC Script' for procedures. 2009-10-08 DP 1.10.1 Fix Greenplum support for column oriented partitions diff --git a/pgadmin/schema/pgObject.cpp b/pgadmin/schema/pgObject.cpp index 8c05fea7e..0a1444be3 100644 --- a/pgadmin/schema/pgObject.cpp +++ b/pgadmin/schema/pgObject.cpp @@ -815,36 +815,44 @@ wxString pgObject::GetGrant(const wxString& allPattern, const wxString& _grantFo if (!acl.IsNull()) { - queryTokenizer acls(acl.Mid(1, acl.Length()-2), ','); - while (acls.HasMoreTokens()) - { - str=acls.GetNextToken(); - - if (str.Left(1) == '"') - str = str.Mid(1, str.Length()-2); - user=str.BeforeFirst('='); - str=str.AfterFirst('=').BeforeFirst('/'); - if (user == wxT("")) - user=wxT("public"); - else - { - if (user.Left(6) == wxT("group ")) - { - if (user.Mid(6).StartsWith(wxT("\\\"")) && user.Mid(6).EndsWith(wxT("\\\""))) - user = wxT("GROUP ") + qtIdent(user.Mid(8, user.Length() - 10)); - else - user = wxT("GROUP ") + qtIdent(user.Mid(6)); - } - else - { - if (user.StartsWith(wxT("\\\"")) && user.EndsWith(wxT("\\\""))) - user = qtIdent(user.Mid(2, user.Length() - 4)); - else - user = qtIdent(user); - } - } - - grant += GetPrivileges(allPattern, str, grantFor, user, qtIdent(_column)); + if (acl == wxT("{}")) + { + grant += GetPrivileges(allPattern, str, grantFor, wxT("public"), qtIdent(_column)); + grant += GetPrivileges(allPattern, str, grantFor, qtIdent(owner), qtIdent(_column)); + } + else + { + queryTokenizer acls(acl.Mid(1, acl.Length()-2), ','); + while (acls.HasMoreTokens()) + { + str=acls.GetNextToken(); + + if (str.Left(1) == '"') + str = str.Mid(1, str.Length()-2); + user=str.BeforeFirst('='); + str=str.AfterFirst('=').BeforeFirst('/'); + if (user == wxT("")) + user=wxT("public"); + else + { + if (user.Left(6) == wxT("group ")) + { + if (user.Mid(6).StartsWith(wxT("\\\"")) && user.Mid(6).EndsWith(wxT("\\\""))) + user = wxT("GROUP ") + qtIdent(user.Mid(8, user.Length() - 10)); + else + user = wxT("GROUP ") + qtIdent(user.Mid(6)); + } + else + { + if (user.StartsWith(wxT("\\\"")) && user.EndsWith(wxT("\\\""))) + user = qtIdent(user.Mid(2, user.Length() - 4)); + else + user = qtIdent(user); + } + } + + grant += GetPrivileges(allPattern, str, grantFor, user, qtIdent(_column)); + } } } return grant; -- 2.39.5