📄 cli_syscmd.c
字号:
}
return G_SUCCESS;
}
/*********************************************************************/
/* 函数功能 : 修改用户密码命令实现 */
/*********************************************************************/
_U32 CLI_CmdPassword(_U32 ulTermID)
{
_S8 szUsername[USERNAME_LEN] = "";
_S8 szPassword[PASSWORD_LEN];
_S8 szPwdCfrm[PASSWORD_LEN];
_U32 ulCount;
PTerm_Data_S pTermStruct;
PTermUserItem pTermUser;
CLI_ASSURE_OR_FAIL(CLI_IS_TERMID_VALIDE(ulTermID));
if ((pTermStruct = CLI_GetCurrentTaskData()) == G_NULL)
{
MT_ERRLOG(0);
return G_FAILURE;
}
if (pTermStruct->ucUserLevel >= CT_AL_SUPER)
{
IO_Print(CLI_USERNAME_INPUT);
if (IO_GetString(szUsername, USERNAME_LEN, EN_GETSTRING_NORMALLY) != G_SUCCESS)
return G_FAILURE;
if (szUsername[0] == 0)
{
IO_Print(CLI_USERNAME_IGNORED);
}
}
if (szUsername[0] != 0 && EOS_StriCmp(szUsername, pTermStruct->szCurUserName))
{
pTermUser = CLI_GetUserByName(szUsername);
if (pTermUser == G_NULL)
{
IO_Print(CLI_USER_NOT_EXISTED);
return G_FAILURE;
}
if (pTermStruct->ucUserLevel < CT_AL_SUPER
|| pTermUser->ulLevel >= CT_AL_DEBUG)
{
IO_Print(CLI_USER_HAS_NO_RIGHT);
return G_FAILURE;
}
}
else
{
if (pTermStruct->ucUserLevel > CT_AL_SUPER)
{
IO_Print(CLI_USER_HAS_NO_RIGHT);
return G_FAILURE;
}
EOS_StrCpy (szUsername, pTermStruct->szCurUserName);
IO_Print(CLI_PASSWORD_INPUT_OLD);
if (IO_GetString(szPassword, PASSWORD_LEN, EN_SHOWBACK_INVISIBLE) != G_SUCCESS)
return G_FAILURE;
if (szPassword[0] == '\0')
{
IO_Print(CLI_USER_PASSWORD_NULL);
return G_FAILURE;
}
if (CLI_CheckUserPassword(szUsername, szPassword) != G_SUCCESS)
{
IO_Print(CLI_PASSWORD_ERROR);
return G_FAILURE;
}
}
for (ulCount = 0; ulCount < 3; ulCount++)
{
IO_Print(CLI_PASSWORD_INPUT_NEW);
if (IO_GetString(szPassword, PASSWORD_LEN, EN_SHOWBACK_INVISIBLE) != G_SUCCESS)
return G_FAILURE;
if (szPassword[0] == '\0')
{
IO_Print(CLI_USER_PASSWORD_NULL);
continue;
}
else if (szPassword[0] == KEY_CTRL_C)
{
IO_Print(CLI_STRING_INVALID);
continue;
}
IO_Print(CLI_PASSWORD_CONFIRM);
if (IO_GetString(szPwdCfrm, PASSWORD_LEN, EN_SHOWBACK_INVISIBLE) != G_SUCCESS)
return G_FAILURE;
if (EOS_StrCmp (szPassword, szPwdCfrm) != 0)
{
IO_Print(CLI_PASSWORD_NOT_SAME);
continue;
}
break;
}
if (ulCount == 3)
return G_FAILURE;
return CLI_SetUserPassword(szUsername, szPassword);
}
/*********************************************************************/
/* 函数功能 : 修改用户惯用语种命令实现 */
/*********************************************************************/
_U32 CLI_CmdUserLan(_U32 ulTermID)
{
_S8 szUsername[USERNAME_LEN];
_S8 *pLanguage;
_U8 ucLan;
CLI_ASSURE_OR_FAIL(CLI_IS_TERMID_VALIDE(ulTermID));
if ((pLanguage = CT_GetParamByName("language", ulTermID)) == G_NULL)
{
MT_ERRLOG(0);
return G_FAILURE;
}
EOS_StrCpy (szUsername, m_TDTable[ulTermID - 1].pTermStruct->szCurUserName);
if (!EOS_StriCmp(pLanguage, "chinese"))
{
ucLan = ML_CHS;
}
else if (!EOS_StriCmp(pLanguage, "english"))
{
ucLan = ML_ENG;
}
else
{
return G_FAILURE;
}
if (ML_SetLanguage(ulTermID, ucLan) != G_SUCCESS)
return G_FAILURE;
IO_Print(CLI_LANGUAGE_CHANGED);
return CLI_SetUserLanguage(szUsername, ucLan);
}
/*********************************************************************/
/* 函数功能 : 踢除指定的在线用户命令实现 */
/*********************************************************************/
_U32 CLI_CmdUserKickOut(_U32 ulTermID)
{
_S8 *pParam;
_S8 szUsername[USERNAME_LEN];
PTermUserItem pTermUser ;
PTerm_Data_S pstKickTerm;
CLI_ASSURE_OR_FAIL(CLI_IS_TERMID_VALIDE(ulTermID));
pParam = CT_GetParamByName("operator-name", ulTermID);
if (pParam == G_NULL)
{
return G_FAILURE;
}
EOS_StrCpy(szUsername, pParam);
pTermUser = CLI_GetUserByName(szUsername) ;
if (G_NULL == pTermUser || pTermUser->ulLevel >= CT_AL_DEBUG)
{
IO_Print(CLI_USER_NOT_EXISTED);
return G_FAILURE ;
}
// 如果该用户不在线,返回
if (pTermUser->ulTermId == 0)
{
IO_Print(CLI_USER_NOT_ONLINE);
return G_SUCCESS;
}
//因为超级用户以上才可以进行该操作,而这类用户每种等级只有一个,因此如果
//等级相同,则认为是删除自己
if ((_U8)pTermUser->ulLevel == m_TDTable[ulTermID - 1].pTermStruct->ucUserLevel)
{
IO_Print(CLI_TERMINAL_KICK_SELF);
return G_FAILURE;
}
/* 如果用户正处于同名踢除的阶段,短时间内不允许进行该操作*/
if (pTermUser->ucInvadedFlag == EN_USER_INVADED)
{
IO_Print(CLI_USER_TOO_BUSY);
return G_FAILURE;
}
pstKickTerm = m_TDTable[pTermUser->ulTermId - 1].pTermStruct;
pTermUser->ucInvadedFlag = EN_USER_INVADED;
if (IO_GetConfirm(CLI_TERMINAL_KICK_OUT, INPUT_NO) == INPUT_YES)
{
/* 强制注销一个命令行终端 */
if( CLI_IS_TERMID_VALIDE(pTermUser->ulTermId) )
{
/* 加此重复判断是为了防止在确认的过程中,对方的登录状况有变*/
if (pTermUser->ulTermId == 0)
{
IO_Print(CLI_USER_NOT_ONLINE);
pTermUser->ucInvadedFlag = EN_USER_INVADED;
return G_SUCCESS;
}
IO_PrintToTerm(pTermUser->ulTermId, CLI_TERMINAL_KICKED_OFF);
CLI_SetTermStatus(pstKickTerm, TERM_SLEEPING);
pTermUser->ucInvadedFlag = EN_USER_NOT_INVADED;
CLI_RECORD(CLI_STAT_KICKOFF_OTHER);
DBG_Out(PID_CLI, MT_DBGOUT_NOTE,
"\r\n CLI: Term %d Be Forced Logout!", pTermUser->ulTermId);
//强行注销该终端
CLI_TermLogout(pstKickTerm);
}
/* 强制注销一个web终端 */
#if ( CLI_WEB_SUPPORT == G_YES )
else if( IS_WEB_TERMID( pTermUser->ulTermId ) )
{
_U32 ulStratCentiSec, ulElapsCentiSec = 0;
_BOOL bWebLogOutOk = G_FALSE;
DBG_Out( PID_CLI, MT_DBGOUT_NOTE, G_STR_HEAD
"CLI_CmdUserKickOut(): Web term %d is Forced Logout!", pTermUser->ulTermId );
(_VOID)EOS_GetCentiSecondFromStart( &ulStratCentiSec );
/* 通过消息包方式通知web网管踢用户, 异步方式 */
(_VOID)CLI_WebSendKickOffUserMsg( pTermUser->ulTermId );
/* 延迟让权, 保证web网管处理结束, 最多等1秒 */
while( ulElapsCentiSec < ( 1 * 100 ) )
{
CLI_DELAY(1);
/* 确保web网管退出登录的处理结果正确 */
if( ( TERM_SLEEPING == pstKickTerm->ucTermStatus )
&& ( TERM_SLEEPING == pTermUser->ucUserStatus )
&& ( 0 == pTermUser->ulTermId )
)
{
bWebLogOutOk = G_TRUE;
break;
}
(_VOID)EOS_GetCentiSecondFromStart( &ulElapsCentiSec );
ulElapsCentiSec = ulElapsCentiSec - ulStratCentiSec;
}
/* 确保web网管退出登录的处理结果正确 */
if( G_TRUE != bWebLogOutOk )
{
DBG_ErrLog( 0, EN_ERR_LEVEL_GENERAL, ulElapsCentiSec, pstKickTerm->ucTermStatus );
DBG_ErrLog( 0, EN_ERR_LEVEL_GENERAL, pTermUser->ucUserStatus, pTermUser->ulTermId );
}
}
#endif /* #if ( CLI_WEB_SUPPORT == G_YES ) */
else
{
MT_ERRLOG(0);
}
}
else
{
pTermUser->ucInvadedFlag = EN_USER_NOT_INVADED;
return CMD_FAILED_SILENT;
}
return G_SUCCESS;
}
/*********************************************************************/
/* 函数功能 : 在线客户端的查询命令 */
/*********************************************************************/
#if 0
_U32 CLI_CmdShowClient(_U32 ulTermID)
{
_S8 *pUserName;
_S8 szTmp[81];
_U32 ulIndex, ulFlag = G_FALSE;
_U32 ulClientID, ulIPAddress;
PTerm_Data_S pTermStruct;
CLI_ASSURE_OR_FAIL(CLI_IS_TERMID_VALIDE(ulTermID));
for (ulIndex = FIRST_TELNET_DATA; ulIndex < (int)FIRST_TELNET_DATA + g_ul_CFG_CLI_MAX_TELNET_CLIENT_NUM; ulIndex++)
{
pTermStruct = m_TDTable[ulIndex].pTermStruct;
/* 只显示登录后的客户端信息 */
if (pTermStruct->ucTermStatus == TERM_SLEEPING)
continue ;
if ((_U8)m_TDTable[ulTermID - 1].pTermStruct->ucUserLevel < pTermStruct->ucUserLevel || pTermStruct->ucUserLevel == CT_AL_DEBUG)
{
continue;
}
if (ulFlag == G_FALSE)
{
IO_Print(CLI_CLIENT_TABLE_HEAD);
IO_Print(PUB_TABLE_EMBODY);
ulFlag = G_TRUE;
}
ulClientID = pTermStruct->ulTermId;
pUserName = pTermStruct->szCurUserName ;
ulIPAddress = htonl(pTermStruct->ulClientIP);
EOS_Sprintf(szTmp, "\r\n %-14d%-14s%d.%d.%d.%d",
ulClientID,
pUserName ,
ulIPAddress>>24, (ulIPAddress>>16) & 0xff,
(ulIPAddress>>8) & 0xff, ulIPAddress & 0xff);
IO_OutString(szTmp);
}
if (ulFlag == G_FALSE)
{
IO_Print(CLI_CLIENT_NO_ONLINE);
}
else
{
IO_Print(PUB_TABLE_EMBODY);
}
return G_SUCCESS;
}
#endif
/*********************************************************************/
/* 函数功能 : 终端用户的查询命令 */
/*********************************************************************/
_U32 CLI_CmdShowUser(_U32 ulTermID)
{
_S8 *pParam;
PTermUserItem pTermUserItem;
CLI_ASSURE_OR_FAIL(CLI_IS_TERMID_VALIDE(ulTermID));
if ((pParam = CT_GetParamByName("all|online|by-name", ulTermID)) == G_NULL)
{
MT_ERRLOG(0);
return G_FAILURE;
}
if ( !EOS_StriCmp(pParam, "all") )
{
/*显示所有用户信息 */
IO_Print(CLI_USER_HEAD_DISP);
IO_Print(PUB_TABLE_EMBODY);
(_VOID)CLI_DisplayAllUserInfo();
IO_Print(PUB_TABLE_EMBODY);
return G_SUCCESS;
}
else if ( !EOS_StriCmp(pParam, "online") )
{
/* 显示在线用户信息 */
IO_Print(CLI_USER_HEAD_DISP);
IO_Print(PUB_TABLE_EMBODY);
(_VOID)CLI_DisplayOnlineUser();
IO_Print(PUB_TABLE_EMBODY);
return G_SUCCESS;
}
else if ( !EOS_StriCmp(pParam, "by-name") )
{
if ((pParam = CT_GetParamByName("operator-name", ulTermID)) == G_NULL)
{
return G_FAILURE;
}
pTermUserItem = CLI_GetUserByName(pParam);
if (pTermUserItem == G_NULL || pTermUserItem->ulLevel == CT_AL_DEBUG)
{
IO_PrintToTerm(ulTermID, CLI_USER_NOT_EXISTED);
return CMD_FAILED_SILENT;
}
if ((_U8)pTermUserItem->ulLevel > m_TDTable[ulTermID - 1].pTermStruct->ucUserLevel)
{
IO_Print(CLI_USER_HAS_NO_RIGHT);
return CMD_FAILED_SILENT;
}
/* 显示指定用户信息 */
IO_Print(CLI_USER_HEAD_DISP);
IO_Print(PUB_TABLE_EMBODY);
(_VOID)CLI_DisplayOneUserInfo(pTermUserItem);
IO_Print(PUB_TABLE_EMBODY);
return G_SUCCESS;
}
return G_FAILURE;
}
/*********************************************************************/
/* 函数功能 : 日志查询 */
/*********************************************************************/
_U32 CLI_CmdShowLog(_U32 ulTermID)
{
CLI_ASSURE_OR_FAIL(CLI_IS_TERMID_VALIDE(ulTermID));
return CLI_DisplayAllLog();
}
/*********************************************************************/
/* 函数功能 : 判断对象是否需要在help中显示 */
/*********************************************************************/
_BOOL CLI_IsObjNeedShow(_U32 ulMode, CT_OBJECT_P pObject, _U32 ulLevel)
{
CT_OBJECT_P pObj;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -