diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-06-26 16:18:39 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-06-26 16:18:39 +0000 |
commit | 5242eef8fc54636a41701fd9d7083ba6e4a4e0b3 (patch) | |
tree | e6a0980092957865a937cc0f34446df3d5194e99 /libmisc/isexpired.c | |
parent | Releasing progress-linux version 1:4.13+dfsg1-5~progress7.99u1. (diff) | |
download | shadow-5242eef8fc54636a41701fd9d7083ba6e4a4e0b3.tar.xz shadow-5242eef8fc54636a41701fd9d7083ba6e4a4e0b3.zip |
Merging upstream version 1:4.15.2.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'libmisc/isexpired.c')
-rw-r--r-- | libmisc/isexpired.c | 102 |
1 files changed, 0 insertions, 102 deletions
diff --git a/libmisc/isexpired.c b/libmisc/isexpired.c deleted file mode 100644 index ff20396..0000000 --- a/libmisc/isexpired.c +++ /dev/null @@ -1,102 +0,0 @@ -/* - * SPDX-FileCopyrightText: 1989 - 1994, Julianne Frances Haugh - * SPDX-FileCopyrightText: 1996 - 1997, Marek Michałkiewicz - * SPDX-FileCopyrightText: 2001 - 2005, Tomasz Kłoczko - * SPDX-FileCopyrightText: 2008 - 2009, Nicolas François - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/* - * Extracted from age.c and made part of libshadow.a - may be useful - * in other shadow-aware programs. --marekm - */ - -#include <config.h> - -#include <sys/types.h> -#include "prototypes.h" -#include "defines.h" -#include <pwd.h> -#include <time.h> - -#ident "$Id$" - - -/* - * isexpired - determine if account is expired yet - * - * isexpired calculates the expiration date based on the - * password expiration criteria. - * - * Return value: - * 0: The password is still valid - * 1: The password has expired, it must be changed - * 2: The password has expired since a long time and the account is - * now disabled. (password cannot be changed) - * 3: The account has expired - */ -int isexpired (const struct passwd *pw, /*@null@*/const struct spwd *sp) -{ - long now; - - now = (long) time ((time_t *) 0) / SCALE; - - if (NULL == sp) { - return 0; - } - - /* - * Quick and easy - there is an expired account field - * along with an inactive account field. Do the expired - * one first since it is worse. - */ - - if ((sp->sp_expire > 0) && (now >= sp->sp_expire)) { - return 3; - } - - /* - * Last changed date 1970-01-01 (not very likely) means that - * the password must be changed on next login (passwd -e). - * - * The check for "x" is a workaround for RedHat NYS libc bug - - * if /etc/shadow doesn't exist, getspnam() still succeeds and - * returns sp_lstchg==0 (must change password) instead of -1! - */ - if ( (0 == sp->sp_lstchg) - && (strcmp (pw->pw_passwd, SHADOW_PASSWD_STRING) == 0)) { - return 1; - } - - if ( (sp->sp_lstchg > 0) - && (sp->sp_max >= 0) - && (sp->sp_inact >= 0) - && (now >= (sp->sp_lstchg + sp->sp_max + sp->sp_inact))) { - return 2; - } - - /* - * The last and max fields must be present for an account - * to have an expired password. A maximum of >10000 days - * is considered to be infinite. - */ - - if ( (-1 == sp->sp_lstchg) - || (-1 == sp->sp_max) - || (sp->sp_max >= ((10000L * DAY) / SCALE))) { - return 0; - } - - /* - * Calculate today's day and the day on which the password - * is going to expire. If that date has already passed, - * the password has expired. - */ - - if (now >= (sp->sp_lstchg + sp->sp_max)) { - return 1; - } - return 0; -} - |