?? cli_user.c
字號:
/************************************************************************
Copyright 200X - 200X+1.
filename : CLI_User.c
description : 本文件實現命令行操作用戶的管理,提供用戶的增刪、修改、保存與查詢
author : Woodhead
modification : Woodhead create 2004-12-07
************************************************************************/
#include "Ros.h"
#include "Cli_Private.inc"
#include "Cli_User.inc"
#include "ML.h"
#include "Sys_Ml.h"
#include "Cli_MlPriv.h"
#include "Config\Cli_ConfigGlbVar.h"
#include "cm_sock.h"
#if CLI_DBASE_SUPPORT
#include "Rdb.h"
#endif
/* 終端用戶表 (規定第一個表即m_sUserTable[0]用于存儲調試用戶信息)*/
STermUserItem m_sUserTable[MAX_USER_NUM];
#if CLI_DBASE_SUPPORT
RDB_HANDLE m_ulCliUserHandle = RDB_INVALID_HANDLE;
RDB_TABLE_GID m_usUserTable = RDB_INVALID_TABLE_GID;
RDB_TABLE_GID m_usHostNameTable = RDB_INVALID_TABLE_GID;
RDB_TABLE_GID m_usClientACLTable = RDB_INVALID_TABLE_GID;
#endif /* CLI_DBASE_SUPPORT */
/* 用戶在數據庫的表創建*/
_U32 CLI_RDB_DataInit(_VOID)
{
#if CLI_DBASE_SUPPORT
_U32 ulRet = G_SUCCESS;
_S8 szTbCreatStr[] =
RDB_DIRECT_TABLE(Cliusers, yes, 16)
"( valid bool 1,"
" usertype u8 1, "
" userstat u8 1, "
" language u8 1, "
" username string 16,"
" password u8 16,"
" pswdtime u32 1, "
" termid u32 1, "
" level u32 1, "
" validflag u8 1, "
" reserved u8 3 )";
_S8 szHostTableStr[] =
RDB_DIRECT_TABLE(CliHostName, yes, 1)
"( valid bool 1, "
" hostname string 35)";
_S8 szACLTableStr[] =
RDB_DIRECT_TABLE(CliTelnetACL, yes, 10)
"( valid bool 1,"
" ucReserv u8 3,"
" ulIpAddr u32 1,"
" ulIpMask u32 1,"
" ulState u32 1)";
/* 是否包含RDB模塊 */
if( G_YES != g_ul_INCLUDE_MODULE_CLI_RDB )
{
return G_SUCCESS;
}
/* 函數指針是否注冊 */
if( G_NULL == g_pfn_CFG_CLI_RDB_TableCreate )
{
MT_ERRLOG(0);
return G_FAILURE;
}
ulRet = g_pfn_CFG_CLI_RDB_TableCreate((const _S8 *)szTbCreatStr, &m_usUserTable, sizeof(STermUserItem));
ulRet += g_pfn_CFG_CLI_RDB_TableCreate((const _S8 *)szACLTableStr, &m_usClientACLTable, sizeof(ST_ACL));
ulRet += g_pfn_CFG_CLI_RDB_TableCreate((const _S8 *)szHostTableStr, &m_usHostNameTable, sizeof(HostName_S));
return ulRet;
#else
return G_SUCCESS;
#endif
}
/********************************************************************/
/* 函數名稱 :CLI_UserWrite */
/* 函數功能 :存儲新創建的用戶鏈到數據庫 */
/* 輸入參數 :無 */
/* 輸出參數 :無 */
/* 返回值 :成功、失敗 */
/* 調用函數 : */
/* 被調函數 : */
/********************************************************************/
#if CLI_DBASE_SUPPORT
_U32 CLI_UserWrite()
{
_U32 i;
_U32 ulRet = G_SUCCESS;
/* 是否包含RDB模塊 */
if( G_YES != g_ul_INCLUDE_MODULE_CLI_RDB )
{
return G_SUCCESS;
}
/* 函數指針是否注冊 */
if( ( G_NULL == g_pfn_CFG_CLI_RDB_TableClear )
|| ( G_NULL == g_pfn_CFG_CLI_RDB_RecordDirectInsert )
)
{
MT_ERRLOG(0);
return G_FAILURE;
}
if (g_pfn_CFG_CLI_RDB_TableClear(m_ulCliUserHandle, m_usUserTable) != G_SUCCESS)
{
MT_ERRLOG(0);
return G_FAILURE;
}
for (i = 0; i < MAX_USER_NUM; i++)
{
if (m_sUserTable[i].ucUserType == USER_NOT_USED)
{
continue;
}
if (RDB_SUCCESS != g_pfn_CFG_CLI_RDB_RecordDirectInsert(m_ulCliUserHandle, m_usUserTable, i,
&m_sUserTable[i]))
{
MT_ERRLOG(0);
ulRet = G_FAILURE;
}
}
return ulRet;
}
#endif
/********************************************************************/
/* 函數名稱 :CLI_UserRead */
/* 函數功能 :從數據庫中讀取用戶列表 */
/* 輸入參數 :無 */
/* 輸出參數 :無 */
/* 返回值 :成功、失敗 */
/* 調用函數 : */
/* 被調函數 : */
/********************************************************************/
#if CLI_DBASE_SUPPORT
_U32 CLI_UserRead()
{
_U32 i;
/* 是否包含RDB模塊 */
if( G_YES != g_ul_INCLUDE_MODULE_CLI_RDB )
{
return G_SUCCESS;
}
/* 函數指針是否注冊 */
if( G_NULL == g_pfn_CFG_CLI_RDB_RecordDirectQuery )
{
MT_ERRLOG(0);
return G_FAILURE;
}
for (i = 0; i < MAX_USER_NUM; i++)
{
if (RDB_SUCCESS == g_pfn_CFG_CLI_RDB_RecordDirectQuery(m_ulCliUserHandle, m_usUserTable, i,
G_FALSE, &m_sUserTable[i]))
{
m_sUserTable[i].ucUserStatus = TERM_SLEEPING;
m_sUserTable[i].ulTermId = 0;
}
else if(i < 2) /* 如果兩個固定用戶恢復失敗,則認為整個恢復失敗 */
{
return G_FAILURE;
}
}
/* 判斷調試用戶恢復是否正確,如果調試用戶名和密碼被改寫,則任務數據庫有誤 */
if (G_SUCCESS != CLI_CheckUserPassword(g_csz_CFG_CLI_DBG_USER_NAME, g_csz_CFG_CLI_DBG_USER_PASSWORD))
{
MT_ERRLOG(0);
return G_FAILURE;
}
return G_SUCCESS;
}
#endif
/********************************************************************/
/* 函數名稱 :CLI_UserTableInit */
/* 函數功能 :初始化終端用戶表 */
/* 輸入參數 :無 */
/* 輸出參數 :無 */
/* 返回值 :成功、失敗 */
/* 調用函數 : */
/* 被調函數 : */
/********************************************************************/
_U32 CLI_UserTableInit(_VOID)
{
int i;
EOS_MemSet(m_sUserTable, 0, sizeof(m_sUserTable));
for (i = 0; i< MAX_USER_NUM; i++)
{
CLI_UserInfoCfg(&m_sUserTable[i],
"", "", 0, USER_NOT_USED, ML_GetDefaultLang());
}
#if CLI_DBASE_SUPPORT
/* 是否包含RDB模塊 */
if( G_YES == g_ul_INCLUDE_MODULE_CLI_RDB )
{
/* 函數指針是否注冊 */
if( G_NULL == g_pfn_CFG_CLI_RDB_Open )
{
MT_ERRLOG(0);
return G_FAILURE;
}
if (G_SUCCESS != g_pfn_CFG_CLI_RDB_Open(&m_ulCliUserHandle))
return G_FAILURE;
}
#endif /* CLI_DBASE_SUPPORT */
return G_SUCCESS;
}
/********************************************************************/
/* 函數名稱 :CLI_Encrypt */
/* 函數功能 :密碼加密 */
/* 輸入參數 :szSrc :原密碼 */
/* ucType :類型澹(0:加密 1:解密) */
/* 輸出參數 :szDst :加密結果 */
/* 返回值 :成功、失敗 */
/* 調用函數 : */
/* 被調函數 : */
/********************************************************************/
_U32 CLI_Encrypt(_S8 szDst[PASSWORD_LEN], const _S8 *szSrc, _U8 ucType)
{
_U8 ucMod[2] = {123, 6};
_S32 lStrlen, i;
CLI_ASSURE_OR_FAIL(szSrc != NULL && szDst != NULL);
EOS_MemSet(szDst, 0, PASSWORD_LEN);
if (ucType == 1)
{
ucMod[1] = (_U8)(256 - ucMod[1]);
ucMod[0] = (_U8)(256 - ucMod[0]);
}
if (EOS_StrLen(szSrc) == 0)
{
*szDst = 0;
return G_SUCCESS;
}
lStrlen = (_S32)EOS_StrLen(szSrc) - 1;
for (i = 0; i <= (_S32)(lStrlen - i); i++)
{
if (i == lStrlen - i)
{
*(szDst + i) = (_S8)(*(szSrc + i) + ucMod[i%2]);
}
else
{
*(szDst + i) = (_S8)(*(szSrc + lStrlen - i) + ucMod[i%2]);
*(szDst + lStrlen - i) = (_S8)(*(szSrc + i) + ucMod[i%2]);
}
}
*(szDst + lStrlen + 1) = '\0';
return G_SUCCESS;
}
/*********************************************************************/
/* 函數名稱 : CLI_UserInfoCfg() */
/* 函數功能 : 用戶數據配置 */
/* 輸入參數 : */
/* 輸出參數 : */
/* 創建者 : */
/* 修改記錄 : */
/*********************************************************************/
_U32 CLI_UserInfoCfg(PTermUserItem pUserItem, const _S8 *szName,
const _S8 *szPassowrd, _U8 ucLevel, _U8 ucUserType, _U8 ucLan)
{
ST_TIME sTime;
/* 語種ID的合法性檢查 */
if( ucLan >= ML_GetLangNum() )
{
MT_ERRLOG(0);
return G_FAILURE;
}
if (EOS_GetTime(&sTime) != G_SUCCESS)
{
sTime.ucYear = 0x03;
sTime.ucMonth = 0x05;
sTime.ucDay = 0x01;
}
EOS_StrCpy(pUserItem->szUserName, szName);
if ((CLI_Encrypt(pUserItem->szPassword, szPassowrd, 0)) != G_SUCCESS)
{
return G_FAILURE;
}
_AffirmStrBeLower(pUserItem->szUserName);
pUserItem->ulLevel = (_U32)ucLevel;
pUserItem->ucInvadedFlag = EN_USER_NOT_INVADED;
pUserItem->ucUserType = ucUserType;
pUserItem->ulTermId = 0;
pUserItem->ucUserStatus = TERM_SLEEPING;
pUserItem->ulPwdRenewTime = USER_MAKE_DAY(sTime.ucYear, sTime.ucMonth, sTime.ucDay);
pUserItem->ucLanguage = ucLan;
if (ucUserType != USER_NOT_USED)
pUserItem->ucValid = G_TRUE;
else
pUserItem->ucValid = G_FALSE;
return G_SUCCESS;
}
/********************************************************************/
/* 函數名稱 :CLI_CreatBasicUser */
/* 函數功能 :建立基本終端用戶 */
/* 輸入參數 :無 */
/* 輸出參數 :無 */
/* 返回值 :成功、失敗 */
/* 調用函數 : */
/* 被調函數 : */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -