I do not see the value of this change.
jhx <[email protected]> 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
>