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

📄 login.c

📁 基于嵌入式linux的命令行接口
💻 C
字号:
/*******************************************************************************
文件名:login.c

版权所有:武汉易捷通信有限公司

版本:V1.0

作者:吴友山

描述:用户登陆。

日期:
*******************************************************************************/
#include <stdio.h>
#include <string.h>

#include "login.h"
#include "funconf.h"
#include "msgprint.h"

#include "config.h"

INT8 userLogin[10]; /*保存登陆的用户名称*/
BYTE userLoginType = 0;

extern INT8 s[MAXLENTH];

#define LOGIN_MAX_TIMES 8 /*最多登陆的次数。*/

#define USER_ADMINISTRATOR 0x9
#define USER_SUPER 0xa
#define USER_ERROR 0xff

static UINT8 loginChkName(void);
static UINT8 loginChkPwd(UINT8 flag);

/*******************************************************************************
函数:loginChkName
功能:检查输入的用户名是否正确。
参数:
    输入--
    输出--
返回:USER_ADMINISTRATOR:管理员。
                  USER_SUPER:超级用户。
                  USER_ERROR:既不是管理员又不是超级用户。
描述:
*******************************************************************************/
static UINT8 loginChkName(void)
{
    	INT8 username[10];

    	/*保存登陆的用户名称*/
    	strncpy(userLogin, s, 10);

    	//EERead(ADDR_USER_INFORMATION,(UINT8*)username, 10);

    	/*管理员*/
    	if(strcmp(s, username) == 0)
    	{
        	return USER_ADMINISTRATOR;
    	}

    	/*超级用户*/
    	if(strncmp(s, SuperUsrName, strlen(SuperUsrName)) == 0 )
    	{
        	return USER_SUPER;
    	}

    	return USER_ERROR;
}

/*******************************************************************************
函数:loginChkPwd
功能:检查输入的密码是否正确。
参数:
    输入--flag=USER_ADMINISTRATOR:管理员用户。
                            USER_SUPER:超级用户。
    输出--
返回:如果密码正确返回OK
   如果不正确返回ERROR
描述:
*******************************************************************************/
static BOOL loginChkPwd(UINT8 flag)
{
    	UINT8 password[10];

    	//EERead(ADDR_USER_INFORMATION+10,(UINT8*)password, 10);

    	if (flag == USER_ADMINISTRATOR)
    	{
        	if (strcmp(s, (INT8*)password) == 0)
            		return OK;
        	else 
            		return ERROR;
    	}

    	if (flag == USER_SUPER)
    	{
        	if(strncmp(s, SuperUsrPw, strlen(SuperUsrPw)) == 0)
            		return OK;
        	else
            		return ERROR;
    	}

    	return ERROR;
}

/*******************************************************************************
函数:loginMsg
功能:开机画面。
参数:
    输入--
    输出--
返回:
描述:
*******************************************************************************/
void loginMsg(void)
{
    	char r_char;
    	BYTE serialTime;
    	BYTE username[10];
    	BYTE password[10];

    	while ( 1 )
    	{
        	printf("\n\x1b\x5b\x32\x4a");

        	/*打印开机画面*/
        	charPrint( 79, '#' );
        	printf( "\n#" );
        	charPrint( 21, ' ' );
        	printf("Welcome to Edgin Access Network!");
        	charPrint( 26, ' ' );
        	printf("#\n#");
        	charPrint( 12, ' ' );
        	printf("Press Enter to login or Press 'H' to get the password");
        	charPrint( 12, ' ' );
        	printf("#\n");
        	charPrint( 29, '#' );
        	printf(" <  Edgin Product > ");
        	charPrint( 30, '#' );
        	printf("\n");

        	userLoginType = 0;
        	userLogin[0] = 0;
        	while ( 1 )
        	{
            		r_char = getchar( );	
				
            		/*用户输入回车则提示登陆,输入‘h’或‘H’
            			则得到管理用户的信息*/
            		if ( r_char == '\r' )
            		{
                		return;
            		}
            		else if (r_char == 'h' || r_char == 'H')
            		{
                		break;
            		}
            		else if (r_char == 26)/*Ctrl-Z进入到login的状态*/
            		{
                		userLoginType = 1;
                		return;
            		}
        	}
        
        	/*提示管理用户的初始密码*/
        	serialTime = 0;
        	while(serialTime<3)
        	{
            		printf("\nPlease input the sn:");
            		inputStr(INPUT_OTHER, 0);
			
            		serialTime++;
            		if (strncmp(s, SuperUsrName, 9)==0)
            		{
                		//EERead(ADDR_USER_INFORMATION, username, 10);
                		//EERead(ADDR_USER_INFORMATION+10, password, 10);
                		if (username[0] == 0xff)
                		{
							username[0] = 0;
                		}
                		if (password[0] == 0xff) 
                		{
							password[0] = 0;
                		}
                
                		printf("\nusername: %s", username);
                		printf("\npassword: %s", password);
                		return;
            		}
        	}
    	}
}

/*******************************************************************************
函数:login
功能:用户登陆验证。如用户名跟密码。
参数:
    输入--
    输出--
返回:用户登陆错误的次数,如果返回值小于8表示登陆成
                  功,等于8则表示登陆失败。
描述:1、出厂时密码是全0xff,字符串长度为0。
*******************************************************************************/
UINT8 login(void)
{
    	UINT8 strnumber;
    	UINT8 login_times;/*登陆的次数。*/
    	UINT8 user_right;/*登陆的用户类型。*/

    	INT8 password[10];
    
    	login_times = 0;

    	//如果密码为空则直接进入
    	if (userLoginType == 0)
    	{
        	//EERead(ADDR_USER_INFORMATION+10,(UINT8*)password, 10);
			strcpy(password,"epon");
			
        	if ((password[0]==0xff)||(strlen(password)==0))
        	{
            		return 1;
        	}
    	}
    
    	while(login_times < LOGIN_MAX_TIMES)
    	{
        	/*检测用户名*/
        	printf("\nlogin:");
        	strnumber = inputStr(LOGIN_FLAG, 0);

        	if(strnumber <= LOGINCMP_LEN)
        	{
            		user_right = loginChkName();

            		if(user_right != USER_ERROR)
            		{
                		/*检查密码*/
                		printf("\npassword:");
                		strnumber=inputStr(PASSWORD_FLAG, 0);

                		if(strnumber <= LOGINCMP_LEN)
                		{                   
                    			if(loginChkPwd(user_right) == OK)
                        			break;
                		}
            		}
        	}

        	login_times++;
    	}

    	return login_times;
}

⌨️ 快捷键说明

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