From 002be6e821eedfa190c5b060e7b61acb306c2a92 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Tue, 9 Jun 2020 15:58:32 +0200 Subject: [PATCH] sysctl: do report EACCES errors on write function old new delta sysctl_act_recursive 165 179 +14 sysctl_act_on_setting 467 471 +4 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 18/0) Total: 18 bytes Signed-off-by: Denys Vlasenko --- procps/sysctl.c | 9 ++++++--- testsuite/unexpand.tests | 4 ++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/procps/sysctl.c b/procps/sysctl.c index 6d77185ca..e16b119e9 100644 --- a/procps/sysctl.c +++ b/procps/sysctl.c @@ -169,13 +169,15 @@ static int sysctl_act_on_setting(char *setting) if (fd < 0) { switch (errno) { - case EACCES: - /* Happens for write-only settings, e.g. net.ipv6.route.flush */ - goto end; case ENOENT: if (option_mask32 & FLAG_SHOW_KEY_ERRORS) bb_error_msg("error: '%s' is an unknown key", outname); break; + case EACCES: + /* Happens for write-only settings, e.g. net.ipv6.route.flush */ + if (!writing) + goto end; + /* fall through */ default: bb_perror_msg("error %sing key '%s'", writing ? @@ -236,6 +238,7 @@ static int sysctl_act_recursive(const char *path) int retval = 0; if (!(option_mask32 & FLAG_WRITE) + && !strchr(path, '=') /* do not try to resurse on "var=val" */ && stat(path, &buf) == 0 && S_ISDIR(buf.st_mode) ) { diff --git a/testsuite/unexpand.tests b/testsuite/unexpand.tests index 4ab693ec8..aeaae13f0 100755 --- a/testsuite/unexpand.tests +++ b/testsuite/unexpand.tests @@ -33,8 +33,8 @@ testing "unexpand case 8" "unexpand" \ testcase() { - testing "unexpand flags $*" "unexpand $*" \ - "$want" "" ' a b c' + testing "unexpand flags $*" "unexpand $*" \ + "$want" "" ' a b c' } # tabs=8, Convert only leading sequences of blanks -- 2.25.1