Hi,
I'm almost sure I sent this aeons ago already, but never got commited.
It calls explicit_bzero instead of memset on passwords as soon as they're not
needed in memory anymore.
Index: user.c
===================================================================
RCS file: /cvs/src/usr.sbin/user/user.c,v
retrieving revision 1.118
diff -u -p -u -r1.118 user.c
--- user.c 30 Nov 2016 23:58:07 -0000 1.118
+++ user.c 12 May 2017 07:56:11 -0000
@@ -1359,7 +1359,7 @@ moduser(char *login_name, char *newlogin
up->u_flags |= F_PASSWORD;
memsave(&up->u_password, pwp->pw_passwd,
strlen(pwp->pw_passwd));
- memset(pwp->pw_passwd, 'X', strlen(pwp->pw_passwd));
+ explicit_bzero(pwp->pw_passwd, strlen(pwp->pw_passwd));
}
}
endpwent();
@@ -1788,7 +1788,7 @@ useradd(int argc, char **argv)
break;
case 'p':
memsave(&u.u_password, optarg, strlen(optarg));
- memset(optarg, 'X', strlen(optarg));
+ explicit_bzero(optarg, strlen(optarg));
break;
case 'r':
defaultfield = 1;
@@ -1929,7 +1929,7 @@ usermod(int argc, char **argv)
break;
case 'p':
memsave(&u.u_password, optarg, strlen(optarg));
- memset(optarg, 'X', strlen(optarg));
+ explicit_bzero(optarg, strlen(optarg));
u.u_flags |= F_PASSWORD;
break;
case 's':