summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBalint Reczey <balint@balintreczey.hu>2022-11-10 16:24:06 +0100
committerBalint Reczey <balint@balintreczey.hu>2022-11-10 16:24:06 +0100
commit3987cc788047570ecf10707dfc8958780d85c73c (patch)
tree109724175f07436696f51b14b5abbd3f4d704d6d /src
parent8ead740677d19e48690d4f144ab090b83d47059f (diff)
downloadshadow-3987cc788047570ecf10707dfc8958780d85c73c.tar.gz
New upstream version 4.13+dfsg1upstream/4.13+dfsg1upstream
Diffstat (limited to 'src')
-rw-r--r--src/chage.c2
-rw-r--r--src/gpasswd.c12
-rw-r--r--src/lastlog.c9
-rw-r--r--src/login.c8
-rw-r--r--src/newusers.c3
-rw-r--r--src/sulogin.c2
-rw-r--r--src/useradd.c8
-rw-r--r--src/usermod.c11
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);
}
}