summaryrefslogtreecommitdiffstats
path: root/source/a/shadow
diff options
context:
space:
mode:
author Patrick J Volkerding <volkerdi@slackware.com>2016-06-30 20:26:57 +0000
committer Eric Hameleers <alien@slackware.com>2018-05-31 23:31:18 +0200
commitd31c50870d0bee042ce660e445c9294a59a3a65b (patch)
tree6bfc0de3c95267b401b620c2c67859557dc60f97 /source/a/shadow
parent76fc4757ac91ac7947a01fb7b53dddf9a78a01d1 (diff)
downloadcurrent-d31c50870d0bee042ce660e445c9294a59a3a65b.tar.gz
current-d31c50870d0bee042ce660e445c9294a59a3a65b.tar.xz
Slackware 14.2slackware-14.2
Thu Jun 30 20:26:57 UTC 2016 Slackware 14.2 x86_64 stable is released! The long development cycle (the Linux community has lately been living in "interesting times", as they say) is finally behind us, and we're proud to announce the release of Slackware 14.2. The new release brings many updates and modern tools, has switched from udev to eudev (no systemd), and adds well over a hundred new packages to the system. Thanks to the team, the upstream developers, the dedicated Slackware community, and everyone else who pitched in to help make this release a reality. The ISOs are off to be replicated, a 6 CD-ROM 32-bit set and a dual-sided 32-bit/64-bit x86/x86_64 DVD. Please consider supporting the Slackware project by picking up a copy from store.slackware.com. We're taking pre-orders now, and offer a discount if you sign up for a subscription. Have fun! :-)
Diffstat (limited to 'source/a/shadow')
-rw-r--r--source/a/shadow/patches/unused/r3299.diff12
-rw-r--r--source/a/shadow/shadow.CVE-2005-4890.relax.diff35
-rwxr-xr-xsource/a/shadow/shadow.SlackBuild16
-rw-r--r--source/a/shadow/shadow.glibc217-crypt.diff258
-rw-r--r--source/a/shadow/shadow.url2
5 files changed, 46 insertions, 277 deletions
diff --git a/source/a/shadow/patches/unused/r3299.diff b/source/a/shadow/patches/unused/r3299.diff
deleted file mode 100644
index a46b18f05..000000000
--- a/source/a/shadow/patches/unused/r3299.diff
+++ /dev/null
@@ -1,12 +0,0 @@
-Index: man/ru/Makefile.am
-===================================================================
---- man/ru/Makefile.am (revision 3298)
-+++ man/ru/Makefile.am (revision 3299)
-@@ -1,7 +1,6 @@
- mandir = @mandir@/ru
-
- man_MANS = \
-- $(man_nopam) \
- chage.1 \
- chfn.1 \
- chgpasswd.8 \
diff --git a/source/a/shadow/shadow.CVE-2005-4890.relax.diff b/source/a/shadow/shadow.CVE-2005-4890.relax.diff
new file mode 100644
index 000000000..98425e16a
--- /dev/null
+++ b/source/a/shadow/shadow.CVE-2005-4890.relax.diff
@@ -0,0 +1,35 @@
+From 0f6a809b7c4c9a8f4adb5b25808dd68000e17aa2 Mon Sep 17 00:00:00 2001
+From: mancha <mancha1@hush.com>
+Date: Wed, 04 Dec 2013
+Subject: restrict "su -c" only when callee is not root
+
+Shadow 4.1.5 addressed a tty-hijacking vulnerability in "su -c"
+(CVE-2005-4890) by detaching the controlling terminal in the non-PAM
+case via a TIOCNOTTY request.
+
+Bi-directional protection is excessive and breaks a commonly-used
+methods for privilege escalation on non-PAM systems (e.g. xterm -e
+/bin/su -s /bin/bash -c /bin/bash myscript).
+
+This patch relaxes the restriction and only detaches the controlling
+tty when the callee is not root (which is, after all, the threat vector).
+
+---
+ src/su.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/src/su.c
++++ b/src/su.c
+@@ -1076,10 +1076,10 @@ int main (int argc, char **argv)
+
+ set_environment (pw);
+
+- if (!doshell) {
++ if (!doshell && pw->pw_uid != 0) {
+ /* There is no need for a controlling terminal.
+ * This avoids the callee to inject commands on
+- * the caller's tty. */
++ * the caller's tty when the callee is not root. */
+ int err = -1;
+
+ #ifdef USE_PAM
diff --git a/source/a/shadow/shadow.SlackBuild b/source/a/shadow/shadow.SlackBuild
index 8194930d6..633d38514 100755
--- a/source/a/shadow/shadow.SlackBuild
+++ b/source/a/shadow/shadow.SlackBuild
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright 2005-2013 Patrick J. Volkerding, Sebeka, Minnesota, USA
+# Copyright 2005-2014 Patrick J. Volkerding, Sebeka, Minnesota, USA
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
@@ -21,8 +21,8 @@
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PKGNAM=shadow
-VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
-BUILD=${BUILD:-2}
+VERSION=${VERSION:-$(echo $PKGNAM-*.tar.xz | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
+BUILD=${BUILD:-1}
# Automatically determine the architecture we're building on:
if [ -z "$ARCH" ]; then
@@ -54,7 +54,7 @@ rm -rf $PKG
mkdir -p $TMP $PKG
cd $TMP
rm -rf shadow-$VERSION
-tar xvf $CWD/shadow-$VERSION.tar.?z* || exit 1
+tar xvf $CWD/shadow-$VERSION.tar.xz || exit 1
cd shadow-$VERSION
# Apply some patches taken from the svn trunk that
@@ -63,8 +63,11 @@ for patch in $CWD/patches/*.diff.gz ; do
zcat $patch | patch -p0 --verbose || exit 1
done
-# Patch to handle newer crypt() that may return NULL:
-zcat $CWD/shadow.glibc217-crypt.diff.gz | patch -p1 --verbose || exit 1
+# Relax the restrictions on "su -c" when it is used to become root.
+# It's not likely that root is going to try to inject commands back into
+# the user's shell to hack it, and the unnecessary restriction is causing
+# breakage:
+zcat $CWD/shadow.CVE-2005-4890.relax.diff.gz | patch -p1 --verbose || exit 1
# Re-run automake because of r3299 patch to man/ru/Makefile.am:
# (not used because it doesn't work... above patch does the intended fix)
@@ -83,6 +86,7 @@ CFLAGS="$SLKCFLAGS" \
--sysconfdir=/etc \
--mandir=/usr/man \
--docdir=/usr/doc/shadow-$VERSION \
+ --enable-subordinate-ids \
--disable-shared \
--without-libcrack \
--build=$ARCH-slackware-linux
diff --git a/source/a/shadow/shadow.glibc217-crypt.diff b/source/a/shadow/shadow.glibc217-crypt.diff
deleted file mode 100644
index e26ca10bb..000000000
--- a/source/a/shadow/shadow.glibc217-crypt.diff
+++ /dev/null
@@ -1,258 +0,0 @@
-From a616a72160c17fa193ad6ad95eb2c869633f4fe9 Mon Sep 17 00:00:00 2001
-From: mancha <mancha1@hush.com>
-Date: Fri, 4 Oct 2013 11:25:43
-Subject: [PATCH] Improve handling of NULL returns from crypt().
-
-Signed-off-by: mancha <mancha1@hush.com>
----
- ChangeLog | 15 +++++++++++++++
- lib/encrypt.c | 7 +++----
- lib/pwauth.c | 7 ++++++-
- libmisc/valid.c | 1 +
- src/chgpasswd.c | 4 ++++
- src/chpasswd.c | 4 ++++
- src/gpasswd.c | 4 ++++
- src/newgrp.c | 3 ++-
- src/newusers.c | 26 +++++++++++++++++++++-----
- src/passwd.c | 15 +++++++++++++++
- 10 files changed, 75 insertions(+), 11 deletions(-)
-
-diff --git a/ChangeLog b/ChangeLog
-index aab00ae..1416a38 100644
---- a/ChangeLog
-+++ b/ChangeLog
-@@ -1,3 +1,18 @@
-+2013-05-06 mancha <mancha1@hush.com>
-+
-+ * lib/encrypt.c: crypt() in glibc/eglibc 2.17 now fails if passed
-+ a salt that violates specs. On Linux, crypt() also fails with
-+ DES/MD5 salts in FIPS140 mode. Rather than exit() on NULL returns
-+ we send them back to the caller for appropriate handling.
-+ * lib/pwauth.c: Handle NULL return from crypt().
-+ * libmisc/valid.c: Likewise.
-+ * src/chgpasswd.c: Likewise.
-+ * src/chpasswd.c: Likewise.
-+ * src/gpasswd.c: Likewise.
-+ * src/newgrp.c: Likewise.
-+ * src/newusers.c: Likewise.
-+ * src/passwd.c: Likewise.
-+
- 2012-05-25 Nicolas François <nicolas.francois@centraliens.net>
-
- * NEWS: Set release date.
-diff --git a/lib/encrypt.c b/lib/encrypt.c
-index 7daa8da..49cb691 100644
---- a/lib/encrypt.c
-+++ b/lib/encrypt.c
-@@ -49,11 +49,10 @@
- if (!cp) {
- /*
- * Single Unix Spec: crypt() may return a null pointer,
-- * and set errno to indicate an error. The caller doesn't
-- * expect us to return NULL, so...
-+ * and set errno to indicate an error. In this case return
-+ * the NULL so the caller can handle appropriately.
- */
-- perror ("crypt");
-- exit (EXIT_FAILURE);
-+ return cp;
- }
-
- /* The GNU crypt does not return NULL if the algorithm is not
-diff --git a/lib/pwauth.c b/lib/pwauth.c
-index 4b26daa..086a72e 100644
---- a/lib/pwauth.c
-+++ b/lib/pwauth.c
-@@ -73,6 +73,7 @@ int pw_auth (const char *cipher,
- char prompt[1024];
- char *clear = NULL;
- const char *cp;
-+ const char *encrypted;
- int retval;
-
- #ifdef SKEY
-@@ -177,7 +178,11 @@ int pw_auth (const char *cipher,
- * the results there as well.
- */
-
-- retval = strcmp (pw_encrypt (input, cipher), cipher);
-+ encrypted = pw_encrypt (input, cipher);
-+ if (encrypted!=NULL)
-+ retval = strcmp (encrypted, cipher);
-+ else
-+ retval = -1;
-
- #ifdef SKEY
- /*
-diff --git a/libmisc/valid.c b/libmisc/valid.c
-index aa0390a..4b85d67 100644
---- a/libmisc/valid.c
-+++ b/libmisc/valid.c
-@@ -95,6 +95,7 @@ bool valid (const char *password, const struct passwd *ent)
- */
-
- if ( (NULL != ent->pw_name)
-+ && (NULL != encrypted)
- && (strcmp (encrypted, ent->pw_passwd) == 0)) {
- return true;
- } else {
-diff --git a/src/chgpasswd.c b/src/chgpasswd.c
-index 0f41d0b..6c42a09 100644
---- a/src/chgpasswd.c
-+++ b/src/chgpasswd.c
-@@ -469,6 +469,10 @@ int main (int argc, char **argv)
- #endif
- cp = pw_encrypt (newpwd,
- crypt_make_salt (crypt_method, arg));
-+ if (cp == NULL) {
-+ perror ("crypt");
-+ exit (EXIT_FAILURE);
-+ }
- }
-
- /*
-diff --git a/src/chpasswd.c b/src/chpasswd.c
-index 928e2d7..4968b0d 100644
---- a/src/chpasswd.c
-+++ b/src/chpasswd.c
-@@ -492,6 +492,10 @@ int main (int argc, char **argv)
- #endif
- cp = pw_encrypt (newpwd,
- crypt_make_salt(crypt_method, arg));
-+ if (cp == NULL) {
-+ perror ("crypt");
-+ exit (EXIT_FAILURE);
-+ }
- }
-
- /*
-diff --git a/src/gpasswd.c b/src/gpasswd.c
-index df8d714..0043610 100644
---- a/src/gpasswd.c
-+++ b/src/gpasswd.c
-@@ -939,6 +939,10 @@ static void change_passwd (struct group *gr)
- }
-
- cp = pw_encrypt (pass, crypt_make_salt (NULL, NULL));
-+ if (cp==NULL) {
-+ perror ("crypt");
-+ exit (EXIT_FAILURE);
-+ }
- memzero (pass, sizeof pass);
- #ifdef SHADOWGRP
- if (is_shadowgrp) {
-diff --git a/src/newgrp.c b/src/newgrp.c
-index 9330c72..6b87761 100644
---- a/src/newgrp.c
-+++ b/src/newgrp.c
-@@ -184,7 +184,8 @@ static void check_perms (const struct group *grp,
- cpasswd = pw_encrypt (cp, grp->gr_passwd);
- strzero (cp);
-
-- if (grp->gr_passwd[0] == '\0' ||
-+ if (cpasswd == NULL ||
-+ grp->gr_passwd[0] == '\0' ||
- strcmp (cpasswd, grp->gr_passwd) != 0) {
- #ifdef WITH_AUDIT
- snprintf (audit_buf, sizeof(audit_buf),
-diff --git a/src/newusers.c b/src/newusers.c
-index 994898e..5f83a6a 100644
---- a/src/newusers.c
-+++ b/src/newusers.c
-@@ -387,6 +387,7 @@ static int add_user (const char *name, uid_t uid, gid_t gid)
- static void update_passwd (struct passwd *pwd, const char *password)
- {
- void *crypt_arg = NULL;
-+ char *cp;
- if (crypt_method != NULL) {
- #ifdef USE_SHA_CRYPT
- if (sflg) {
-@@ -398,9 +399,13 @@ static void update_passwd (struct passwd *pwd, const char *password)
- if ((crypt_method != NULL) && (0 == strcmp(crypt_method, "NONE"))) {
- pwd->pw_passwd = (char *)password;
- } else {
-- pwd->pw_passwd = pw_encrypt (password,
-- crypt_make_salt (crypt_method,
-- crypt_arg));
-+ cp=pw_encrypt (password, crypt_make_salt (crypt_method,
-+ crypt_arg));
-+ if (cp == NULL) {
-+ perror ("crypt");
-+ exit (EXIT_FAILURE);
-+ }
-+ pwd->pw_passwd = cp;
- }
- }
- #endif /* !USE_PAM */
-@@ -412,6 +417,7 @@ static int add_passwd (struct passwd *pwd, const char *password)
- {
- const struct spwd *sp;
- struct spwd spent;
-+ char *cp;
-
- #ifndef USE_PAM
- void *crypt_arg = NULL;
-@@ -448,7 +454,12 @@ static int add_passwd (struct passwd *pwd, const char *password)
- } else {
- const char *salt = crypt_make_salt (crypt_method,
- crypt_arg);
-- spent.sp_pwdp = pw_encrypt (password, salt);
-+ cp = pw_encrypt (password, salt);
-+ if (cp == NULL) {
-+ perror ("crypt");
-+ exit (EXIT_FAILURE);
-+ }
-+ spent.sp_pwdp = cp;
- }
- spent.sp_lstchg = (long) time ((time_t *) 0) / SCALE;
- if (0 == spent.sp_lstchg) {
-@@ -492,7 +503,12 @@ static int add_passwd (struct passwd *pwd, const char *password)
- spent.sp_pwdp = (char *)password;
- } else {
- const char *salt = crypt_make_salt (crypt_method, crypt_arg);
-- spent.sp_pwdp = pw_encrypt (password, salt);
-+ cp = pw_encrypt (password, salt);
-+ if (cp == NULL) {
-+ perror ("crypt");
-+ exit (EXIT_FAILURE);
-+ }
-+ spent.sp_pwdp = cp;
- }
- #else
- /*
-diff --git a/src/passwd.c b/src/passwd.c
-index ac90aa3..ae26666 100644
---- a/src/passwd.c
-+++ b/src/passwd.c
-@@ -242,6 +242,17 @@ static int new_password (const struct pa
- }
-
- cipher = pw_encrypt (clear, crypt_passwd);
-+ if (cipher == NULL) {
-+ strzero (clear);
-+ (void) fprintf (stderr,
-+ _("Failed to crypt password for %s.\n"),
-+ pw->pw_name);
-+ SYSLOG ((LOG_INFO,
-+ "failed to crypt password for %s",
-+ pw->pw_name));
-+ return -1;
-+ }
-+
- if (strcmp (cipher, crypt_passwd) != 0) {
- strzero (clear);
- strzero (cipher);
-@@ -349,6 +360,10 @@ static int new_password (const struct pa
- * Encrypt the password, then wipe the cleartext password.
- */
- cp = pw_encrypt (pass, crypt_make_salt (NULL, NULL));
-+ if (cp == NULL) {
-+ perror ("crypt");
-+ exit (EXIT_FAILURE);
-+ }
- memzero (pass, sizeof pass);
-
- #ifdef HAVE_LIBCRACK_HIST
---
-1.7.11.4
-
diff --git a/source/a/shadow/shadow.url b/source/a/shadow/shadow.url
index b18864a85..5e378411f 100644
--- a/source/a/shadow/shadow.url
+++ b/source/a/shadow/shadow.url
@@ -1 +1 @@
-ftp://pkg-shadow.alioth.debian.org/pub/pkg-shadow
+http://pkg-shadow.alioth.debian.org/releases/