return rc;
}
+static char *global_params[] = {
+ "numa_range",
+ "max_interfaces",
+ "max_intf",
+ "discovery",
+ "drop_asym_route",
+ "retry_count",
+ "transaction_timeout",
+ "health_sensitivity",
+ "recovery_interval",
+ "router_sensitivity",
+ "lnd_timeout",
+ "response_tracking",
+ "recovery_limit",
+ "max_recovery_ping_interval"
+};
+
+static bool key_is_global_param(const char *key)
+{
+ int i;
+
+ for (i = 0; i < sizeof(global_params)/sizeof(global_params[0]); i++) {
+ if (!strcmp(key, global_params[i]))
+ return true;
+ }
+ return false;
+}
+
static int jt_import(int argc, char **argv)
{
char *file = NULL;
struct cYAML *err_rc = NULL;
long int value;
char *key;
+ char errmsg[LNET_MAX_STR_LEN];
key = strdup((char *)event.data.scalar.value);
+ if (!key_is_global_param(key)) {
+ snprintf(errmsg, LNET_MAX_STR_LEN,
+ "invalid key '%s'", key);
+ errno = rc = -EINVAL;
+ yaml_lnet_print_error(flags, "import", errmsg);
+ goto free_reply;
+ }
+
rc = yaml_parser_parse(&setup, &event);
- if (rc == 0)
+ if (rc == 0) {
+ yaml_parser_log_error(&setup, stderr,
+ "import: ");
+ goto emitter_error;
+ }
+
+ if (!strlen((char *)event.data.scalar.value)) {
+ snprintf(errmsg, LNET_MAX_STR_LEN,
+ "no value specified for key '%s'",
+ key);
+ errno = rc = -EINVAL;
+ yaml_lnet_print_error(flags, "import", errmsg);
goto free_reply;
+ }
rc = parse_long((char *)event.data.scalar.value,
&value);
- if (rc != 0)
+ if (rc != 0) {
+ snprintf(errmsg, LNET_MAX_STR_LEN,
+ "invalid value '%s' for key '%s'",
+ (char *)event.data.scalar.value, key);
+ errno = rc = -EINVAL;
+ yaml_lnet_print_error(flags, "import", errmsg);
goto free_reply;
+ }
rc = yaml_import_global_settings(key, value, cmd,
show_rc, err_rc);
}
run_test 26 "Delete peer with primary nid locked"
+test_27() {
+ reinit_dlc || return $?
+
+ local tmp=$(mktemp)
+
+ echo "foobar:" > $tmp
+ do_lnetctl import $tmp 2>&1 | grep -q "invalid key" ||
+ error "Expected import to detect invalid key"
+
+ cat ${GLOBAL_YAML_FILE} > $tmp
+
+ grep -q discovery $tmp ||
+ error "Expect discovery param in global params"
+
+ sed -i 's/discovery:.*/discovery:/' $tmp ||
+ error "Failed to edit $tmp rc $?"
+
+ do_lnetctl import $tmp 2>&1 | grep -q "no value" ||
+ error "Expected import to detect missing value"
+
+ sed -i 's/discovery:/discovery: foo/' $tmp ||
+ error "Failed to edit $tmp rc $?"
+
+ do_lnetctl import $tmp 2>&1 | grep -q "invalid value" ||
+ error "Expected import to detect invalid value"
+
+ rm -f $tmp
+}
+run_test 27 "Import bad config should fail gracefully"
+
test_99a() {
reinit_dlc || return $?