From: Saul Wold <sgw@linux.intel.com>
To: openembedded-core@lists.openembedded.org
Subject: [PATCH 2/2] shadow: add patch to fix crypt: Invalid Argument
Date: Fri, 5 Apr 2013 10:09:32 -0700 [thread overview]
Message-ID: <1365181772-18644-3-git-send-email-sgw@linux.intel.com> (raw)
In-Reply-To: <1365181772-18644-1-git-send-email-sgw@linux.intel.com>
This patch came from Slackware and address a change in crypt()'s handling
of an invalid seed, which in the past returned an encrypted string and now
returns a NULL.
[YOCTO #4097] related to tinylogin segfault
Signed-off-by: Saul Wold <sgw@linux.intel.com>
---
.../files/slackware_fix_for_glib-2.17_crypt.patch | 63 ++++++++++++++++++++++
meta/recipes-extended/shadow/shadow_4.1.4.3.bb | 1 +
2 files changed, 64 insertions(+)
create mode 100644 meta/recipes-extended/shadow/files/slackware_fix_for_glib-2.17_crypt.patch
diff --git a/meta/recipes-extended/shadow/files/slackware_fix_for_glib-2.17_crypt.patch b/meta/recipes-extended/shadow/files/slackware_fix_for_glib-2.17_crypt.patch
new file mode 100644
index 0000000..7cd45af
--- /dev/null
+++ b/meta/recipes-extended/shadow/files/slackware_fix_for_glib-2.17_crypt.patch
@@ -0,0 +1,63 @@
+
+This patch is from Slackware, I tried to find the actual
+author to add that attribution. The comment below is the
+best summary, I will not repeat it here.
+
+Upstream-Status: Backport from slackware
+
+Signed-off-by: Saul Wold <sgw@linux.intel.com>
+
+Index: shadow-4.1.4.3/lib/encrypt.c
+===================================================================
+--- shadow-4.1.4.3.orig/lib/encrypt.c
++++ shadow-4.1.4.3/lib/encrypt.c
+@@ -45,15 +45,40 @@ char *pw_encrypt (const char *clear, con
+ static char cipher[128];
+ char *cp;
+
+- cp = crypt (clear, salt);
+- 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...
+- */
+- perror ("crypt");
+- exit (EXIT_FAILURE);
++ cp = crypt (clear, salt);
++ if (!cp) {
++ /*
++ * In glibc-2.17 and newer, crypt() will return NULL if
++ * it was called using an invalid salt format. Previous
++ * versions of glibc would go ahead and compute a DES hash
++ * using the invalid salt. The salt value in this case was
++ * always '!'. We might arrive at this place if either the
++ * user does not exist, or if the hash in /etc/shadow doesn't
++ * have the proper magic for one of the supported hash
++ * formats (for example, if the account was locked using
++ * "passwd -l". To handle this situation, we will recompute
++ * the hash using a hardcoded salt as was previously done
++ * by glibc. The hash returned by the old glibc function
++ * always began with "!!", which would ensure that it could
++ * never match an otherwise valid hash in /etc/shadow that
++ * was disabled with a "!" at the beginning (since the second
++ * character would never be "!" as well), so we will also
++ * prepend the resulting hash with "!!". Finally, in case
++ * crypt() failed for some other reason we will check to see
++ * if we still get NULL from crypt even with the valid salt
++ * and will fail if that's the case.
++ */
++
++ /* Recalculate hash using a hardcoded, valid SHA512 salt: */
++ cp = crypt (clear, "$6$8IIcy/1EPOk/");
++
++ if (!cp) {
++ perror ("crypt");
++ exit (EXIT_FAILURE);
++ } else {
++ sprintf (cipher, "!!%s", cp);
++ return cipher;
++ }
+ }
+
+ /* The GNU crypt does not return NULL if the algorithm is not
diff --git a/meta/recipes-extended/shadow/shadow_4.1.4.3.bb b/meta/recipes-extended/shadow/shadow_4.1.4.3.bb
index 8226a6e..caf24c0 100644
--- a/meta/recipes-extended/shadow/shadow_4.1.4.3.bb
+++ b/meta/recipes-extended/shadow/shadow_4.1.4.3.bb
@@ -23,6 +23,7 @@ SRC_URI = "http://pkg-shadow.alioth.debian.org/releases/${BPN}-${PV}.tar.bz2 \
file://shadow-4.1.4.2-su_no_sanitize_env.patch \
file://shadow-update-pam-conf.patch \
file://shadow_fix_for_automake-1.12.patch \
+ file://slackware_fix_for_glib-2.17_crypt.patch \
"
SRC_URI[md5sum] = "b8608d8294ac88974f27b20f991c0e79"
--
1.8.0.2
prev parent reply other threads:[~2013-04-05 17:27 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-05 17:09 [PATCH 0/2] Fix issue with newer glibc crypt() function Saul Wold
2013-04-05 17:09 ` [PATCH 1/2] tinylogin: fix segfault from crypt() Saul Wold
2013-04-05 17:09 ` Saul Wold [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1365181772-18644-3-git-send-email-sgw@linux.intel.com \
--to=sgw@linux.intel.com \
--cc=openembedded-core@lists.openembedded.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.