From bba5d5413cad67780953ee4d2bda0d34337863891ba3ba6e09dc101d03d60218 Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Mon, 3 Jan 2022 12:19:45 +0000 Subject: [PATCH] - Update to 4.11.1: * build: include lib/shadowlog_internal.h in dist tarballs - Update to 4.11: * Handle possible TOCTTOU issues in usermod/userdel - (CVE-2013-4235) - Use O_NOFOLLOW when copying file - Kill all user tasks in userdel * Fix useradd -D segfault * Clean up obsolete libc feature-check ifdefs * Fix -fno-common build breaks due to duplicate Prog declarations * Have single date_to_str definition * Fix libsubid SONAME version * Clarify licensing info, use SPDX. - Update to 4.10: * From this release forward, su from this package should be considered deprecated. Please replace any users of it with su from util-linux * libsubid fixes * Rename the test program list_subid_ranges to getsubids, write a manpage, so distros can ship it. * Add libeconf dep for new*idmap * Allow all group types with usermod -G * Avoid useradd generating empty subid range * Handle NULL pw_passwd * Fix default value SHA_get_salt_rounds * Use https where possible in README * Update content and format of README * Translation updates OBS-URL: https://build.opensuse.org/package/show/Base:System/shadow?expand=0&rev=118 --- libsubid-build-fix.patch | 123 ------- shadow-4.11.1.tar.xz | 3 + shadow-4.11.1.tar.xz.asc | 11 + shadow-4.9-newgrp-segfault.patch | 15 - shadow-4.9-pwck-segfault.patch | 14 - shadow-4.9-sgent-free.patch | 23 -- shadow-4.9-useradd-subuid.patch | 94 ----- shadow-4.9.tar.xz | 3 - shadow-4.9.tar.xz.asc | 11 - shadow-fix-sigabrt.patch | 14 - shadow-libeconf-include.patch | 17 - shadow-passwd-handle-null.patch | 21 -- shadow-util-linux.patch | 3 +- shadow.changes | 80 +++++ shadow.keyring | 587 ++++++++++++++++++++++++++++--- shadow.spec | 50 +-- useradd-script.patch | 12 +- useradd-userkeleton.patch | 34 +- userdel-script.patch | 16 +- 19 files changed, 677 insertions(+), 454 deletions(-) delete mode 100644 libsubid-build-fix.patch create mode 100644 shadow-4.11.1.tar.xz create mode 100644 shadow-4.11.1.tar.xz.asc delete mode 100644 shadow-4.9-newgrp-segfault.patch delete mode 100644 shadow-4.9-pwck-segfault.patch delete mode 100644 shadow-4.9-sgent-free.patch delete mode 100644 shadow-4.9-useradd-subuid.patch delete mode 100644 shadow-4.9.tar.xz delete mode 100644 shadow-4.9.tar.xz.asc delete mode 100644 shadow-fix-sigabrt.patch delete mode 100644 shadow-libeconf-include.patch delete mode 100644 shadow-passwd-handle-null.patch diff --git a/libsubid-build-fix.patch b/libsubid-build-fix.patch deleted file mode 100644 index b982ef8..0000000 --- a/libsubid-build-fix.patch +++ /dev/null @@ -1,123 +0,0 @@ -Fix build fails for libsubid (libtool: error: cannot find name of link library for '../libsubid/libsubid.la'). -Consisting of following upstream commits: -* f4a84efb468b8be21be124700ce35159c444e9d6 -* 537b8cd90be7b47b45c45cfd27765ef85eb0ebf1 -* fa986b1d73605ecca54a4f19249227aeab827bf6 -Index: shadow-4.9/configure.ac -=================================================================== ---- shadow-4.9.orig/configure.ac -+++ shadow-4.9/configure.ac -@@ -321,6 +321,8 @@ if test "$with_sha_crypt" = "yes"; then - AC_DEFINE(USE_SHA_CRYPT, 1, [Define to allow the SHA256 and SHA512 password encryption algorithms]) - fi - -+AM_CONDITIONAL(ENABLE_SHARED, test "x$enable_shared" = "xyes") -+ - AM_CONDITIONAL(USE_BCRYPT, test "x$with_bcrypt" = "xyes") - if test "$with_bcrypt" = "yes"; then - AC_DEFINE(USE_BCRYPT, 1, [Define to allow the bcrypt password encryption algorithm]) -Index: shadow-4.9/lib/Makefile.am -=================================================================== ---- shadow-4.9.orig/lib/Makefile.am -+++ shadow-4.9/lib/Makefile.am -@@ -10,6 +10,8 @@ if HAVE_VENDORDIR - libshadow_la_CPPFLAGS += -DVENDORDIR=\"$(VENDORDIR)\" - endif - -+libshadow_la_CPPFLAGS += -I$(top_srcdir) -+ - libshadow_la_SOURCES = \ - commonio.c \ - commonio.h \ -Index: shadow-4.9/libmisc/Makefile.am -=================================================================== ---- shadow-4.9.orig/libmisc/Makefile.am -+++ shadow-4.9/libmisc/Makefile.am -@@ -1,7 +1,7 @@ - - EXTRA_DIST = .indent.pro xgetXXbyYY.c - --AM_CPPFLAGS = -I$(top_srcdir)/lib $(ECONF_CPPFLAGS) -+AM_CPPFLAGS = -I$(top_srcdir)/lib -I$(top_srcdir) $(ECONF_CPPFLAGS) - - noinst_LTLIBRARIES = libmisc.la - -Index: shadow-4.9/libsubid/Makefile.am -=================================================================== ---- shadow-4.9.orig/libsubid/Makefile.am -+++ shadow-4.9/libsubid/Makefile.am -@@ -1,6 +1,8 @@ - lib_LTLIBRARIES = libsubid.la -+if ENABLE_SHARED - libsubid_la_LDFLAGS = -Wl,-soname,libsubid.so.@LIBSUBID_ABI@ \ - -shared -version-info @LIBSUBID_ABI_MAJOR@ -+endif - libsubid_la_SOURCES = api.c - - pkginclude_HEADERS = subid.h -@@ -16,11 +18,12 @@ MISCLIBS = \ - $(LIBCRYPT) \ - $(LIBACL) \ - $(LIBATTR) \ -- $(LIBTCB) -+ $(LIBTCB) \ -+ $(LIBPAM) - - libsubid_la_LIBADD = \ -- $(top_srcdir)/lib/libshadow.la \ -- $(top_srcdir)/libmisc/libmisc.la \ -+ $(top_builddir)/lib/libshadow.la \ -+ $(top_builddir)/libmisc/libmisc.la \ - $(MISCLIBS) -ldl - - AM_CPPFLAGS = \ -Index: shadow-4.9/src/Makefile.am -=================================================================== ---- shadow-4.9.orig/src/Makefile.am -+++ shadow-4.9/src/Makefile.am -@@ -10,6 +10,7 @@ sgidperms = 2755 - AM_CPPFLAGS = \ - -I${top_srcdir}/lib \ - -I$(top_srcdir)/libmisc \ -+ -I$(top_srcdir) \ - -DLOCALEDIR=\"$(datadir)/locale\" - - # XXX why are login and su in /bin anyway (other than for -@@ -183,6 +184,7 @@ list_subid_ranges_LDADD = \ - list_subid_ranges_CPPFLAGS = \ - -I$(top_srcdir)/lib \ - -I$(top_srcdir)/libmisc \ -+ -I$(top_srcdir) \ - -I$(top_srcdir)/libsubid - - get_subid_owners_LDADD = \ -@@ -194,11 +196,13 @@ get_subid_owners_LDADD = \ - get_subid_owners_CPPFLAGS = \ - -I$(top_srcdir)/lib \ - -I$(top_srcdir)/libmisc \ -+ -I$(top_srcdir) \ - -I$(top_srcdir)/libsubid - - new_subid_range_CPPFLAGS = \ - -I$(top_srcdir)/lib \ - -I$(top_srcdir)/libmisc \ -+ -I$(top_srcdir) \ - -I$(top_srcdir)/libsubid - - new_subid_range_LDADD = \ -@@ -210,6 +214,7 @@ new_subid_range_LDADD = \ - free_subid_range_CPPFLAGS = \ - -I$(top_srcdir)/lib \ - -I$(top_srcdir)/libmisc \ -+ -I$(top_srcdir) \ - -I$(top_srcdir)/libsubid - - free_subid_range_LDADD = \ -@@ -220,6 +225,7 @@ free_subid_range_LDADD = \ - - check_subid_range_CPPFLAGS = \ - -I$(top_srcdir)/lib \ -+ -I$(top_srcdir) \ - -I$(top_srcdir)/libmisc - - check_subid_range_LDADD = \ diff --git a/shadow-4.11.1.tar.xz b/shadow-4.11.1.tar.xz new file mode 100644 index 0000000..8ffbf1f --- /dev/null +++ b/shadow-4.11.1.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41f093ce58b2ae5f389a1c5553e0c18bc73e6fe27f66273891991198a7707c95 +size 1656584 diff --git a/shadow-4.11.1.tar.xz.asc b/shadow-4.11.1.tar.xz.asc new file mode 100644 index 0000000..f2a7fd2 --- /dev/null +++ b/shadow-4.11.1.tar.xz.asc @@ -0,0 +1,11 @@ +-----BEGIN PGP SIGNATURE----- + +iQEzBAABCgAdFiEEqb0/8XByttt4D8+UNXDaFycKziQFAmHSaooACgkQNXDaFycK +ziQEowf8CnA6H9sohv45+YPfwzFs9Drj4iUX8q/v6z0SwzWtY2NeKGazABryeu9Q +DadmXeSFqIUQgzMWV1FMNwP0wFACSxsodfzusRQ/eKHjG4+5elVAqXHnxhJDZqvt +83iWXtGd+/L9mlpKfaWhSrSI/VPfzUQYYrmz/cMbkP3ijPmaCvW1Ke5pWrnhky5I +Iur+BqkiA5+Gi/mChhDZzBuE3eaIDRPVOYkmL5tyDjK7SyFmsM0lhGNwZQ525gDJ +9/NbkIAgz59lfcLZXjZ9Ui4hTh+YKjlSbsMlmo6Bpp29crwzfC3ppe69mwBywA3K +nt2BZxeFv3mkBnQXPabCBE8gaR8ZIQ== +=8xjr +-----END PGP SIGNATURE----- diff --git a/shadow-4.9-newgrp-segfault.patch b/shadow-4.9-newgrp-segfault.patch deleted file mode 100644 index e57cae0..0000000 --- a/shadow-4.9-newgrp-segfault.patch +++ /dev/null @@ -1,15 +0,0 @@ -https://github.com/shadow-maint/shadow/commit/497e90751bc0d95cc998b0f06305040563903948 -Index: shadow-4.9/src/newgrp.c -=================================================================== ---- shadow-4.9.orig/src/newgrp.c -+++ shadow-4.9/src/newgrp.c -@@ -163,8 +163,8 @@ static void check_perms (const struct gr - spwd = xgetspnam (pwd->pw_name); - if (NULL != spwd) { - pwd->pw_passwd = xstrdup (spwd->sp_pwdp); -+ spw_free (spwd); - } -- spw_free (spwd); - - if ((pwd->pw_passwd[0] == '\0') && (grp->gr_passwd[0] != '\0')) { - needspasswd = true; diff --git a/shadow-4.9-pwck-segfault.patch b/shadow-4.9-pwck-segfault.patch deleted file mode 100644 index 1193366..0000000 --- a/shadow-4.9-pwck-segfault.patch +++ /dev/null @@ -1,14 +0,0 @@ -https://github.com/shadow-maint/shadow/commit/d8e54618feea201987c1f3cb402ed50d1d8b604f - -Index: shadow-4.9/src/pwck.c -=================================================================== ---- shadow-4.9.orig/src/pwck.c -+++ shadow-4.9/src/pwck.c -@@ -857,6 +857,7 @@ int main (int argc, char **argv) - * Get my name so that I can use it to report errors. - */ - Prog = Basename (argv[0]); -+ shadow_logfd = stderr; - - (void) setlocale (LC_ALL, ""); - (void) bindtextdomain (PACKAGE, LOCALEDIR); diff --git a/shadow-4.9-sgent-free.patch b/shadow-4.9-sgent-free.patch deleted file mode 100644 index c5af36e..0000000 --- a/shadow-4.9-sgent-free.patch +++ /dev/null @@ -1,23 +0,0 @@ -Index: shadow-4.9/src/gpasswd.c -=================================================================== ---- shadow-4.9.orig/src/gpasswd.c -+++ shadow-4.9/src/gpasswd.c -@@ -1207,11 +1207,13 @@ int main (int argc, char **argv) - sssd_flush_cache (SSSD_DB_GROUP); - - #ifdef SHADOWGRP -- if (sgent.sg_adm) { -- xfree(sgent.sg_adm); -- } -- if (sgent.sg_mem) { -- xfree(sgent.sg_mem); -+ if(is_shadowgrp) { -+ if (sgent.sg_adm) { -+ xfree(sgent.sg_adm); -+ } -+ if (sgent.sg_mem) { -+ xfree(sgent.sg_mem); -+ } - } - #endif - if (grent.gr_mem) { diff --git a/shadow-4.9-useradd-subuid.patch b/shadow-4.9-useradd-subuid.patch deleted file mode 100644 index ce3edb9..0000000 --- a/shadow-4.9-useradd-subuid.patch +++ /dev/null @@ -1,94 +0,0 @@ -This patch contains: -https://github.com/shadow-maint/shadow/commit/9dd720a28578eef5be8171697aae0906e4c53249#diff-9a7a2bfccabec64213bd054801b9efca8ad55636afbc49e0107714c0f8ffabbe -and -https://github.com/shadow-maint/shadow/commit/049b08481acc2040e2079ae06e64d0bb36326528# -Index: shadow-4.9/src/useradd.c -=================================================================== ---- shadow-4.9.orig/src/useradd.c -+++ shadow-4.9/src/useradd.c -@@ -146,9 +146,7 @@ static bool is_sub_gid = false; - static bool sub_uid_locked = false; - static bool sub_gid_locked = false; - static uid_t sub_uid_start; /* New subordinate uid range */ --static unsigned long sub_uid_count; - static gid_t sub_gid_start; /* New subordinate gid range */ --static unsigned long sub_gid_count; - #endif /* ENABLE_SUBIDS */ - static bool pw_locked = false; - static bool gr_locked = false; -@@ -239,7 +237,7 @@ static void open_shadow (void); - static void faillog_reset (uid_t); - static void lastlog_reset (uid_t); - static void tallylog_reset (const char *); --static void usr_update (void); -+static void usr_update (unsigned long subuid_count, unsigned long subgid_count); - static void create_home (void); - static void create_mail (void); - static void check_uid_range(int rflg, uid_t user_id); -@@ -2118,7 +2116,7 @@ static void tallylog_reset (const char * - * usr_update() creates the password file entries for this user - * and will update the group entries if required. - */ --static void usr_update (void) -+static void usr_update (unsigned long subuid_count, unsigned long subgid_count) - { - struct passwd pwent; - struct spwd spent; -@@ -2181,14 +2179,14 @@ static void usr_update (void) - } - #ifdef ENABLE_SUBIDS - if (is_sub_uid && -- (sub_uid_add(user_name, sub_uid_start, sub_uid_count) == 0)) { -+ (sub_uid_add(user_name, sub_uid_start, subuid_count) == 0)) { - fprintf (stderr, - _("%s: failed to prepare the new %s entry\n"), - Prog, sub_uid_dbname ()); - fail_exit (E_SUB_UID_UPDATE); - } - if (is_sub_gid && -- (sub_gid_add(user_name, sub_gid_start, sub_gid_count) == 0)) { -+ (sub_gid_add(user_name, sub_gid_start, subgid_count) == 0)) { - fprintf (stderr, - _("%s: failed to prepare the new %s entry\n"), - Prog, sub_uid_dbname ()); -@@ -2484,9 +2482,9 @@ int main (int argc, char **argv) - #ifdef ENABLE_SUBIDS - uid_t uid_min; - uid_t uid_max; -+#endif - unsigned long subuid_count; - unsigned long subgid_count; --#endif - - /* - * Get my name so that I can use it to report errors. -@@ -2688,16 +2686,16 @@ int main (int argc, char **argv) - } - - #ifdef ENABLE_SUBIDS -- if (is_sub_uid && sub_uid_count != 0) { -- if (find_new_sub_uids(&sub_uid_start, &sub_uid_count) < 0) { -+ if (is_sub_uid && subuid_count != 0) { -+ if (find_new_sub_uids(&sub_uid_start, &subuid_count) < 0) { - fprintf (stderr, - _("%s: can't create subordinate user IDs\n"), - Prog); - fail_exit(E_SUB_UID_UPDATE); - } - } -- if (is_sub_gid && sub_gid_count != 0) { -- if (find_new_sub_gids(&sub_gid_start, &sub_gid_count) < 0) { -+ if (is_sub_gid && subgid_count != 0) { -+ if (find_new_sub_gids(&sub_gid_start, &subgid_count) < 0) { - fprintf (stderr, - _("%s: can't create subordinate group IDs\n"), - Prog); -@@ -2706,7 +2704,7 @@ int main (int argc, char **argv) - } - #endif /* ENABLE_SUBIDS */ - -- usr_update (); -+ usr_update (subuid_count, subgid_count); - - if (mflg) { - create_home (); diff --git a/shadow-4.9.tar.xz b/shadow-4.9.tar.xz deleted file mode 100644 index 8b82f8f..0000000 --- a/shadow-4.9.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:feec1f2ce9c1b62798afd35a7d1b04cefdfa3a0a30ff3e75d6965ba8978c9144 -size 1627008 diff --git a/shadow-4.9.tar.xz.asc b/shadow-4.9.tar.xz.asc deleted file mode 100644 index 0f99f47..0000000 --- a/shadow-4.9.tar.xz.asc +++ /dev/null @@ -1,11 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQEzBAABCgAdFiEE8dCNt3gYW/eEAC3/6f7qBqheP50FAmD5+dkACgkQ6f7qBqhe -P53Qywf/ShkcKvecTDRIrKUNJUTIlP8iywZ1NXypfdDKG/J63awMAGrKMZwOkLUS -AnImsvyoW3+XDIhdkeJd1Kv+8JDEt3oJ0ifHjfpXl4FzOervb1ZKtRPUcoJzzpnJ -Szt/7f3Sd0VfbItgf5F6jgMi7iDA/ZIqJTXeI0kEfVVL7DT681jVRjpnoURlrEq1 -6SmIyAul50VmZjLXq1xJ35uktr7VclnaRu17acax95e+oekP4sdNMaV5E5DSeq2N -db7kKCu80+lPvtQpj22vOO2w15ActH6f5Ec3P7OG8jL125q3yZNebVoh8FKxmFsh -PssfXu0TL50qH/p7qNEeihDLpwoI7g== -=6MLu ------END PGP SIGNATURE----- diff --git a/shadow-fix-sigabrt.patch b/shadow-fix-sigabrt.patch deleted file mode 100644 index aa82aae..0000000 --- a/shadow-fix-sigabrt.patch +++ /dev/null @@ -1,14 +0,0 @@ -Upstream commit 4624e9fca1b02b64e25e8b2280a0186182ab73ba -To fix SIGABRT: https://github.com/shadow-maint/shadow/issues/394 -Index: shadow-4.9/src/useradd.c -=================================================================== ---- shadow-4.9.orig/src/useradd.c -+++ shadow-4.9/src/useradd.c -@@ -420,7 +420,6 @@ static void get_defaults (void) - } else { - def_group = grp->gr_gid; - def_gname = xstrdup (grp->gr_name); -- gr_free(grp); - } - } - diff --git a/shadow-libeconf-include.patch b/shadow-libeconf-include.patch deleted file mode 100644 index c1f616e..0000000 --- a/shadow-libeconf-include.patch +++ /dev/null @@ -1,17 +0,0 @@ -Include libeconf to newuidmap and newgidmap -Upstream commit: c6847011e8b656adacd9a0d2a78418cad0de34cb -Index: shadow-4.9/src/Makefile.am -=================================================================== ---- shadow-4.9.orig/src/Makefile.am -+++ shadow-4.9/src/Makefile.am -@@ -96,8 +96,8 @@ LIBCRYPT_NOPAM = $(LIBCRYPT) - endif - - chage_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF) --newuidmap_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBCAP) -ldl --newgidmap_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBCAP) -ldl -+newuidmap_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBCAP) $(LIBECONF) -ldl -+newgidmap_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBCAP) $(LIBECONF) -ldl - chfn_LDADD = $(LDADD) $(LIBPAM) $(LIBAUDIT) $(LIBSELINUX) $(LIBCRYPT_NOPAM) $(LIBSKEY) $(LIBMD) $(LIBECONF) - chgpasswd_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBCRYPT) $(LIBECONF) - chsh_LDADD = $(LDADD) $(LIBPAM) $(LIBAUDIT) $(LIBSELINUX) $(LIBCRYPT_NOPAM) $(LIBSKEY) $(LIBMD) $(LIBECONF) diff --git a/shadow-passwd-handle-null.patch b/shadow-passwd-handle-null.patch deleted file mode 100644 index cdc1369..0000000 --- a/shadow-passwd-handle-null.patch +++ /dev/null @@ -1,21 +0,0 @@ -Upstream commit: adb83f779618674e5e96e27e3d48559d62e2c410 -To fix: https://github.com/shadow-maint/shadow/pull/398 -Index: shadow-4.9/src/passwd.c -=================================================================== ---- shadow-4.9.orig/src/passwd.c -+++ shadow-4.9/src/passwd.c -@@ -490,9 +490,12 @@ static void print_status (const struct p - ((long long)sp->sp_max * SCALE) / DAY, - ((long long)sp->sp_warn * SCALE) / DAY, - ((long long)sp->sp_inact * SCALE) / DAY); -- } else { -+ } else if (NULL != pw->pw_passwd) { - (void) printf ("%s %s\n", -- pw->pw_name, pw_status (pw->pw_passwd)); -+ pw->pw_name, pw_status (pw->pw_passwd)); -+ } else { -+ (void) fprintf(stderr, _("%s: malformed password data obtained for user %s\n"), -+ Prog, pw->pw_name); - } - } - diff --git a/shadow-util-linux.patch b/shadow-util-linux.patch index a732cbc..96ea5ae 100644 --- a/shadow-util-linux.patch +++ b/shadow-util-linux.patch @@ -122,7 +122,7 @@ Index: etc/login.defs # Max time in seconds for login(1) # LOGIN_TIMEOUT 60 -@@ -315,15 +335,6 @@ CHARACTER_CLASS [ABCDEFGHIJKLMNO +@@ -315,14 +335,6 @@ CHARACTER_CLASS [ABCDEFGHIJKLMNO #GRANT_AUX_GROUP_SUBIDS yes # @@ -131,7 +131,6 @@ Index: etc/login.defs -# Set to "yes" to prevent for all accounts -# Set to "superuser" to prevent for UID 0 / root (default) -# Set to "no" to not prevent for any account (dangerous, historical default) -- -PREVENT_NO_AUTH superuser - -# diff --git a/shadow.changes b/shadow.changes index 9eb680c..59f4a6a 100644 --- a/shadow.changes +++ b/shadow.changes @@ -1,3 +1,83 @@ +------------------------------------------------------------------- +Mon Jan 3 10:36:15 UTC 2022 - Michael Vetter + +- Update to 4.11.1: + * build: include lib/shadowlog_internal.h in dist tarballs + +------------------------------------------------------------------- +Mon Jan 3 10:35:30 UTC 2022 - Michael Vetter + +- Update to 4.11: + * Handle possible TOCTTOU issues in usermod/userdel + - (CVE-2013-4235) + - Use O_NOFOLLOW when copying file + - Kill all user tasks in userdel + * Fix useradd -D segfault + * Clean up obsolete libc feature-check ifdefs + * Fix -fno-common build breaks due to duplicate Prog declarations + * Have single date_to_str definition + * Fix libsubid SONAME version + * Clarify licensing info, use SPDX. + +------------------------------------------------------------------- +Mon Jan 3 10:29:39 UTC 2022 - Michael Vetter + +- Update to 4.10: + * From this release forward, su from this package should be + considered deprecated. Please replace any users of it with su + from util-linux + * libsubid fixes + * Rename the test program list_subid_ranges to getsubids, write + a manpage, so distros can ship it. + * Add libeconf dep for new*idmap + * Allow all group types with usermod -G + * Avoid useradd generating empty subid range + * Handle NULL pw_passwd + * Fix default value SHA_get_salt_rounds + * Use https where possible in README + * Update content and format of README + * Translation updates + * Switch from xml2po to itstool in 'make dist' + * Fix double frees + * Add LOG_INIT configurable to useradd + * Add CREATE_MAIL_SPOOL documentation + * Create a security.md + * Fix su never being SIGKILLd when trapping TERM + * Fix wrong SELinux labels in several possible cases + * Fix missing chmod in chadowtb_move + * Handle malformed hushlogins entries + * Fix groupdel segv when passwd does not exist + * Fix covscan-found newgrp segfault + * Remove trailing slash on hoedir + * Fix passwd -l message - it does not change expirey + * Fix SIGCHLD handling bugs in su and vipw + * Remove special case for "" in usermod + * Implement usermod -rG to remove a specific group + * call pam_end() after fork in child path for su and login + * useradd: In absence of /etc/passwd, assume 0 == root + * lib: check NULL before freeing data + * Fix pwck segfault +- Remove because upstreamed: + * shadow-4.9-pwck-segfault.patch + * shadow-4.9-newgrp-segfault.patch + * shadow-4.9-useradd-subuid.patch + * shadow-4.9-sgent-free.patch + * shadow-passwd-handle-null.patch + * shadow-fix-sigabrt.patch + * shadow-libeconf-include.patch + * libsubid-build-fix.patch +- Refreshed: + * shadow-util-linux.patch + * shadow.changes + * shadow.keyring + * shadow.spec + * useradd-script.patch + * useradd-userkeleton.patch + * userdel-script.patch +- Update shadow.keyring: + * Serge Hallyn serge@hallyn.com (B175CFA98F192AF2) + * Christian Brauner christian@brauner.io (4880B8C9BD0E5106FC070F4F7B3C391EFEA93624) + ------------------------------------------------------------------- Tue Nov 30 17:12:40 UTC 2021 - Thorsten Kukuk diff --git a/shadow.keyring b/shadow.keyring index cad43a2..98d4330 100644 --- a/shadow.keyring +++ b/shadow.keyring @@ -1,54 +1,539 @@ -----BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v2 -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 -Fj0= -=YE9s +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 +=M8RS -----END PGP PUBLIC KEY BLOCK----- diff --git a/shadow.spec b/shadow.spec index e9923a4..fb0070d 100644 --- a/shadow.spec +++ b/shadow.spec @@ -1,7 +1,7 @@ # # spec file for package shadow # -# Copyright (c) 2021 SUSE LLC +# Copyright (c) 2022 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -22,7 +22,7 @@ %define no_config 1 %endif Name: shadow -Version: 4.9 +Version: 4.11.1 Release: 0 Summary: Utilities to Manage User and Group Accounts License: BSD-3-Clause AND GPL-2.0-or-later @@ -59,22 +59,6 @@ Patch7: shadow-login_defs-suse.patch Patch8: useradd-userkeleton.patch # PATCH-FIX-SUSE disable_new_audit_function.patch adam.majer@suse.de -- Disable newer libaudit functionality for older distributions. Patch9: disable_new_audit_function.patch -# PATCH-FIX-UPSTREAM libsubid-build-fix.patch mvetter@suse.de -- Fix build with libsubid (f4a84e, 537b8c, fa986b) -Patch10: libsubid-build-fix.patch -# PATCH-FIX-UPSTREAM shadow-libeconf-include.patch mvetter@suse.de -- Include libeconf to new*idmap (c68470) -Patch11: shadow-libeconf-include.patch -# PATCH-FIX-UPSTREAM shadow-fix-sigabrt.patch mvetter@suse.de -- Fix SIGABRT https://github.com/shadow-maint/shadow/issues/394 -Patch12: shadow-fix-sigabrt.patch -# PATCH-FIX-UPSTREAM shadow-passwd-handle-null.patch mvetter@suse.de -- Fix passwd NULL handling https://github.com/shadow-maint/shadow/pull/398 -Patch13: shadow-passwd-handle-null.patch -# PATCH-FIX-UPSTREAM shadow-4.9-sgent-free.patch mvetter@suse.de -- Fix double free (boo#1190145) -Patch14: shadow-4.9-sgent-free.patch -# PATCH-FIX-UPSTREAM shadow-4.9-useradd-subuid.patch mvetter@suse.de -- Fix generating empty subid range and undeclared subid_count (boo#1190146) -Patch15: shadow-4.9-useradd-subuid.patch -# PATCH-FIX-UPSTREAM shadow-4.9-newgrp-segfault.patch mvetter@suse.de -- Fix segfault in newgrp (gh#437) -Patch16: shadow-4.9-newgrp-segfault.patch -# PATCH-FIX-UPSTREAM shadow-4.9-pwck-segfault.patch mvetter@suse.de -- Fix segfault in pwck (gh#445) -Patch17: shadow-4.9-pwck-segfault.patch BuildRequires: audit-devel > 2.3 BuildRequires: autoconf BuildRequires: automake @@ -119,20 +103,20 @@ BuildArch: noarch This package contains the default login.defs configuration file as used by util-linux, pam and shadow. -%package -n libsubid3 +%package -n libsubid4 Summary: A library to manage subordinate uid and gid ranges Group: System/Base -%description -n libsubid3 +%description -n libsubid4 Utility library that provides a way to manage subid ranges. %package -n libsubid-devel -Summary: Development files for libsubid3 +Summary: Development files for libsubid4 Group: System/Base -Requires: libsubid3 = %{version} +Requires: libsubid4 = %{version} %description -n libsubid-devel -Development files for libsubid3. +Development files for libsubid4. %prep %setup -q -a 1 @@ -148,14 +132,6 @@ Development files for libsubid3. %if 0%{?suse_version} < 1330 %patch9 -p1 %endif -%patch10 -p1 -%patch11 -p1 -%patch12 -p1 -%patch13 -p1 -%patch14 -p1 -%patch15 -p1 -%patch16 -p1 -%patch17 -p1 iconv -f ISO88591 -t utf-8 doc/HOWTO > doc/HOWTO.utf8 mv -v doc/HOWTO.utf8 doc/HOWTO @@ -253,7 +229,7 @@ rm %{buildroot}/%{_mandir}/*/man5/passwd.5* rm -rf %{buildroot}%{_mandir}/{??,??_??} -rm %{buildroot}/%{_libdir}/libsubid.la +rm %{buildroot}/%{_libdir}/libsubid.{la,a} # Move /etc to /usr/etc if [ ! -d %{buildroot}%{_distconfdir} ]; then @@ -283,6 +259,7 @@ test -f %{_sysconfdir}/login.defs.rpmsave && mv -v %{_sysconfdir}/login.defs.rpm %set_permissions %{_bindir}/passwd %set_permissions %{_bindir}/newgidmap %set_permissions %{_bindir}/newuidmap +%set_permissions %{_bindir}/getsubids %service_add_post shadow.service shadow.timer @@ -296,6 +273,7 @@ test -f %{_sysconfdir}/login.defs.rpmsave && mv -v %{_sysconfdir}/login.defs.rpm %verify_permissions %{_bindir}/passwd %verify_permissions %{_bindir}/newgidmap %verify_permissions %{_bindir}/newuidmap +%verify_permissions %{_bindir}/getsubids %preun %service_del_preun shadow.service shadow.timer @@ -317,8 +295,8 @@ done # - Migration to /usr/etc (after SLE15 and Leap 15) test -f %{_sysconfdir}/login.defs.rpmsave && mv -v %{_sysconfdir}/login.defs.rpmsave %{_sysconfdir}/login.defs ||: -%post -n libsubid3 -p /sbin/ldconfig -%postun -n libsubid3 -p /sbin/ldconfig +%post -n libsubid4 -p /sbin/ldconfig +%postun -n libsubid4 -p /sbin/ldconfig %files -f shadow.lang %license COPYING @@ -362,6 +340,7 @@ test -f %{_sysconfdir}/login.defs.rpmsave && mv -v %{_sysconfdir}/login.defs.rpm %verify(not mode) %attr(4755,root,shadow) %{_bindir}/passwd %verify(not mode) %attr(4755,root,shadow) %{_bindir}/newgidmap %verify(not mode) %attr(4755,root,shadow) %{_bindir}/newuidmap +%verify(not mode) %attr(4755,root,shadow) %{_bindir}/getsubids %{_bindir}/lastlog %{_bindir}/sg %attr(0755,root,root) %{_sbindir}/groupadd @@ -410,6 +389,7 @@ test -f %{_sysconfdir}/login.defs.rpmsave && mv -v %{_sysconfdir}/login.defs.rpm %{_mandir}/man5/subgid.5%{?ext_man} %{_mandir}/man1/newgidmap.1%{?ext_man} %{_mandir}/man1/newuidmap.1%{?ext_man} +%{_mandir}/man1/getsubids.1%{?ext_man} %{_unitdir}/* @@ -422,7 +402,7 @@ test -f %{_sysconfdir}/login.defs.rpmsave && mv -v %{_sysconfdir}/login.defs.rpm %endif %{_mandir}/man5/login.defs.5%{?ext_man} -%files -n libsubid3 +%files -n libsubid4 %{_libdir}/libsubid.so.* %files -n libsubid-devel diff --git a/useradd-script.patch b/useradd-script.patch index 91bcbfe..225a157 100644 --- a/useradd-script.patch +++ b/useradd-script.patch @@ -8,7 +8,7 @@ Index: etc/login.defs =================================================================== --- etc/login.defs.orig +++ etc/login.defs -@@ -266,6 +266,13 @@ DEFAULT_HOME yes +@@ -238,6 +238,13 @@ DEFAULT_HOME yes NONEXISTENT /nonexistent # @@ -26,7 +26,7 @@ Index: lib/getdef.c =================================================================== --- lib/getdef.c.orig +++ lib/getdef.c -@@ -149,6 +149,7 @@ static struct itemdef def_table[] = { +@@ -127,6 +127,7 @@ static struct itemdef def_table[] = { {"UID_MAX", NULL}, {"UID_MIN", NULL}, {"UMASK", NULL}, @@ -38,7 +38,7 @@ Index: src/useradd.c =================================================================== --- src/useradd.c.orig +++ src/useradd.c -@@ -2398,6 +2398,44 @@ static void check_uid_range(int rflg, ui +@@ -2426,6 +2426,44 @@ static void check_uid_range(int rflg, ui } /* @@ -83,9 +83,9 @@ Index: src/useradd.c * main - useradd command */ int main (int argc, char **argv) -@@ -2691,6 +2729,7 @@ int main (int argc, char **argv) - nscd_flush_cache ("group"); - sssd_flush_cache (SSSD_DB_PASSWD | SSSD_DB_GROUP); +@@ -2720,6 +2758,7 @@ int main (int argc, char **argv) + exit(1); + } + call_script (user_name, user_id, user_gid, user_home); + diff --git a/useradd-userkeleton.patch b/useradd-userkeleton.patch index be82589..deb4db6 100644 --- a/useradd-userkeleton.patch +++ b/useradd-userkeleton.patch @@ -9,7 +9,7 @@ Index: src/useradd.c =================================================================== --- src/useradd.c.orig +++ src/useradd.c -@@ -82,6 +82,9 @@ +@@ -61,6 +61,9 @@ #ifndef SKEL_DIR #define SKEL_DIR "/etc/skel" #endif @@ -19,23 +19,23 @@ Index: src/useradd.c #ifndef USER_DEFAULTS_FILE #define USER_DEFAULTS_FILE "/etc/default/useradd" #define NEW_USER_FILE "/etc/default/nuaddXXXXXX" -@@ -106,6 +109,7 @@ static const char *def_gname = "other"; +@@ -84,6 +87,7 @@ static const char *def_gname = "other"; static const char *def_home = "/home"; static const char *def_shell = "/bin/bash"; static const char *def_template = SKEL_DIR; +static const char *def_usrtemplate = USRSKELDIR; static const char *def_create_mail_spool = "yes"; + static const char *def_log_init = "yes"; - static long def_inactive = -1; -@@ -208,6 +212,7 @@ static bool home_added = false; +@@ -185,6 +189,7 @@ static bool home_added = false; #define DINACT "INACTIVE=" #define DEXPIRE "EXPIRE=" #define DSKEL "SKEL=" +#define DUSRSKEL "USRSKEL=" #define DCREATE_MAIL_SPOOL "CREATE_MAIL_SPOOL=" + #define DLOG_INIT "LOG_INIT=" - /* local function prototypes */ -@@ -481,6 +486,29 @@ static void get_defaults (void) +@@ -458,6 +463,29 @@ static void get_defaults (void) } /* @@ -65,23 +65,23 @@ Index: src/useradd.c * Create by default user mail spool or not ? */ else if (MATCH (buf, DCREATE_MAIL_SPOOL)) { -@@ -512,6 +540,7 @@ static void show_defaults (void) +@@ -499,6 +527,7 @@ static void show_defaults (void) printf ("EXPIRE=%s\n", def_expire); printf ("SHELL=%s\n", def_shell); printf ("SKEL=%s\n", def_template); + printf ("USRSKEL=%s\n", def_usrtemplate); printf ("CREATE_MAIL_SPOOL=%s\n", def_create_mail_spool); + printf ("LOG_INIT=%s\n", def_log_init); } - -@@ -538,6 +567,7 @@ static int set_defaults (void) +@@ -527,6 +556,7 @@ static int set_defaults (void) bool out_expire = false; bool out_shell = false; bool out_skel = false; + bool out_usrskel = false; bool out_create_mail_spool = false; + bool out_log_init = false; size_t len; - int ret = -1; -@@ -632,6 +662,9 @@ static int set_defaults (void) +@@ -640,6 +670,9 @@ static int set_defaults (void) } else if (!out_skel && MATCH (buf, DSKEL)) { fprintf (ofp, DSKEL "%s\n", def_template); out_skel = true; @@ -91,7 +91,7 @@ Index: src/useradd.c } else if (!out_create_mail_spool && MATCH (buf, DCREATE_MAIL_SPOOL)) { fprintf (ofp, -@@ -661,6 +694,8 @@ static int set_defaults (void) +@@ -675,6 +708,8 @@ static int set_defaults (void) fprintf (ofp, DSHELL "%s\n", def_shell); if (!out_skel) fprintf (ofp, DSKEL "%s\n", def_template); @@ -100,9 +100,9 @@ Index: src/useradd.c if (!out_create_mail_spool) fprintf (ofp, DCREATE_MAIL_SPOOL "%s\n", def_create_mail_spool); -@@ -2679,6 +2714,8 @@ int main (int argc, char **argv) +@@ -2739,6 +2774,8 @@ int main (int argc, char **argv) if (home_added) { - copy_tree (def_template, prefix_user_home, false, false, + copy_tree (def_template, prefix_user_home, false, true, (uid_t)-1, user_id, (gid_t)-1, user_gid); + copy_tree (def_usrtemplate, prefix_user_home, false, false, + (uid_t)-1, user_id, (gid_t)-1, user_gid); @@ -113,7 +113,7 @@ Index: libmisc/copydir.c =================================================================== --- libmisc/copydir.c.orig +++ libmisc/copydir.c -@@ -416,6 +416,14 @@ static int copy_entry (const char *src, +@@ -395,6 +395,14 @@ static int copy_entry (const char *src, old_uid, new_uid, old_gid, new_gid); } @@ -128,7 +128,7 @@ Index: libmisc/copydir.c #ifdef S_IFLNK /* * Copy any symbolic links -@@ -477,6 +485,7 @@ static int copy_dir (const char *src, co +@@ -456,6 +464,7 @@ static int copy_dir (const char *src, co gid_t old_gid, gid_t new_gid) { int err = 0; @@ -136,7 +136,7 @@ Index: libmisc/copydir.c /* * Create a new target directory, make it owned by -@@ -488,6 +497,16 @@ static int copy_dir (const char *src, co +@@ -467,6 +476,16 @@ static int copy_dir (const char *src, co return -1; } #endif /* WITH_SELINUX */ diff --git a/userdel-script.patch b/userdel-script.patch index ccbebc5..9701747 100644 --- a/userdel-script.patch +++ b/userdel-script.patch @@ -2,7 +2,7 @@ Index: lib/getdef.c =================================================================== --- lib/getdef.c.orig +++ lib/getdef.c -@@ -150,6 +150,8 @@ static struct itemdef def_table[] = { +@@ -128,6 +128,8 @@ static struct itemdef def_table[] = { {"UID_MIN", NULL}, {"UMASK", NULL}, {"USERDEL_CMD", NULL}, @@ -15,7 +15,7 @@ Index: etc/login.defs =================================================================== --- etc/login.defs.orig +++ etc/login.defs -@@ -270,9 +270,25 @@ NONEXISTENT /nonexistent +@@ -242,9 +242,25 @@ NONEXISTENT /nonexistent # It should remove any at/cron/print jobs etc. owned by # the user to be removed (passed as the first argument). # @@ -45,7 +45,7 @@ Index: src/userdel.c =================================================================== --- src/userdel.c.orig +++ src/userdel.c -@@ -131,7 +131,7 @@ static void close_files (void); +@@ -108,7 +108,7 @@ static void close_files (void); static void fail_exit (int); static void open_files (void); static void update_user (void); @@ -54,7 +54,7 @@ Index: src/userdel.c #ifdef EXTRA_CHECK_HOME_DIR static bool path_prefix (const char *, const char *); -@@ -774,13 +774,13 @@ static void update_user (void) +@@ -751,13 +751,13 @@ static void update_user (void) * cron, at, or print jobs. */ @@ -70,7 +70,7 @@ Index: src/userdel.c if (NULL == cmd) { return; } -@@ -1225,9 +1225,10 @@ int main (int argc, char **argv) +@@ -1203,9 +1203,10 @@ int main (int argc, char **argv) } /* @@ -83,16 +83,16 @@ Index: src/userdel.c open_files (); update_user (); update_groups (); -@@ -1348,7 +1349,7 @@ int main (int argc, char **argv) +@@ -1326,7 +1327,7 @@ int main (int argc, char **argv) * the entry from /etc/passwd. */ - if(prefix[0] == '\0') + if (prefix[0] == '\0') - user_cancel (user_name); + call_script ("USERDEL_CMD", user_name); close_files (); if (run_parts ("/etc/shadow-maint/userdel-post.d", user_name, "userdel")) { -@@ -1363,6 +1364,9 @@ int main (int argc, char **argv) +@@ -1341,6 +1342,9 @@ int main (int argc, char **argv) nscd_flush_cache ("group"); sssd_flush_cache (SSSD_DB_PASSWD | SSSD_DB_GROUP);