1 /* 2 * Copyright (c) 2013-2026 Devin Teske <dteske@FreeBSD.org> 3 * Copyright (c) 2021-2026 Faraz Vahedi <kfv@FreeBSD.org> 4 * 5 * SPDX-License-Identifier: BSD-2-Clause 6 */ 7 8 /* 9 * Report effective directive values (named reads and -a). 10 */ 11 12 #include "sysconf_priv.h" 13 14 /* 15 * Report read requests (and `-a') from the results of a completed 16 * scan_pass(). Returns EXIT_SUCCESS or EXIT_FAILURE. 17 */ 18 int 19 do_reads(void) 20 { 21 int rv = EXIT_SUCCESS; 22 size_t d; 23 unsigned int n; 24 25 if (dump_all) { 26 for (d = 0; d < ndumps; d++) { 27 /* 28 * Without -A, a plain -a dumps only what the conf 29 * files themselves configure; a directive whose 30 * value still comes from the (always-scanned) 31 * defaults file is out of scope. 32 */ 33 if (!with_defaults && defaults_idx >= 0 && 34 dumps[d].srcidx == defaults_idx) 35 continue; 36 if (!quiet) 37 warn_with_equals_no(dumps[d].name, 38 dumps[d].value, 39 conf_files[dumps[d].srcidx], 40 dumps[d].line); 41 if (show_desc) 42 print_desc(dumps[d].name); 43 else if (verbose_trail) 44 print_trail(dumps[d].name, dumps[d].trail, 45 dumps[d].ntrail); 46 else 47 print_pair(conf_files[dumps[d].srcidx], 48 dumps[d].name, dumps[d].value); 49 } 50 return (EXIT_SUCCESS); 51 } 52 53 /* Report the results in the order requested */ 54 for (n = 0; n < nreqs; n++) { 55 if (reqs[n].newvalue != NULL || reqs[n].remove || 56 reqs[n].name[0] == '\0') /* neutralized by validation */ 57 continue; 58 if (!reqs[n].found) { 59 if (ignore_unknown) 60 continue; 61 if (!quiet) 62 warnx("unknown directive '%s'", 63 reqs[n].name); 64 rv = EXIT_FAILURE; 65 continue; 66 } 67 if (!quiet) 68 warn_with_equals_no(reqs[n].name, reqs[n].value, 69 conf_files[reqs[n].srcidx], reqs[n].line); 70 if (verbose_trail) 71 print_trail(reqs[n].name, reqs[n].trail, 72 reqs[n].ntrail); 73 else 74 print_pair(conf_files[reqs[n].srcidx], reqs[n].name, 75 reqs[n].value); 76 } 77 78 return (rv); 79 } 80