?? cli_webif.c
字號:
{
DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebUserAdd() :: "
"Operation user <%s> is not exist !", szOprName );
(_VOID)WNM_SendErrString( CLI_USER_NOT_EXISTED );
return G_FAILURE;
}
/* 操作用戶必須是調試用戶或超級用戶 */
if( pstOprUser->ulLevel < CT_AL_SUPER )
{
DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebUserAdd() :: "
"Operation user <%s> 's level %ld is too lower. must be debug user or super user !",
szOprName, pstOprUser->ulLevel );
(_VOID)WNM_SendErrString( CLI_USER_HAS_NO_RIGHT );
return G_FAILURE;
}
/* 檢查是否重名 */
for( i = 0; i < MAX_USER_NUM; i ++ )
{
if( ( 0 == EOS_StriCmp( m_sUserTable[i].szUserName, szUserName) )
&& ( m_sUserTable[i].ucUserType != USER_NOT_USED ) )
{
DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebUserAdd() :: "
"user <%s> has exist !",
szOprName );
(_VOID)WNM_SendErrString( CLI_USER_HAS_EXISTED );
return G_FAILURE;
}
}
/* 檢查用戶表是否已滿. 調試用戶為固定用戶,不能被替換 */
for( i = 1; i < MAX_USER_NUM; i++ )
{
if( m_sUserTable[i].ucUserType == USER_NOT_USED )
{
break;
}
}
if( i == MAX_USER_NUM )
{
DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebUserAdd() :: "
"user table if full !" );
(_VOID)WNM_SendErrString( CLI_USER_TABLE_FULL );
return G_FAILURE;
}
/* 配置用戶表 */
(_VOID)CLI_UserInfoCfg( &m_sUserTable[i],
szUserName, szPassword, ucLevel, USER_FOR_WEB, ucLan );
#if CLI_DBASE_SUPPORT
/* 是否包含RDB模塊 */
if( G_YES == g_ul_INCLUDE_MODULE_CLI_RDB )
{
/* 函數指針是否注冊 */
if( G_NULL == g_pfn_CFG_CLI_RDB_RecordDirectInsert )
{
MT_ERRLOG(0);
return G_FAILURE;
}
if( g_pfn_CFG_CLI_RDB_RecordDirectInsert(m_ulCliUserHandle, m_usUserTable, i, &m_sUserTable[i]) != G_SUCCESS )
{
m_sUserTable[i].ucUserType = USER_NOT_USED;
return G_FAILURE;
}
}
#endif
return G_SUCCESS;
}
/*-----------------------------------------------------------------------------
函數名稱 : CLI_WebUserDel();
功能 : 刪除用戶
輸入參數 : szOprName, 操作用戶名;
szName, 用戶名;
輸出參數 : 無.
返回值 : G_SUCCESS, 成功;
其他, 失敗.
函數調用說明: woodhead和root不可刪除;
woodhead和root用戶可以增刪root級別以下(不包括root)的用戶。
root級別以下的用戶(不包括root)不允許進行增刪操作。
典型使用示例:
-----------------------------------------------------------------------------*/
_U32 CLI_WebUserDel( const _S8* szOprName, const _S8* szUserName )
{
_U32 i;
_U8 ucTmp;
PTermUserItem pstOprUser;
/* 根據用戶名獲取用戶信息 */
pstOprUser = CLI_GetUserByName( szOprName );
if( pstOprUser == G_NULL )
{
DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebUserDel() :: "
"Operation user <%s> is not exist !", szOprName );
(_VOID)WNM_SendErrString( CLI_USER_NOT_EXISTED );
return G_FAILURE;
}
DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebUserDel() :: "
"Operation user <%s> . Delelte user <%s> .",
szOprName, szUserName );
/* 操作用戶必須是調試用戶或超級用戶 */
if( pstOprUser->ulLevel < CT_AL_SUPER )
{
DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebUserDel() :: "
"Operation user <%s> 's level %ld is too lower. must be debug user or super user !",
szOprName, pstOprUser->ulLevel );
(_VOID)WNM_SendErrString( CLI_USER_HAS_NO_RIGHT );
return G_FAILURE;
}
/* 遍歷查找匹配用戶 */
for( i = 0; i < MAX_USER_NUM; i ++ )
{
/* 如果用戶名匹配 */
if( ( 0 ==EOS_StriCmp(m_sUserTable[i].szUserName, szUserName) )
&& ( m_sUserTable[i].ucUserType != USER_NOT_USED )
)
{
/* 禁止刪除調試用戶和超級用戶 */
if( m_sUserTable[i].ulLevel >= CT_AL_SUPER )
{
DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebUserDel() :: "
"Can't delete debug user or super user <%s, %ld> !",
szUserName, m_sUserTable[i].ulLevel );
(_VOID)WNM_SendErrString( CLI_USER_HAS_NO_RIGHT );
return G_FAILURE;
}
/* 禁止低級別用戶刪除高級別用戶 */
else if ( pstOprUser->ulLevel < m_sUserTable[i].ulLevel )
{
DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebUserDel() :: "
"Operation user <%s, %ld> has no right to delete user <%s, %ld> !",
szOprName, pstOprUser->ulLevel, szUserName, m_sUserTable[i].ulLevel );
(_VOID)WNM_SendErrString( CLI_USER_HAS_NO_RIGHT );
return G_FAILURE;
}
/* 禁止刪除在線用戶 */
else if( m_sUserTable[i].ulTermId != 0 )
{
DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebUserDel() :: "
"Delete user <%s> 's is online !",
szUserName );
(_VOID)WNM_SendErrString( CLI_USER_DEL_ONLINE );
return G_FAILURE;
}
/* 終于匹配了 */
else
{
break;
}
}
}
/* 未找到 */
if( i == MAX_USER_NUM )
{
DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebUserDel() :: "
"Can't find Delete user <%s> !",
szUserName );
(_VOID)WNM_SendErrString( CLI_USER_NOT_EXISTED );
return G_FAILURE;
}
ucTmp = m_sUserTable[i].ucUserType;
m_sUserTable[i].ucUserType = USER_NOT_USED;
#if CLI_DBASE_SUPPORT
/* 是否包含RDB模塊 */
if( G_YES == g_ul_INCLUDE_MODULE_CLI_RDB )
{
/* 函數指針是否注冊 */
if( G_NULL == g_pfn_CFG_CLI_RDB_RecordDirectDelete )
{
MT_ERRLOG(0);
return G_FAILURE;
}
if (g_pfn_CFG_CLI_RDB_RecordDirectDelete( m_ulCliUserHandle, m_usUserTable, i) != G_SUCCESS)
{
m_sUserTable[i].ucUserType = ucTmp;
MT_ERRLOG(0);
return G_FAILURE;
}
}
#endif
return G_SUCCESS;
}
#undef __WNM_IF_ACL__
/*-----------------------------------------------------------------------------
函數名稱 : CLI_WebAddClientACL();
功能 : 增加ACL的表項;
輸入參數 : ulIpaddr IP地址;
ulIpMask 子網掩碼;
輸出參數 : 無.
返回值 : G_SUCCESS, 成功;
其他, 失敗.
函數調用說明:
典型使用示例:
-----------------------------------------------------------------------------*/
_U32 CLI_WebAddClientACL( _U32 ulIpaddr, _U32 ulIpMask )
{
_S8 szIPAdd[20], szIpMsk[20];
_U32 i;
/* 轉換為字符串 */
(_VOID)_IPAddrToStr(ulIpaddr, szIPAdd);
(_VOID)_IPAddrToStr(ulIpMask, szIpMsk);
DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebAddClientACL() :: "
"Add ip addr <%s> and mask <%s> to ACL talbe .",
szIPAdd, szIpMsk );
/* IP地址和子網掩碼的合法性檢查 */
if (_VerifyGeneralIPAddress(szIPAdd) != G_SUCCESS
|| _VerifyMASKAddress(szIpMsk) != G_SUCCESS)
{
DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebAddClientACL() :: "
"Input ip addr <%s> or mask <%s> is invalid .",
szIPAdd, szIpMsk );
(_VOID)WNM_SendErrString( CLI_CLIENT_PARAM_VERIFY_FAILED );
return G_FAILURE;
}
for (i = 0; i < MT_ACL_NUM; i++)
{
if (((m_stCliAcl[i].ulIpAddr & m_stCliAcl[i].ulIpMask)
== (ulIpaddr & ulIpMask))
&& (m_stCliAcl[i].ulIpMask == ulIpMask))
{
DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebAddClientACL() :: "
"Input ip addr <%s> and mask <%s> has exist .",
szIPAdd, szIpMsk );
(_VOID)WNM_SendErrString( CLI_CLIENT_LIST_EXISTED );
return G_FAILURE;
}
}
for (i = 0; i < MT_ACL_NUM; i++)
{
if (m_stCliAcl[i].ulState != ACL_USED_FLAG)
{
m_stCliAcl[i].ulIpAddr = ulIpaddr;
m_stCliAcl[i].ulIpMask = ulIpMask;
m_stCliAcl[i].ulState = ACL_USED_FLAG;
#if CLI_DBASE_SUPPORT
/* 是否包含RDB模塊 */
if( G_YES == g_ul_INCLUDE_MODULE_CLI_RDB )
{
/* 函數指針是否注冊 */
if( G_NULL == g_pfn_CFG_CLI_RDB_RecordDirectInsert )
{
MT_ERRLOG(0);
return G_FAILURE;
}
if (g_pfn_CFG_CLI_RDB_RecordDirectInsert(m_ulCliUserHandle, m_usClientACLTable, i, &m_stCliAcl[i])!= G_SUCCESS)
{
DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebAddClientACL() :: "
"Input ip addr <%s> and mask <%s> insert to RDB fail .",
szIPAdd, szIpMsk );
MT_ERRLOG(0);
return G_FAILURE;
}
}
#endif
return G_SUCCESS;
}
}
DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebAddClientACL() :: "
"ACL table is full .",
szIPAdd, szIpMsk );
(_VOID)WNM_SendErrString( CLI_CLIENT_TABLE_FULL );
return G_FAILURE;
}
/*-----------------------------------------------------------------------------
函數名稱 : NMS_DelClientACL();
功能 : 刪除ACL的表項;
輸入參數 : ulIpaddr IP地址;
ulIpMask 子網掩碼;
輸出參數 : 無.
返回值 : G_SUCCESS, 成功;
其他, 失敗.
函數調用說明:
典型使用示例:
-----------------------------------------------------------------------------*/
_U32 CLI_WebDelClientACL( _U32 ulIpaddr, _U32 ulIpMask )
{
_S8 szIPAdd[20], szIpMsk[20];
_U32 i;
/* 轉換為字符串 */
(_VOID)_IPAddrToStr(ulIpaddr, szIPAdd);
(_VOID)_IPAddrToStr(ulIpMask, szIpMsk);
DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebDelClientACL() :: "
"delete ip addr <%s> and mask <%s> from ACL talbe .",
szIPAdd, szIpMsk );
/* IP地址和子網掩碼的合法性檢查 */
if ( _VerifyGeneralIPAddress(szIPAdd) != G_SUCCESS
|| _VerifyMASKAddress(szIpMsk) != G_SUCCESS)
{
DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebDelClientACL() :: "
"Input ip addr <%s> or mask <%s> is invalid .",
szIPAdd, szIpMsk );
(_VOID)WNM_SendErrString( CLI_CLIENT_PARAM_VERIFY_FAILED );
return G_FAILURE;
}
for (i = 0; i < MT_ACL_NUM; i++)
{
if (m_stCliAcl[i].ulIpAddr == ulIpaddr
&& m_stCliAcl[i].ulIpMask == ulIpMask
&& m_stCliAcl[i].ulState == ACL_USED_FLAG)
{
/*將Ip地址和掩碼初始化為255.255.255.255*/
m_stCliAcl[i].ulIpAddr = G_NULL_DWORD;
m_stCliAcl[i].ulIpMask = G_NULL_DWORD;
m_stCliAcl[i].ulState = 0;
#if CLI_DBASE_SUPPORT
/* 是否包含RDB模塊 */
if( G_YES == g_ul_INCLUDE_MODULE_CLI_RDB )
{
/* 函數指針是否注冊 */
if( G_NULL == g_pfn_CFG_CLI_RDB_RecordDirectDelete )
{
MT_ERRLOG(0);
return G_FAILURE;
}
if (g_pfn_CFG_CLI_RDB_RecordDirectDelete( m_ulCliUserHandle, m_usClientACLTable, i) != G_SUCCESS)
{
DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebDelClientACL() :: "
"Input ip addr <%s> and mask <%s> delete from RDB fail .",
szIPAdd, szIpMsk );
MT_ERRLOG(0);
return G_FAILURE;
}
}
#endif
return G_SUCCESS;
}
}
DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebDelClientACL() :: "
"Can't find ip addr <%s> or mask <%s> from ACL table .",
szIPAdd, szIpMsk );
(_VOID)WNM_SendErrString( CLI_TELNET_ACL_UNFIND );
return G_FAILURE;
}
#undef __WNM_IF_LOG__
#if ( LOG_SAVE_FLASH == G_NO )
/*-----------------------------------------------------------------------------
函數名稱 : CLI_WebGetLogNum();
功能 : 獲取指定用戶權限級別的日志數目;
輸入參數 : ucOprLevel, 操作用戶的權限級別;
輸出參數 : *pulLogNum, 指定用戶權限級別的日志數目;
返回值 : G_SUCCESS, 成功;
其他, 失敗.
函數調用說明: 本函數調用CLI_LogMapReset(), 必須保證在后面的幾個函數前調用;
典型使用示例:
-----------------------------------------------------------------------------*/
_U32 CLI_WebGetLogNum( _U8 ucOprLevel, _U32* pulLogNum )
{
_U32 ulRet;
ST_LOG_INDEX_MAP_CTRL *pstMapCtrl;
/* WIN32調試版本, 做一下檢查 */
#if (EOS_OS_TYPE == EOS_WIN32)
DBG_ASSERT( CLI_LogTableCheck() == G_SUCCESS );
#endif
/* 入口指針的合法性檢查 */
if( G_NULL == pulLogNum )
{
MT_ERRLOG(0);
return G_FAILURE;
}
/* 操作用戶的權限級別的合法性檢查 */
if( CT_AL_NULL <= ucOprLevel )
{
MT_ERRLOG(ucOprLevel);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -