Thanks, fixed in a bit different way
On Sat, May 16, 2020 at 12:31 PM zhuyan (M) <zhuya...@huawei.com> wrote: > > When an general user without authority sets the system configuration, > 0 is returned, but the modification is not successful. It is unreasonable. > > Such as, general user didn't have /proc/sys/fs/protected_hardlinks > permissions, but run the command 'busybox sysctl fs.protected_symlinks', > 0 is returned. > > Signed-off-by: Yan Zhu <zhuya...@huawei.com> > --- > procps/sysctl.c | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/procps/sysctl.c b/procps/sysctl.c index 6d77185..0ffa9fe 100644 > --- a/procps/sysctl.c > +++ b/procps/sysctl.c > @@ -53,6 +53,7 @@ enum { > FLAG_QUIET = 1 << 6, > }; > #define OPTION_STR "neAapwq" > +bool sysctl_input_dir = false; > > static void sysctl_dots_to_slashes(char *name) { @@ -170,6 +171,10 @@ > static int sysctl_act_on_setting(char *setting) > if (fd < 0) { > switch (errno) { > case EACCES: > + if (!sysctl_input_dir) { > + bb_perror_msg("error reading key '%s'", > outname); > + break; > + } > /* Happens for write-only settings, e.g. > net.ipv6.route.flush */ > goto end; > case ENOENT: > @@ -310,6 +315,7 @@ int sysctl_main(int argc UNUSED_PARAM, char **argv) { > int retval; > int opt; > + struct stat buf; > > opt = getopt32(argv, "+" OPTION_STR); /* '+' - stop on first > non-option */ > argv += optind; > @@ -331,6 +337,7 @@ int sysctl_main(int argc UNUSED_PARAM, char **argv) > } > xchdir("/proc/sys"); > if (opt & (FLAG_TABLE_FORMAT | FLAG_SHOW_ALL)) { > + sysctl_input_dir = true; > return sysctl_act_recursive("."); > } > > @@ -338,6 +345,12 @@ int sysctl_main(int argc UNUSED_PARAM, char **argv) > > retval = 0; > while (*argv) { > + if (stat(*argv, &buf) == 0 > + && S_ISDIR(buf.st_mode)) > + sysctl_input_dir = true; > + else > + sysctl_input_dir = false; > + > sysctl_dots_to_slashes(*argv); > retval |= sysctl_act_recursive(*argv); > argv++; > -- > 2.12.3 > _______________________________________________ busybox mailing list busybox@busybox.net http://lists.busybox.net/mailman/listinfo/busybox