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
> 

Reply via email to