From 83727507b7545995d474fb1838076d36e831eccf Mon Sep 17 00:00:00 2001 From: slguan Date: Thu, 23 Apr 2020 00:13:14 +0800 Subject: [PATCH] fix bug while release users --- src/mnode/inc/mgmtAcct.h | 4 ++-- src/mnode/src/mgmtAcct.c | 9 +++++++-- src/mnode/src/mgmtDb.c | 2 ++ src/mnode/src/mgmtDnode.c | 21 +++++++++++++++++---- src/mnode/src/mgmtMnode.c | 5 ++++- src/mnode/src/mgmtProfile.c | 3 +++ src/mnode/src/mgmtShell.c | 1 - src/mnode/src/mgmtTable.c | 4 ++-- src/mnode/src/mgmtUser.c | 4 +++- 9 files changed, 40 insertions(+), 13 deletions(-) diff --git a/src/mnode/inc/mgmtAcct.h b/src/mnode/inc/mgmtAcct.h index 67c98d1eb2..0c0bb8d05c 100644 --- a/src/mnode/inc/mgmtAcct.h +++ b/src/mnode/inc/mgmtAcct.h @@ -24,10 +24,10 @@ extern "C" { int32_t mgmtInitAccts(); void mgmtCleanUpAccts(); -void *mgmtGetAcct(char *acctName); +void * mgmtGetAcct(char *acctName); +void * mgmtGetNextAcct(void *pNode, SAcctObj **pAcct); void mgmtIncAcctRef(SAcctObj *pAcct); void mgmtDecAcctRef(SAcctObj *pAcct); - void mgmtAddDbToAcct(SAcctObj *pAcct, SDbObj *pDb); void mgmtDropDbFromAcct(SAcctObj *pAcct, SDbObj *pDb); void mgmtAddUserToAcct(SAcctObj *pAcct, SUserObj *pUser); diff --git a/src/mnode/src/mgmtAcct.c b/src/mnode/src/mgmtAcct.c index 3e04399fe7..cd5b849ccc 100644 --- a/src/mnode/src/mgmtAcct.c +++ b/src/mnode/src/mgmtAcct.c @@ -58,6 +58,7 @@ static int32_t mgmtActionAcctUpdate(SSdbOper *pOper) { memcpy(pSaved, pAcct, tsAcctUpdateSize); free(pAcct); } + mgmtDecAcctRef(pSaved); return TSDB_CODE_SUCCESS; } @@ -106,11 +107,11 @@ int32_t mgmtInitAccts() { tsAcctSdb = sdbOpenTable(&tableDesc); if (tsAcctSdb == NULL) { - mError("failed to init acct data"); + mError("table:%s, failed to create hash", tableDesc.tableName); return -1; } - mTrace("table:accounts table is created"); + mTrace("table:%s, hash is created", tableDesc.tableName); return acctInit(); } @@ -123,6 +124,10 @@ void *mgmtGetAcct(char *name) { return sdbGetRow(tsAcctSdb, name); } +void *mgmtGetNextAcct(void *pNode, SAcctObj **pAcct) { + return sdbFetchRow(tsAcctSdb, pNode, (void **)pAcct); +} + void mgmtIncAcctRef(SAcctObj *pAcct) { sdbIncRef(tsAcctSdb, pAcct); } diff --git a/src/mnode/src/mgmtDb.c b/src/mnode/src/mgmtDb.c index d66b949421..35b57094fd 100644 --- a/src/mnode/src/mgmtDb.c +++ b/src/mnode/src/mgmtDb.c @@ -63,6 +63,7 @@ static int32_t mgmtDbActionInsert(SSdbOper *pOper) { if (pAcct != NULL) { mgmtAddDbToAcct(pAcct, pDb); + mgmtDecAcctRef(pAcct); } else { mError("db:%s, acct:%s info not exist in sdb", pDb->name, pDb->cfg.acct); @@ -80,6 +81,7 @@ static int32_t mgmtDbActionDelete(SSdbOper *pOper) { mgmtDropAllChildTables(pDb); mgmtDropAllSuperTables(pDb); mgmtDropAllVgroups(pDb); + mgmtDecAcctRef(pAcct); return TSDB_CODE_SUCCESS; } diff --git a/src/mnode/src/mgmtDnode.c b/src/mnode/src/mgmtDnode.c index 23a1d157a5..562e6c0589 100644 --- a/src/mnode/src/mgmtDnode.c +++ b/src/mnode/src/mgmtDnode.c @@ -508,7 +508,10 @@ static int32_t mgmtGetDnodeMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pCo SUserObj *pUser = mgmtGetUserFromConn(pConn, NULL); if (pUser == NULL) return 0; - if (strcmp(pUser->pAcct->user, "root") != 0) return TSDB_CODE_NO_RIGHTS; + if (strcmp(pUser->pAcct->user, "root") != 0) { + mgmtDecUserRef(pUser); + return TSDB_CODE_NO_RIGHTS; + } int32_t cols = 0; SSchema *pSchema = pMeta->schema; @@ -635,7 +638,10 @@ static int32_t mgmtGetModuleMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pC SUserObj *pUser = mgmtGetUserFromConn(pConn, NULL); if (pUser == NULL) return 0; - if (strcmp(pUser->user, "root") != 0) return TSDB_CODE_NO_RIGHTS; + if (strcmp(pUser->user, "root") != 0) { + mgmtDecUserRef(pUser); + return TSDB_CODE_NO_RIGHTS; + } SSchema *pSchema = pMeta->schema; @@ -744,7 +750,10 @@ static int32_t mgmtGetConfigMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pC SUserObj *pUser = mgmtGetUserFromConn(pConn, NULL); if (pUser == NULL) return 0; - if (strcmp(pUser->user, "root") != 0) return TSDB_CODE_NO_RIGHTS; + if (strcmp(pUser->user, "root") != 0) { + mgmtDecUserRef(pUser); + return TSDB_CODE_NO_RIGHTS; + } SSchema *pSchema = pMeta->schema; @@ -827,7 +836,11 @@ static int32_t mgmtGetVnodeMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pCo int32_t cols = 0; SUserObj *pUser = mgmtGetUserFromConn(pConn, NULL); if (pUser == NULL) return 0; - if (strcmp(pUser->user, "root") != 0) return TSDB_CODE_NO_RIGHTS; + + if (strcmp(pUser->user, "root") != 0) { + mgmtDecUserRef(pUser); + return TSDB_CODE_NO_RIGHTS; + } SSchema *pSchema = pMeta->schema; diff --git a/src/mnode/src/mgmtMnode.c b/src/mnode/src/mgmtMnode.c index 922788749e..e8b1239380 100644 --- a/src/mnode/src/mgmtMnode.c +++ b/src/mnode/src/mgmtMnode.c @@ -268,7 +268,10 @@ static int32_t mgmtGetMnodeMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pCo SUserObj *pUser = mgmtGetUserFromConn(pConn, NULL); if (pUser == NULL) return 0; - if (strcmp(pUser->pAcct->user, "root") != 0) return TSDB_CODE_NO_RIGHTS; + if (strcmp(pUser->pAcct->user, "root") != 0) { + mgmtDecUserRef(pUser); + return TSDB_CODE_NO_RIGHTS; + } int32_t cols = 0; SSchema *pSchema = pMeta->schema; diff --git a/src/mnode/src/mgmtProfile.c b/src/mnode/src/mgmtProfile.c index 47bf805138..b52a43569a 100644 --- a/src/mnode/src/mgmtProfile.c +++ b/src/mnode/src/mgmtProfile.c @@ -704,6 +704,7 @@ void mgmtProcessKillQueryMsg(SQueuedMsg *pMsg) { rpcRsp.code = code; rpcSendResponse(&rpcRsp); + mgmtDecUserRef(pUser); } void mgmtProcessKillStreamMsg(SQueuedMsg *pMsg) { @@ -727,6 +728,7 @@ void mgmtProcessKillStreamMsg(SQueuedMsg *pMsg) { rpcRsp.code = code; rpcSendResponse(&rpcRsp); + mgmtDecUserRef(pUser); } void mgmtProcessKillConnectionMsg(SQueuedMsg *pMsg) { @@ -750,6 +752,7 @@ void mgmtProcessKillConnectionMsg(SQueuedMsg *pMsg) { rpcRsp.code = code; rpcSendResponse(&rpcRsp); + mgmtDecUserRef(pUser); } int32_t mgmtInitProfile() { diff --git a/src/mnode/src/mgmtShell.c b/src/mnode/src/mgmtShell.c index 54c66c5ba1..752f33db13 100644 --- a/src/mnode/src/mgmtShell.c +++ b/src/mnode/src/mgmtShell.c @@ -371,7 +371,6 @@ static int mgmtShellRetriveAuth(char *user, char *spi, char *encrypt, char *secr SUserObj *pUser = mgmtGetUser(user); if (pUser == NULL) { *secret = 0; - mgmtDecUserRef(pUser); return TSDB_CODE_INVALID_USER; } else { memcpy(secret, pUser->pass, TSDB_KEY_LEN); diff --git a/src/mnode/src/mgmtTable.c b/src/mnode/src/mgmtTable.c index 1209b489d6..caaae9e988 100644 --- a/src/mnode/src/mgmtTable.c +++ b/src/mnode/src/mgmtTable.c @@ -108,7 +108,7 @@ static int32_t mgmtChildTableActionInsert(SSdbOper *pOper) { SAcctObj *pAcct = mgmtGetAcct(pDb->cfg.acct); if (pAcct == NULL) { - mError("ctable:%s, account:%s not exists", pTable->info.tableId, pDb->cfg.acct); + mError("ctable:%s, acct:%s not exists", pTable->info.tableId, pDb->cfg.acct); return TSDB_CODE_INVALID_ACCT; } mgmtDecAcctRef(pAcct); @@ -150,7 +150,7 @@ static int32_t mgmtChildTableActionDelete(SSdbOper *pOper) { SAcctObj *pAcct = mgmtGetAcct(pDb->cfg.acct); if (pAcct == NULL) { - mError("ctable:%s, account:%s not exists", pTable->info.tableId, pDb->cfg.acct); + mError("ctable:%s, acct:%s not exists", pTable->info.tableId, pDb->cfg.acct); return TSDB_CODE_INVALID_ACCT; } mgmtDecAcctRef(pAcct); diff --git a/src/mnode/src/mgmtUser.c b/src/mnode/src/mgmtUser.c index 77c48985f6..a2ec2a32ad 100644 --- a/src/mnode/src/mgmtUser.c +++ b/src/mnode/src/mgmtUser.c @@ -63,6 +63,7 @@ static int32_t mgmtUserActionDelete(SSdbOper *pOper) { if (pAcct != NULL) { mgmtDropUserFromAcct(pAcct, pUser); + mgmtDecAcctRef(pAcct); } return TSDB_CODE_SUCCESS; @@ -72,9 +73,10 @@ static int32_t mgmtUserActionUpdate(SSdbOper *pOper) { SUserObj *pUser = pOper->pObj; SUserObj *pSaved = mgmtGetUser(pUser->user); if (pUser != pSaved) { - memcpy(pSaved, pUser, pOper->rowSize); + memcpy(pSaved, pUser, tsUserUpdateSize); free(pUser); } + mgmtDecUserRef(pSaved); return TSDB_CODE_SUCCESS; } -- GitLab