⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cli_webif.c

📁 命令行在嵌入式系统的实现
💻 C
📖 第 1 页 / 共 4 页
字号:
/*-----------------------------------------------------------------------------
 函数名称    : CLI_WebSetUserPassword();
 功能        : 设置用户密码
 输入参数    : szOprName,   操作用户名;
               szUserName,  设置用户名;
               szPassword,  设置密码;
 输出参数    : 无.
 返回值      : G_SUCCESS,   成功;
               其他,        失败.
 函数调用说明: woodhead的密码不可修改;
               woodhead可以修改woodhead级别以下(不包括woodhead)的用户的密码。
               root可以修改root和root级别以下的用户的密码。
               root级别以下的用户(不包括root)只能够修改自己的密码。
 典型使用示例:
-----------------------------------------------------------------------------*/
_U32 CLI_WebSetUserPassword( const _S8* szOprName,
                                        const _S8* szUserName, const _S8* szPassword )
{
    _U32                ulRet;
    PTermUserItem       pstOprUser, pstSetUser;

    /* 输入指针的合法性检查 */
    if(    ( G_NULL == szOprName )
        || ( G_NULL == szUserName )
        || ( G_NULL == szPassword )
      )
    {
        MT_ERRLOG(0);
        return G_FAILURE;
    }

    /* 字符串长度的合法性检查 */
    if(    ( EOS_StrLen( szUserName ) >= USERNAME_LEN )
        || ( EOS_StrLen( szOprName ) >= USERNAME_LEN )
        || ( EOS_StrLen( szPassword ) >= PASSWORD_LEN )
      )
    {
        MT_ERRLOG(0);
        return G_FAILURE;
    }

    DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebSetUserPassword() :: "
             "Operation user <%s> . Set user <%s>, password <%s> ",
             szOprName, szUserName, szPassword );

    /* 根据用户名获取用户信息 */
    pstOprUser = CLI_GetUserByName( szOprName );
    if( pstOprUser == G_NULL )
    {
        DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebSetUserPassword() :: "
                 "Operation user <%s> is not exist !", szOprName  );
        (_VOID)WNM_SendErrString( CLI_USER_NOT_EXISTED );
        return G_FAILURE;
    }

    pstSetUser = CLI_GetUserByName( szUserName );
    if( pstSetUser == G_NULL )
    {
        DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebSetUserPassword() :: "
                 "Set user <%s> is not exist !", szUserName  );
        (_VOID)WNM_SendErrString( CLI_USER_NOT_EXISTED );
        return G_FAILURE;
    }

    /* ========================================================================
       判断密码是否被修改, 如果没有被修改, 返回成功.
       此功能本来应该由NMS模块实现, 先判断网页的用户密码是否被修改, 再调用本函数,
       但其无法判断网页是否被修改, 故放此处实现                                 */
    ulRet = CLI_CheckUserPassword( szUserName, szPassword );
    if( G_SUCCESS == ulRet )
    {
        DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebSetUserPassword() :: "
                 "User <%s> 's password <%s> is not modified . return success !",
                 szUserName, szPassword );
        return G_SUCCESS;
    }
    /* ======================================================================== */

    /* 调试用户的密码不允许修改 */
    if( pstSetUser->ulLevel >= CT_AL_DEBUG )
    {
        DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebSetUserPassword() :: "
                 "Debug user <%s> 's password can not be changed !", szUserName  );
        (_VOID)WNM_SendErrString( CLI_USER_HAS_NO_RIGHT );
        return G_FAILURE;
    }

    /* 调试用户和超级用户可以修改超级用户和低级别用户的密码 */
    if(    ( pstOprUser->ulLevel >= CT_AL_SUPER )
        && ( pstSetUser->ulLevel <=  CT_AL_SUPER ) )
    {
        DBG_ASSERT( pstSetUser->ulLevel <=  pstOprUser->ulLevel );

        return CLI_SetUserPassword( szUserName, szPassword );
    }
    /* 其他用户只能修改自己的密码 */
    else
    {
        if( 0 == EOS_StriCmp( szOprName, szUserName ) )
        {
            return CLI_SetUserPassword( szUserName, szPassword );
        }
        else
        {
            DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebSetUserPassword() :: "
                     "Operation user <%s> must be equal to set user <%s> !",
                     szOprName, szUserName );
            (_VOID)WNM_SendErrString( CLI_USER_HAS_NO_RIGHT );
            return G_FAILURE;
        }
    }


}




/*-----------------------------------------------------------------------------
 函数名称    : CLI_WebSetUserLevel();
 功能        : 设置用户惯用语种
 输入参数    : szOprName,   操作用户名;
               szUserName,  设置用户名;
               ucLan,       用户惯用语种;
 输出参数    : 无.
 返回值      : G_SUCCESS,   成功;
               其他,        失败.
 函数调用说明: woodhead可以修改woodhead和woodhead级别以下的用户的语种;
               root可以修改root和root级别以下的用户的语种;
               root级别以下的用户(不包括root)只能够修改自己的语种。
 典型使用示例:
-----------------------------------------------------------------------------*/
_U32 CLI_WebSetUserLanguage( const _S8* szOprName,
                                  const _S8* szUserName, _U8 ucLan )
{
    PTermUserItem       pstOprUser, pstSetUser;

    /* 输入指针的合法性检查 */
    if(    ( G_NULL == szOprName )
        || ( G_NULL == szUserName )
      )
    {
        MT_ERRLOG(0);
        return G_FAILURE;
    }

    /* 字符串长度的合法性检查 */
    if(    ( EOS_StrLen( szUserName ) >= USERNAME_LEN )
        || ( EOS_StrLen( szOprName ) >= USERNAME_LEN )
      )
    {
        MT_ERRLOG(0);
        return G_FAILURE;
    }

    /* 语种ID的合法性检查 */
    if( ucLan >= ML_GetLangNum() )
    {
        MT_ERRLOG(0);
        return G_FAILURE;
    }

    DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebSetUserLanguage() :: "
             "Operation user <%s> . Set user <%s>, ucLan <%ld> ",
             szOprName, szUserName, ucLan );

    /* 根据用户名获取用户信息 */
    pstOprUser = CLI_GetUserByName( szOprName );
    if( pstOprUser == G_NULL )
    {
        DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebSetUserLanguage() :: "
                 "Operation user <%s> is not exist !", szOprName  );
        (_VOID)WNM_SendErrString( CLI_USER_NOT_EXISTED );
        return G_FAILURE;
    }

    pstSetUser = CLI_GetUserByName( szUserName );
    if( pstSetUser == G_NULL )
    {
        DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebSetUserLanguage() :: "
                 "Set user <%s> is not exist !", szUserName  );
        (_VOID)WNM_SendErrString( CLI_USER_NOT_EXISTED );
        return G_FAILURE;
    }

    /* ========================================================================
       判断用户惯用语种是否被修改, 如果没有被修改, 返回成功.
       此功能本来应该由NMS模块实现, 先判断网页的用户惯用语种是否被修改, 再调用本函数,
       但其无法判断网页是否被修改, 故放此处实现                                 */
    if( ucLan == pstSetUser->ucLanguage )
    {
        DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebSetUserLanguage() :: "
                 "user <%s> 's ucLan <%ld> is not modified . return success !",
                 szUserName, ucLan );
        return G_SUCCESS;
    }
    /* ======================================================================== */

    /* woodhead可以修改woodhead和woodhead级别以下的用户的语种 */
    if(    ( pstOprUser->ulLevel == CT_AL_DEBUG )
        && ( pstSetUser->ulLevel <=  CT_AL_DEBUG ) )
    {
        return CLI_SetUserLanguage( szUserName, ucLan );
    }
    /* root可以修改root和root级别以下的用户的语种 */
    else if(    ( pstOprUser->ulLevel == CT_AL_SUPER )
             && ( pstSetUser->ulLevel <= CT_AL_SUPER ) )
    {
        return CLI_SetUserLanguage( szUserName, ucLan );
    }
    /* root级别以下的用户(不包括root)只能够修改自己的语种。 */
    else
    {
        if( 0 == EOS_StriCmp( szOprName, szUserName ) )
        {
            return CLI_SetUserLanguage( szUserName, ucLan );
        }
        else
        {

            DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebSetUserLanguage() :: "
                     "Operation user <%s> must be equal to set user <%s> !",
                     szOprName, szUserName );
            (_VOID)WNM_SendErrString( CLI_USER_HAS_NO_RIGHT );
            return G_FAILURE;
        }
    }

}


/*-----------------------------------------------------------------------------
 函数名称    : CLI_WebSetUserLevel();
 功能        : 设置用户权限级别
 输入参数    : szOprName,   操作用户名;
               szUserName,  设置用户名;
               ucLevel,     用户权限级别, 即用户操作级别, 枚举CLI_OPERAT_LEVEL_T
 输出参数    : 无.
 返回值      : G_SUCCESS,   成功;
               其他,        失败.
 函数调用说明: woodhead和root的权限不可修改;
               woodhead和root用户可以修改root级别以下(不包括root)的用户的权限;
               root级别以下的用户(不包括root)不允许进行权限修改操作。
 典型使用示例:
-----------------------------------------------------------------------------*/
_U32 CLI_WebSetUserLevel( const _S8* szOprName,
                                  const _S8* szUserName, _U8 ucLevel )
{
    PTermUserItem       pstOprUser, pstSetUser;

    /* 输入指针的合法性检查 */
    if(    ( G_NULL == szOprName )
        || ( G_NULL == szUserName )
      )
    {
        MT_ERRLOG(0);
        return G_FAILURE;
    }

    /* 字符串长度的合法性检查 */
    if(    ( EOS_StrLen( szUserName ) >= USERNAME_LEN )
        || ( EOS_StrLen( szOprName ) >= USERNAME_LEN )
      )
    {
        MT_ERRLOG(0);
        return G_FAILURE;
    }

    DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebSetUserLevel() :: "
             "Operation user <%s> . Set user <%s>, ucLevel <%ld> ",
             szOprName, szUserName, ucLevel );

    /* 根据用户名获取用户信息 */
    pstOprUser = CLI_GetUserByName( szOprName );
    if( pstOprUser == G_NULL )
    {
        DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebSetUserLevel() :: "
                 "Operation user <%s> is not exist !", szOprName  );
        (_VOID)WNM_SendErrString( CLI_USER_NOT_EXISTED );
        return G_FAILURE;
    }

    pstSetUser = CLI_GetUserByName( szUserName );
    if( pstSetUser == G_NULL )
    {
        DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebSetUserLevel() :: "
                 "Set user <%s> is not exist !", szUserName  );
        (_VOID)WNM_SendErrString( CLI_USER_NOT_EXISTED );
        return G_FAILURE;
    }

    /* ========================================================================
       判断用户权限级别是否被修改, 如果没有被修改, 返回成功.
       此功能本来应该由NMS模块实现, 先判断网页的用户权限级别是否被修改, 再调用本函数,
       但其无法判断网页是否被修改, 故放此处实现                                 */
    if( ucLevel == (_U8)pstSetUser->ulLevel )
    {
        DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebSetUserLevel() :: "
                 "user <%s> 's ucLevel <%ld> is not modified . return success !",
                 szUserName, ucLevel );
        return G_SUCCESS;
    }
    /* ======================================================================== */

    /* 输入的用户权限的合法性检查 */
    if( ucLevel >= CT_AL_SUPER )
    {
        DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebSetUserLevel() :: "
                 "Input user level %ld is too high ! must be lower than super level .",
                 ucLevel );
        (_VOID)WNM_SendErrString( CLI_USER_HAS_NO_RIGHT );
        return G_FAILURE;
    }

    /* 操作用户必须是调试用户或超级用户 */
    if( pstOprUser->ulLevel < CT_AL_SUPER )
    {
        DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebSetUserLevel() :: "
                 "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;
    }

    /* 不允许修改调试用户和超级用户的权限 */
    if( pstSetUser->ulLevel >= CT_AL_SUPER )
    {
        DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebSetUserLevel() :: "
                 "Debug user or super user <%s> 's level can not be changed !",
                 szUserName  );
        (_VOID)WNM_SendErrString( CLI_USER_HAS_NO_RIGHT );
        return G_FAILURE;
    }

    return CLI_SetUserLevel( szUserName, ucLevel );

}



/*-----------------------------------------------------------------------------
 函数名称    : CLI_WebUserAdd();
 功能        : 增加用户
 输入参数    : szOprName,   操作用户名;
               szUserName,  添加用户名;
               szPassword,  密码(明文);
               ucLevel,     用户权限级别, 即用户操作级别, 枚举CLI_OPERAT_LEVEL_T
               ucLan,       用户惯用语种;
 输出参数    : 无.
 返回值      : G_SUCCESS,   成功;
               其他,        失败.
 函数调用说明: woodhead和root用户可以增删root级别以下(不包括root)的用户。
               root级别以下的用户(不包括root)不允许进行增删操作。
 典型使用示例:
-----------------------------------------------------------------------------*/
_U32 CLI_WebUserAdd(  const _S8* szOprName,
                             const _S8* szUserName, const _S8* szPassword,
                             _U8 ucLevel, _U8 ucLan )
{

    _U32                i;
    PTermUserItem       pstOprUser;

    /* 输入指针的合法性检查 */
    if(    ( G_NULL == szOprName )
        || ( G_NULL == szUserName )
        || ( G_NULL == szPassword )
      )
    {
        MT_ERRLOG(0);
        return G_FAILURE;
    }

    /* 字符串长度的合法性检查 */
    if(    ( EOS_StrLen( szOprName )  >= USERNAME_LEN )
        || ( EOS_StrLen( szUserName ) >= PASSWORD_LEN )
        || ( EOS_StrLen( szPassword ) >= PASSWORD_LEN )
      )
    {
        MT_ERRLOG(0);
        return G_FAILURE;
    }

    /* 调试用户或超级用户是唯一的, 不允许再添加 */
    if( ucLevel >= CT_AL_SUPER )
    {
        DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebUserAdd() :: "
                 "Add user <%s> 's level %ld is too higher ! "
                 "System only support one debug user and one super user !",
                 szUserName, ucLevel );
        (_VOID)WNM_SendErrString( CLI_USER_HAS_NO_RIGHT );
        return G_FAILURE;
    }

    /* 语种ID的合法性检查 */
    if( ucLan >= ML_GetLangNum() )
    {
        MT_ERRLOG(0);
        return G_FAILURE;
    }

    DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebUserAdd() :: "
             "Operation user <%s> . Add user <%s>, password <%s>, ucLevel <%ld>, ucLan <%ld> ",
             szOprName, szUserName, szPassword, ucLevel, ucLan );

    /* 根据用户名获取用户信息 */
    pstOprUser = CLI_GetUserByName( szOprName );
    if( pstOprUser == G_NULL )

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -