You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hawq.apache.org by hu...@apache.org on 2019/03/14 14:03:08 UTC
[hawq] 05/05: HAWQ-1685. Fix bug in CheckUserExistOnCloud
This is an automated email from the ASF dual-hosted git repository.
huor pushed a commit to branch huor_cloud
in repository https://gitbox.apache.org/repos/asf/hawq.git
commit 46847b580db05b08d2628e3e90f67342465ea291
Author: wcl14 <wa...@126.com>
AuthorDate: Mon Jul 2 11:45:48 2018 +0800
HAWQ-1685. Fix bug in CheckUserExistOnCloud
---
src/backend/commands/user.c | 18 +++++++++---------
src/backend/commands/variable.c | 6 ++++--
src/backend/utils/init/miscinit.c | 3 ++-
src/include/commands/user.h | 2 +-
4 files changed, 16 insertions(+), 13 deletions(-)
diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c
index 7252918..5896af8 100644
--- a/src/backend/commands/user.c
+++ b/src/backend/commands/user.c
@@ -1065,8 +1065,8 @@ AlterRole(AlterRoleStmt *stmt)
tuple = caql_getnext(pcqCtx);
if (!HeapTupleIsValid(tuple)
- && !CheckUserExistOnCloud(pcqCtx, pg_authid_rel, stmt->role, &tuple,
- true))
+ && !CheckUserExistOnCloud(&pcqCtx, &cqc, pg_authid_rel, stmt->role,
+ &tuple, true))
{
releaseResourceContextWithErrorReport(resourceid);
ereport(ERROR,
@@ -3365,8 +3365,9 @@ CheckUserExistOnCloudSimple(char *rolename, Oid *roleid)
return true;
}
-bool CheckUserExistOnCloud(cqContext *pcqCtx, Relation pg_authid_rel,
- char *rolename, HeapTuple *tuple, bool forUpdate)
+bool CheckUserExistOnCloud(cqContext **pcqCtx, cqContext *cqc,
+ Relation pg_authid_rel, char *rolename, HeapTuple *tuple,
+ bool forUpdate)
{
if (!pg_cloud_auth)
return false;
@@ -3384,28 +3385,27 @@ bool CheckUserExistOnCloud(cqContext *pcqCtx, Relation pg_authid_rel,
}
return false;
}
- caql_endscan(pcqCtx);
+ caql_endscan(*pcqCtx);
if (pg_authid_rel)
{
heap_close(pg_authid_rel, NoLock);
}
Oid roleid = CreateNoPrivligeRole(rolename);
- cqContext cqc;
if (forUpdate)
{
pg_authid_rel = heap_open(AuthIdRelationId, RowExclusiveLock);
- pcqCtx = caql_beginscan(caql_addrel(cqclr(&cqc), pg_authid_rel),
+ *pcqCtx = caql_beginscan(caql_addrel(cqclr(cqc), pg_authid_rel),
cql("SELECT * FROM pg_authid "
" WHERE oid = :1 "
" FOR UPDATE ", ObjectIdGetDatum(roleid)));
}
else
{
- pcqCtx = caql_beginscan(
+ *pcqCtx = caql_beginscan(
NULL, cql("SELECT * FROM pg_authid "
" WHERE oid = :1 ", ObjectIdGetDatum(roleid)));
}
- *tuple = caql_getnext(pcqCtx);
+ *tuple = caql_getnext(*pcqCtx);
return true;
}
diff --git a/src/backend/commands/variable.c b/src/backend/commands/variable.c
index 6c801ee..d9643e1 100644
--- a/src/backend/commands/variable.c
+++ b/src/backend/commands/variable.c
@@ -777,7 +777,8 @@ assign_session_authorization(const char *value, bool doit, GucSource source)
roleTup = caql_getnext(pcqCtx);
if (!HeapTupleIsValid(roleTup)
- && !CheckUserExistOnCloud(pcqCtx, NULL, value, &roleTup, false))
+ && !CheckUserExistOnCloud(&pcqCtx, NULL, NULL, value, &roleTup,
+ false))
{
if (source >= PGC_S_INTERACTIVE)
ereport(ERROR,
@@ -923,7 +924,8 @@ assign_role(const char *value, bool doit, GucSource source)
roleTup = caql_getnext(pcqCtx);
if (!HeapTupleIsValid(roleTup)
- && !CheckUserExistOnCloud(pcqCtx, NULL, value, &roleTup, false))
+ && !CheckUserExistOnCloud(&pcqCtx, NULL, NULL, value, &roleTup,
+ false))
{
if (source >= PGC_S_INTERACTIVE)
ereport(ERROR,
diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c
index c5384f9..1987c7f 100644
--- a/src/backend/utils/init/miscinit.c
+++ b/src/backend/utils/init/miscinit.c
@@ -445,7 +445,8 @@ InitializeSessionUserId(const char *rolename)
roleTup = caql_getnext(pcqCtx);
if (!HeapTupleIsValid(roleTup)
- && !CheckUserExistOnCloud(pcqCtx, NULL, rolename, &roleTup, false))
+ && !CheckUserExistOnCloud(&pcqCtx, NULL, NULL, rolename, &roleTup,
+ false))
ereport(FATAL,
(errcode(ERRCODE_INVALID_AUTHORIZATION_SPECIFICATION), errmsg("role \"%s\" does not exist", rolename), errOmitLocation(true), errSendAlert(false)));
diff --git a/src/include/commands/user.h b/src/include/commands/user.h
index c71b6a7..b4f5320 100644
--- a/src/include/commands/user.h
+++ b/src/include/commands/user.h
@@ -24,6 +24,6 @@ extern void RenameRole(const char *oldname, const char *newname);
extern void DropOwnedObjects(DropOwnedStmt *stmt);
extern void ReassignOwnedObjects(ReassignOwnedStmt *stmt);
extern bool CheckUserExistOnCloudSimple(char *rolename, Oid *roleid);
-extern bool CheckUserExistOnCloud(cqContext *pcqCtx, Relation pg_authid_rel, char *rolename, HeapTuple *tuple, bool forUpdate);
+extern bool CheckUserExistOnCloud(cqContext **pcqCtx, cqContext *cqc, Relation pg_authid_rel, char *rolename, HeapTuple *tuple, bool forUpdate);
#endif /* USER_H */