* libmisc/salt.c: Make sure the salt string is terminated at the
right place (either 8th, or 11th position). * NEWS, src/chgpasswd.c, src/chpasswd.c: The protocol + salt does not need 15 chars. No need for a temporary buffer. This change the fix committed on 2007-11-10. The salt provided to pw_encrypt could have been too long.
This commit is contained in:
parent
e163c5fe9c
commit
449f17385a
@ -1,3 +1,12 @@
|
|||||||
|
2007-11-10 Nicolas François <nicolas.francois@centraliens.net>
|
||||||
|
|
||||||
|
* libmisc/salt.c: Make sure the salt string is terminated at the
|
||||||
|
right place (either 8th, or 11th position).
|
||||||
|
* NEWS, src/chgpasswd.c, src/chpasswd.c: The protocol + salt does
|
||||||
|
not need 15 chars. No need for a temporary buffer.
|
||||||
|
This change the fix committed on 2007-11-10. The salt provided to
|
||||||
|
pw_encrypt could have been too long.
|
||||||
|
|
||||||
2007-11-16 Nicolas François <nicolas.francois@centraliens.net>
|
2007-11-16 Nicolas François <nicolas.francois@centraliens.net>
|
||||||
|
|
||||||
* man/fr/fr.po: Fix typo: missing / in <placeholder-1/>. This
|
* man/fr/fr.po: Fix typo: missing / in <placeholder-1/>. This
|
||||||
|
3
NEWS
3
NEWS
@ -7,7 +7,8 @@ shadow-4.0.18.1 -> shadow-4.0.18.2 UNRELEASED
|
|||||||
useradd's -g option. Applied Debian patch 397_non_numerical_identifier.
|
useradd's -g option. Applied Debian patch 397_non_numerical_identifier.
|
||||||
Thanks also to Greg Schafer <gschafer@zip.com.au>.
|
Thanks also to Greg Schafer <gschafer@zip.com.au>.
|
||||||
- chgpasswd, chpasswd: Fix chpasswd and chgpasswd stack overflow. Based on
|
- chgpasswd, chpasswd: Fix chpasswd and chgpasswd stack overflow. Based on
|
||||||
Fedora's shadow-4.0.18.1-overflow.patch.
|
the Fedora's shadow-4.0.18.1-overflow.patch and Debian's
|
||||||
|
495_salt_stack_smash patches.
|
||||||
- newgrp: Don't ask for a password if there are no group passwords. Just
|
- newgrp: Don't ask for a password if there are no group passwords. Just
|
||||||
directly give up.
|
directly give up.
|
||||||
- The permissions of the suid binaries is now configurable in
|
- The permissions of the suid binaries is now configurable in
|
||||||
|
@ -62,11 +62,13 @@ char *crypt_make_salt (void)
|
|||||||
{
|
{
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
static char result[40];
|
static char result[40];
|
||||||
|
int max_salt_len = 8;
|
||||||
|
|
||||||
result[0] = '\0';
|
result[0] = '\0';
|
||||||
#ifndef USE_PAM
|
#ifndef USE_PAM
|
||||||
if (getdef_bool ("MD5_CRYPT_ENAB")) {
|
if (getdef_bool ("MD5_CRYPT_ENAB")) {
|
||||||
strcpy (result, "$1$"); /* magic for the new MD5 crypt() */
|
strcpy (result, "$1$"); /* magic for the new MD5 crypt() */
|
||||||
|
max_salt_len += 3;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -77,8 +79,8 @@ char *crypt_make_salt (void)
|
|||||||
strcat (result, l64a (tv.tv_usec));
|
strcat (result, l64a (tv.tv_usec));
|
||||||
strcat (result, l64a (tv.tv_sec + getpid () + clock ()));
|
strcat (result, l64a (tv.tv_sec + getpid () + clock ()));
|
||||||
|
|
||||||
if (strlen (result) > 3 + 8) /* magic+salt */
|
if (strlen (result) > max_salt_len) /* magic+salt */
|
||||||
result[11] = '\0';
|
result[max_salt_len] = '\0';
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -243,14 +243,15 @@ int main (int argc, char **argv)
|
|||||||
newpwd = cp;
|
newpwd = cp;
|
||||||
if (!eflg) {
|
if (!eflg) {
|
||||||
if (md5flg) {
|
if (md5flg) {
|
||||||
char tmp[12];
|
char md5salt[12] = "$1$";
|
||||||
char salt[15] = "";
|
char *salt = crypt_make_salt ();
|
||||||
|
|
||||||
strcat (tmp, crypt_make_salt ());
|
if (strncmp (salt, "$1$", 3) == 0) {
|
||||||
if (!strncmp (tmp, "$1$", 3))
|
strncpy (md5salt, salt, 11);
|
||||||
strcat (salt, "$1$");
|
} else {
|
||||||
strcat (salt, tmp);
|
strncat (md5salt, salt, 8);
|
||||||
cp = pw_encrypt (newpwd, salt);
|
}
|
||||||
|
cp = pw_encrypt (newpwd, md5salt);
|
||||||
} else
|
} else
|
||||||
cp = pw_encrypt (newpwd, crypt_make_salt ());
|
cp = pw_encrypt (newpwd, crypt_make_salt ());
|
||||||
}
|
}
|
||||||
|
@ -239,13 +239,14 @@ int main (int argc, char **argv)
|
|||||||
newpwd = cp;
|
newpwd = cp;
|
||||||
if (!eflg) {
|
if (!eflg) {
|
||||||
if (md5flg) {
|
if (md5flg) {
|
||||||
char tmp[12];
|
char md5salt[12] = "$1$";
|
||||||
char salt[15] = "";
|
char *salt = crypt_make_salt ();
|
||||||
|
|
||||||
strcat (tmp, crypt_make_salt ());
|
if (strncmp (salt, "$1$", 3) == 0) {
|
||||||
if (!strncmp (tmp, "$1$", 3))
|
strncpy (md5salt, salt, 11);
|
||||||
strcat (salt, "$1$");
|
} else {
|
||||||
strcat (salt, tmp);
|
strncat (md5salt, salt, 8);
|
||||||
|
}
|
||||||
cp = pw_encrypt (newpwd, salt);
|
cp = pw_encrypt (newpwd, salt);
|
||||||
} else
|
} else
|
||||||
cp = pw_encrypt (newpwd, crypt_make_salt ());
|
cp = pw_encrypt (newpwd, crypt_make_salt ());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user