diff --git a/source/dnode/mnode/impl/src/mndUser.c b/source/dnode/mnode/impl/src/mndUser.c index c1ce147444b1d37128b0d338bc3da8bc9bee2ebd..56f4a629ef8985a5513e8bc9bb8177839cec826d 100644 --- a/source/dnode/mnode/impl/src/mndUser.c +++ b/source/dnode/mnode/impl/src/mndUser.c @@ -702,6 +702,39 @@ static int32_t mndTablePriviledge(SMnode *pMnode, SHashObj *hash, SAlterUserReq return 0; } +static int32_t mndRemoveTablePriviledge(SMnode *pMnode, SHashObj *hash, SAlterUserReq *alterReq, SSdb *pSdb){ + void *pIter = NULL; + if (strcmp(alterReq->objname, "1.*") != 0) { + char tbFName[TSDB_TABLE_FNAME_LEN] = {0}; + snprintf(tbFName, sizeof(tbFName), "%s.%s", alterReq->objname, alterReq->tabName); + int32_t len = strlen(tbFName) + 1; + + if (taosHashRemove(hash, tbFName, len) != 0) { + return -1; + } + } else { + while (1) { + SStbObj *pStb = NULL; + pIter = sdbFetch(pSdb, SDB_STB, pIter, (void **)&pStb); + if (pIter == NULL) break; + int32_t len = strlen(pStb->name) + 1; + + if(strcmp(pStb->db, alterReq->objname) == 0){ + if (taosHashRemove(hash, pStb->name, len) != 0) { + mndReleaseStb(pMnode, pStb); + return -1; + } + } + + //taosHashPut(newUser.writeStbs, pStb->name, len, pStb->name, TSDB_DB_FNAME_LEN); + //sdbRelease(pSdb, pStb); + } + + //taosHashClear(newUser.readStbs); + } + return 0; +} + static int32_t mndProcessAlterUserReq(SRpcMsg *pReq) { SMnode *pMnode = pReq->info.node; SSdb *pSdb = pMnode->pSdb; @@ -852,75 +885,13 @@ static int32_t mndProcessAlterUserReq(SRpcMsg *pReq) { if (alterReq.alterType == TSDB_ALTER_USER_REMOVE_READ_TABLE || alterReq.alterType == TSDB_ALTER_USER_REMOVE_READ_TAG || alterReq.alterType == TSDB_ALTER_USER_REMOVE_ALL_TABLE) { - if (strcmp(alterReq.objname, "1.*") != 0) { - char tbFName[TSDB_TABLE_FNAME_LEN] = {0}; - snprintf(tbFName, sizeof(tbFName), "%s.%s", alterReq.objname, alterReq.tabName); - - int32_t len = strlen(tbFName) + 1; - SStbObj *pStb = mndAcquireStb(pMnode, tbFName); - if (pStb == NULL) { - mndReleaseStb(pMnode, pStb); - goto _OVER; - } - - if (taosHashRemove(newUser.readTbs, tbFName, len) != 0) { - mndReleaseStb(pMnode, pStb); - goto _OVER; - } - } else { - while (1) { - SStbObj *pStb = NULL; - pIter = sdbFetch(pSdb, SDB_STB, pIter, (void **)&pStb); - if (pIter == NULL) break; - int32_t len = strlen(pStb->name) + 1; - - if(strcmp(pStb->db, alterReq.objname) == 0){ - if (taosHashRemove(newUser.readTbs, pStb->name, len) != 0) { - mndReleaseStb(pMnode, pStb); - goto _OVER; - } - } - - //taosHashPut(newUser.writeStbs, pStb->name, len, pStb->name, TSDB_DB_FNAME_LEN); - //sdbRelease(pSdb, pStb); - } - - //taosHashClear(newUser.readStbs); - } + if(mndRemoveTablePriviledge(pMnode, newUser.readTbs, &alterReq, pSdb) != 0) goto _OVER; } if (alterReq.alterType == TSDB_ALTER_USER_REMOVE_WRITE_TABLE || alterReq.alterType == TSDB_ALTER_USER_REMOVE_WRITE_TAG || alterReq.alterType == TSDB_ALTER_USER_REMOVE_ALL_TABLE) { - if (strcmp(alterReq.objname, "1.*") != 0) { - char tbFName[TSDB_TABLE_FNAME_LEN] = {0}; - snprintf(tbFName, sizeof(tbFName), "%s.%s", alterReq.objname, alterReq.tabName); - - int32_t len = strlen(tbFName) + 1; - SStbObj *pStb = mndAcquireStb(pMnode, tbFName); - if (pStb == NULL) { - mndReleaseStb(pMnode, pStb); - goto _OVER; - } - if (taosHashRemove(newUser.writeTbs, tbFName, len) != 0) { - mndReleaseStb(pMnode, pStb); - goto _OVER; - } - } else { - while (1) { - SStbObj *pStb = NULL; - pIter = sdbFetch(pSdb, SDB_STB, pIter, (void **)&pStb); - if (pIter == NULL) break; - int32_t len = strlen(pStb->name) + 1; - - if(strcmp(pStb->db, alterReq.objname) == 0){ - if (taosHashRemove(newUser.writeTbs, pStb->name, len) != 0) { - mndReleaseStb(pMnode, pStb); - goto _OVER; - } - } - } - } + if(mndRemoveTablePriviledge(pMnode, newUser.writeTbs, &alterReq, pSdb) != 0) goto _OVER; } if (alterReq.alterType == TSDB_ALTER_USER_ADD_SUBSCRIBE_TOPIC) {