diff options
author | Balint Reczey <balint@balintreczey.hu> | 2022-11-10 16:24:06 +0100 |
---|---|---|
committer | Balint Reczey <balint@balintreczey.hu> | 2022-11-10 16:24:06 +0100 |
commit | 3987cc788047570ecf10707dfc8958780d85c73c (patch) | |
tree | 109724175f07436696f51b14b5abbd3f4d704d6d /src | |
parent | 8ead740677d19e48690d4f144ab090b83d47059f (diff) | |
download | shadow-3987cc788047570ecf10707dfc8958780d85c73c.tar.gz |
New upstream version 4.13+dfsg1upstream/4.13+dfsg1upstream
Diffstat (limited to 'src')
-rw-r--r-- | src/chage.c | 2 | ||||
-rw-r--r-- | src/gpasswd.c | 12 | ||||
-rw-r--r-- | src/lastlog.c | 9 | ||||
-rw-r--r-- | src/login.c | 8 | ||||
-rw-r--r-- | src/newusers.c | 3 | ||||
-rw-r--r-- | src/sulogin.c | 2 | ||||
-rw-r--r-- | src/useradd.c | 8 | ||||
-rw-r--r-- | src/usermod.c | 11 |
8 files changed, 27 insertions, 28 deletions
diff --git a/src/chage.c b/src/chage.c index 8cf67794..01570d72 100644 --- a/src/chage.c +++ b/src/chage.c @@ -228,7 +228,7 @@ static void print_date (time_t date) if (NULL == tp) { (void) printf ("time_t: %lu\n", (unsigned long)date); } else { - (void) strftime (buf, sizeof buf, iflg ? "%%Y-%%m-%%d" : "%%b %%d, %%Y", tp); + (void) strftime (buf, sizeof buf, iflg ? "%Y-%m-%d" : "%b %d, %Y", tp); (void) puts (buf); } } diff --git a/src/gpasswd.c b/src/gpasswd.c index 85fb1d17..5983f787 100644 --- a/src/gpasswd.c +++ b/src/gpasswd.c @@ -1186,17 +1186,11 @@ int main (int argc, char **argv) #ifdef SHADOWGRP if (is_shadowgrp) { - if (sgent.sg_adm) { - xfree(sgent.sg_adm); - } - if (sgent.sg_mem) { - xfree(sgent.sg_mem); - } + free(sgent.sg_adm); + free(sgent.sg_mem); } #endif - if (grent.gr_mem) { - xfree(grent.gr_mem); - } + free(grent.gr_mem); exit (E_SUCCESS); } diff --git a/src/lastlog.c b/src/lastlog.c index 0d4b5fd2..f5c0a5cc 100644 --- a/src/lastlog.c +++ b/src/lastlog.c @@ -150,9 +150,12 @@ static void print_one (/*@null@*/const struct passwd *pw) ll_time = ll.ll_time; tm = localtime (&ll_time); - strftime (ptime, sizeof (ptime), "%a %b %e %H:%M:%S %z %Y", tm); - cp = ptime; - + if (tm == NULL) { + cp = "(unknown)"; + } else { + strftime (ptime, sizeof (ptime), "%a %b %e %H:%M:%S %z %Y", tm); + cp = ptime; + } if (ll.ll_time == (time_t) 0) { cp = _("**Never logged in**\0"); } diff --git a/src/login.c b/src/login.c index d1198756..00482816 100644 --- a/src/login.c +++ b/src/login.c @@ -419,9 +419,7 @@ static void get_pam_user (char **ptr_pam_user) retcode = pam_get_item (pamh, PAM_USER, (const void **)&ptr_user); PAM_FAIL_CHECK; - if (NULL != *ptr_pam_user) { - free (*ptr_pam_user); - } + free (*ptr_pam_user); if (NULL != ptr_user) { *ptr_pam_user = xstrdup ((const char *)ptr_user); } else { @@ -872,9 +870,7 @@ int main (int argc, char **argv) * PAM APIs. */ get_pam_user (&pam_user); - if (NULL != username) { - free (username); - } + free (username); username = xstrdup (pam_user); failent_user = get_failent_user (username); diff --git a/src/newusers.c b/src/newusers.c index 4c6546e8..deeb3614 100644 --- a/src/newusers.c +++ b/src/newusers.c @@ -285,8 +285,7 @@ static int add_group (const char *name, const char *gid, gid_t *ngid, uid_t uid) fprintf (stderr, _("%s: invalid group name '%s'\n"), Prog, grent.gr_name); - if (grent.gr_name) - free (grent.gr_name); + free (grent.gr_name); return -1; } diff --git a/src/sulogin.c b/src/sulogin.c index 08feade2..2c5e0943 100644 --- a/src/sulogin.c +++ b/src/sulogin.c @@ -216,7 +216,7 @@ static void catch_signals (unused int sig) sleep (2); (void) puts (_("Login incorrect")); } - strzero (pass); + memzero (pass, sizeof pass); (void) alarm (0); (void) signal (SIGALRM, SIG_DFL); environ = newenvp; /* make new environment active */ diff --git a/src/useradd.c b/src/useradd.c index 6eaeb533..7ea0a9c4 100644 --- a/src/useradd.c +++ b/src/useradd.c @@ -1996,8 +1996,9 @@ static void faillog_reset (uid_t uid) struct faillog fl; int fd; off_t offset_uid = (off_t) (sizeof fl) * uid; + struct stat st; - if (access (FAILLOG_FILE, F_OK) != 0) { + if (stat (FAILLOG_FILE, &st) != 0 || st.st_size <= offset_uid) { return; } @@ -2033,8 +2034,9 @@ static void lastlog_reset (uid_t uid) int fd; off_t offset_uid = (off_t) (sizeof ll) * uid; uid_t max_uid; + struct stat st; - if (access (LASTLOG_FILE, F_OK) != 0) { + if (stat (LASTLOG_FILE, &st) != 0 || st.st_size <= offset_uid) { return; } @@ -2370,7 +2372,7 @@ static void create_mail (void) if (NULL == spool) { return; } - file = alloca (strlen (prefix) + strlen (spool) + strlen (user_name) + 2); + file = alloca (strlen (prefix) + strlen (spool) + strlen (user_name) + 3); if (prefix[0]) sprintf (file, "%s/%s/%s", prefix, spool, user_name); else diff --git a/src/usermod.c b/src/usermod.c index 44e056ae..c1a5b2cd 100644 --- a/src/usermod.c +++ b/src/usermod.c @@ -716,7 +716,7 @@ static void update_group (void) * If rflg+Gflg is passed in AKA -rG invert is_member flag, which removes * mentioned groups while leaving the others. */ - if (Gflg && rflg && was_member) { + if (Gflg && rflg) { is_member = !is_member; } @@ -765,7 +765,7 @@ static void update_group (void) "delete '%s' from group '%s'", user_name, ngrp->gr_name)); } - } else { + } else if (is_member) { /* User was not a member but is now a member this * group. */ @@ -839,7 +839,7 @@ static void update_gshadow (void) * If rflg+Gflg is passed in AKA -rG invert is_member, to remove targeted * groups while leaving the user apart of groups not mentioned */ - if (Gflg && rflg && was_member) { + if (Gflg && rflg) { is_member = !is_member; } @@ -1882,6 +1882,11 @@ static void move_home (void) Prog, prefix_user_home, prefix_user_newhome); fail_exit (E_HOMEDIR); } + } else { + fprintf (stderr, + _("%s: The previous home directory (%s) does not " + "exist or is inaccessible. Move cannot be completed.\n"), + Prog, prefix_user_home); } } |