The branch main has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=f3a43b3db881679d0b82b97f18871422050a5819
commit f3a43b3db881679d0b82b97f18871422050a5819 Author: John Baldwin <j...@freebsd.org> AuthorDate: 2025-02-26 15:11:07 +0000 Commit: John Baldwin <j...@freebsd.org> CommitDate: 2025-02-26 15:11:07 +0000 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 --- usr.sbin/ctld/uclparse.c | 17 ++++++++++++----- 1 file 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");