Revert 3 cherry-picks

This changes pull some more dependencies.  That's too much for a stable
branch, I think.  If anyone needs them, please ask for them, but for now
let's keep them out.

Reverts: 9d5591fba9 ("src/passwd.c: check password length upper limit")
Reverts: dbdda2a48a ("lib/: Saturate addition to avoid overflow")
Reverts: 541d4dde23 ("src/chage.c: Unify long overflow checks in print_day_as_date()")
Signed-off-by: Alejandro Colomar <alx@kernel.org>
This commit is contained in:
Alejandro Colomar
2024-02-20 22:47:41 +01:00
parent fee5e61d05
commit 2128715ede
4 changed files with 36 additions and 52 deletions
+25 -27
View File
@@ -72,7 +72,7 @@ static long expdate;
/* local function prototypes */
NORETURN static void usage (int status);
static int new_fields (void);
static void print_day_as_date (long day);
static void print_date (time_t date);
static void list_fields (void);
static void process_flags (int argc, char **argv);
static void check_flags (int argc, int opt_index);
@@ -227,22 +227,10 @@ static int new_fields (void)
return 1;
}
static void
print_day_as_date(long day)
static void print_date (time_t date)
{
char buf[80];
time_t date;
struct tm *tp;
if (day < 0) {
puts(_("never"));
return;
}
if (__builtin_mul_overflow(day, DAY, &date)) {
puts(_("future"));
return;
}
struct tm *tp;
char buf[80];
tp = gmtime (&date);
if (NULL == tp) {
@@ -253,7 +241,6 @@ print_day_as_date(long day)
}
}
/*
* list_fields - display the current values of the expiration fields
*
@@ -263,15 +250,21 @@ print_day_as_date(long day)
*/
static void list_fields (void)
{
long changed = 0;
long expires;
/*
* The "last change" date is either "never" or the date the password
* was last modified. The date is the number of days since 1/1/1970.
*/
(void) fputs (_("Last password change\t\t\t\t\t: "), stdout);
if (lstchgdate == 0) {
if (lstchgdate < 0 || lstchgdate > LONG_MAX / DAY) {
(void) puts (_("never"));
} else if (lstchgdate == 0) {
(void) puts (_("password must be changed"));
} else {
print_day_as_date(lstchgdate);
changed = lstchgdate * DAY;
print_date (changed);
}
/*
@@ -284,11 +277,11 @@ static void list_fields (void)
} else if ( (lstchgdate < 0)
|| (maxdays >= 10000)
|| (maxdays < 0)
|| (LONG_MAX - lstchgdate < maxdays))
{
|| ((LONG_MAX - changed) / DAY < maxdays)) {
(void) puts (_("never"));
} else {
print_day_as_date(lstchgdate + maxdays);
expires = changed + maxdays * DAY;
print_date (expires);
}
/*
@@ -304,12 +297,12 @@ static void list_fields (void)
|| (inactdays < 0)
|| (maxdays >= 10000)
|| (maxdays < 0)
|| (LONG_MAX - inactdays < maxdays)
|| (LONG_MAX - lstchgdate < maxdays + inactdays))
{
|| (maxdays > LONG_MAX - inactdays)
|| ((LONG_MAX - changed) / DAY < maxdays + inactdays)) {
(void) puts (_("never"));
} else {
print_day_as_date(lstchgdate + maxdays + inactdays);
expires = changed + (maxdays + inactdays) * DAY;
print_date (expires);
}
/*
@@ -317,7 +310,12 @@ static void list_fields (void)
* password expiring or not.
*/
(void) fputs (_("Account expires\t\t\t\t\t\t: "), stdout);
print_day_as_date(expdate);
if (expdate < 0 || LONG_MAX / DAY < expdate) {
(void) puts (_("never"));
} else {
expires = expdate * DAY;
print_date (expires);
}
/*
* Start with the easy numbers - the number of days before the
+1 -8
View File
@@ -195,7 +195,6 @@ static int new_password (const struct passwd *pw)
char orig[PASS_MAX + 1]; /* Original password */
char pass[PASS_MAX + 1]; /* New password */
int i; /* Counter for retries */
int ret;
bool warned;
int pass_max_len = -1;
const char *method;
@@ -301,14 +300,8 @@ static int new_password (const struct passwd *pw)
if (warned && (strcmp (pass, cp) != 0)) {
warned = false;
}
ret = STRTCPY (pass, cp);
STRFCPY (pass, cp);
erase_pass (cp);
if (ret == -1) {
(void) fputs (_("Password is too long.\n"), stderr);
memzero (orig, sizeof orig);
memzero (pass, sizeof pass);
return -1;
}
if (!amroot && (!obscure (orig, pass, pw) || reuse (pass, pw))) {
(void) puts (_("Try again."));