slurmrestd - Prevent fatal_abort when parsing a non-empty group id

PARSE_FUNC(GROUP_ID) used the return value of
data_convert_type(src, DATA_TYPE_NONE) expecting it to return all possible
data types. However, this function never returns DATA_TYPE_STRING because
it doesn't attempt to convert the data_t to that type. This lead to
PARSE_FUNC(GROUP_ID) believing the data type was DATA_TYPE_NONE causing a
fatal_abort().

This patch makes it so data_convert_type always returns the current type of
the data_t.

Ticket: 23400
Changelog: slurmrestd - Prevent triggering a fatal abort when parsing a
 non-empty group id string. This affects all endpoints with request bodies
 containing openapi_meta_client group field. It also affects the following
 endpoints:
 'GET /slurmdb/v0.0.4*/jobs'
 'POST /slurm/v0.0.4*/job/submit'
 'POST /slurm/v0.0.4*/job/{job_id}'
 'POST /slurm/v0.0.4*/job/allocate'
diff --git a/src/common/data.c b/src/common/data.c
index ef86168..500c4ab 100644
--- a/src/common/data.c
+++ b/src/common/data.c
@@ -1890,37 +1890,29 @@
 
 	switch (match) {
 	case DATA_TYPE_STRING:
-		return _convert_data_string(data) ? DATA_TYPE_NONE :
-						    DATA_TYPE_STRING;
+		(void) _convert_data_string(data);
+		break;
 	case DATA_TYPE_BOOL:
-		return _convert_data_force_bool(data) ? DATA_TYPE_NONE :
-							DATA_TYPE_BOOL;
+		(void) _convert_data_force_bool(data);
+		break;
 	case DATA_TYPE_INT_64:
-		return _convert_data_int(data, true) ? DATA_TYPE_NONE :
-						       DATA_TYPE_INT_64;
+		(void) _convert_data_int(data, true);
+		break;
 	case DATA_TYPE_FLOAT:
-		return _convert_data_float(data) ? DATA_TYPE_NONE :
-						   DATA_TYPE_FLOAT;
+		(void) _convert_data_float(data);
+		break;
 	case DATA_TYPE_NULL:
-		return _convert_data_null(data) ? DATA_TYPE_NONE :
-						  DATA_TYPE_NULL;
+		(void) _convert_data_null(data);
+		break;
 	case DATA_TYPE_NONE:
-		if (!_convert_data_null(data))
-			return DATA_TYPE_NULL;
+		/* If a conversion succeeds skip calling the others */
+		if (!_convert_data_null(data) ||
+		    !_convert_data_int(data, false) ||
+		    !_convert_data_float(data) ||
+		    !_convert_data_int(data, true) || !_convert_data_bool(data))
+			; /* blank on purpose */
 
-		if (!_convert_data_int(data, false))
-			return DATA_TYPE_INT_64;
-
-		if (!_convert_data_float(data))
-			return DATA_TYPE_FLOAT;
-
-		if (!_convert_data_int(data, true))
-			return DATA_TYPE_INT_64;
-
-		if (!_convert_data_bool(data))
-			return DATA_TYPE_BOOL;
-
-		return DATA_TYPE_NONE;
+		break;
 	case DATA_TYPE_DICT:
 		if (data->type == TYPE_DICT)
 			return DATA_TYPE_DICT;
@@ -1929,7 +1921,7 @@
 			return DATA_TYPE_DICT;
 
 		/* data_parser should be used for this conversion instead. */
-		return DATA_TYPE_NONE;
+		break;
 	case DATA_TYPE_LIST:
 		if (data->type == TYPE_LIST)
 			return DATA_TYPE_LIST;
@@ -1938,12 +1930,14 @@
 			return DATA_TYPE_LIST;
 
 		/* data_parser should be used for this conversion instead. */
-		return DATA_TYPE_NONE;
+		break;
 	case DATA_TYPE_MAX:
 		fatal_abort("%s: unexpected data type", __func__);
+	default:
+		fatal_abort("%s: invalid conversion requested", __func__);
 	}
 
-	fatal_abort("%s: invalid conversion requested", __func__);
+	return data_get_type(data);
 }
 
 static data_for_each_cmd_t _convert_list_entry(data_t *data, void *arg)
diff --git a/src/common/data.h b/src/common/data.h
index 2377686..eb4cfb6 100644
--- a/src/common/data.h
+++ b/src/common/data.h
@@ -282,7 +282,7 @@
  * IN data structure to try to type and convert
  * IN match try to detect this type only
  * 	or DATA_TYPE_NONE to give best guess as to data type
- * RET new data type or DATA_TYPE_NONE on no change
+ * RET (new or unchanged) data type of data
  */
 extern data_type_t data_convert_type(data_t *data, const data_type_t match);