This allows an application to only update a password entry if it is
in the state it expects. Additionally, if the old passwd struct
is specified the new one may have a different pw_name field since
matching is done on the original. Adapted from FreeBSD.