mirror of
https://github.com/Dasharo/systemd.git
synced 2026-03-06 15:02:31 -08:00
sysctl: replaces some slashes with dots
It turns out that plain sysctl understands a.b/c syntax to write to /proc/sys/a/b.c. Support this for compatibility. https://bugs.freedesktop.org/show_bug.cgi?id=77466
This commit is contained in:
@@ -68,13 +68,26 @@
|
||||
<para>The configuration files contain a list of
|
||||
variable assignments, separated by newlines. Empty
|
||||
lines and lines whose first non-whitespace character
|
||||
is # or ; are ignored.</para>
|
||||
is <literal>#</literal> or <literal>;</literal> are
|
||||
ignored.</para>
|
||||
|
||||
<para>Note that both / and . are accepted as label
|
||||
separators within sysctl variable
|
||||
names. <literal>kernel.domainname=foo</literal> and
|
||||
<literal>kernel/domainname=foo</literal> hence are
|
||||
entirely equivalent.</para>
|
||||
<para>Note that either <literal>/</literal> or
|
||||
<literal>.</literal> may be used as separators within
|
||||
sysctl variable names. If the first separator is a
|
||||
slash, remaining slashes and dots are left intact. If
|
||||
the first separator is a dot, dots and slashes are
|
||||
interchanged. <literal>kernel.domainname=foo</literal>
|
||||
and <literal>kernel/domainname=foo</literal> are
|
||||
equivalent and will cause <literal>foo</literal> to
|
||||
be written to
|
||||
<filename>/proc/sys/kernel/domainname</filename>.
|
||||
Either
|
||||
<literal>net.ipv4.conf.enp3s0/200.forwarding</literal>
|
||||
or
|
||||
<literal>net/ipv4/conf/enp3s0.200/forwarding</literal>
|
||||
may be used to refer to
|
||||
<filename>/proc/sys/net/ipv4/conf/enp3s0.200/forwarding</filename>.
|
||||
</para>
|
||||
|
||||
<para>Each configuration file shall be named in the
|
||||
style of <filename><replaceable>program</replaceable>.conf</filename>.
|
||||
@@ -109,7 +122,7 @@
|
||||
early on boot. The network interface-specific options
|
||||
will also be applied individually for each network
|
||||
interface as it shows up in the system. (More
|
||||
specifically, that is
|
||||
specifically,
|
||||
<filename>net.ipv4.conf.*</filename>,
|
||||
<filename>net.ipv6.conf.*</filename>,
|
||||
<filename>net.ipv4.neigh.*</filename> and <filename>net.ipv6.neigh.*</filename>)</para>
|
||||
|
||||
@@ -48,12 +48,26 @@ static const char conf_file_dirs[] =
|
||||
#endif
|
||||
;
|
||||
|
||||
static char *normalize_sysctl(char *s) {
|
||||
static char* normalize_sysctl(char *s) {
|
||||
char *n;
|
||||
|
||||
for (n = s; *n; n++)
|
||||
n = strpbrk(s, "/.");
|
||||
/* If the first separator is a slash, the path is
|
||||
* assumed to be normalized and slashes remain slashes
|
||||
* and dots remains dots. */
|
||||
if (!n || *n == '/')
|
||||
return s;
|
||||
|
||||
/* Otherwise, dots become slashes and slashes become
|
||||
* dots. Fun. */
|
||||
while (n) {
|
||||
if (*n == '.')
|
||||
*n = '/';
|
||||
else
|
||||
*n = '.';
|
||||
|
||||
n = strpbrk(n + 1, "/.");
|
||||
}
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user