📄 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 + -