]> glassweightruler.freedombox.rocks Git - Ventoy.git/commitdiff
Add isopwd wimpwd efipwd imgpwd vhdpwd vtoypwd option in password plugin (#898)
authorlongpanda <admin@ventoy.net>
Fri, 14 May 2021 14:27:26 +0000 (22:27 +0800)
committerlongpanda <admin@ventoy.net>
Fri, 14 May 2021 14:27:26 +0000 (22:27 +0800)
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_cmd.c
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_def.h
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_plugin.c

index e4dce2198de4c260cf4c3af0dd05469377f36da0..f5256408f2ddbe4f48811e614524241431ab79d0 100644 (file)
@@ -134,7 +134,7 @@ static const char *g_menu_class[] =
     "vtoyiso", "vtoywim", "vtoyefi", "vtoyimg", "vtoyvhd", "vtoyvtoy"
 };
     
     "vtoyiso", "vtoywim", "vtoyefi", "vtoyimg", "vtoyvhd", "vtoyvtoy"
 };
     
-static const char *g_menu_prefix[] = 
+const char *g_menu_prefix[img_type_max] = 
 {
     "iso", "wim", "efi", "img", "vhd", "vtoy"
 };
 {
     "iso", "wim", "efi", "img", "vhd", "vtoy"
 };
index f7b4f9deabdb3265ff78620a2c20766c3a675101..bb61fbbbfa65ddf9afee06a2af8cae325b0c530c 100644 (file)
@@ -194,12 +194,14 @@ typedef struct ventoy_iso9660_vd
 
 #pragma pack()
 
 
 #pragma pack()
 
-#define img_type_iso  0
-#define img_type_wim  1
-#define img_type_efi  2
-#define img_type_img  3
-#define img_type_vhd  4
-#define img_type_vtoy 5
+#define img_type_start 0
+#define img_type_iso   0
+#define img_type_wim   1
+#define img_type_efi   2
+#define img_type_img   3
+#define img_type_vhd   4
+#define img_type_vtoy  5
+#define img_type_max   6
 
 typedef struct img_info
 {
 
 typedef struct img_info
 {
@@ -282,6 +284,7 @@ extern ventoy_img_chunk_list g_img_chunk_list;
 extern ventoy_img_chunk_list g_wimiso_chunk_list;
 extern char *g_wimiso_path;
 extern char g_arch_mode_suffix[64];
 extern ventoy_img_chunk_list g_wimiso_chunk_list;
 extern char *g_wimiso_path;
 extern char g_arch_mode_suffix[64];
+extern const char *g_menu_prefix[img_type_max];
 
 extern int g_ventoy_debug;
 void ventoy_debug(const char *fmt, ...);
 
 extern int g_ventoy_debug;
 void ventoy_debug(const char *fmt, ...);
index 7069b599be4072353550f4d30b19c3e48419f241..f44a4ea466c4756601639ac42adf459faba07971 100644 (file)
@@ -43,6 +43,7 @@ GRUB_MOD_LICENSE ("GPLv3+");
 char g_arch_mode_suffix[64];
 static char g_iso_disk_name[128];
 static vtoy_password g_boot_pwd;
 char g_arch_mode_suffix[64];
 static char g_iso_disk_name[128];
 static vtoy_password g_boot_pwd;
+static vtoy_password g_file_type_pwd[img_type_max];
 static install_template *g_install_template_head = NULL;
 static dud *g_dud_head = NULL;
 static menu_password *g_pwd_head = NULL;
 static install_template *g_install_template_head = NULL;
 static dud *g_dud_head = NULL;
 static menu_password *g_pwd_head = NULL;
@@ -809,8 +810,26 @@ static int ventoy_plugin_parse_pwdstr(char *pwdstr, vtoy_password *pwd)
     return 0;
 }
 
     return 0;
 }
 
+static int ventoy_plugin_get_pwd_type(const char *pwd)
+{
+    int i;
+    char pwdtype[64];
+
+    for (i = 0; pwd && i < (int)ARRAY_SIZE(g_menu_prefix); i++)
+    {
+        grub_snprintf(pwdtype, sizeof(pwdtype), "%spwd", g_menu_prefix[i]);
+        if (grub_strcmp(pwdtype, pwd) == 0)
+        {
+            return img_type_start + i; 
+        }
+    }
+    
+    return -1;
+}
+
 static int ventoy_plugin_pwd_entry(VTOY_JSON *json, const char *isodisk)
 {
 static int ventoy_plugin_pwd_entry(VTOY_JSON *json, const char *isodisk)
 {
+    int type = -1;
     const char *iso = NULL;
     const char *pwd = NULL;
     VTOY_JSON *pNode = NULL;
     const char *iso = NULL;
     const char *pwd = NULL;
     VTOY_JSON *pNode = NULL;
@@ -844,6 +863,10 @@ static int ventoy_plugin_pwd_entry(VTOY_JSON *json, const char *isodisk)
         {
             ventoy_plugin_parse_pwdstr(pNode->unData.pcStrVal, &g_boot_pwd);
         }
         {
             ventoy_plugin_parse_pwdstr(pNode->unData.pcStrVal, &g_boot_pwd);
         }
+        else if ((type = ventoy_plugin_get_pwd_type(pNode->pcName)) >= 0)
+        {
+            ventoy_plugin_parse_pwdstr(pNode->unData.pcStrVal, g_file_type_pwd + type);
+        }
         else if (pNode->pcName && grub_strcmp("menupwd", pNode->pcName) == 0)
         {
             for (pCNode = pNode->pstChild; pCNode; pCNode = pCNode->pstNext)
         else if (pNode->pcName && grub_strcmp("menupwd", pNode->pcName) == 0)
         {
             for (pCNode = pNode->pstChild; pCNode; pCNode = pCNode->pstNext)
@@ -888,6 +911,7 @@ static int ventoy_plugin_pwd_entry(VTOY_JSON *json, const char *isodisk)
 
 static int ventoy_plugin_pwd_check(VTOY_JSON *json, const char *isodisk)
 {
 
 static int ventoy_plugin_pwd_check(VTOY_JSON *json, const char *isodisk)
 {
+    int type = -1;
     char *pos = NULL;
     const char *iso = NULL;
     const char *pwd = NULL;
     char *pos = NULL;
     const char *iso = NULL;
     const char *pwd = NULL;
@@ -913,6 +937,17 @@ static int ventoy_plugin_pwd_check(VTOY_JSON *json, const char *isodisk)
                 grub_printf("Invalid bootpwd.\n");
             }
         }
                 grub_printf("Invalid bootpwd.\n");
             }
         }
+        else if ((type = ventoy_plugin_get_pwd_type(pNode->pcName)) >= 0)
+        {
+            if (0 == ventoy_plugin_parse_pwdstr(pNode->unData.pcStrVal, NULL))
+            {
+                grub_printf("%s:<%s>\n", pNode->pcName, pNode->unData.pcStrVal);
+            }
+            else
+            {
+                grub_printf("Invalid pwd <%s>\n", pNode->unData.pcStrVal);
+            }
+        }
         else if (pNode->pcName && grub_strcmp("menupwd", pNode->pcName) == 0)
         {
             grub_printf("\n");
         else if (pNode->pcName && grub_strcmp("menupwd", pNode->pcName) == 0)
         {
             grub_printf("\n");
@@ -2475,20 +2510,45 @@ int ventoy_plugin_load_dud(dud *node, const char *isopart)
 
 static const vtoy_password * ventoy_plugin_get_password(const char *isopath)
 {
 
 static const vtoy_password * ventoy_plugin_get_password(const char *isopath)
 {
+    int i;
     int len;
     int len;
+    const char *pos = NULL;
     menu_password *node = NULL;
 
     menu_password *node = NULL;
 
-    if ((!g_pwd_head) || (!isopath))
+    if (!isopath)
     {
         return NULL;
     }
 
     {
         return NULL;
     }
 
-    len = (int)grub_strlen(isopath);    
-    for (node = g_pwd_head; node; node = node->next)
+    if (g_pwd_head)
     {
     {
-        if (node->pathlen == len && ventoy_strncmp(node->isopath, isopath, len) == 0)
+        len = (int)grub_strlen(isopath);    
+        for (node = g_pwd_head; node; node = node->next)
         {
         {
-            return &(node->password);
+            if (node->pathlen == len && ventoy_strncmp(node->isopath, isopath, len) == 0)
+            {
+                return &(node->password);
+            }
+        }
+    }
+
+    while (*isopath)
+    {
+        if (*isopath == '.')
+        {
+            pos = isopath;
+        }
+        isopath++;
+    }
+
+    if (pos)
+    {
+        for (i = 0; i < (int)ARRAY_SIZE(g_menu_prefix); i++)
+        {
+            if (g_file_type_pwd[i].type && 0 == grub_strcasecmp(pos + 1, g_menu_prefix[i]))
+            {
+                return g_file_type_pwd + i;
+            }
         }
     }
 
         }
     }