1*3fe5961aSDevin Teske /* 2*3fe5961aSDevin Teske * Copyright (c) 2013-2026 Devin Teske <dteske@FreeBSD.org> 3*3fe5961aSDevin Teske * Copyright (c) 2021-2026 Faraz Vahedi <kfv@FreeBSD.org> 4*3fe5961aSDevin Teske * 5*3fe5961aSDevin Teske * SPDX-License-Identifier: BSD-2-Clause 6*3fe5961aSDevin Teske */ 7*3fe5961aSDevin Teske 8*3fe5961aSDevin Teske #include "bsdconf_formats.h" 9*3fe5961aSDevin Teske 10*3fe5961aSDevin Teske /* 11*3fe5961aSDevin Teske * BSDCONF_FORMAT_LOADER: loader.conf(5) 12*3fe5961aSDevin Teske * 13*3fe5961aSDevin Teske * Assignments with no whitespace around the `=' -- the Forth reader in 14*3fe5961aSDevin Teske * support.4th rejects anything else, so BSDCONF_STRICT_EQUALS is enforced. 15*3fe5961aSDevin Teske * Quoted or unquoted input values are accepted when parsing but values are 16*3fe5961aSDevin Teske * always written back quoted (BSDCONF_PUT_QUOTE_ALWAYS), the form every 17*3fe5961aSDevin Teske * loader accepts for every value. 18*3fe5961aSDevin Teske * 19*3fe5961aSDevin Teske * The loader itself hardcodes only /boot/defaults/loader.conf and discovers 20*3fe5961aSDevin Teske * every other file from the loader_conf_files, loader_conf_dirs, and 21*3fe5961aSDevin Teske * local_loader_conf_files directives encountered along the way -- any file 22*3fe5961aSDevin Teske * so discovered may revise those lists in turn. The `defaults' member 23*3fe5961aSDevin Teske * quintet below hands that same discovery to bsdconf_format_files(); the 24*3fe5961aSDevin Teske * static source list is only the fallback for systems whose defaults file 25*3fe5961aSDevin Teske * is missing. The defaults file itself is deliberately excluded from the 26*3fe5961aSDevin Teske * resolved list, mirroring how sysrc(8) excludes /etc/defaults/rc.conf. 27*3fe5961aSDevin Teske */ 28*3fe5961aSDevin Teske static const struct bsdconf_source bsdconf_loader_sources[] = { 29*3fe5961aSDevin Teske { BSDCONF_SOURCE_FILE, "/boot/device.hints" }, 30*3fe5961aSDevin Teske { BSDCONF_SOURCE_FILE, "/boot/loader.conf" }, 31*3fe5961aSDevin Teske { BSDCONF_SOURCE_DIR, "/boot/loader.conf.d" }, 32*3fe5961aSDevin Teske { BSDCONF_SOURCE_FILE, "/boot/loader.conf.local" }, 33*3fe5961aSDevin Teske { BSDCONF_SOURCE_FILE, NULL }, 34*3fe5961aSDevin Teske }; 35*3fe5961aSDevin Teske 36*3fe5961aSDevin Teske const struct bsdconf_format_def bsdconf_format_loader_def = { 37*3fe5961aSDevin Teske .keyword = "loader", 38*3fe5961aSDevin Teske .path = "/boot/loader.conf", 39*3fe5961aSDevin Teske .sources = bsdconf_loader_sources, 40*3fe5961aSDevin Teske .defaults = "/boot/defaults/loader.conf", 41*3fe5961aSDevin Teske .defaults_env = "LOADER_DEFAULTS", 42*3fe5961aSDevin Teske .files_directive = "loader_conf_files", 43*3fe5961aSDevin Teske .dirs_directive = "loader_conf_dirs", 44*3fe5961aSDevin Teske .local_directive = "local_loader_conf_files", 45*3fe5961aSDevin Teske .processing = BSDCONF_BREAK_ON_EQUALS | 46*3fe5961aSDevin Teske BSDCONF_CASE_SENSITIVE | 47*3fe5961aSDevin Teske BSDCONF_REQUIRE_EQUALS | 48*3fe5961aSDevin Teske BSDCONF_STRICT_EQUALS, 49*3fe5961aSDevin Teske .put = BSDCONF_PUT_QUOTE_ALWAYS | 50*3fe5961aSDevin Teske BSDCONF_PUT_ALLOW_EMPTY, 51*3fe5961aSDevin Teske }; 52