procps/testsuite/sysctl.test/sysctl_write.exp
Craig Small b159c198c9 sysctl: print dotted keys again
When the globbing update was put into sysctl, you could no longer
simply use the keys because one key could potentially be
multiple paths once the glob expansion occured.  Using the path
instead gave a unique output.

Except certain programs, such as salt, expected the output to use
the dotted path "kernel.hostname" and not "kernel/hostname".

We can no longer use the original key, so now for each path:
  Copy the path
  strip off /proc/
  convert all / to .

The sysctl testsuite was also updated to check for a few different
types of conversion failures.

References:
 commit 6389deca5b
 https://www.freelists.org/post/procps/some-procpsn4400-fixes,4
 https://repo.saltproject.io/

Signed-off-by: Craig Small <csmall@dropbear.xyz>
2022-04-09 14:18:28 +10:00

42 lines
1.6 KiB
Plaintext

set sysctl ${topdir}sysctl
set test "sysctl write from command line"
spawn $sysctl --dry-run kernel.hostname=procps-test
expect_pass "$test" "kernel.hostname = procps-test"
set test "sysctl write from command line using slash"
spawn $sysctl --dry-run kernel/hostname=procps-test
expect_pass "$test" "kernel.hostname = procps-test"
set test "sysctl write from configuration file"
spawn $sysctl --dry-run -f ${topdir}testsuite/sysctl_glob_test.conf
expect_pass "$test" "fs.protected_fifos = 2\\s+fs.protected_symlinks = 2\\s+fs.protected_hardlinks = 1"
set test "sysctl write from file with slashes"
spawn $sysctl --dry-run -f ${topdir}testsuite/sysctl_slash_test.conf
expect_pass "$test" "kernel.hostname = procps-test"
set hostname_file "/proc/sys/kernel/hostname"
if {[file exists ${hostname_file}]} {
if {[file writable ${hostname_file}]} {
unsupported "sysctl write: hostname file is writable"
} else {
set test "sysctl write unwritable file"
spawn $sysctl -q kernel.hostname=procpstest
expect_pass "$test" "sysctl: permission denied on key \"kernel.hostname\"\\s*$"
expect_spawn_retval "$test" 1
set test "sysctl write unwritable file ignored"
spawn $sysctl -q -- -kernel.hostname=procpstest
expect_pass "$test" "sysctl: permission denied on key \"kernel.hostname\", ignoring\\s*$"
expect_spawn_retval "$test" 0
}
} else {
unsupported "sysctl write: hostname file does not exist"
}
set test "sysctl write above /proc"
spawn $sysctl /../../../etc=1
expect_pass "$test" "sysctl: Path is not under /proc/sys/: /proc/sys//../../../etc"