diff --git a/src/mnode/inc/mgmtAcct.h b/src/mnode/inc/mgmtAcct.h index 67c98d1eb2c187aa6ee6837d813dc237fdf1e033..0c0bb8d05cd84bb9844947f5a27d50ae644170a7 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 3e04399fe7f24384c9e459bd4adea27d7ee600e3..cd5b849cccd89c5c447d45a8557de4d1e4134188 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 d66b949421f1ffec782d5c10393f6f565ba90fa9..35b57094fde0ea012e8079718e20db41ae5e855f 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 23a1d157a5d845767deb7122636de6d237d07250..562e6c05898238a28dfcc07feb081af146516e74 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 922788749e925d185895b6d027f9f65384c55b46..e8b1239380e7658eb4f20cb468a894e4b7a1ae7c 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 47bf805138870f78be40c6499e45c5f639a51300..b52a43569a0c688ace233117530a7f896621fd93 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 54c66c5ba1bd2e23c35e05fa931246d76dc3172e..752f33db13b4a13cbfc0752b54f43c26bd1d45cf 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 1209b489d6ac7ec839b6465702c5fbc1f7e745d9..caaae9e9888507e2cd2f4511f37a00b804aa4a19 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 77c48985f628842551adc486db9617963e28de4a..a2ec2a32ad0b7fdad87b851ed8cce81ac588197b 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; }