return (key != GRUB_TERM_ESC);
}
+static int ventoy_get_password(char buf[], unsigned buf_size)
+{
+ const char *env = NULL;
+
+ env = grub_env_get("VTOY_SHOW_PASSWORD_ASTERISK");
+ if (env && env[0] == '0' && env[1] == 0)
+ {
+ return grub_password_get(buf, buf_size);
+ }
+ else
+ {
+ return ventoy_password_get(buf, buf_size);
+ }
+}
+
int ventoy_check_password(const vtoy_password *pwd, int retry)
{
int offset;
if (pwd->type == VTOY_PASSWORD_TXT)
{
- ventoy_password_get(input, 128);
+ ventoy_get_password(input, 128);
if (grub_strcmp(pwd->text, input) == 0)
{
return 0;
}
else if (pwd->type == VTOY_PASSWORD_MD5)
{
- ventoy_password_get(input, 128);
+ ventoy_get_password(input, 128);
grub_crypto_hash(GRUB_MD_MD5, md5, input, grub_strlen(input));
if (grub_memcmp(pwd->md5, md5, 16) == 0)
{
else if (pwd->type == VTOY_PASSWORD_SALT_MD5)
{
offset = (int)grub_snprintf(input, 128, "%s", pwd->salt);
- ventoy_password_get(input + offset, 128);
+ ventoy_get_password(input + offset, 128);
grub_crypto_hash(GRUB_MD_MD5, md5, input, grub_strlen(input));
if (grub_memcmp(pwd->md5, md5, 16) == 0)
{
memset(data, 0, sizeof(data_control));
+ data->password_asterisk = 1;
data->secondary_menu = 1;
data->filter_dot_underscore = 1;
data->max_search_level = -1;
data1->filter_vtoy != data2->filter_vtoy ||
data1->win11_bypass_check != data2->win11_bypass_check ||
data1->linux_remount != data2->linux_remount ||
+ data1->password_asterisk != data2->password_asterisk ||
data1->secondary_menu != data2->secondary_menu ||
data1->menu_timeout != data2->menu_timeout ||
data1->secondary_menu_timeout != data2->secondary_menu_timeout)
VTOY_JSON_FMT_CTRL_INT(L2, "VTOY_WIN11_BYPASS_CHECK", win11_bypass_check);
VTOY_JSON_FMT_CTRL_INT(L2, "VTOY_LINUX_REMOUNT", linux_remount);
VTOY_JSON_FMT_CTRL_INT(L2, "VTOY_SECONDARY_BOOT_MENU", secondary_menu);
+ VTOY_JSON_FMT_CTRL_INT(L2, "VTOY_SHOW_PASSWORD_ASTERISK", password_asterisk);
VTOY_JSON_FMT_CTRL_INT(L2, "VTOY_MENU_TIMEOUT", menu_timeout);
VTOY_JSON_FMT_CTRL_INT(L2, "VTOY_SECONDARY_TIMEOUT", secondary_menu_timeout);
VTOY_JSON_FMT_SINT("win11_bypass_check", ctrl->win11_bypass_check);
VTOY_JSON_FMT_SINT("linux_remount", ctrl->linux_remount);
VTOY_JSON_FMT_SINT("secondary_menu", ctrl->secondary_menu);
+ VTOY_JSON_FMT_SINT("password_asterisk", ctrl->password_asterisk);
VTOY_JSON_FMT_SINT("menu_timeout", ctrl->menu_timeout);
VTOY_JSON_FMT_SINT("secondary_menu_timeout", ctrl->secondary_menu_timeout);
VTOY_JSON_FMT_STRN("default_kbd_layout", ctrl->default_kbd_layout);
VTOY_JSON_INT("win11_bypass_check", ctrl->win11_bypass_check);
VTOY_JSON_INT("linux_remount", ctrl->linux_remount);
VTOY_JSON_INT("secondary_menu", ctrl->secondary_menu);
+ VTOY_JSON_INT("password_asterisk", ctrl->password_asterisk);
VTOY_JSON_INT("menu_timeout", ctrl->menu_timeout);
VTOY_JSON_INT("secondary_menu_timeout", ctrl->secondary_menu_timeout);
if (strcmp(child->pcName, "VTOY_DEFAULT_MENU_MODE") == 0)
{
- CONTROL_PARSE_INT(child, data->default_menu_mode);
+ CONTROL_PARSE_INT_DEF_0(child, data->default_menu_mode);
}
else if (strcmp(child->pcName, "VTOY_WIN11_BYPASS_CHECK") == 0)
{
- CONTROL_PARSE_INT(child, data->win11_bypass_check);
+ CONTROL_PARSE_INT_DEF_0(child, data->win11_bypass_check);
}
else if (strcmp(child->pcName, "VTOY_LINUX_REMOUNT") == 0)
{
- CONTROL_PARSE_INT(child, data->linux_remount);
+ CONTROL_PARSE_INT_DEF_0(child, data->linux_remount);
}
else if (strcmp(child->pcName, "VTOY_SECONDARY_BOOT_MENU") == 0)
{
- CONTROL_PARSE_INT(child, data->secondary_menu);
+ CONTROL_PARSE_INT_DEF_1(child, data->secondary_menu);
+ }
+ else if (strcmp(child->pcName, "VTOY_SHOW_PASSWORD_ASTERISK") == 0)
+ {
+ CONTROL_PARSE_INT_DEF_1(child, data->password_asterisk);
}
else if (strcmp(child->pcName, "VTOY_TREE_VIEW_MENU_STYLE") == 0)
{
- CONTROL_PARSE_INT(child, data->treeview_style);
+ CONTROL_PARSE_INT_DEF_0(child, data->treeview_style);
}
else if (strcmp(child->pcName, "VTOY_FILT_DOT_UNDERSCORE_FILE") == 0)
{
- CONTROL_PARSE_INT(child, data->filter_dot_underscore);
+ CONTROL_PARSE_INT_DEF_1(child, data->filter_dot_underscore);
}
else if (strcmp(child->pcName, "VTOY_SORT_CASE_SENSITIVE") == 0)
{
- CONTROL_PARSE_INT(child, data->sort_casesensitive);
+ CONTROL_PARSE_INT_DEF_0(child, data->sort_casesensitive);
}
else if (strcmp(child->pcName, "VTOY_MAX_SEARCH_LEVEL") == 0)
{
}
else if (strcmp(child->pcName, "VTOY_VHD_NO_WARNING") == 0)
{
- CONTROL_PARSE_INT(child, data->vhd_no_warning);
+ CONTROL_PARSE_INT_DEF_0(child, data->vhd_no_warning);
}
else if (strcmp(child->pcName, "VTOY_FILE_FLT_ISO") == 0)
{
- CONTROL_PARSE_INT(child, data->filter_iso);
+ CONTROL_PARSE_INT_DEF_0(child, data->filter_iso);
}
else if (strcmp(child->pcName, "VTOY_FILE_FLT_IMG") == 0)
{
- CONTROL_PARSE_INT(child, data->filter_img);
+ CONTROL_PARSE_INT_DEF_0(child, data->filter_img);
}
else if (strcmp(child->pcName, "VTOY_FILE_FLT_EFI") == 0)
{
- CONTROL_PARSE_INT(child, data->filter_efi);
+ CONTROL_PARSE_INT_DEF_0(child, data->filter_efi);
}
else if (strcmp(child->pcName, "VTOY_FILE_FLT_WIM") == 0)
{
- CONTROL_PARSE_INT(child, data->filter_wim);
+ CONTROL_PARSE_INT_DEF_0(child, data->filter_wim);
}
else if (strcmp(child->pcName, "VTOY_FILE_FLT_VHD") == 0)
{
- CONTROL_PARSE_INT(child, data->filter_vhd);
+ CONTROL_PARSE_INT_DEF_0(child, data->filter_vhd);
}
else if (strcmp(child->pcName, "VTOY_FILE_FLT_VTOY") == 0)
{
- CONTROL_PARSE_INT(child, data->filter_vtoy);
+ CONTROL_PARSE_INT_DEF_0(child, data->filter_vtoy);
}
}
</div><!-- /.box-body -->\r
</div><!-- /.box -->\r
\r
+ \r
+ <div class="box box-primary box-solid">\r
+ <div class="box-header with-border">\r
+ <h3 class="box-title" style="font-size: 14px;font-weight: bold;">VTOY_SHOW_PASSWORD_ASTERISK\r
+ <span id="id_span_desc_cn"> —— 输入密码时显示星号</span></h3>\r
+ <div class="box-tools pull-right">\r
+ <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>\r
+ </div><!-- /.box-tools -->\r
+ </div><!-- /.box-header -->\r
+ <div class="box-body no-padding">\r
+ <table class="table table-bordered no-padding"> \r
+ <tr style="font-weight:bold;">\r
+ <td class="td_ctrl_col" id="td_title_setting">选项设置</td>\r
+ <td>\r
+ <label class="radio-inline">\r
+ <input type="radio" id="id_ctrl_asterisk_radio0" name="id_ctrl_asterisk_radio" data-type="0" value="0"> <span style="font-weight:bold;">0</span>\r
+ </label> \r
+ <label class="radio-inline">\r
+ <input type="radio" id="id_ctrl_asterisk_radio1" name="id_ctrl_asterisk_radio" data-type="1" value="1"> <span style="font-weight:bold;">1</span>\r
+ </label>\r
+ </td>\r
+ </tr>\r
+ <tr id="tr_title_desc_cn">\r
+ <td class="td_ctrl_col" id="td_title_desc">选项说明</td>\r
+ <td>输入密码时是否显示星号\r
+ <code style="font-weight: bold;">0</code> 不显示 \r
+ <code style="font-weight: bold;">1</code> 显示\r
+ </td>\r
+ </tr>\r
+ <tr id="tr_title_desc_en">\r
+ <td class="td_ctrl_col" id="td_title_desc">Option Description</td>\r
+ <td>\r
+ Display asterisk when typing password\r
+ <code style="font-weight: bold;">0</code> Don't display \r
+ <code style="font-weight: bold;">1</code> Display\r
+ </td>\r
+ </tr>\r
+ </table>\r
+ </div><!-- /.box-body -->\r
+ </div><!-- /.box -->\r
+ \r
+ \r
+ \r
<div class="box box-primary box-solid">\r
<div class="box-header with-border">\r
<h3 class="box-title" style="font-size: 14px;font-weight: bold;">VTOY_SECONDARY_TIMEOUT\r
data.win11_bypass_check = parseInt($('input:radio[name=id_ctrl_bypass_win11_radio]:checked').val());\r
data.linux_remount = parseInt($('input:radio[name=id_ctrl_linux_remount_radio]:checked').val());\r
data.secondary_menu = parseInt($('input:radio[name=id_ctrl_secondary_radio]:checked').val());\r
+ data.password_asterisk = parseInt($('input:radio[name=id_ctrl_asterisk_radio]:checked').val());\r
data.default_search_root = $('input:text[id=id_ctrl_text_search_root]').val();\r
data.menu_timeout = parseInt($('input:text[id=id_ctrl_text_timeout]').val());\r
data.secondary_menu_timeout = parseInt($('input:text[id=id_ctrl_text_secondary_timeout]').val());\r
$('input:radio[name=id_ctrl_bypass_win11_radio]')[data.win11_bypass_check].checked = true;\r
$('input:radio[name=id_ctrl_linux_remount_radio]')[data.linux_remount].checked = true;\r
$('input:radio[name=id_ctrl_secondary_radio]')[data.secondary_menu].checked = true;\r
+ $('input:radio[name=id_ctrl_asterisk_radio]')[data.password_asterisk].checked = true;\r
\r
//VTOY_DEFAULT_SEARCH_ROOT\r
$('input:text[id=id_ctrl_text_search_root]').val(data.default_search_root);\r
win11_bypass_check: data.win11_bypass_check,\r
linux_remount:data.linux_remount,\r
secondary_menu:data.secondary_menu,\r
+ password_asterisk:data.password_asterisk,\r
default_search_root: data.default_search_root,\r
menu_timeout: data.menu_timeout,\r
secondary_menu_timeout: data.secondary_menu_timeout,\r