summaryrefslogtreecommitdiffstats
path: root/src/rest.c
diff options
context:
space:
mode:
authorJavier Sánchez Parra <jsanchez@soleta.eu>2021-02-08 09:41:51 +0100
committerOpenGnSys Support Team <soporte-og@soleta.eu>2021-02-08 22:38:25 +0100
commit6a7a846e6e075628a8b4afbe3cd0df8a570a0126 (patch)
tree35dad09a59ba533f67feb4d130e83ba1ed4d8d5b /src/rest.c
parent0e4857a5389dfe919b18cb872f0b1d0948b4df52 (diff)
#1019 Fix setup legacy string parser
UMA reports that the setup command (in queue mode) does not work. WebConsole stores queued commands in the database using the deprecated SocketHidra legacy string format and ogServer parses them with sscanf(). The setup command has a new field "ttp" since commit 0dd3edd, however, the ogServer legacy parser was not updated to use this new field. This patch adds legacy setup support to work with GPT tables. Add new field table type to legacy setup that expects a string with "MSDOS" or "GPT".
Diffstat (limited to 'src/rest.c')
-rw-r--r--src/rest.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/rest.c b/src/rest.c
index 7735021..6592586 100644
--- a/src/rest.c
+++ b/src/rest.c
@@ -2374,19 +2374,22 @@ static int og_cmd_legacy_image_restore(const char *input, struct og_cmd *cmd)
return 0;
}
+#define OG_PARTITION_TABLE_TYPE_MAXLEN 5
+
static int og_cmd_legacy_setup(const char *input, struct og_cmd *cmd)
{
json_t *root, *disk, *cache, *cache_size, *partition_setup, *object;
+ char part_table_type_str[OG_PARTITION_TABLE_TYPE_MAXLEN + 1];
struct og_legacy_partition part_cfg[OG_PARTITION_MAX] = {};
+ json_t *part_table_type, *part, *code, *fs, *size, *format;
char cache_size_str [OG_DB_INT_MAXLEN + 1];
char disk_str [OG_DB_SMALLINT_MAXLEN + 1];
- json_t *part, *code, *fs, *size, *format;
unsigned int partition_len = 0;
const char *in_ptr;
char cache_str[2];
- if (sscanf(input, "dsk=%s\rcfg=dis=%*[^*]*che=%[^*]*tch=%[^!]!",
- disk_str, cache_str, cache_size_str) != 3)
+ if (sscanf(input, "ttp=%s\rdsk=%s\rcfg=dis=%*[^*]*che=%[^*]*tch=%[^!]!",
+ part_table_type_str, disk_str, cache_str, cache_size_str) != 4)
return -1;
in_ptr = strstr(input, "!") + 1;
@@ -2407,6 +2410,7 @@ static int og_cmd_legacy_setup(const char *input, struct og_cmd *cmd)
if (!root)
return -1;
+ part_table_type = json_string(part_table_type_str);
cache_size = json_string(cache_size_str);
cache = json_string(cache_str);
partition_setup = json_array();
@@ -2436,6 +2440,7 @@ static int og_cmd_legacy_setup(const char *input, struct og_cmd *cmd)
json_object_set_new(root, "partition_setup", partition_setup);
json_object_set_new(root, "cache_size", cache_size);
+ json_object_set_new(root, "type", part_table_type);
json_object_set_new(root, "cache", cache);
json_object_set_new(root, "disk", disk);