Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 28 Feb 2013 10:35:47 +0100
From:      Andreas Nilsson <andrnils@gmail.com>
To:        Jeremy Chadwick <jdc@koitsu.org>
Cc:        Chris Rees <crees@freebsd.org>, FreeBSD Stable Mailing List <freebsd-stable@freebsd.org>
Subject:   Re: rc.d/sysctl fails to parse sysctl.conf
Message-ID:  <CAPS9%2BStKay4PLd%2BuUjn1PjbsVte626-w3V19qERNaMqDt9SS=Q@mail.gmail.com>
In-Reply-To: <20130228081329.GA6194@icarus.home.lan>
References:  <CAPS9%2BSt0mc=7OVNbrKG5dR6oXz6ywsobwFNqeNC_rkkYQMugeA@mail.gmail.com> <CADLo838RX=BfhWJ6Obxaxk9qBDBJTkHo2ee=Fudeh7s=ucuT8A@mail.gmail.com> <CAPS9%2BSuvNfks3LLSnyszj5GH%2B-iaF2jfzMNzvCaMNtz%2BF4r_2A@mail.gmail.com> <20130228081329.GA6194@icarus.home.lan>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Feb 28, 2013 at 9:13 AM, Jeremy Chadwick <jdc@koitsu.org> wrote:

> On Thu, Feb 28, 2013 at 08:45:11AM +0100, Andreas Nilsson wrote:
> > On Wed, Feb 27, 2013 at 10:39 PM, Chris Rees <crees@freebsd.org> wrote:
> >
> > > On 27 February 2013 21:19, Andreas Nilsson <andrnils@gmail.com> wrote:
> > > > Hello,
> > > >
> > > > I tried to get my sound working, and long story short: rc.d/sysctl
> parses
> > > > sysctl.conf wrongly if there are sysctls of the form
> > > >
> > > > mib=val1=val2
> > > >
> > > > which is what you need for sound. For reference I needed/wanted
> > > >
> > > > dev.hdaa.4.nid25_config=as=1,seq=15
> > > > dev.hdaa.4.nid31_config=as=1
> > > >
> > > > I believe the following patch would address the incorrect parsing:
> > > >
> > > > --- /etc/rc.d/sysctl.old        2013-02-27 22:00:00.000000000 +0100
> > > > +++ /etc/rc.d/sysctl    2013-02-27 22:05:24.000000000 +0100
> > > > @@ -26,7 +26,7 @@
> > > >                         \#*|'')
> > > >                                 ;;
> > > >                         *)
> > > > -                               mib=${var%=*}
> > > > +                               mib=${var%%=*}
> > > >                                 val=${var#*=}
> > > >
> > > >                                 if current_value=`${SYSCTL} -n ${mib}
> > > > 2>/dev/null`; then
> > >
> > > I think that this is the right thing to do here.
> > >
> > > Chris
> >
> > As a follow-up question: is sysctl.conf supposed to handle  all valid
> input
> > one can give sysctl on the command line? Using the above example would
> > normally be typed:
> > sysctl dev.hdaa.4.nid25_config="as=1 seq=15"
> > which works, but fails to work from sysctl.conf
>
> This has to do with how your shell parses things (quotes, etc.) versus
> how shell scripts like /etc/rc.d/sysctl do.
>
> Assuming you read/speak sh: read /etc/rc.d/sysctl.  It's not very long,
> and fairly easy to follow, barring the %, %%, and # pattern modifier
> parts (read sh man page for how those work).  /etc/rc.d/sysctl is not a
> "file parser" -- instead it relies on sh to do the work.
>
> Once you read the script, you'll understand how/why apostrophes, double
> quotes, and spaces in /etc/sysctl.conf are a problem.  "Solving" this
> dilemma in sh is a pain in the ass and often involves utter nonsense
> like escaping (\) every character and making exceptions; folks who have
> written extensive shell scripts will know what I mean when I use the
> term "quoting hell".
>
> That said, here's the general guideline: your /etc/sysctl.conf should
> not contain quotes or double-quotes or spaces after the assignment (=),
> generally speaking.  If there is a sysctl MIB that actually
> ***requires*** spaces in its value, then whoever coded their driver/bit
> that way should be taken out back and flogged.  Hard.  This is why you
> probably see Andreas using a comma-delimited model (and if that works,
> fantastic+great!).
>
> That said: you can get spaces to work in /etc/sysctl.conf by escaping
> them, i.e.:
>
> some.mib=foo\ bar
>
> You might be able to escape some types of quotes, but this gets into
> "quoting hell" like I said above.  Don't bother.  As I said, apostrophes
> (') and double-quotes (") and spaces (" "), will cause problems, and if
> you read the script it'll become apparent why.
>
> --
> | Jeremy Chadwick                                   jdc@koitsu.org |
> | UNIX Systems Administrator                http://jdc.koitsu.org/ |
> | Mountain View, CA, US                                            |
> | Making life hard for others since 1977.             PGP 4BD6C0CB |
>

Yes, the parsing hell is not a nice place to be in.

I found that easiest solution was to split the config into separate lines
like
dev.hdaa.4.nid25_config=as=1
dev.hdaa.4.nid25_config=seq=15
dev.hdaa.4.nid31_config=as=1

Best regards
Andreas



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAPS9%2BStKay4PLd%2BuUjn1PjbsVte626-w3V19qERNaMqDt9SS=Q>