Re: [PATCH 2/2] libselinux: update getseuser

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Jan 8, 2021 at 5:02 PM Christian Göttsche
<cgzones@xxxxxxxxxxxxxx> wrote:
>
> - Bail out if not running on a SELinux enabled system
> - Check whether the passed context is valid
> - Do not report a get_ordered_context_list_with_level failure on zero
>   found contexts
>
> Signed-off-by: Christian Göttsche <cgzones@xxxxxxxxxxxxxx>
> ---
>  libselinux/utils/getseuser.c | 47 +++++++++++++++++++++++++-----------
>  1 file changed, 33 insertions(+), 14 deletions(-)
>
> diff --git a/libselinux/utils/getseuser.c b/libselinux/utils/getseuser.c
> index 9193fe0a..ce1b7b27 100644
> --- a/libselinux/utils/getseuser.c
> +++ b/libselinux/utils/getseuser.c
> @@ -9,32 +9,51 @@ int main(int argc, char **argv)
>  {
>         char *seuser = NULL, *level = NULL;
>         char **contextlist;
> -       int rc, n, i;
> +       int rc, n;
>
>         if (argc != 3) {
>                 fprintf(stderr, "usage:  %s linuxuser fromcon\n", argv[0]);
> -               exit(1);
> +               return 1;
> +       }
> +
> +       if (!is_selinux_enabled()) {
> +               fprintf(stderr, "%s may be used only on a SELinux enabled kernel.\n", argv[0]);
> +               return 4;
>         }
>
>         rc = getseuserbyname(argv[1], &seuser, &level);
>         if (rc) {
> -               fprintf(stderr, "getseuserbyname failed:  %s\n",
> -                       strerror(errno));
> -               exit(2);
> +               fprintf(stderr, "getseuserbyname failed:  %s\n", strerror(errno));
> +               return 2;
>         }
>         printf("seuser:  %s, level %s\n", seuser, level);
> -       n = get_ordered_context_list_with_level(seuser, level, argv[2],
> -                                               &contextlist);
> -       if (n <= 0) {
> -               fprintf(stderr,
> -                       "get_ordered_context_list_with_level failed:  %s\n",
> -                       strerror(errno));
> -               exit(3);
> +
> +       rc = security_check_context(argv[2]);
> +       if (rc) {
> +               fprintf(stderr, "context '%s' is invalid\n", argv[2]);
> +               free(seuser);
> +               free(level);
> +               return 5;
> +       }
> +
> +       n = get_ordered_context_list_with_level(seuser, level, argv[2], &contextlist);
> +       if (n < 0) {
> +               fprintf(stderr, "get_ordered_context_list_with_level failed:  %s\n", strerror(errno));
> +               free(seuser);
> +               free(level);
> +               return 3;
>         }
> +
>         free(seuser);
>         free(level);
> -       for (i = 0; i < n; i++)
> +
> +       if (n == 0)
> +               printf("no valid context found\n");
> +
> +       for (int i = 0; i < n; i++)
>                 printf("Context %d\t%s\n", i, contextlist[i]);
> +
>         freeconary(contextlist);
> -       exit(EXIT_SUCCESS);
> +
> +       return EXIT_SUCCESS;
>  }
> --
> 2.30.0

Thanks for your patch! Sorry for the delay: I wanted to test things
and I have been to busy in the past few days to boot my test machine,
and now I see that your patch greatly improves the usability of
getseuser! Many thanks!

As an example of the improvement, before (on a non-MLS system):

$ getseuser myadmin system_u:system_r:sshd_t
seuser:  unconfined_u, level (null)
Context 0 unconfined_u:unconfined_r:unconfined_t
$ getseuser myadmin sshd_t
seuser:  unconfined_u, level (null)
get_ordered_context_list:  error in processing configuration file
/etc/selinux/refpolicy-git/contexts/users/unconfined_u
get_ordered_context_list:  error in processing configuration file
/etc/selinux/refpolicy-git/contexts/default_contexts
get_ordered_context_list_with_level failed:  Invalid argument

With your patch, the first command did not change, but the second one
now returns:

$ getseuser myadmin sshd_t
seuser:  unconfined_u, level (null)
context 'sshd_t' is invalid

... which is much more helpful, in my humble opinion.

So for both your patches: Acked-by: Nicolas Iooss <nicolas.iooss@xxxxxxx>

I will merge the 2 patches tomorrow if nobody complains.

Nicolas




[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux