I do not see the value of this change. jhx <jhx0...@gmail.com> wrote:
> Thanks to all the suggestions/hints from Crystal Kolipe and Janne > Johansson I made a few changes to the patch. > > This also fixes reading commented lines. > > Thanks! > > --- sysctl.c.dist Tue Feb 21 12:17:57 2023 > +++ sysctl.c Tue Feb 21 13:41:13 2023 > @@ -138,6 +138,9 @@ > /* Maximum size object to expect from sysctl(2) */ > #define SYSCTL_BUFSIZ 8192 > > +/* Default sysctl.conf location */ > +#define SYSCTL_CONF "/etc/sysctl.conf" > + > struct list { > struct ctlname *list; > int size; > @@ -161,7 +164,7 @@ > { 0, 0 }, /* CTL_VFS */ > }; > > -int Aflag, aflag, nflag, qflag; > +int Aflag, aflag, nflag, pflag, qflag; > > time_t boottime; > > @@ -192,6 +195,7 @@ > ssize_t parse_hex_string(unsigned char *, size_t, const char *); > void parse(char *, int); > void parse_baddynamic(int *, size_t, char *, void **, size_t *, int, int); > +void read_config(void); > void usage(void); > int findname(char *, char *, char **, struct list *); > int sysctl_inet(char *, char **, int *, int, int *); > @@ -232,7 +236,7 @@ > { > int ch, lvl1; > > - while ((ch = getopt(argc, argv, "Aanqw")) != -1) { > + while ((ch = getopt(argc, argv, "Aanpqw")) != -1) { > switch (ch) { > > case 'A': > @@ -247,6 +251,10 @@ > nflag = 1; > break; > > + case 'p': > + pflag = 1; > + break; > + > case 'q': > qflag = 1; > break; > @@ -268,9 +276,16 @@ > err(1,"unveil %s", _PATH_DEVDB); > if (unveil("/dev", "r") == -1 && errno != ENOENT) > err(1, "unveil /dev"); > + if(unveil(SYSCTL_CONF, "r") == -1 && errno != ENOENT) > + err(1, "unveil /etc/sysctl.conf"); > if (unveil(NULL, NULL) == -1) > err(1, "unveil"); > > + if (pflag) { > + read_config(); > + return (0); > + } > + > if (argc == 0 || (Aflag || aflag)) { > debuginit(); > vfsinit(); > @@ -278,9 +293,33 @@ > listall(topname[lvl1].ctl_name, &secondlevel[lvl1]); > return (0); > } > + > for (; *argv != NULL; ++argv) > parse(*argv, 1); > return (0); > +} > + > +/* > + * Read sysctl.conf and parse every line > + */ > +void > +read_config(void) > +{ > + char line[SYSCTL_BUFSIZ]; > + FILE *file; > + > + file = fopen(SYSCTL_CONF, "r"); > + if(!file) > + errx(1, "Cannot open %s", SYSCTL_CONF); > + > + while(fgets(line, SYSCTL_BUFSIZ, file) != NULL) { > + /* Ignore comments */ > + if (strncmp(line, "#", 1) == 0) > + continue; > + line[strlen(line)-1] = '\0'; > + parse(line, 1); > + memset(line, '\0', SYSCTL_BUFSIZ); > + } > } > > /* > > > --- sysctl.8.dist Tue Feb 21 12:18:21 2023 > +++ sysctl.8 Tue Feb 21 12:09:59 2023 > @@ -38,7 +38,7 @@ > .Nd get or set kernel state > .Sh SYNOPSIS > .Nm sysctl > -.Op Fl Aanq > +.Op Fl Aanpq > .Op Ar name Ns Op = Ns Ar value > .Sh DESCRIPTION > The > @@ -74,6 +74,8 @@ > For example, to set the psize shell variable to the pagesize of the > hardware: > .Pp > .Dl # set psize=`sysctl -n hw.pagesize` > +.It Fl p > +Read and apply all settings from /etc/sysctl.conf. > .It Fl q > Suppress all output when setting a variable. > This option overrides the behaviour of > @@ -133,6 +135,10 @@ > To retrieve information about the load average history: > .Pp > .Dl $ sysctl vm.loadavg > +.Pp > +To apply all settings from /etc/sysctl.conf > +.Pp > +.Dl # sysctl -p > .Pp > To make the > .Xr chown 2 >