]> git.ipfire.org Git - thirdparty/shadow.git/commitdiff
ch(g)passwd: Check selinux permissions upon startup
authorMartin Kletzander <mkletzan@redhat.com>
Fri, 3 Mar 2023 10:46:33 +0000 (11:46 +0100)
committerIker Pedrosa <ikerpedrosam@gmail.com>
Wed, 31 May 2023 07:44:25 +0000 (09:44 +0200)
The permission also need to be checked before process_root_flag() since
that can chroot into non-selinux environment (unavailable selinux mount
point for example).

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
src/chgpasswd.c
src/chpasswd.c

index b750994e2d23d62302c81bad75a730355cf2a173..fe4055d8afb91c20b0fe090b611c1ca8883e1457 100644 (file)
@@ -424,6 +424,12 @@ int main (int argc, char **argv)
        (void) bindtextdomain (PACKAGE, LOCALEDIR);
        (void) textdomain (PACKAGE);
 
+#ifdef WITH_SELINUX
+       if (check_selinux_permit ("passwd") != 0) {
+               return (E_NOPERM);
+       }
+#endif                         /* WITH_SELINUX */
+
        process_root_flag ("-R", argc, argv);
 
        process_flags (argc, argv);
index 4a04c4f46d66dd1719f7f900dcc5c51312a89fba..3cfd611ebd40a0b8de5ebc75d690da555e2ed1b3 100644 (file)
@@ -452,6 +452,12 @@ int main (int argc, char **argv)
        (void) bindtextdomain (PACKAGE, LOCALEDIR);
        (void) textdomain (PACKAGE);
 
+#ifdef WITH_SELINUX
+       if (check_selinux_permit ("passwd") != 0) {
+               return (E_NOPERM);
+       }
+#endif                         /* WITH_SELINUX */
+
        process_flags (argc, argv);
 
        salt = get_salt();