aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2025-02-26 15:11:07 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2025-02-26 15:11:07 +0000
commitf3a43b3db881679d0b82b97f18871422050a5819 (patch)
treede37ff422abe3a329fff80a6c29d864fb27ce16a
parentd42a73fb6a85b2dd4692cb003065be5c68863860 (diff)
ctld: Fail UCL configurations with a nested error
Errors from auth groups, portal groups, global luns, and targets were not propagated out of the main loop. Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D49071
-rw-r--r--usr.sbin/ctld/uclparse.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/usr.sbin/ctld/uclparse.c b/usr.sbin/ctld/uclparse.c
index f8f8954304fa..2dc4872bee84 100644
--- a/usr.sbin/ctld/uclparse.c
+++ b/usr.sbin/ctld/uclparse.c
@@ -336,7 +336,9 @@ uclparse_toplevel(const ucl_object_t *top)
if (obj->type == UCL_OBJECT) {
iter = NULL;
while ((child = ucl_iterate_object(obj, &iter, true))) {
- uclparse_auth_group(ucl_object_key(child), child);
+ if (!uclparse_auth_group(
+ ucl_object_key(child), child))
+ return (false);
}
} else {
log_warnx("\"auth-group\" section is not an object");
@@ -348,7 +350,9 @@ uclparse_toplevel(const ucl_object_t *top)
if (obj->type == UCL_OBJECT) {
iter = NULL;
while ((child = ucl_iterate_object(obj, &iter, true))) {
- uclparse_portal_group(ucl_object_key(child), child);
+ if (!uclparse_portal_group(
+ ucl_object_key(child), child))
+ return (false);
}
} else {
log_warnx("\"portal-group\" section is not an object");
@@ -360,7 +364,9 @@ uclparse_toplevel(const ucl_object_t *top)
if (obj->type == UCL_OBJECT) {
iter = NULL;
while ((child = ucl_iterate_object(obj, &iter, true))) {
- uclparse_lun(ucl_object_key(child), child);
+ if (!uclparse_lun(ucl_object_key(child),
+ child))
+ return (false);
}
} else {
log_warnx("\"lun\" section is not an object");
@@ -379,8 +385,9 @@ uclparse_toplevel(const ucl_object_t *top)
iter = NULL;
while ((child = ucl_iterate_object(obj, &iter,
true))) {
- uclparse_target(ucl_object_key(child),
- child);
+ if (!uclparse_target(
+ ucl_object_key(child), child))
+ return (false);
}
} else {
log_warnx("\"target\" section is not an object");