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 + -
显示快捷键?