enhance: ip whitelist before debug

This commit is contained in:
shenglian zhou 2023-08-30 14:32:46 +08:00
parent 33966cf856
commit b8205f23bf
5 changed files with 62 additions and 23 deletions

View File

@ -924,8 +924,15 @@ void nodesDestroyNode(SNode* pNode) {
nodesDestroyNode((SNode*)pStmt->pVal); nodesDestroyNode((SNode*)pStmt->pVal);
break; break;
} }
case QUERY_NODE_CREATE_USER_STMT: // no pointer field case QUERY_NODE_CREATE_USER_STMT: {
case QUERY_NODE_ALTER_USER_STMT: // no pointer field SCreateUserStmt* pStmt = (SCreateUserStmt*)pNode;
taosMemoryFree(pStmt->pIpRanges);
break;
}
case QUERY_NODE_ALTER_USER_STMT: {
SAlterUserStmt* pStmt = (SAlterUserStmt*)pNode;
taosMemoryFree(pStmt->pIpRanges);
}
case QUERY_NODE_DROP_USER_STMT: // no pointer field case QUERY_NODE_DROP_USER_STMT: // no pointer field
case QUERY_NODE_USE_DATABASE_STMT: // no pointer field case QUERY_NODE_USE_DATABASE_STMT: // no pointer field
case QUERY_NODE_CREATE_DNODE_STMT: // no pointer field case QUERY_NODE_CREATE_DNODE_STMT: // no pointer field

View File

@ -99,7 +99,7 @@ white_list_opt(A) ::= white_list(B).
cmd ::= CREATE USER user_name(A) PASS NK_STRING(B) sysinfo_opt(C) cmd ::= CREATE USER user_name(A) PASS NK_STRING(B) sysinfo_opt(C)
white_list_opt(D). { white_list_opt(D). {
pCxt->pRootNode = createCreateUserStmt(pCxt, &A, &B, C); pCxt->pRootNode = createCreateUserStmt(pCxt, &A, &B, C);
addCreateUserStmtWhiteList(pCxt, pCxt->pRootNode, D); pCxt->pRootNode = addCreateUserStmtWhiteList(pCxt, pCxt->pRootNode, D);
} }
cmd ::= ALTER USER user_name(A) PASS NK_STRING(B). { pCxt->pRootNode = createAlterUserStmt(pCxt, &A, TSDB_ALTER_USER_PASSWD, &B); } cmd ::= ALTER USER user_name(A) PASS NK_STRING(B). { pCxt->pRootNode = createAlterUserStmt(pCxt, &A, TSDB_ALTER_USER_PASSWD, &B); }
cmd ::= ALTER USER user_name(A) ENABLE NK_INTEGER(B). { pCxt->pRootNode = createAlterUserStmt(pCxt, &A, TSDB_ALTER_USER_ENABLE, &B); } cmd ::= ALTER USER user_name(A) ENABLE NK_INTEGER(B). { pCxt->pRootNode = createAlterUserStmt(pCxt, &A, TSDB_ALTER_USER_ENABLE, &B); }

View File

@ -1696,6 +1696,27 @@ static int32_t getIpV4RangeFromWhitelistItem(char* ipRange, SIpV4Range* pIpRange
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
static int32_t fillIpRangesFromWhiteList(SAstCreateContext* pCxt, SNodeList* pIpRangesNodeList, SIpV4Range* pIpRanges) {
int32_t i = 0;
int32_t code = 0;
SNode* pNode = NULL;
FOREACH(pNode, pIpRangesNodeList) {
if (QUERY_NODE_VALUE != nodeType(pNode)) {
pCxt->errCode = TSDB_CODE_PAR_INVALID_IP_RANGE;
return TSDB_CODE_PAR_INVALID_IP_RANGE;
}
SValueNode* pValNode = (SValueNode*)(pNode);
code = getIpV4RangeFromWhitelistItem(pValNode->literal, pIpRanges + i);
++i;
if (code != TSDB_CODE_SUCCESS) {
pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, code, pValNode->literal);
return code;
}
}
return TSDB_CODE_SUCCESS;
}
SNode* addCreateUserStmtWhiteList(SAstCreateContext* pCxt, SNode* pCreateUserStmt, SNodeList* pIpRangesNodeList) { SNode* addCreateUserStmtWhiteList(SAstCreateContext* pCxt, SNode* pCreateUserStmt, SNodeList* pIpRangesNodeList) {
if (pIpRangesNodeList == NULL) { if (pIpRangesNodeList == NULL) {
return pCreateUserStmt; return pCreateUserStmt;
@ -1703,19 +1724,16 @@ SNode* addCreateUserStmtWhiteList(SAstCreateContext* pCxt, SNode* pCreateUserStm
SCreateUserStmt* pCreateUser = (SCreateUserStmt*)pCreateUserStmt; SCreateUserStmt* pCreateUser = (SCreateUserStmt*)pCreateUserStmt;
pCreateUser->numIpRanges = LIST_LENGTH(pIpRangesNodeList); pCreateUser->numIpRanges = LIST_LENGTH(pIpRangesNodeList);
pCreateUser->pIpRanges = taosMemoryMalloc(pCreateUser->numIpRanges * sizeof(SIpV4Range)); pCreateUser->pIpRanges = taosMemoryMalloc(pCreateUser->numIpRanges * sizeof(SIpV4Range));
int32_t i = 0; if (NULL == pCreateUser->pIpRanges) {
int32_t code = 0; pCxt->errCode = TSDB_CODE_OUT_OF_MEMORY;
SNode* pNode = NULL;
FOREACH(pNode, pIpRangesNodeList) {
SValueNode* pValNode = (SValueNode*)(pNode);
code = getIpV4RangeFromWhitelistItem(pValNode->literal, pCreateUser->pIpRanges + i);
if (code != TSDB_CODE_SUCCESS) {
//TODO: see check user name/pass to return error no
taosMemoryFree(pCreateUser->pIpRanges);
nodesDestroyNode(pCreateUserStmt); nodesDestroyNode(pCreateUserStmt);
return NULL; return NULL;
} }
int32_t code = fillIpRangesFromWhiteList(pCxt, pIpRangesNodeList, pCreateUser->pIpRanges);
if (TSDB_CODE_SUCCESS != code) {
nodesDestroyNode(pCreateUserStmt);
return NULL;
} }
return pCreateUserStmt; return pCreateUserStmt;
} }
@ -1753,13 +1771,20 @@ SNode* createAlterUserStmt(SAstCreateContext* pCxt, SToken* pUserName, int8_t al
case TSDB_ALTER_USER_ADD_WHITE_LIST: case TSDB_ALTER_USER_ADD_WHITE_LIST:
case TSDB_ALTER_USER_DROP_WHITE_LIST: { case TSDB_ALTER_USER_DROP_WHITE_LIST: {
SNodeList* pIpRangesNodeList = pAlterInfo; SNodeList* pIpRangesNodeList = pAlterInfo;
SNode* pNode = NULL; pStmt->numIpRanges = LIST_LENGTH(pIpRangesNodeList);
FOREACH(pNode, pIpRangesNodeList) { pStmt->pIpRanges = taosMemoryMalloc(pStmt->numIpRanges * sizeof(SIpV4Range));
char* pStr = NULL; if (NULL == pStmt->pIpRanges) {
nodesNodeToString(pNode, false, &pStr, NULL); pCxt->errCode = TSDB_CODE_OUT_OF_MEMORY;
printf("%s\n", pStr); nodesDestroyNode(pStmt);
taosMemoryFree(pStr); return NULL;
} }
int32_t code = fillIpRangesFromWhiteList(pCxt, pIpRangesNodeList, pStmt->pIpRanges);
if (TSDB_CODE_SUCCESS != code) {
nodesDestroyNode(pStmt);
return NULL;
}
break;
} }
default: default:
break; break;

View File

@ -5712,6 +5712,9 @@ static int32_t translateCreateUser(STranslateContext* pCxt, SCreateUserStmt* pSt
createReq.sysInfo = pStmt->sysinfo; createReq.sysInfo = pStmt->sysinfo;
createReq.enable = 1; createReq.enable = 1;
strcpy(createReq.pass, pStmt->password); strcpy(createReq.pass, pStmt->password);
createReq.numIpRanges = pStmt->numIpRanges;
createReq.pIpRanges = taosMemoryMalloc(createReq.numIpRanges);
memcpy(createReq.pIpRanges, pStmt->pIpRanges, sizeof(SIpV4Range) * createReq.numIpRanges);
return buildCmdMsg(pCxt, TDMT_MND_CREATE_USER, (FSerializeFunc)tSerializeSCreateUserReq, &createReq); return buildCmdMsg(pCxt, TDMT_MND_CREATE_USER, (FSerializeFunc)tSerializeSCreateUserReq, &createReq);
} }
@ -5727,6 +5730,9 @@ static int32_t translateAlterUser(STranslateContext* pCxt, SAlterUserStmt* pStmt
if (NULL != pCxt->pParseCxt->db) { if (NULL != pCxt->pParseCxt->db) {
snprintf(alterReq.objname, sizeof(alterReq.objname), "%s", pCxt->pParseCxt->db); snprintf(alterReq.objname, sizeof(alterReq.objname), "%s", pCxt->pParseCxt->db);
} }
alterReq.numIpRanges = pStmt->numIpRanges;
alterReq.pIpRanges = taosMemoryMalloc(alterReq.numIpRanges);
memcpy(alterReq.pIpRanges, pStmt->pIpRanges, sizeof(SIpV4Range) * alterReq.numIpRanges);
return buildCmdMsg(pCxt, TDMT_MND_ALTER_USER, (FSerializeFunc)tSerializeSAlterUserReq, &alterReq); return buildCmdMsg(pCxt, TDMT_MND_ALTER_USER, (FSerializeFunc)tSerializeSAlterUserReq, &alterReq);
} }

View File

@ -556,7 +556,6 @@ TAOS_DEFINE_ERROR(TSDB_CODE_PAR_NOT_ALLOWED_WIN_QUERY, "Window query not su
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_DROP_COL, "No columns can be dropped") TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_DROP_COL, "No columns can be dropped")
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_COL_JSON, "Only tag can be json type") TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_COL_JSON, "Only tag can be json type")
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_VALUE_TOO_LONG, "Value too long for column/tag") TAOS_DEFINE_ERROR(TSDB_CODE_PAR_VALUE_TOO_LONG, "Value too long for column/tag")
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_VARBINARY, "Invalidate varbinary type")
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_DELETE_WHERE, "The DELETE statement must have a definite time window range") TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_DELETE_WHERE, "The DELETE statement must have a definite time window range")
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_REDISTRIBUTE_VG, "The REDISTRIBUTE VGROUP statement only support 1 to 3 dnodes") TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_REDISTRIBUTE_VG, "The REDISTRIBUTE VGROUP statement only support 1 to 3 dnodes")
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_FILL_NOT_ALLOWED_FUNC, "Fill not allowed") TAOS_DEFINE_ERROR(TSDB_CODE_PAR_FILL_NOT_ALLOWED_FUNC, "Fill not allowed")
@ -573,6 +572,8 @@ TAOS_DEFINE_ERROR(TSDB_CODE_PAR_GET_META_ERROR, "Fail to get table i
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_NOT_UNIQUE_TABLE_ALIAS, "Not unique table/alias") TAOS_DEFINE_ERROR(TSDB_CODE_PAR_NOT_UNIQUE_TABLE_ALIAS, "Not unique table/alias")
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_SYSTABLE_NOT_ALLOWED_FUNC, "System table not allowed") TAOS_DEFINE_ERROR(TSDB_CODE_PAR_SYSTABLE_NOT_ALLOWED_FUNC, "System table not allowed")
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_SYSTABLE_NOT_ALLOWED, "System table not allowed") TAOS_DEFINE_ERROR(TSDB_CODE_PAR_SYSTABLE_NOT_ALLOWED, "System table not allowed")
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_VARBINARY, "Invalidate varbinary type")
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_IP_RANGE, "Invalid IPV4 address ranges")
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INTERNAL_ERROR, "Parser internal error") TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INTERNAL_ERROR, "Parser internal error")
//planner //planner