RTthread的控制台也就是FinSH或者叫msh是可以设置密码的
需要先在rtconfig.h里打开FINSH_USING_AUTH
然后再finsh_thread_entry这个函数里判断密码是否正确:
处理密码这段代码如下:
if (rt_strlen(finsh_get_password()) == 0)
{
if (finsh_set_password(FINSH_DEFAULT_PASSWORD) != RT_EOK)
{
rt_kprintf("Finsh password set failed.\n");
}
}
先通过finsh_get_password获取密码,如果没有密码就用默认密码,默认密码是"rtthread"
然后启动后可以通过控制台调用 finsh_set_password 重新设置密码。
在finsh_wait_auth() 函数里,会先让你输入密码,把密码和内部存储的密码核对,如果一致才能进入msh
while (1)
{
rt_kprintf("Password for login: ");
while (!input_finish)
{
while (1)
{
/* read one character from device */
ch = finsh_getchar();
if (ch < 0)
{
continue;
}
if (ch >= ' ' && ch <= '~' && cur_pos < FINSH_PASSWORD_MAX)
{
/* change the printable characters to '*' */
rt_kprintf("*");
password[cur_pos++] = ch;
}
else if (ch == '\b' && cur_pos > 0)
{
/* backspace */
cur_pos--;
password[cur_pos] = '\0';
rt_kprintf("\b \b");
}
else if (ch == '\r' || ch == '\n')
{
rt_kprintf("\n");
input_finish = RT_TRUE;
break;
}
}
}
if (!rt_strncmp(shell->password, password, FINSH_PASSWORD_MAX)) return;
else
{
/* authentication failed, delay 2S for retry */
rt_thread_delay(2 * RT_TICK_PER_SECOND);
rt_kprintf("Sorry, try again.\n");
cur_pos = 0;
input_finish = RT_FALSE;
rt_memset(password, '\0', FINSH_PASSWORD_MAX);
}
}
如果密码不正确就一直让你重试,否则不能进入msh