cli_user.c
来自「命令行在嵌入式系统的实现」· C语言 代码 · 共 1,020 行 · 第 1/3 页
C
1,020 行
/* 返回值 :成功、失败 */
/* 调用函数 :此接口仅被AGENT调用 */
/* 被调函数 : */
/********************************************************************/
_U32 CLI_SetUserName(_U32 ulIndex, _S8 *szUserName)
{
PTermUserItem pTermUserItem ;
#if CLI_DBASE_SUPPORT
_U32 ulTmp;
#endif
CLI_ASSURE_OR_FAIL(( szUserName != G_NULL ) && ( *szUserName != G_NULL ));
pTermUserItem = &m_sUserTable[ulIndex];
if (pTermUserItem->ucUserType == USER_NOT_USED)
{
return G_FAILURE ;
}
if (pTermUserItem->ulLevel >= CT_AL_DEBUG)
{
return G_FAILURE ;
}
EOS_StrCpy(pTermUserItem->szUserName, szUserName);
#if CLI_DBASE_SUPPORT
/* 是否包含RDB模块 */
if( G_YES == g_ul_INCLUDE_MODULE_CLI_RDB )
{
/* 函数指针是否注册 */
if( G_NULL == g_pfn_CFG_CLI_RDB_RecordDirectUpdate )
{
MT_ERRLOG(0);
return G_FAILURE;
}
ulTmp = (_U32)(pTermUserItem - m_sUserTable);
ulTmp = g_pfn_CFG_CLI_RDB_RecordDirectUpdate(m_ulCliUserHandle, m_usUserTable, ulTmp, pTermUserItem);
CLI_ASSURE_OR_FAIL(G_SUCCESS == ulTmp);
}
#endif
return G_SUCCESS ;
}
/********************************************************************/
/* 函数名称 :CLI_SetUserPassword */
/* 函数功能 :设定某一用户的口令 */
/* 输入参数 :_S8 *szUserName 用户名 */
/* _S8 *szPassword用户口令 */
/* 输出参数 :_S8 *szPassword用户口令 */
/* 返回值 :成功、失败 */
/* 调用函数 : */
/* 被调函数 : */
/********************************************************************/
_U32 CLI_SetUserPassword(const _S8 *szUserName, const _S8 *szPassword)
{
PTermUserItem pTermUserItem ;
ST_TIME sTime;
#if CLI_DBASE_SUPPORT
_U32 ulTmp;
#endif
CLI_ASSURE_OR_FAIL(( szUserName != G_NULL ) && ( szPassword != G_NULL ));
if (EOS_GetTime(&sTime) != G_SUCCESS)
{
sTime.ucYear = 0x03;
sTime.ucMonth = 0x05;
sTime.ucDay = 0x01;
}
pTermUserItem = CLI_GetUserByName(szUserName) ;
if (G_NULL == pTermUserItem)
{
IO_Print(CLI_USER_NOT_EXISTED);
return G_FAILURE ;
}
if (pTermUserItem->ulLevel >= CT_AL_DEBUG)
{
IO_Print(CLI_USER_HAS_NO_RIGHT);
return G_FAILURE ;
}
CLI_Encrypt(pTermUserItem->szPassword, szPassword, 0) ;
/* 刷新密码的更新时间 */
pTermUserItem->ulPwdRenewTime = USER_MAKE_DAY(sTime.ucYear, sTime.ucMonth, sTime.ucDay);
#if CLI_DBASE_SUPPORT
/* 是否包含RDB模块 */
if( G_YES == g_ul_INCLUDE_MODULE_CLI_RDB )
{
ulTmp = (_U32)(pTermUserItem - m_sUserTable);
/* 函数指针是否注册 */
if( G_NULL == g_pfn_CFG_CLI_RDB_RecordDirectUpdate )
{
MT_ERRLOG(0);
return G_FAILURE;
}
ulTmp = g_pfn_CFG_CLI_RDB_RecordDirectUpdate(m_ulCliUserHandle, m_usUserTable, ulTmp, pTermUserItem);
CLI_ASSURE_OR_FAIL(G_SUCCESS == ulTmp);
}
#endif
return G_SUCCESS ;
}
/********************************************************************/
/* 函数名称 :CLI_SetUserLevel */
/* 函数功能 :设定某一用户的权限 */
/* 输入参数 :_S8 *szUserName 用户名 */
/* _U32 ulLevel用户权限 */
/* 输出参数 :_U32 ulLevel用户权限 */
/* 返回值 :成功、失败 */
/* 调用函数 : */
/* 被调函数 : */
/********************************************************************/
_U32 CLI_SetUserLevel(const _S8 *szUserName, _U32 ulLevel)
{
PTermUserItem pTermUserItem ;
_U32 ulTmp;
CLI_ASSURE_OR_FAIL( szUserName != G_NULL );
pTermUserItem = CLI_GetUserByName(szUserName) ;
if (G_NULL == pTermUserItem)
return G_FAILURE ;
pTermUserItem->ulLevel = ulLevel ;
#if CLI_DBASE_SUPPORT
/* 是否包含RDB模块 */
if( G_YES == g_ul_INCLUDE_MODULE_CLI_RDB )
{
/* 函数指针是否注册 */
if( G_NULL == g_pfn_CFG_CLI_RDB_RecordDirectUpdate )
{
MT_ERRLOG(0);
return G_FAILURE;
}
ulTmp = (_U32)(pTermUserItem - m_sUserTable);
ulTmp = g_pfn_CFG_CLI_RDB_RecordDirectUpdate(m_ulCliUserHandle, m_usUserTable, ulTmp, pTermUserItem);
CLI_ASSURE_OR_FAIL(G_SUCCESS == ulTmp);
}
#endif
return G_SUCCESS ;
}
/********************************************************************/
/* 函数名称 :CLI_SetUserLanguage */
/* 函数功能 :设定某一用户的权限 */
/* 输入参数 :_S8 *szUserName 用户名 */
/* _U8 ucLan 用户惯用语种 */
/* 输出参数 :无 */
/* 返回值 :成功、失败 */
/* 调用函数 : */
/* 被调函数 : */
/********************************************************************/
_U32 CLI_SetUserLanguage(const _S8 *szUserName, _U8 ucLan)
{
PTermUserItem pTermUserItem ;
#if CLI_DBASE_SUPPORT
_U32 ulTmp;
#endif
CLI_ASSURE_OR_FAIL( szUserName != G_NULL );
/* 语种ID的合法性检查 */
if( ucLan >= ML_GetLangNum() )
{
MT_ERRLOG(0);
return G_FAILURE;
}
pTermUserItem = CLI_GetUserByName(szUserName) ;
if (G_NULL == pTermUserItem)
{
IO_Print(CLI_USER_NOT_EXISTED);
return G_FAILURE ;
}
pTermUserItem->ucLanguage = ucLan ;
#if CLI_DBASE_SUPPORT
/* 是否包含RDB模块 */
if( G_YES == g_ul_INCLUDE_MODULE_CLI_RDB )
{
ulTmp = (_U32)(pTermUserItem - m_sUserTable);
/* 函数指针是否注册 */
if( G_NULL == g_pfn_CFG_CLI_RDB_RecordDirectUpdate )
{
MT_ERRLOG(0);
return G_FAILURE;
}
ulTmp = g_pfn_CFG_CLI_RDB_RecordDirectUpdate(m_ulCliUserHandle, m_usUserTable, ulTmp, pTermUserItem);
CLI_ASSURE_OR_FAIL(G_SUCCESS == ulTmp);
}
#endif
return G_SUCCESS ;
}
/********************************************************************/
/* 函数名称 :CLI_DisplayOneUserInfo */
/* 函数功能 :输出某一用户的信息 */
/* 输入参数 : */
/* 输出参数 :无 */
/* 返回值 :成功、失败 */
/* 调用函数 : */
/* 被调函数 : */
/********************************************************************/
_U32 CLI_DisplayOneUserInfo(PTermUserItem pTermUserItem)
{
const _S8 *pStat;
PTerm_Data_S pTermStruct;
_U32 ulValidTime = 0;
ST_TIME sTime;
_U32 ulUserLogMode;
_S8 szIp[32];
if ((pTermStruct = CLI_GetCurrentTaskData()) == G_NULL)
{
MT_ERRLOG(0);
return G_FAILURE;
}
if (EOS_GetTime(&sTime) != G_SUCCESS)
{
sTime.ucYear = 0x03;
sTime.ucMonth = 0x05;
sTime.ucDay = 0x01;
}
/* 查询调试用户或比当前用户等级高的用户信息,不响应*/
if (pTermStruct->ucUserLevel < pTermUserItem->ulLevel
|| pTermUserItem->ulLevel >= CT_AL_DEBUG
|| pTermUserItem->ucUserType == USER_NOT_USED)
return G_SUCCESS;
ulValidTime = USER_MAKE_DAY(sTime.ucYear, sTime.ucMonth, sTime.ucDay);
if (ulValidTime < pTermUserItem->ulPwdRenewTime)
{
ulValidTime = CLI_USR_PSSWRD_TIME;
}
else if (ulValidTime > pTermUserItem->ulPwdRenewTime + CLI_USR_PSSWRD_TIME)
{
ulValidTime = 0;
}
else
{
ulValidTime = (pTermUserItem->ulPwdRenewTime + CLI_USR_PSSWRD_TIME - ulValidTime) % (CLI_USR_PSSWRD_TIME + 1);
}
if (pTermUserItem->ucUserStatus >= TERM_LOGED)
{
pStat = ML_GetString(pTermStruct->ulTermId, CLI_USER_LOGIN_STAT);
ulUserLogMode = CLI_GetUserLogModeByTermID(pTermUserItem->ulTermId);
}
else
{
pStat = ML_GetString(pTermStruct->ulTermId, CLI_USER_UNLOGIN_STAT);
ulUserLogMode = LOG_MODE_BUTT;
}
/* 如果是从telnet或web登录, 则获取IP地址 */
if( ( ulUserLogMode == LOG_MODE_WEB )
|| ( ulUserLogMode == LOG_MODE_TELNET )
)
{
EOS_IPAddrToStr( m_TDTable[pTermUserItem->ulTermId - 1].pTermStruct->ulClientIP, szIp );
}
else
{
EOS_StrCpy( szIp, "---" );
}
IO_Print(CLI_USER_TABLE_ITEM,
pTermUserItem->szUserName,
ML_GetString(pTermStruct->ulTermId, (CLI_USER_LEVEL_1 + pTermUserItem->ulLevel)),
ML_GetString(pTermStruct->ulTermId, (CLI_USER_LANGUAGE_1 + pTermUserItem->ucLanguage%2)),
pStat,
CLI_GetUserLogModeString(ulUserLogMode),
szIp,
ulValidTime
);
return G_SUCCESS;
}
/********************************************************************/
/* 函数名称 :CLI_DisplayAllUserInfo */
/* 函数功能 :显示所有用户的信息 */
/* 输入参数 : */
/* 输出参数 :无 */
/* 返回值 :成功、失败 */
/* 调用函数 : */
/* 被调函数 : */
/********************************************************************/
_U32 CLI_DisplayAllUserInfo(_VOID)
{
_U32 i;
for (i = 0; i < MAX_USER_NUM; i++)
{
if (CLI_DisplayOneUserInfo(&m_sUserTable[i]) != G_SUCCESS)
return G_FAILURE;
}
return G_SUCCESS;
}
/********************************************************************/
/* 函数名称 :CLI_DisplayOnlineUser */
/* 函数功能 :显示所有在线用户的信息 */
/* 输入参数 :无 */
/* 输出参数 :无 */
/* 返回值 :成功、失败 */
/* 调用函数 : */
/* 被调函数 : */
/********************************************************************/
_U32 CLI_DisplayOnlineUser(_VOID)
{
_U32 i;
for (i = 0; i < MAX_USER_NUM; i++)
{
if (m_sUserTable[i].ucUserStatus >= TERM_LOGED)
if (CLI_DisplayOneUserInfo(&m_sUserTable[i]) != G_SUCCESS)
return G_FAILURE;
}
return G_SUCCESS;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?