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 <vda.linux@googlemail.com>
This commit is contained in:
parent
b2ab920716
commit
002be6e821
@ -169,13 +169,15 @@ static int sysctl_act_on_setting(char *setting)
|
|||||||
|
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
switch (errno) {
|
switch (errno) {
|
||||||
case EACCES:
|
|
||||||
/* Happens for write-only settings, e.g. net.ipv6.route.flush */
|
|
||||||
goto end;
|
|
||||||
case ENOENT:
|
case ENOENT:
|
||||||
if (option_mask32 & FLAG_SHOW_KEY_ERRORS)
|
if (option_mask32 & FLAG_SHOW_KEY_ERRORS)
|
||||||
bb_error_msg("error: '%s' is an unknown key", outname);
|
bb_error_msg("error: '%s' is an unknown key", outname);
|
||||||
break;
|
break;
|
||||||
|
case EACCES:
|
||||||
|
/* Happens for write-only settings, e.g. net.ipv6.route.flush */
|
||||||
|
if (!writing)
|
||||||
|
goto end;
|
||||||
|
/* fall through */
|
||||||
default:
|
default:
|
||||||
bb_perror_msg("error %sing key '%s'",
|
bb_perror_msg("error %sing key '%s'",
|
||||||
writing ?
|
writing ?
|
||||||
@ -236,6 +238,7 @@ static int sysctl_act_recursive(const char *path)
|
|||||||
int retval = 0;
|
int retval = 0;
|
||||||
|
|
||||||
if (!(option_mask32 & FLAG_WRITE)
|
if (!(option_mask32 & FLAG_WRITE)
|
||||||
|
&& !strchr(path, '=') /* do not try to resurse on "var=val" */
|
||||||
&& stat(path, &buf) == 0
|
&& stat(path, &buf) == 0
|
||||||
&& S_ISDIR(buf.st_mode)
|
&& S_ISDIR(buf.st_mode)
|
||||||
) {
|
) {
|
||||||
|
Loading…
Reference in New Issue
Block a user