History log of /freebsd-11-stable/usr.sbin/pw/pw_user.c
Revision Date Author Comments
(<<< Hide modified files)
(Show modified files >>>)
# 360326 25-Apr-2020 dim

MFC r348282 (by lwhsu):

Remove an uneeded indentation introduced in r286196 to silence gcc warnging

Sponsored by: The FreeBSD Foundation


# 330694 09-Mar-2018 dab

MFC r330245:

Allow the "@" and "!" characters in passwd file GECOS fields.

Two PRs (152084 & 210187) request allowing the "@" and/or "!"
characters in the passwd file GECOS field. The man page for pw does
not mention that those characters are disallowed, Linux supports those
characters in this field, and the "@" character in particular would be
useful for storing email addresses in that field.

PR: 152084, 210187
Submitted by: jschauma@netmeister.org, Dave Cottlehuber <dch@freebsd.org>
Reported by: jschauma@netmeister.org, Dave Cottlehuber <dch@freebsd.org>
Sponsored by: Dell EMC


# 330449 05-Mar-2018 eadler

MFC r326276:

various: general adoption of SPDX licensing ID tags.

Mainly focus on files that use BSD 2-Clause license, however the tool I
was using misidentified many licenses so this was mostly a manual - error
prone - task.

The Software Package Data Exchange (SPDX) group provides a specification
to make it easier for automated tools to detect and summarize well known
opensource licenses. We are gradually adopting the specification, noting
that the tags are considered only advisory and do not, in any way,
superceed or replace the license texts.

No functional change intended.


# 327090 22-Dec-2017 eugen

MFC r326872: fix expiration arithmetic after r326738 and MFC.

Approved by: mav (mentor)


# 326848 14-Dec-2017 eugen

MFC r326738: pw(8): correct expiration period handling
and command line overrides to preconfigured values for -e, -p and -w flags.

Use non-negative symbols instead of magic values
in passwd_val/pw_password functions.

PR: 223431
Submitted by: Yuri Pankov (in part, patch for the manual)
Approved by: mav (mentor)
Relnotes: yes


# 323009 30-Aug-2017 emaste

MFC r322581: remove debug files in delete-old* when WITHOUT_DEBUG_FILES

Sponsored by: The FreeBSD Foundation


# 322919 26-Aug-2017 emaste

MFC r322677: pw usermod: Properly deal with empty secondary group lists (-G '')

PR: 221417
Relnotes: Yes


# 319217 30-May-2017 asomers

MFC r318141, r318143-r318144

r318141:
strcpy => strlcpy

Reported by: Coverity
CID: 1352771
Sponsored by: Spectra Logic Corp

r318143:
strcpy => strlcpy

Reported by: Coverity
CID: 1006715
Sponsored by: Spectra Logic Corp

r318144:
Don't depend on assert(3) getting evaluated

Reported by: imp
X-MFC-With: 318141, 318143
Sponsored by: Spectra Logic Corp


# 316347 01-Apr-2017 bapt

MFC: r315912 (by eugen@) and r315935

Properly initialise with content of pw.conf(5) that was mistakenly ignored.
Also, respect "defaultgroup" if specified there.

Add a regression test

PR: 217934
Reported by: Victor Sudakov <vas@mpeks.tomsk.su>


# 312931 28-Jan-2017 bapt

MFC r312644, r312650

r312644:
Readd a feature lost in pw(8) refactoring

pw usermod foo -m

It used to be able to (re)create the home directory if it didn't exists

PR: 216224
Reported by: ae
MFC after: 3 days

r312650:
Really restore the old behaviour for pw usermod -m

It again reinstall missing skel files without overwriting changed one
Add a regression test about it

Reported by: ae
MFC after: 3 days


# 305741 12-Sep-2016 asomers

MFC r302778

pw should sanitize the argument of -w.

Otherwise, it will silently disable the login for the selected account if
the argument is unrecognizable.

usr.sbin/pw/pw.h
usr.sbin/pw/pw_conf.c
usr.sbin/pw/pw_user.c
Use separate rules to validate boolean parameters and passwd
parameters. Error out if a password parameter cannot be parsed.

usr.sbin/pw/tests/Makefile
usr.sbin/pw/tests/crypt.c
usr.sbin/pw/tests/pw_useradd.sh
usr.sbin/pw/tests/pw_usermod.sh
Add tests for the validation. Also, enhance existing
password-related tests to actually validate that the correct hash is
written to master.passwd.


# 302408 07-Jul-2016 gjb

Copy head@r302406 to stable/11 as part of the 11.0-RELEASE cycle.
Prune svn:mergeinfo from the new branch, as nothing has been merged
here.

Additional commits post-branch will follow.

Approved by: re (implicit)
Sponsored by: The FreeBSD Foundation


/freebsd-11-stable/MAINTAINERS
/freebsd-11-stable/cddl
/freebsd-11-stable/cddl/contrib/opensolaris
/freebsd-11-stable/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/print
/freebsd-11-stable/cddl/contrib/opensolaris/cmd/zfs
/freebsd-11-stable/cddl/contrib/opensolaris/lib/libzfs
/freebsd-11-stable/contrib/amd
/freebsd-11-stable/contrib/apr
/freebsd-11-stable/contrib/apr-util
/freebsd-11-stable/contrib/atf
/freebsd-11-stable/contrib/binutils
/freebsd-11-stable/contrib/bmake
/freebsd-11-stable/contrib/byacc
/freebsd-11-stable/contrib/bzip2
/freebsd-11-stable/contrib/com_err
/freebsd-11-stable/contrib/compiler-rt
/freebsd-11-stable/contrib/dialog
/freebsd-11-stable/contrib/dma
/freebsd-11-stable/contrib/dtc
/freebsd-11-stable/contrib/ee
/freebsd-11-stable/contrib/elftoolchain
/freebsd-11-stable/contrib/elftoolchain/ar
/freebsd-11-stable/contrib/elftoolchain/brandelf
/freebsd-11-stable/contrib/elftoolchain/elfdump
/freebsd-11-stable/contrib/expat
/freebsd-11-stable/contrib/file
/freebsd-11-stable/contrib/gcc
/freebsd-11-stable/contrib/gcclibs/libgomp
/freebsd-11-stable/contrib/gdb
/freebsd-11-stable/contrib/gdtoa
/freebsd-11-stable/contrib/groff
/freebsd-11-stable/contrib/ipfilter
/freebsd-11-stable/contrib/ldns
/freebsd-11-stable/contrib/ldns-host
/freebsd-11-stable/contrib/less
/freebsd-11-stable/contrib/libarchive
/freebsd-11-stable/contrib/libarchive/cpio
/freebsd-11-stable/contrib/libarchive/libarchive
/freebsd-11-stable/contrib/libarchive/libarchive_fe
/freebsd-11-stable/contrib/libarchive/tar
/freebsd-11-stable/contrib/libc++
/freebsd-11-stable/contrib/libc-vis
/freebsd-11-stable/contrib/libcxxrt
/freebsd-11-stable/contrib/libexecinfo
/freebsd-11-stable/contrib/libpcap
/freebsd-11-stable/contrib/libstdc++
/freebsd-11-stable/contrib/libucl
/freebsd-11-stable/contrib/libxo
/freebsd-11-stable/contrib/llvm
/freebsd-11-stable/contrib/llvm/projects/libunwind
/freebsd-11-stable/contrib/llvm/tools/clang
/freebsd-11-stable/contrib/llvm/tools/lldb
/freebsd-11-stable/contrib/llvm/tools/llvm-dwarfdump
/freebsd-11-stable/contrib/llvm/tools/llvm-lto
/freebsd-11-stable/contrib/mdocml
/freebsd-11-stable/contrib/mtree
/freebsd-11-stable/contrib/ncurses
/freebsd-11-stable/contrib/netcat
/freebsd-11-stable/contrib/ntp
/freebsd-11-stable/contrib/nvi
/freebsd-11-stable/contrib/one-true-awk
/freebsd-11-stable/contrib/openbsm
/freebsd-11-stable/contrib/openpam
/freebsd-11-stable/contrib/openresolv
/freebsd-11-stable/contrib/pf
/freebsd-11-stable/contrib/sendmail
/freebsd-11-stable/contrib/serf
/freebsd-11-stable/contrib/sqlite3
/freebsd-11-stable/contrib/subversion
/freebsd-11-stable/contrib/tcpdump
/freebsd-11-stable/contrib/tcsh
/freebsd-11-stable/contrib/tnftp
/freebsd-11-stable/contrib/top
/freebsd-11-stable/contrib/top/install-sh
/freebsd-11-stable/contrib/tzcode/stdtime
/freebsd-11-stable/contrib/tzcode/zic
/freebsd-11-stable/contrib/tzdata
/freebsd-11-stable/contrib/unbound
/freebsd-11-stable/contrib/vis
/freebsd-11-stable/contrib/wpa
/freebsd-11-stable/contrib/xz
/freebsd-11-stable/crypto/heimdal
/freebsd-11-stable/crypto/openssh
/freebsd-11-stable/crypto/openssl
/freebsd-11-stable/gnu/lib
/freebsd-11-stable/gnu/usr.bin/binutils
/freebsd-11-stable/gnu/usr.bin/cc/cc_tools
/freebsd-11-stable/gnu/usr.bin/gdb
/freebsd-11-stable/lib/libc/locale/ascii.c
/freebsd-11-stable/sys/cddl/contrib/opensolaris
/freebsd-11-stable/sys/contrib/dev/acpica
/freebsd-11-stable/sys/contrib/ipfilter
/freebsd-11-stable/sys/contrib/libfdt
/freebsd-11-stable/sys/contrib/octeon-sdk
/freebsd-11-stable/sys/contrib/x86emu
/freebsd-11-stable/sys/contrib/xz-embedded
/freebsd-11-stable/usr.sbin/bhyve/atkbdc.h
/freebsd-11-stable/usr.sbin/bhyve/bhyvegc.c
/freebsd-11-stable/usr.sbin/bhyve/bhyvegc.h
/freebsd-11-stable/usr.sbin/bhyve/console.c
/freebsd-11-stable/usr.sbin/bhyve/console.h
/freebsd-11-stable/usr.sbin/bhyve/pci_fbuf.c
/freebsd-11-stable/usr.sbin/bhyve/pci_xhci.c
/freebsd-11-stable/usr.sbin/bhyve/pci_xhci.h
/freebsd-11-stable/usr.sbin/bhyve/ps2kbd.c
/freebsd-11-stable/usr.sbin/bhyve/ps2kbd.h
/freebsd-11-stable/usr.sbin/bhyve/ps2mouse.c
/freebsd-11-stable/usr.sbin/bhyve/ps2mouse.h
/freebsd-11-stable/usr.sbin/bhyve/rfb.c
/freebsd-11-stable/usr.sbin/bhyve/rfb.h
/freebsd-11-stable/usr.sbin/bhyve/sockstream.c
/freebsd-11-stable/usr.sbin/bhyve/sockstream.h
/freebsd-11-stable/usr.sbin/bhyve/usb_emul.c
/freebsd-11-stable/usr.sbin/bhyve/usb_emul.h
/freebsd-11-stable/usr.sbin/bhyve/usb_mouse.c
/freebsd-11-stable/usr.sbin/bhyve/vga.c
/freebsd-11-stable/usr.sbin/bhyve/vga.h
# 301367 04-Jun-2016 bapt

Fix typo preventing pw {user,group}next -C from working as expected

Reported by: Mike Selnet via forums.freebsd.org
MFC after: 3 days


# 297290 26-Mar-2016 bapt

Remove some unneeded headers

Found by 'include-what-you-use'


# 296300 02-Mar-2016 markj

Fix a typo that prevented pw(8) from setting a user's UID to 0.

MFC after: 1 week
Sponsored by: EMC / Isilon Storage Division


# 291658 02-Dec-2015 bapt

pw_checkname since the beginning if too strict on GECOS field,
relax it a bit so gecos can be used to store multibytes data.

This was unseen before FreeBSD 10.2 as this validation function was motly unused
since FreeBSD 10.2 the usage of this function has been generalized to improve
validation.

Reported by: des
MFC after: 1 week


# 291657 02-Dec-2015 bapt

Fix handling of numeric-only names with pw lock
Add a regression test about it

PR: 204968
MFC after: 1 week


# 290174 29-Oct-2015 delphij

In pw_userlock, set 'name' to NULL when we encounter an all number string
because it is also used as an indicator of whether a name or an UID is
being used and we may have undefined results as 'name' may contain
uninitialized stack contents.

MFC after: 2 weeks


# 290153 29-Oct-2015 bdrewery

Fix unlikely memory leak.

It is unlikely since the first check in the function is that dir[0] is '/',
but later code changes may make it real.

Coverity CID: 1332104


# 287799 14-Sep-2015 bapt

Regression: fix usershow -7

Submitted by: Dan McGregor (via IRC)
MFC after: 2 days


# 287701 12-Sep-2015 bapt

Regression: fix pw usermod -d

Mark the user has having been edited if -d option is passed to usermod and
so the request change of home directory actually happen

PR: 203052
Reported by: lenzi.sergio@gmail.com
MFC after: 2 days


# 286986 21-Aug-2015 bapt

Fix /home symlink creation

Add regression test about it


# 286982 21-Aug-2015 bapt

Fix useradd regression:

Readd the function to create the parents home directory if it does not exists.
if it is only a directory at the top level of the hierarchy symlink it into /usr
as it used to be done before.

Reported by: kevlo, adrian


# 286775 14-Aug-2015 bapt

Regression: fix pw usermod -w xxx

Reported by: gjb


# 286259 03-Aug-2015 ed

Avoid calling strlen() where we can use the strspn() return value.


# 286218 03-Aug-2015 bapt

Fix bugs spotted by gcc

Reported by: adrian


# 286217 03-Aug-2015 adrian

Actually set quiet to something.

/usr/home/adrian/work/freebsd/head-embedded-2/src/usr.sbin/pw/pw_user.c: In function 'pw_user_next':
/usr/home/adrian/work/freebsd/head-embedded-2/src/usr.sbin/pw/pw_user.c:680: warning: statement with no effect


# 286202 02-Aug-2015 bapt

Split some extra long lines


# 286201 02-Aug-2015 bapt

Cleanup a bit includes


# 286198 02-Aug-2015 bapt

Fix regression: report again if a username already exists when creating it


# 286196 02-Aug-2015 bapt

Rewrite parsing subcommands arguments of pw(8)

Now each subcommands checks its arguments in a dedicated functions.

This helps improving input validation, code readability/maintainability
While here:
- Add a -y option to pw userdel/usermod so it can maintain NIS servers if
nispasswd is not defined in pw.conf(5)
- Allow pw -r <rootdir> to remove directory with userdel -r
- Fix bug when renaming a user which was not renaming the user name it groups
it is a member of.
- Only parse pw.conf(5) when needed.


# 286156 01-Aug-2015 bapt

Partial revert of r286152

More work needed on the cli validation


# 286152 01-Aug-2015 bapt

Validate expiration days and password days from commmand line and pw.conf


# 286150 01-Aug-2015 bapt

Cast uid/git to uintmax_t when using printf-like functions so the size of
uid/gid size remains a implementation detail


# 285989 28-Jul-2015 bapt

Reject usermod and userdel if the user concerned is not on the user database
supposed to be manipulated

This prevent pw usermod creating a new local user when requesting to usermod on
a username is defined in LDAP.

This issue only happens when modifying the local user database (not inpacting
commands when -V or -R are used).

PR: 187653
Submitted by: tmwalaszek@gmail.com


# 285984 28-Jul-2015 bapt

Fix wrong warning printed after changing or updating NIS users

PR: 37672
Submitted by: chris+freebsd@chrullrich.de


# 285441 13-Jul-2015 bapt

Regression fix: allow to create users with uid0

Reported by: Jan Mikkelsen <janm@transactionware.com>


# 285434 12-Jul-2015 bapt

Ensure skeldir is abolute path (relatively to the rootdir)


# 285433 12-Jul-2015 bapt

pw -R <rootdir> userdel can now cleanup installation

Rewrite rm_r to use *at function, allowing to remove home directories along with
users. only crontabs and at(1) installation are not removed

Relnotes: yes


# 285430 12-Jul-2015 bapt

Rework the home directory creation and copy or the skel content to use *at
functions

This allows to simplify the code a bit for -R by not having to keep modifying
path and also prepare the code to improve support -R in userdel

While here, add regression tests for the functionality


# 285415 11-Jul-2015 bapt

Make getarg return NULL if args is NULL


# 285414 11-Jul-2015 bapt

Fix regression: ensure when try to create the group and the user with the same
id if possible and nothing in particular was specified


# 285412 11-Jul-2015 bapt

Replace custom string array with stringlist(3)


# 285409 11-Jul-2015 bapt

Remove unused argument from pm_passwd


# 285408 11-Jul-2015 bapt

check the gecos format early: at the moment the -c option is parsed


# 285406 11-Jul-2015 bapt

Remove useless use of goto


# 285405 11-Jul-2015 bapt

Isolate pw lock/unlock into a separate function


# 285403 11-Jul-2015 bapt

homedir can only be populate during useradd


# 285401 11-Jul-2015 bapt

Make a separate groupdel/userdel from the main function


# 285398 11-Jul-2015 bapt

Make separate functions to show users and groups


# 285396 11-Jul-2015 bapt

Move the quiet flag into the configuration structure


# 285395 11-Jul-2015 bapt

Separate usernext/groupnext from the main functions


# 285137 04-Jul-2015 bapt

Fix validation of crypted password
Small cleanups


# 285133 04-Jul-2015 bapt

Validate input of pw usermod -h and pwusermod -H

Push the code that set the password into a separate function to improve
readability

Add regression tests about pw usermod -h and pw usermod -H


# 284149 08-Jun-2015 bapt

backout remove of -q option for pw [user|group] next

While the return code is broken, some corner case usage depends on the
functionnality, so backout until we get better regression tests covering those
corner case usage.


# 284139 07-Jun-2015 bapt

Remove '-q' support for pw [user|group] next

the intent of -q in this command is to return as exit status the value of the
next group/user id, which does not make sense given exit status are limited to
values between 0 and 255.


# 284135 07-Jun-2015 bapt

Fix generating configuration file


# 284133 07-Jun-2015 bapt

Fix duplicate checking


# 284130 07-Jun-2015 bapt

Remove uneeded code (already done by pw_make_v7)


# 284129 07-Jun-2015 bapt

In case of rename validate the length of the new name

Check early that the new name fits MAXLOGNAME and store it in pwconf


# 284128 07-Jun-2015 bapt

Refactor input validation

Mutualize code to validate inputs of both 'user' and 'group' command
Test that the input name fits into MAXLOGNAME


# 284126 07-Jun-2015 bapt

Finish converting -7 to pwconf


# 284124 07-Jun-2015 bapt

Handle -7 via gloval pwconf


# 284122 07-Jun-2015 bapt

Handle pretty print (-P) via global pwconf


# 284121 07-Jun-2015 bapt

Handle dryrun (-N) via global pwconf


# 284118 07-Jun-2015 bapt

Add a new global struct pwconf to store etcpath, rootdir and struct userconf

Do not add anymore -R and -V to arglist
Add an error message if both -V and -R are set in arguments


# 284117 07-Jun-2015 bapt

Fix pw userdel -r not deleting homedir


# 284114 07-Jun-2015 bapt

Test explicitly the result of strcmp to be consistent with the rest of the code


# 284113 07-Jun-2015 bapt

Improve readability by reducing indentations levels


# 284112 07-Jun-2015 bapt

Remove one level of indentation


# 284111 07-Jun-2015 bapt

Move user deletion code into a separate function to improve readability


# 284110 07-Jun-2015 bapt

Instead of always casting the pw_checkname input to u_char * and casting it back
to char *, change pw_checkname to directly take char * in input


# 283961 03-Jun-2015 bapt

New pw -R rootdir option

This allows to set an alternate root directory in which the users/groups will be
manipulated

Requested by: gjb, ian
Tested by: gjb


# 283842 31-May-2015 bapt

Remove useless cast in printf and printf-like functions:
use %u for uid_t and gid_t


# 283841 31-May-2015 bapt

Cast -1 to uid_t and bump WARNING level to 3


# 283814 31-May-2015 bapt

Make pw_user()/pw_group() more consitent about errors

Some of errors were returned to the main function, some others caused a direct
exit via err(3).

The main function is only interested in EXIT_SUCCESS, so in all other cases
replace warn(3) + return err by err(3)


# 282700 09-May-2015 bapt

Replace sprintf(3) with snprintf(3)


# 282699 09-May-2015 bapt

Use snprintf(3) instead of sprintf(3)
Remove useless "else"


# 282687 09-May-2015 bapt

Remove some uneeded headers


# 282685 09-May-2015 bapt

Replace malloc(3) + strcpy(3) + strcat(3) by asprintf(3)


# 282683 09-May-2015 bapt

Use snprintf(3) instead of strcpy(3) + strncat(3)


# 277764 26-Jan-2015 bapt

Revert r277652

uid and gid are never and should never be negative. The pw(8) manpage clearly
states the -u and -g arguments are for uids/gids, hence using negative values is
abusing a bug in former versions of pw(8)


# 277652 24-Jan-2015 bapt

Allow negative numbers in -u and -g options

PR: 196514
MFC after: 1 week


# 273787 28-Oct-2014 bapt

Ensure pw userdel -u <invalid> do not try to remove root

Check the uid passed is actually a number as early as possible

MFC after: 1 week


# 273779 28-Oct-2014 bapt

Fix a regression in pw usermod -G list

The user was perperly adding the to different groups from "list" but was not
removed from the other groups it could have belong to.
While here add a regression test about this bug

PR: 185666
Reported by: sub.mesa@gmail.com
MFC after: 1 week


# 272833 09-Oct-2014 des

Two more places where login_setcryptfmt() defaults to MD5 were missed
in r252688.

MFC after: 3 days


# 267970 27-Jun-2014 mjg

pw: fix up deletion of users from groups

Previuosly given 'foo,bar' members, removing 'foo' would result in an
infinite loop.

PR: 191427
Submitted by: Voradesh Yenbut <yenbut cs.washington.edu>
MFC after: 1 week


# 263114 13-Mar-2014 dteske

Fix pw(8) deletion of group "username" on userdel even if group "username"
is not associated with user "username". E.g., user "foo" has primary group
"wheel" and is unassociated with group "foo", yet userdel would delete the
group "foo" when deleting user "foo" (despite the fact that user "foo" is
not associated with group "foo" in any way).

Patch committed with minor style(9) changes.

PR: bin/169471
Submitted by: Alexander Pyhalov <apyhalov@gmail.com>


# 262865 06-Mar-2014 julian

Part 2 of bug 187310.. had to commit separately due to local confusion.
Don't let pw crash when give certain input.

PR: 187310
Submitted by: Kim Shrier
MFC after: 1 week


# 252688 04-Jul-2013 des

Fall back to sha512 if passwd_format is not set.

MFC after: 3 days


# 252556 03-Jul-2013 des

There is no reason to disallow setting the password or account expiry
date to the current date.

MFC after: 3 days


# 252377 29-Jun-2013 kientzle

Fix -Wunsequenced warning

Submitted by: dt71@gmx.com


# 246192 01-Feb-2013 deischen

Prevent a null pointer dereference in pw userdel when deleting
a user whose group != username.


# 245114 06-Jan-2013 mjg

pw: free group returned by gr_add


# 244737 27-Dec-2012 bapt

Simplify the code by using the new gr_add function


# 244721 26-Dec-2012 bapt

Simplify copying of group members by using memcpy

Submitted by: Christoph Mallon <christoph.mallon@gmx.de>


# 244720 26-Dec-2012 bapt

Fix off-by-one error in memory allocation: j entries, one new and a null
terminator is j + 2.

Submitted by: Christoph Mallon <christoph.mallon@gmx.de>


# 244710 26-Dec-2012 bapt

Fix creating a user and adding it to a group

Reported by: "Sam Fourman Jr." <sfourman@gmail.com>, dim


# 243895 05-Dec-2012 eadler

Avoid overflow of file buffer

Submitted by: db
Approved by: cperciva
MFC after: 2 weeks


# 242349 30-Oct-2012 bapt

Teach pw(8) about how to use pw/gr API to reduce code duplication

MFC after: 2 months


# 241108 01-Oct-2012 bapt

Do not treat empty name as an uid 0

Reported by: Robert Bonomi <bonomi@mail.r-bonomi.com>


# 241107 01-Oct-2012 bapt

Remove useless atoi(3), previous strspn(3) makes sure that a_name->val is a
number.
This also allow pw user show to work as expected.

PR: bin/172112
Submitted by: "Ilya A. Arkhipov" <rum1cro@yandex.ru>
MFC after: 1 month


# 231994 22-Feb-2012 kevlo

Handle NULL return from crypt(3). Mostly from DragonFly


# 228673 17-Dec-2011 dim

In usr.sbin/pw/pw_user.c, use the correct printf length modifier for a
ptrdiff_t.

MFC after: 1 week


# 224535 31-Jul-2011 delphij

Backout r223115 which potentially caused a POLA violation, by restoring
historic behavior (create the default base directory in pw.conf) before
I came up with a better fix for this.

Requested by: nwhitehorn
Approved by: re (kib)


# 223115 15-Jun-2011 delphij

Don't attempt to create the base directory when -d is specified.

MFC after: 1 month


# 219408 08-Mar-2011 jkim

Stop hard-coding default directory mode as 0777.


# 218293 04-Feb-2011 jkim

Do not let pw.conf(5) or -M option affect creation of basehome, e.g., /home.
When the basehome does not exist, it creates all intermediate directories as
required, which is logically equivalent to mkdir(1) with -m and -p options.
However, it modifies all intermediate directories, not just the final home
directory unlike mkdir. This problem was introduced in two revisions, i.e.,
r1.59 (SVN r167919) and r1.60 (SVN r168044).

MFC after: 1 month


# 213459 05-Oct-2010 jkim

Revert the unrelated patch crept in the previous commit.


# 213458 05-Oct-2010 jkim

Prefer pmap_unmapbios() over pmap_unmapdev(). The binary does not change
after this because pmap_unmapbios() is a macro for pmap_unmapdev() on amd64.


# 200173 05-Dec-2009 ed

Make pw(8) build without <utmp.h>.

The size of the username record in utmp files should not influence the
maximum username length. Right now ut_user/ut_name is big enough, so in
this case it's dead code anyway.


# 181785 16-Aug-2008 ache

Use arc4random_uniform() to avoid "modulo bias"

Remove pw_getrand() unneded now: arc4random_uniform() is stronger then
pw_getrand()'s MD5 tricks (inactive) and its active version, mixing
arc4random() bytes in one, not make things better at all.


# 179365 27-May-2008 antoine

- Increase the size of the salt in pw(8) from 8 to 32 (same as in pam_unix(8)).
This makes blowfish password hashes look normal when set using
pw(8)/adduser(8). [1]
- Make it possible to have a '/' in the salt.

PR: 121146 [1]
Submitted by: Jaakko Heinonen [1]
Approved by: rwatson (mentor)
MFC after: 1 month


# 168045 30-Mar-2007 le

Accept passwords which contain whitespace.

PR: bin/53434


# 168044 30-Mar-2007 le

Add home directory creation mode to pw.conf(5) and be a bit
more specific about the effect of the current umask on -M.


# 167919 26-Mar-2007 le

Introduce the new option -M to allow to set the permissions of
the user's newly created home directory. If omitted, it's derived
from the current umask.

PR: bin/16880, bin/83253 (partially), bin/104248
MFC in: 1 month


# 148584 31-Jul-2005 pjd

Change /home symbolic link, so it will point to usr/home instead of /usr/home.

Previous symlink was confusing:

# cd /jails/virtual_system_1/home
# realpath .
/usr/home

...and slower.

OK'ed by: rwatson, phk


# 130633 17-Jun-2004 robert

Use strlcpy(3) to replace the idiomatic

strncpy(d, s, l);
d[l - 1] = '\0';

statements.


# 130629 17-Jun-2004 robert

Fix a bug which occurred when the home directory given by the
-d option was equal to the one already saved and which caused
the pw utility to avoid updating values passed by other options
processed before the -d option in the code path.

Spotted by: Richard Caley <rjc@interactive.co.uk>


# 124382 11-Jan-2004 iedowse

Add a `-H <fd>' option that is like `-h <fd>', but accepts an already
encrypted password on the specified file descriptor.

PR: bin/22033
MFC after: 2 weeks


# 110667 11-Feb-2003 ache

There is no sense to use random random() and arc4random() in the same program.
Switch to arc4random() completely.


# 109962 27-Jan-2003 gad

This is just a forced-commit to note that the previous commit addresses
PR 28773 (not 28733!). I have closed both PR 28773 and PR 46890.


# 109961 27-Jan-2003 gad

Changes so the 'pw' command will allow '$' as the last character in a userid
or group name (mainly for the benefit of samba). This pretty much rewrites
he pw_checkname() routine, but should work exactly the same except for the
above change, and that error messages are somewhat more informative.

PR: 28733 46890
Inspired by: example patch written by Terry Lambert
Reviewed by: no objections on freebsd-arch and freebsd-current
MFC plans: no plans, but will do if people want it in stable.


# 98744 24-Jun-2002 dwmalone

Print a long with %ld not %d. (We possibly should be using %j here, but
that can be fixed when the many other warnings here are being fixed.)

PR: 39741
Submitted by: Dan Lukes <dan@obluda.cz>
MFC after: 1 week


# 85145 19-Oct-2001 ache

Change rmskey() to rmopie() - we don't have skey anymore


# 82868 03-Sep-2001 dd

For new users, create the home directory before sending the welcome
mail, if configured to do so. Some sites have setups where the user's
mail is delivered to their home directory, so sending mail before is
exists didn't work.

PR: 29892


# 82059 21-Aug-2001 joerg

Properly initialize the random number generator in pw_getpass().
Right now, the automatically generated passwords have been rather
predictable. :-(

MFC after: 1 day


# 82047 21-Aug-2001 joerg

Fix a typo in a variable name that made pw(8) coredump when using
USE_MD5RAND.

MFC after: 2 days


# 74569 21-Mar-2001 ache

Use %c for expire/change dates


# 73563 05-Mar-2001 kris

Switch from using rand() or random() to a stronger, more appropriate PRNG
(random() or arc4random())

Reviewed by: bde


# 70486 29-Dec-2000 ben

Convert to use the <sys/queue.h> macros rather than fiddling with the queue
structure internals.

Reviewed by: markm


# 64918 22-Aug-2000 green

Add working and easy crypt(3)-switching. Yes, we need a whole new API
for crypt(3) by now. In any case:

Add crypt_set_format(3) + documentation to -lcrypt.
Add login_setcryptfmt(3) + documentation to -lutil.
Support for switching crypt formats in passwd(8).
Support for switching crypt formats in pw(8).

The simple synopsis is:
edit login.conf; add a passwd_format field set to "des" or "md5"; go nuts :)

Reviewed by: peter


# 63600 20-Jul-2000 davidn

Move test for -w flag outside of the code dealing with -D (defaults).
This should cause -w's argument not to be ignored in the usermod case,
so it will affect modification of the user's password instead of using
the pw.conf (or internal default=no '*') password method.
PR: bin/11168


# 63596 20-Jul-2000 davidn

Allow -g with an empty argument in the -D case. This allows -g "" to set
no default group (and thus fall back to user-based groups instead).
PR: bin/5717


# 63572 19-Jul-2000 davidn

Fix another missed case where usermod would not set the "modified" flag:
-h - to set no password. But only mark modified if the account is not
already locked (i.e. first char of crypt password field is '*').
PR: bin/19999


# 62461 03-Jul-2000 davidn

Fix breakage introduced by bypassing update for additional 'mod'
functionality when nothing had actually changed; -d changes would
not set the 'something had changed flag'. Actually test for a
change in homedir.
PR: bin/19649


# 62034 24-Jun-2000 ache

Localize ctype too.
Add weekday to showuser expired fields


# 61957 22-Jun-2000 ache

Localize time/date.
Use ISO 8601 date in logs.
Fix wrong argument type in ctype functions.


# 61762 18-Jun-2000 davidn

Fix obvious braino in assignment statement. usermod -g should work again.
PR: 17877
Submitted by: pius@zyan.com


# 61759 18-Jun-2000 davidn

Fix a long-standing bug in the rename case previously masked by another bug
just fixed in .db file updating.


# 56000 14-Jan-2000 davidn

Portability fixes for other bsd4.4 derivatives.


# 52527 26-Oct-1999 davidn

Don't try updating the passwd file if no data has changed. This allows things
like "pw usermod <name> -m" to work for non-local NIS users; since no attempt
is made to update the password entry, the home directory will be created and
populated as expected without error.


# 52512 26-Oct-1999 davidn

Add new functionality "lock" and "unlock" to provide a simple password
locking mechanism for users. This works by prepending the string
"*LOCKED*" to the password field in master.passwd to prevent successful
decoding.


# 52502 26-Oct-1999 davidn

Clean up error handling in fileupdate(), which now returns 0 on success
instead of a boolean. This replicated through he front-end sub-functions
relating to add, delete, modify entries in passwd & group files
Errno is now preserved so output of errc()/warnc() will be less obfuscated
by subsequent errors when reporting the problem.

Add more intelligent error handling when attempting to modify/delete NIS
entries with no corresponding local database entry.

[MFC to stable in a couple of weeks to keep both in sync]


# 50479 27-Aug-1999 peter

$Id$ -> $FreeBSD$


# 49171 28-Jul-1999 davidn

Remove some more warnings.


# 44386 01-Mar-1999 davidn

Add the ability to print user records in unix version 7 (old) format.


# 44229 23-Feb-1999 davidn

1) Do not blindly ignore file update errors which may occur due to concurrent
updating
2) Add -V <etcdir>, which allows maintaining user/group database in alternate
locations other than /etc.


# 43780 08-Feb-1999 des

Don't assume a_name is a number just because the first character
is a digit.

PR: bin/9484
Submitted by: Matthew D. Fuller <fullermd@futuresouth.com>


# 42287 04-Jan-1999 billf

-Clarification of last commit-
The char that the random letters and numbers are being pulled from is
ended with a '\0'. Using sizeof() includes this '\0' in the 'pool' of
possible characters. This patch decrements by one the size so we don't
accidently end the new password prematurly.


# 42245 02-Jan-1999 billf

Let's make sure we're at the end of the password string before we apply a \0
and terminate it. This patch ensures passwords will be the correct length of 8,
which is what is implied in the source (but not reflected in the man page).

PR: bin/7817
Reviewed by: Alfred Perlstein <bright@hotjobs.com>
Submitted by: Hiroshi Nishikawa <nis@pluto.dti.ne.jp>


# 30259 10-Oct-1997 charnier

Use err(3) instead of local redefinition. Add rcsid string.


# 27831 01-Aug-1997 davidn

Fix -p switch.


# 26626 13-Jun-1997 ache

Remove srandomdev fallback code


# 26088 24-May-1997 davidn

Fixes skeleton directory test-it-is-a-directory logic.
PR: 3666
Reviewed by:
Submitted by: iaint@css.tuu.utas.edu.au
Obtained from:


# 24214 24-Mar-1997 ache

Initialize RNG only once
Use srandomdev() now


# 23700 11-Mar-1997 ache

Fix srandom arg according to Lite2


# 23318 03-Mar-1997 ache

Back out MAXLOGNAME fix, Bruce points that copyinstr require NUL


# 23299 02-Mar-1997 ache

Fix MAXLOGNAME usage, the code has wrong assumption that
it must be NUL terminated


# 22997 22-Feb-1997 peter

Revert $FreeBSD$ to $Id$


# 22394 07-Feb-1997 davidn

Fix useage of MAXLOGNAME to include terminating NUL, by using
max(MAXLOGNAME-1,UT_NAMESIZE).
Tidy up "pretty" printing format for longer usernames.


# 21673 14-Jan-1997 jkh

Make the long-awaited change from $Id$ to $FreeBSD$

This will make a number of things easier in the future, as well as (finally!)
avoiding the Id-smashing problem which has plagued developers for so long.

Boy, I'm glad we're not using sup anymore. This update would have been
insane otherwise.


# 21330 05-Jan-1997 davidn

Adds optional NIS passwd file updating and optionally rebuilding
NIS maps.

Suggested by: Peter Wemm


# 21242 03-Jan-1997 davidn

Implemented /home -> /usr/home symlink kludge.
If home basedir would be created in the root partition, create
it under /usr instead, and symlink /basedir -> /usr/basedir.


# 21052 30-Dec-1996 davidn

1) Base home directory is created if it does not already exist if
useradd -m or useradd -D -b are used.
2) Hyphen allowed in username if not first character. Fix trivial
bug in error fmt string.
3) /etc/skeykeys updating changed to do 'inplace' update, commenting
out a username rather than removing it completely.


# 20842 23-Dec-1996 davidn

Correct file modes on updated /etc/skeykeys.


# 20747 21-Dec-1996 davidn

1) 200 users per group limitation removed and pw
will handle lines of any length in /etc/group.
2) Fixed bug with usermod -d not updating user's home
directory.
3) Minor formatting display changes/fixes with *show -P.


# 20712 20-Dec-1996 davidn

Bugfix (cosmetic) for output of generated passwords.


# 20679 19-Dec-1996 davidn

Allow 8-bit characters in the passwd gecos field, and adds a paragraph
to the mangpage explaining the consequences (to be updated at a later
date after login class conf support is added).


# 20590 17-Dec-1996 davidn

Changes to password generator: fallback to MD5 generator disabled
(/dev/urandom used by default under FreeBSD), and implemented a
"portable" but less secure generator for other systems.
Add display of expiry/password change dates in -P user display.


# 20576 16-Dec-1996 davidn

Submitted by: proff@iq.org
Minor fix for security patch.


# 20555 16-Dec-1996 davidn

Reviewed by: davidn@blaze.net.au
Submitted by: proff@iq.org
Security patch for better random password generation.


# 20325 11-Dec-1996 joerg

Update from David, reflecting Wolfram's wishes regarding limitation of
the allowable character set.

Submitted by: David Nugent


# 20303 10-Dec-1996 joerg

This commit was generated by cvs2svn to compensate for changes in r20302,
which included commits to RCS files with non-trunk default branches.


# 20302 10-Dec-1996 joerg

Copyright update by the author, to be more in line with our sample
copyright.

Submitted by: David Nugent


# 20267 09-Dec-1996 joerg

Upgrade from the author, reflecting all my wishes resulting out of the
sysinstall use of this tool (plus some bug fixes).

2.2 candidate...

Submitted by: David Nugent <davidn@nserver.usn.blaze.net.au>


# 20253 09-Dec-1996 joerg

pw(8) -- a backend utility to manage the user and group databases.

sysinstall's new User&group menu will use it, hence it's a 2.2
candidate despite of providing new functionality.

Submitted by: David L. Nugent, <davidn@blaze.net.au>