Home | Back
2010-03-04  Miloslav Trmač  <mitr@redhat.com>

* configure.in: Release 0.56.15.
* NEWS: Update.
* po/LINGUAS: Sort.

* Makefile.am (archive)
* configure.in: Use xz for compressing the distribution tarball.

2010-02-08  Miloslav Trmač  <mitr@redhat.com>

* configure.in: Release 0.56.14.
* NEWS: Update.
* Makefile.am (lib_libuser_la_LDFLAGS): Update version info.

* docs/libuser.conf.5.in ([ldap]): Document the "password" option.

2010-02-08  Rob Myers  <rob.myers@gtri.gatech.edu>

* modules/ldap.c (libuser_ldap_init): Allow specifying the LDAP password
in a config file.

2010-02-08  Miloslav Trmač  <mitr@redhat.com>

* lib/prompt.c (lu_prompt_console): Don't try to modify TTY attributes
if stdin is not a TTY.

2010-02-03  Thierry Vignaud <tvignaud@mandriva.com>

* po/fr.po: Update.

2010-02-03  Miloslav Trmač  <mitr@redhat.com>

* lib/user_private.h (_): Use dcgettext ().  Based on patch by
Thierry Vignaud <tvignaud@mandriva.com>.

2010-01-26  Miloslav Trmač  <mitr@redhat.com>

* tests/ldap.conf.in (ldap/password): Remove, the value is not used.

2009-12-11  Miloslav Trmač  <mitr@redhat.com>

* configure.in: Release version 0.56.13.
* NEWS: Update.
* Makefile.am (lib_libuser_la_LDFLAGS): Update version info.

2009-12-11  Miloslav Trmač  <mitr@redhat.com>

* apps/luseradd.c (main): New arguments --commonname, --givenname,
--surname, --roomnumber, --telephonenumber, --homephone.
* apps/luseradd.1: Document new arguments.
* apps/lusermod.c (main): New arguments --commonname, --givenname,
--surname, --roomnumber, --telephonenumber, --homephone.
* apps/lusermod.1: Document new arguments.

* modules/ldap.c (interact, lu_ldap_needed_objectclasses)
(lu_ldap_is_locked): Fix debug print parameters.

2009-12-08  Miloslav Trmač  <mitr@redhat.com>

* modules/files.c (entry_name_conflicts): Split from generic_add ().
(generic_mod): Refuse to rename to an existing name.
* tests/files_test.py (Tests.testUserAdd8, Tests.testUserMod7)
(Tests.testGroupAdd5, Tests.testGroupMod6)
* tests/ldap_test.py (Tests.testUserAdd6, Tests.testUserMod5)
(Tests.testGroupAdd4, Tests.testGroupMod4): New test cases.

* apps/lnewusers.c (main): Refuse using dubious home directories unless
specified explicitly.
* tests/utils_test: Test handling of dubious default home directories in
lnewusers.

* lib/internal.h (LU_DUBIOUS_HOMEDIRECTORY): New definition.
* lib/user.c (lu_user_add): Refuse to create an user with a dubious home
directory unless specified explicitly.
(replace_all): New parameter "key".  Recognize dubious home directory
value created by the substitution.  Caller updated.
* lib/user_private.h (lu_common_user_add_check): Remove declaration.
* lib/common.c (LU_INVALID_HOMEDIRECTORY): Remove.
(lu_common_user_default): Set LU_DUBIOUS_HOMEDIRECTORY instead of
LU_INVALID_HOMEDIRECTORY, and only if LU_DUBIOUS_HOMEDIRECTORY is not
already set.
(lu_common_user_add_check): Remove.
* modules/files.c (lu_files_user_add)
* modules/ldap.c (lu_ldap_user_add): Remove call to
lu_common_user_add_check ().

2009-12-07  Miloslav Trmač  <mitr@redhat.com>

* lib/common.c (lu_common_user_add_check): Capitalize error message.

* lib/user_private.h (lu_common_user_add_check): New declaration.
* lib/common.c (LU_INVALID_HOMEDIRECTORY): New definition.
(lu_common_user_default): Don't set home directory to /home/. or
/home/.. by default.
(lu_common_user_add_check): New function.
* modules/files.c (lu_files_user_add)
* modules/ldap.c (lu_ldap_user_add): Call lu_common_user_add_check ().
* po/POTFILES.in: Add lib/common.c.
* tests/files_test.py (Tests.testUserAdd7)
* tests/ldap_test.py (Tests.testUserAdd5): New tests.

2009-10-26  Miloslav Trmač  <mitr@redhat.com>

* apps/lid.c (do_id): Report error when the name does not exist (as
opposed to the case when a group exists but does not have any members).
Caller updated.

2009-10-02  Miloslav Trmač  <mitr@redhat.com>

* configure.in: Release version 0.56.12.
* NEWS: Update.

2009-09-14  Miloslav Trmač  <mitr@redhat.com>

* configure.in: Release version 0.56.11.
* NEWS: Update.
* po/LINGUAS: Update.
* Makefile.am (lib_libuser_la_LDFLAGS): Update version info.

* autogen.sh: Fix (make archive).

* apps/luserdel.c (main): Fix comment.

2009-06-23  Miloslav Trmač  <mitr@redhat.com>

* apps/lgroupmod.c (main): Remove unnecessary nscd refreshes.  Refresh
the "passwd" nscd cache only once after modifying all affected users.
* apps/lnewusers.c (main): Refresh the "group" nscd cache after adding
a group.  Refresh the "passwd" nscd cache only after changing the user's
password.
* apps/lpasswd.c (main): Refresh the relevant nscd cache after changing
the password.
* apps/luseradd.c (main): Refresh the "passwd" nscd cache only after
changing the user's password.
* apps/luserdel.c (main): Only refresh the "group" cache if a group was
deleted.

* Makefile.am (apps_libapputil_la_CPPFLAGS): New variable.
* apps/apputil.c (lu_nscd_flush_cache): New function.
(lu_signal_nscd, lu_hup_nscd): Remove.
* apps/apputil.h: Update prototypes.
* apps/lchage.c (main)
* apps/lchfn.c (main)
* apps/lchsh.c (main)
* apps/lgroupadd.c (main)
* apps/lgroupdel.c (main)
* apps/lgroupmod.c (main):
* apps/lnewusers.c (main):
* apps/luseradd.c (main)
* apps/luserdel.c (main): Use lu_nscd_flush_cache () instead of
lu_hup_nscd ().
Based on a patch by Masahiro Matsuya <mmatsuya@redhat.com>.

2009-06-14  Miloslav Trmač  <mitr@redhat.com>

* configure.in: Add AC_CONFIG_MACRO_DIR.  Drop AC_ISC_POSIX.  Update for
libtool 2.

* lib/getdate.y: Update for bison 2.4.
* configure.in: Update gettext version to 0.17.

2009-05-22  Miloslav Trmač  <mitr@redhat.com>

* apps/luserdel.c (main): Remove user's mail spool as well.
* apps/luserdel.1: Update.

* lib/user.c (run_single): Prohibit renaming entities to an invalid
name.
* tests/files_test.py (Tests.testUserMod6, Tests.testGroupMod5): New
tests.

* modules/files.c (generic_add): Remove unnecessary "line != NULL"
conditions.

* apps/lnewusers.c (main)
* apps/luseradd.c (main)
* apps/lusermod.c (main): Refuse GID and UID (id_t)-1.
* apps/lgroupadd.c (main)
* apps/lgroupmod.c (main): Refuse GID (gid_t)-1.
* lib/user.c (extract_name, extract_id): Only check pending values,
nothing else falls back on current values like these functions did.
(lu_default_int): Don't default LU_GIDNUMBER to -1 if the "users" group
does not exist. Don't set ID to 0 or -1 if a new ID can't be allocated.
Don't replace %u in default values by 0 or -1 if a new ID can't be
allocated.
* python/admin.c (libuser_admin_create_home): Dont populate home
directory if UID or GID is (id_t)-1.
* python/ent.c (libuser_convert_to_value): Try to refuse GID and UID
(id_t)-1.

2009-04-14  Miloslav Trmač  <mitr@redhat.com>

* configure.in: Version 0.56.10.

* NEWS: Update.
* po/LINGUAS: Update.

2009-03-12  Miloslav Trmač  <mitr@redhat.com>

* tests/ldap_test.py (Tests.testUserLock3)
(Tests.testUserUnlock4, Tests.testUserUnlockNonempty4)
(Tests.testGroupLock3, Tests.testGroupUnlock4)
(Tests.testGroupUnlockNonempty4): Test handling of unsupported
encryption schemes when locking or unlocking passwords.

* modules/ldap.c (userPassword_has_scheme): New function.
(lu_ldap_handle_lock): Don't re-encrypt (corrupt) passwords that use
a different encryption scheme than {crypt}.

2009-02-19  Miloslav Trmač  <mitr@redhat.com>

* tests/utils_test
* tests/utils_group
* tests/utils_gshadow
* tests/utils_passwd
* tests/utils_shadow: Test useradd with a numerical user name.

* apps/luseradd.c (main): When the user name is used as a group name,
never interpret it as a number.

2008-10-13  Miloslav Trmač  <mitr@redhat.com>

* po/POTFILES.skip: New file (used by transifex at
translate.fedora.redhat.com).

2008-07-19  Miloslav Trmač  <mitr@redhat.com>

* tests/files_test.py (Tests.testUserAdd6, Tests.testUserMod5)
(Tests.testUserSetpass4, Tests.testGroupAdd4)
(Tests.testGroupMod4, Tests.testGroupSetpass4): New tests.

* modules/files.c (format_generic): New parameter error.  Reject fields
contaning a ':' that would be interpreted as a field separator.
(format_fn): Remove.
(generic_add): New parameters formats, format_count instead of
formatter.  All users changed.  Format the new line first, and refuse
to use it if it is invalid.
(lu_files_format_user, lu_files_format_group, lu_shadow_format_user)
(lu_shadow_format_group): Fold into generic_add callers.
(generic_mod): Format the new line first, and refuse to use it if it is
invalid.  Modify the file one line at a time instead of one field at a
time.
(generic_setpass): Refuse to use the new password if it contains a
literal ':'.

2008-07-18  Miloslav Trmač  <mitr@redhat.com>

* tests/config_test.sh (workdir):
* tests/pwhash_test (workdir):
* tests/utils_test (workdir): Use a work directory distinct from
tests/files_test.

* tests/slapd.conf.in: Use the "bdb" database backend, ldbm was removed
in openldap-2.4.

2008-07-13  Miloslav Trmač  <mitr@redhat.com>

* apps/lnewusers.1: Fix .IP argument quoting.  Use sentence
capitalization for field names.  Fix a typo.

2008-04-09  Miloslav Trmač  <mitr@redhat.com>

* configure.in: Version 0.56.9.
* NEWS: Update.

* po/LINGUAS: Add as.

2008-03-25  Miloslav Trmač  <mitr@redhat.com>

* apps/lpasswd.1 (DESCRIPTION): Fix another pasto.

2008-02-27  Miloslav Trmač  <mitr@redhat.com>

* apps/lusermod.c (main): Warn if the new GID does not refer to an
existing group.
* apps/lusermod.1: Document that --gid may output a warning if the group
does not exist.  Resolves libuser #1.
* tests/utils_group
* tests/utils_gshadow
* tests/utils_passwd
* tests/utils_shadow
* tests/utils_test: Test usermod -g outputs a warning if the specified
group does not exist.

2008-02-26  Miloslav Trmač  <mitr@redhat.com>

* apps/lpasswd.1 (SYNOPSIS): Fix a pasto.
* apps/luseradd.1 (NAME): Fix.
Bugs reported by Miloš Malík <mmalik@redhat.com>.

2008-02-23  Miloslav Trmač  <mitr@redhat.com>

* configure.in: Version 0.56.8.
* NEWS: Update.

* Makefile.am (EXTRA_DIST): Add tests/config_import2.conf.in,
tests/config_login2.defs, tests/pwhash.conf.in, tests/pwhash.py and
tests/pwhash_test.

* All relevant source files: Use <> for #including config.h, in
particular do not use "../config.h", which can refer to a file outside
the build directory.  Remove #ifdef HAVE_CONFIG_H, we know that is true.

* Makefile.am (HGTAG): Replace CVSTAG.
(force-tag, tag, archive): Update to use Mercurial.
* all files: Remove CVS keywords.

* README: Point to the home page hosted at fedoraproject.org.

2008-02-16  Miloslav Trmač  <mitr@redhat.com>

* po/POTFILES.in: Add missing lib/misc.c.

* docs/libuser.conf.5.in: Fix a typo.

2008-01-11  Miloslav Trmač  <mitr@redhat.com>

* tests/pwhash_test: Fix description.

2008-01-09  Miloslav Trmač  <mitr@redhat.com>

* configure.in: Version 0.56.7.
* NEWS: Update.
* Makefile.am (lib_libuser_la_LDFLAGS): Update version info.

* lib/common.c: New file, moving most code from modules/default.-c.
(lu_common_user_default, lu_common_group_default)
(lu_common_suser_default, lu_common_sgroup_default): Make public.
* lib/user_private.h (LU_COMMON_DEFAULT_PASSWORD)
(LU_COMMON_DEFAULT_SHADOW_PASSWORD, LU_COMMON_DEFAULT_SHELL): New
definitions, moved from modules/default.-c.
(lu_common_user_default, lu_common_group_default)
(lu_common_suser_default, lu_common_sgroup_default)
(lu_util_default_salt_specifier): New declarations.
* lib/util.c (HASH_ROUNDS_MIN, HASH_ROUNDS_MAX)
(parse_hash_rounds, select_hash_rounds): Move from modules/default.-c.
(lu_util_default_salt_specifier): Move from modules/default.-c.  Use
a lu_context * instead of lu_module *.  All users changed.
(lu_make_crypted): Use HASH_ROUNDS_MAX.
* modules/default.-c: Remove.  All users changed.
* Makefile.am (pkginclude_HEADERS): Remove modules/default.-c.
(lib_libuser_la_SOURCES): Add lib/common.c.
(modules_libuser_files_la_CPPFLAGS)
(modules_libuser_shadow_la_CPPFLAGS)
(modules_libuser_krb5_la_CPPFLAGS)
(modules_libuser_ldap_la_CPPFLAGS)
(modules_libuser_sasldb_la_CPPFLAGS): Remove.

2008-01-08  Miloslav Trmač  <mitr@redhat.com>

* po/sr@latin.po: Rename from po/sr@Latn.po
* po/LINGUAS: Update.

* docs/libuser.conf.5.in: Document SHA support.

* tests/pwhash.conf.in
* tests/pwhash.py: New files
* tests/pwhash_test: New test.
* Makefile.am (TESTS): Add tests/pwhash_test.

* tests/config_import2.conf.in
* tests/config_login2.defs: New files.
* tests/config_login.defs: Add SHA_CRYPT_MIN_ROUNDS and
SHA_CRYPT_MAX_ROUNDS.
* tests/config_override.conf.in: Add hash_rounds_min and
hash_rounds_max.
* tests/config_test.sh: Create libuser_import2.conf.
* tests/config_test.c (main): Add tests for hash_rounds_min and
hash_rounds_max.  Test ENCRYPT_METHOD and MD5_CRYPT_ENAB interaction.

* lib/config.c (struct handle_login_defs_key_data): New definition.
(handle_login_defs_key): Expect struct handle_login_defs_key_data *
instead of struct config_config *.  Handle ENCRYPT_METHOD,
SHA_CRYPT_MIN_ROUNDS, SHA_CRYPT_MAX_ROUNDS.  Only use MD5_CRYPT_ENAB
if ENCRYPT_METHOD is not defined.
(import_login_defs): Pass struct handle_login_defs_key_data * to
handle_login_defs_key().

* lib/util.c (salt_type_info): New member sha_rounds.  Add SHA256 and
SHA512 entries.
(lu_make_crypted): Add support for SHA rounds specification.
* modules/default.-c (HASH_ROUNDS_MIN, HASH_ROUNDS_MAX): New macros.
(lu_common_parse_hash_rounds, lu_common_select_hash_rounds): New
functions.
(lu_common_default_salt_specifier): Add support for sha256 and sha512.
Add support for configurable number of hashing rounds.  Return a newly
allocated string.  All callers changed.

2008-01-07  Miloslav Trmač  <mitr@redhat.com>

* tests/files_test.py (Tests.testUserSetpass1)
(Tests.testUserSetpass2, Tests.testUserSetpass3)
(Tests.testGroupSetpass1, Tests.testGroupSetpass2)
(Tests.testGroupSetpass3): Don't assume the password salt is 11
characters long.

2007-12-06  Miloslav Trmač  <mitr@redhat.com>

* apps/lid.1: Fix grammar.

2007-11-14  Miloslav Trmač  <mitr@redhat.com>

* lib/util.c (lu_util_lock_obtain): Fix setting l_type.

2007-10-30  Miloslav Trmač  <mitr@redhat.com>

* lib/util.c (lu_util_fscreate_restore) [WITH_SELINUX]: Fix use of
uninitialized data when SELinux is disabled.

2007-10-25  Miloslav Trmač  <mitr@redhat.com>

* configure.in: Version 0.56.6.
* NEWS: Update.
* Makefile.am (lib_libuser_la_LDFLAGS): Update revision.

* docs/Makefile.am (CLEANFILES): Add sgml/libuser-1.html and
sgml/libuser-2.html.

* Makefile.am (modules_libuser_files_la_LDFLAGS)
(modules_libuser_shadow_la_LDFLAGS)
(modules_libuser_krb5_la_LDFLAGS)
(modules_libuser_ldap_la_LDFLAGS)
(modules_libuser_sasldb_la_LDFLAGS)
(python_libusermodule_la_LDFLAGS): Don't use -export-dynamic, that
option is defined only for executables.

* apps/apputil.c (lu_homedir_copy, lu_homedir_populate)
(lu_homedir_move): Set up / preserve SELinux file contexts when
creating / copying home directories.

* lib/user_private.h (lu_security_context_t, lu_util_fscreate_save)
(lu_util_fscreate_restore, lu_util_fscreate_from_file)
(lu_util_fscreate_for_path): New declarations.
* lib/util.c (lu_util_fscreate_save, lu_util_fscreate_restore)
(lu_util_fscreate_from_file, lu_util_fscreate_for_path): New functions.
* modules/files.c (set_default_context, reset_default_context): Remove.
(generic_add, generic_mod, generic_del, generic_lock)
(generic_setpass): Use lu_util_fscreate_save(),
lu_util_fscreate_from_file() and lu_util_fscreate_restore() instead of
set_default_context() and reset_default_context().  (This fixes a
possible leak of prev_context).
* apps/apputil.c (setup_default_context): Remove.
(lu_authenticate_unprivileged): Use lu_util_fscreate_from_file() instead
of setup_default_context().
* Makefile.am (lib_libuser_la_LDFLAGS): Link to SELINUX_LIBS.
(modules_libuser_files_la_LDFLAGS)
(modules_libuser_shadow_la_LDFLAGS): Don't link to SELINUX_LIBS
directly.

* docs/Makefile.am (CLEANFILES): Add sgml/libuser.html and
sgml/libuser.txt.
(clean-local): Remove.

2007-10-11  Miloslav Trmač  <mitr@redhat.com>

* configure.in: Version 0.56.5.
* NEWS: Update.

* po/LINGUAS: Add kn, ro, te.

* tests/files_test.py (workdir): New variable.
(Tests.testUserAdd4, Tests.testUserAdd5): New tests.

* tests/files_test: Pass workdir to files_test.py.

* apps/apputil.c (lu_homedir_copy): Report an error if the destination
(home directory) is a relative path.
* python/admin.c (libuser_admin_add_user): Don't ignore a raised
exception before creating a mail spool.  Create an exception object
if creating a mail spool fails.  Beautify.
(libuser_admin_delete_user): Create an exception object if removing
a mail spool fails.  Beautify.

2007-09-25  Miloslav Trmač  <mitr@redhat.com>

* tests/ldap_test.py (Tests.testUserMod4): Test empty modifications.

* modules/ldap.c (dump_mods): Handle NULL mods.
(lu_ldap_set): Do not call ldap_modify_ext_s() when no attributes need
to be modified, to avoid spurious errors on Fedora Directory Server.
Beautify.

2007-09-10  Miloslav Trmač  <mitr@redhat.com>

* lib/modules.c (load_one_module): Use G_MODULE_BIND_LOCAL.

2007-06-15  Miloslav Trmač  <mitr@redhat.com>

* configure.in: Version 0.56.4.
* NEWS: Update.
* Makefile.am (lib_libuser_la_LDFLAGS): Update revision.

* tests/files_test.py (Tests.testUserSetpass1)
(Tests.testUserRemovepass)
* tests/ldap_test.py (Tests.testUserSetpass1)
(Tests.testUserRemovepass1): Test LU_SHADOWLASTCHANGE is updated.

* modules/files.c (lu_shadow_user_setpass)
(lu_shadow_group_setpass, lu_shadow_user_removepass)
(lu_shadow_group_removepass): Remove redundant
lu_util_update_shadow_last_change() calls.

* lib/user.c (lu_user_setpass, lu_user_removepass): Save the modified
LU_SHADOWLASTCHANGE value.
(lu_group_setpass, lu_group_removepass): Don't update
LU_SHADOWLASTCHANGE, the field is valid only for user entities.

2007-06-09  Miloslav Trmač  <mitr@redhat.com>

* configure.in: Version 0.56.3.
* NEWS: Update.

* modules/ldap.c (struct lu_ldap_context): New member sasl_mechanism.
(interact): Return "" to SASL_CB_GETREALM.  Shorten variable names for
better formating, simplify a bit.
(bind_server): Use context->sasl_mechanism.  Replace contradictory
LDAP_SASL_INTERACTIVE | LDAP_SASL_QUIET by LDAP_SASL_AUTOMATIC.
(lu_ldap_close_module): Free sasl_mechanism.
(libuser_ldap_init): Default ldap/user to "".  Allow specifying SASL
bind mechanism as "sasl/MECHANISM".
* docs/libuser.conf.5.in: Update bindtype documentation.
Original patch by Simo Sorce <ssorce@redhat.com>.

2007-04-28  Miloslav Trmač  <mitr@volny.cz>

* configure.in
* Makefile.am: Use features available in autoconf 2.61.

2007-04-19  Miloslav Trmac  <mitr@redhat.com>

* configure.in: Version 0.56.2.
* NEWS: Update.

* po/LINGUAS:  Add bs.  Remove languages with no translated strings.

2007-03-16  Miloslav Trmac  <mitr@redhat.com>

* libuser.conf: Remove all krb5 module references to avoid the
slightest possibility of giving an impression that the krb5 module might
work.

2007-03-02  Miloslav Trmac  <mitr@redhat.com>

* po/no.po: Remove, obsoleted by nb.po.
* po/LINGUAS: Remove no.

2007-02-23  Miloslav Trmac  <mitr@redhat.com>

* configure.in: Version 0.56.1.
* NEWS: Update.

* tests/files_test.py (Tests.testUserSetpass3)
(Tests.testGroupLookupName2, Tests.testGroupSetpass3): Simplify the
lambda expression.

* modules/files.c (suffix_passwd, suffix_shadow, suffix_group)
(suffix_gshadow): New variables.
(generic_lookup, generic_add, generic_mod, generic_del, generic_lock)
(generic_is_locked, generic_setpass, lu_files_enumerate)
(lu_files_users_enumerate_by_group, lu_files_groups_enumerate_by_user)
(lu_files_enumerate_full, lu_files_uses_elevated_privileges)
(lu_shadow_uses_elevated_privileges, libuser_shadow_init): Use suffix_*
instead of separate "/" and copy&pasted basenames.  All users changed.

* modules/files.c (lu_files_uses_elevated_privileges)
(lu_shadow_uses_elevated_privileges): Fix incorrect conversion from
g_strdup_printf ().

* modules/files.c (SHADOW_MODULE_NAME): New macro.
(ent_has_shadow): New function.
(generic_setpass): Only silently ignore known shadow markers,
and replace invalid shadow markers by "x";  both only if a shadow
entry exists.
(libuser_shadow_init): Use SHADOW_MODULE_NAME.
* tests/files_test.py (Tests.testUserSetpass1): Rename from
testUserSetpass.
(Tests.testGroupSetpass1): Rename from testGroupSetpass.
(Tests.testUserSetpass2, tests.testUserSetpass3)
(Tests.testGroupSetpass2, tests.testGroupSetpass3): New tests.
* tests/files_test: Update file contents.

2007-02-17  Miloslav Trmac  <mitr@redhat.com>

* configure.in: Version 0.56.
* Makefile.am (lib_libuser_la_LDFLAGS): Update revision.
* NEWS: Update.

* configure.in (AM_INIT_AUTOMAKE): Use dist-bzip2.
* Makefile (archive): Use the bzip2 tarball.

* tests/files_test.py (Tests.testUserLookupName3)
(Tests.testUserDefault, Tests.testGroupLookupName3)
(Tests.testGroupDefault): New tests.
* tests/files_test: Update file contents.

* apps/apputil.c (lu_mailspool_create_remove)
* apps/lnewusers.c (main)
* lib/user.c (lu_default_int)
* modules/files.c (lu_files_user_lookup_id)
(lu_shadow_user_lookup_id, lu_files_group_lookup_id)
(lu_shadow_group_lookup_id, generic_del)
* modules/ldap.c (lu_ldap_base, lu_ldap_user_lookup_id)
(lu_ldap_group_lookup_id, lu_ldap_handle_lock)
(lu_ldap_users_enumerate_by_group): Don't use g_strdup_printf ()
when a simpler alternative can be used.

* lib/error.c (lu_error_new): Don't use lu_strerror () result as a
format string.  Beautify.

* apps/lchage.c (read_ndays): Assume the value is a G_TYPE_LONG.
Return a g_type_long.  All callers updated.
(date_to_string): Use glong for n_days.

* lib/user.c (lu_default_int)
* modules/ldap.c (lu_ldap_lookup): Use
lu_value_init_set_attr_from_string ().  Report invalid values.
* tests/ldap_test.py (Tests.testUserAdd2): Use correct value types.

* docs/reference/tmpl/entity.sgml: Document the value types used for
entities.

* lib/config.c (handle_default_useradd_key): Try harder to eliminate
the possibility of date overflow.

2007-02-16  Miloslav Trmac  <mitr@redhat.com>

* apps/lid.c (do_id): Avoid an unnecessary lu_value_strdup ().

* lib/util.c (salt_type_info): Use char[] instead of char * and reorder
fields within the structure to eliminate run-time relocations and save
some space.

* docs/reference/tmpl/error.sgml: Add missing parameter documentation.

* lib/user.c (lu_user_setpass, lu_user_removepass)
(lu_group_setpass, lu_group_removepass, lu_default_int): Use
lu_util_update_shadow_last_change ().

* lib/util.c (lu_util_shadow_current_date): Return the number of days
as an integer.  Clean up.
(lu_util_update_shadow_last_change): Move from ...
* modules/files.c (set_shadow_last_change): ... here.  All callers
updated.
* lib/internal.h (lu_util_shadow_current_date): Update prototype.  Move
declaration from...
* lib/user_private.h (lu_util_shadow_current_date): ... here.
(lu_util_update_shadow_last_change): New declaration.
(LU_MODULE_VERSION): Bump.

* lib/user.c (replace_all): New function, based on a part of
lu_default_int ().
(lu_default_int): Perform substitutions one by one instead of
precomputing a list of them.

2007-02-15  Miloslav Trmac  <mitr@redhat.com>

* lib/user.c (run_list): Avoid unnecessary g_value_dup_string ().

* lib/entity.c (lu_ent_dump): Remove output of value types that are
not expected to appear.
(lu_ent_add_module): Only copy the module name if it is not already
present in ent->modules.

* modules/files.c (line_read): Simplify and clean up.
(generic_del): Use memmove for copying strings that overlap.  Clean up
the code a bit.

* apps/lnewusers.c (main)
* lib/prompt.c (lu_prompt_console): Eliminate duplicate strchr ()
calls.

* lib/entity.c (lu_ent_del_int): Use lu_values_equal () instead of
g_strdup_value_contents (), which is intended for human-readable
debugging dumps.

* lib/entity.c (lu_ent_dump_attributes): Split from
lu_ent_dump_attributes ().  Show something for unsupported value types.

2007-01-06  Jeremy Katz  <katzj@redhat.com>

* python/misc.c (libuser_prompt_destroy): Use PyObject_DEL since
we allocated with PyObject_NEW (#220679)
* python/ent.c (libuser_entity_destroy): Likewise.
* python/admin.c (libuser_admin_destroy): Likewise.

2006-12-14  Miloslav Trmac  <mitr@redhat.com>

* python/admin.c (AdminType)
* python/ent.c (libuser_entity_mapping_methods, EntityType)
* python/misc.c (PromptType):
Remove casts, use comments to indicate struct members.

* python/admin.c (libuser_admin_setattr)
(libuser_admin_get_first_unused_id, libuser_admin_get_first_unused_gid)
(libuser_admin_new): Add manual casts to conform to
PyCFunctionWithKeywords.
(libuser_admin_get_first_unused_id_type): Remove unnecessary variable.
(libuser_admin_methods) [getUserShells]: Use METH_NOARGS.
* python/common.h (lenfunc): Remove definition.
(libuser_admin_new, libuser_prompt_new, libuser_get_user_shells):
Update prototypes.
* python/ent.c (libuser_entity_destroy, libuser_entity_getattr)
(libuser_entity_setattr, libuser_entity_length)
(libuser_entity_get_item, libuser_entity_set_item): Add manual casts to
conform to method types.
(libuser_entity_getattrlist, libuser_entity_module)
(libuser_entity_clear_all, libuser_entity_revert): Use METH_NOARGS.
(libuser_entity_get, libuser_entity_add, libuser_entity_set)
(libuser_entity_clear)
(libuser_entity_has_key): Add manual casts to conform to PyCFunction.
(libuser_entity_methods) [getattrlist, keys, clear_all, revert]
[modules]: Use METH_NOARGS.
[has_key, get, clear, set, add]: Remove casts.
* python/libusermodule.c (libuser_get_user_shells): Use METH_NOARGS.
(libuser_methods) [prompt, get_user_shells, PROMPT, getUserShells]: Use
METH_NOARGS.
* python/misc.c (libuser_prompt_destroy, libuser_prompt_getattr)
(libuser_prompt_setattr, libuser_prompt_print): Add manual casts to
conform to method types.
(libuser_prompt_new): Use METH_NOARGS.

* python/admin.c (libuser_admin_new)
* python/misc.c (libuser_prompt_new): Remove redundant declarations.

2006-12-10  Miloslav Trmac  <mitr@redhat.com>

* configure.in (AM_GNU_GETTEXT_VERSION): Use gettext-0.14.6.

* configure.in: Version 0.55.
* NEWS: Update.

* autogen.sh
* Makefile.am (EXTRA_MANS, pkginclude_HEADERS, dist_noinst_SCRIPTS)
[QUOTA] (noinst_PROGRAMS, lib_LTLIBRARIES, pyexec_LTLIBRARIES)
* configure.in
* docs/reference/libuser-docs.sgml
* docs/reference/libuser-sections.txt
* python/modules.txt: Remove the quota library and Python module.
* docs/reference/tmpl/quota.sgml
* lib/userquota.3
* lib/userquota.c
* lib/userquota.h
* python/quota-script
* python/quotamodule.c
* samples/quotaq.c: Removed files.

* python/admin.c (libuser_admin_setattr)
(libuser_admin_lookup_user_name, libuser_admin_lookup_user_id)
(libuser_admin_lookup_group_name, libuser_admin_lookup_group_id)
(libuser_admin_do_wrap, libuser_admin_wrap_boolean)
(libuser_admin_setpass, libuser_admin_create_home)
(libuser_admin_remove_home, libuser_admin_move_home)
(libuser_admin_create_remove_mail, libuser_admin_add_user)
(libuser_admin_delete_user)
(libuser_admin_get_first_unused_id_type, libuser_admin_new)
* python/ent.c (libuser_entity_add, libuser_entity_set)
(libuser_entity_clear, libuser_entity_clear_all)
(libuser_entity_revert, libuser_entity_has_key)
* python/misc.c (libuser_admin_prompt, libuser_prompt_getattr):
* python/quotamodule.c (quotamodule_set, quotamodule_on)
(quotamodule_off):
Replace all trivial uses of Py_BuildValue ().

* python/misc.c (libuser_admin_prompt, libuser_prompt_setattr): Remove
an unnecessary use of typeof.

* apps/apputil.c (lu_converse): Use calloc () instead of malloc () and
memset ().

* python/common.h (Py_ssize_t, lenfunc): New definitions.
* python/ent.c (libuser_entity_setattr, libuser_entity_set)
(libuser_entity_length, libuser_entity_set_item): Use Py_ssize_t.
(libuser_entity_mapping_methods): Use lenfunc.
* python/misc.c (libuser_admin_python_prompter, libuser_admin_prompt):
Use Py_ssize_t.

* python/quotamodule.c (Py_ssize_t): New definition.
(quotamodule_set): Use Py_ssize_t.

2006-11-02  Miloslav Trmac  <mitr@redhat.com>

* configure.in: Version 0.54.8.
* Makefile.am (lib_libuser_la_LDFLAGS): Update revision.
* NEWS: Update.

* lib/config.c (handle_default_useradd_key): Import HOME.
* docs/libuser.conf.5.in: Document HOME is imported from
default/useradd.
* tests/config_default_useradd
* tests/config_override.conf.in
* tests/config_test.c (main): Test import of HOME.

2006-09-25  Miloslav Trmac  <mitr@redhat.com>

* configure.in: Version 0.54.7.
* NEWS: Update.

* po/LINGUAS: Add el, ml and or.

2006-05-01  Miloslav Trmac  <mitr@redhat.com>

* configure.in: Version 0.54.6.
* Makefile.am (lib_libuser_la_LDFLAGS): Update revision.
* NEWS: Update.

* apps/lchsh.c (main): Provide a more verbose error message.

* apps/apputil.c (lu_homedir_copy): Split from lu_homedir_populate.
Reformat a bit.
(lu_homedir_populate): New parameter ctx.  Default skeleton to
defaults/skeleton.  All users updated to pass NULL instead of reading
the config value.
* apps/apputil.h (lu_homedir_populate): Update prototype.
* python/admin.c (libuser_admin_add_user): New keyword parameter
"skeleton".
* python/modules.txt: Document new addUser parameter.

2006-03-12  Miloslav Trmac  <mitr@redhat.com>

* modules/ldap.c (get_ent_mods): Remove unused parameter module.

* lib/getdate.y: Quiesce some warnings.

* lib/config.c (read_file): Make type conversion explicit, assuming
sizeof (off_t) >= sizeof (size_t).

2006-03-06  Miloslav Trmac  <mitr@redhat.com>

* python/admin.c (libuser_admin_enumerate_users)
(libuser_admin_enumerate_groups)
(libuser_admin_enumerate_users_by_group)
(libuser_admin_enumerate_groups_by_user): Don't attempt to
g_value_array_free(NULL).

* lib/user.c (extract_id, extract_name): Don't warn if the attribute
has no value, leave it to the caller.
(lu_refresh_int): Don't unnecessarily call extract_id().  Don't attempt
to refresh an entity without name.
(convert_user_name_to_id, convert_group_name_to_id): Report errors
when the entity can't be found or has no ID.
(ent_has_name_and_id): New function.
(lu_dispatch): Report more detailed errors on insufficiently filled
entities, also fixing a memory leak.  Use constants for unused sdata,
ldata parameters.

* lib/user.c (lu_dispatch): Use g_assert_not_reached().

* apps/lid.c (do_id): Report lookup error.  Exit with status 1 on
error.

* apps/lchsh.c (main): Report error on prompting.  Exit with status 1
on error.

* apps/lchfn.c (main): Exit with status 1 on error.

* apps/apputil.c (lu_mailspool_create_remove): Fix memory leak.

2006-03-05  Miloslav Trmac  <mitr@redhat.com>

* modules/files.c (parse_generic): Fix crash if the last field is
empty.

(lu_files_enumerate_full): Don't return empty data if the input line is
invalid.  Match only the user name against the supplied pattern.
* tests/files_test.py (Tests.testUsersEnumerateFull3)
(Tests.testGroupsEnumerateFull3): New tests.

2006-02-21  Miloslav Trmac  <mitr@redhat.com>

* lib/getdate.y: Add missing #include.  Define YYENABLE_NLS to avoid
-Wundef.

* configure.in: Version 0.54.5.
* NEWS: Update.

* configure.in: Use newer gettext.

* docs/libuser.conf.5.in: Remove @pkglibdir@ references to avoid
multilib conflicts.
* docs/Makefile.am (libuser.conf.5): Stop replacing @pkglibdir@.

* modules/sasldb.c (lu_sasldb_close_module): Fix invalid aliasing.

2006-02-13  Miloslav Trmac  <mitr@redhat.com>

* po/LINGUAS: Add my.

* configure.in: Version 0.54.4.
* NEWS: Update.
* Makefile.am (lib_libuser_la_LDFLAGS): Update revision.

2006-01-31  Miloslav Trmac  <mitr@redhat.com>

* configure.in (WITH_PYTHON): New conditional.
* Makefile.am (pyexec_LTLIBRARIES, pyexec_LTLIBRARIES): Only use if
WITH_PYTHON.
Based on a patch by Dan Yefimov <dan@ns15.lightwave.net.ru>.

* lib/scache.c (get_keys): Fix C99-ism, patch by Dan Yefimov
<dan@ns15.lightwave.net.ru>.

2005-12-20  Miloslav Trmac  <mitr@redhat.com>

* po/LINGUAS: Add hy, sr and sr@Latn.

2005-12-02  Miloslav Trmac  <mitr@redhat.com>

* configure.in: Version 0.54.3.
* NEWS: Update.

* apps/lpasswd.c (main): Determine user name before attempting to
autenticate a NULL user.

2005-11-12  Miloslav Trmac  <mitr@redhat.com>

* modules/krb5.c (lu_krb5_user_add)
* modules/ldap.c (lu_ldap_handle_lock, lu_ldap_setpass): Use
g_str_has_prefix () where appropriate.

2005-11-11  Miloslav Trmac  <mitr@redhat.com>

* configure.in: Version 0.54.2.
* NEWS: Update.
* Makefile.am (lib_libuser_la_LDFLAGS): Update revision.

* modules/ldap.c (close_server, connect_server, bind_server)
(lu_ldap_ent_to_dn, lu_ldap_lookup, lu_ldap_fudge_objectclasses)
(lu_ldap_is_locked, lu_ldap_setpass, lu_ldap_user_enumerate): Avoid
functions deprecated by openldap.
(objectclass_present, lu_ldap_needed_objectclasses): Use BerValue's
instead of strings.  All callers updated.
(free_needed_objectclasses): New function.
* configure.in: Remove checks for no longer used deprecated openldap
functions.

(lu_ldap_close_module): Use close_server ().
(lu_ldap_set, lu_ldap_del, lu_ldap_handle_lock, lu_ldap_is_locked)
(lu_ldap_setpass, connect_server, bind_server): Replace empty LDAP
control vectors by NULL.

2005-10-11  Miloslav Trmac  <mitr@redhat.com>

* configure.in: Version 0.54.1.
* Makefile.am (lib_libuser_la_LDFLAGS): Update revision.

* libuser.pc.in (Requires)
* configure.in: Use gmodule-no-export-2.0.

* libuser.conf: Rename from libuser.conf.in, hardcode @sysconfdir@ to
/etc.
* Makefile.am: Ship libuser.conf instead of libuser.conf.in.

* libuser.conf.in: Update to import values from shadow where possible.

* NEWS: Update.

2005-10-10  Miloslav Trmac  <mitr@redhat.com>

* tests/config_default_useradd, testes/config_import.conf.in,
tests/config_login.defs, tests/config_override.conf.in: New files.
* tests/config_test.sh: Generate three config files, pass $workdir
to config_test instead of setting LIBUSER_CONF.
* tests/config_test.c (start): Split from main ().  Set LIBUSER_CONF.
(verify_var): Abstract from main ().
(main): Test configuration import from shadow.
* Makefile.am (EXTRA_DIST): Distribute the new test components.

* lib/config.c (handle_login_defs_key): Fix pasto.  Don't use the first
member of conv[] over and over.

2005-10-09  Miloslav Trmac  <mitr@redhat.com>

* Most functions: Move variables to inntermost scope, remove
unnecessary initializers.

* modules/ldap.c (struct lu_ldap_context): New members user_branch,
group_branch.
(libuser_ldap_init): Initialize user_branch, group_branch.
(lu_ldap_base, lu_ldap_ent_to_dn, lu_ldap_lookup, lu_ldap_set)
(lu_ldap_del, lu_ldap_handle_lock, lu_ldap_is_locked, lu_ldap_setpass)
(lu_ldap_enumerate): Replace the configKey and def parameters by
branch.  All callers changed to use struct lu_ldap_context members.
(lu_ldap_ent_to_dn): Rename variable branch to base.

(lu_ldap_base): Don't access module before asserting it is non-NULL.
Fix checking of empty branch.
(lu_ldap_ent_to_dn): Remove unused variable base.  Map namingAttr to
LDAP only once.
(libuser_ldap_init): Fix memory leak.

* modules/ldap.c (LU_LDAP_USER, LU_LDAP_GROUP, LU_LDAP_SHADOW): Remove.
(ldap_attribute_map): Replace applicability by type.
(lu_ldap_lookup): Replace applicability by type.  All
callers changed.

* modules/ldap.c (lu_ldap_base, lu_ldap_lookup, lu_ldap_set)
(lu_ldap_del, lu_ldap_handle_lock, lu_ldap_is_locked, lu_ldap_setpass):
Remove handling of NULL which can't ever trigger.

* modules/ldap.c (lu_ldap_user_lookup_name, lu_ldap_user_lookup_id)
(lu_ldap_group_lookup_name, lu_ldap_group_looup_id, getn_ent_adds)
(lu_ldap_is_locked, lu_ldap_setpass, lu_ldap_users_enumerate)
(lu_ldap_users_enumerate_full, lu_ldap_groups_enumerate)
(lu_ldap_groups_enumerate_full, lu_ldap_users_enumerate_by_group)
(lu_ldap_gropus_enumerate_by_user): Hardcode constant results
of map_to_ldap ().

* docs/libuser.conf.5.in: New file.
* docs/Makefile.am: Ship and install libuser.conf.5.

2005-10-07  Miloslav Trmac  <mitr@redhat.com>

* lib/config.c (destroy_section): Split from lu_cfg_done().
(gather_values): Removed function.
(lu_cfg_done): Don't build a temporary list of sections to free.
(lu_cfg_read_single): Don't unnecessarily cache the default value.

* config.c (key_add_cached): Split from lu_cfg_init ().
(key_defined, key_add, handle_login_defs_key, import_login_defs)
(handle_default_useradd_key, import_default_useradd): New functions.
(lu_cfg_init): Handle import/login_defs and import/default_useradd.

* configure.in (YACC): New check.
* Makefile.am (lib_libuser_la_SOURCES): Add lib/getdate.y.
* lib/getdate.y: New file, copied from shadow and made reentrant.
* lib/internal.h: Declare lu_get_date ().  Remove dependencies on other
headers.

* lib/modules.c (load_one_module): Split from lu_modules_load.
Fix leaks.
(lu_modules_load): Keep the *modules unchanged on failure.
(lu_module_unload): Simplify.
* lib/user.c (lu_start): Allocate ctx->scache before lu_cfg_init ().
Fix leaks.
(lu_end): Remove unnecessary NULL checks.

* tests/ldap_test: Allow more time for slapd initialization.

2005-10-01  Miloslav Trmac  <mitr@redhat.com>

* lib/config.c (process_line): Cast arguments of isspace () to unsigned
char.
* apps/apputil.c: Remove unnecessary #include <ctype.h>.

* lib/config.c (process_line): Split from lu_cfg_init ().
Handle very large files and EINTR from read ().  Fix FD leak on
fstat () failure.  Don't prezero the buffer.

* lib/config.c (process_line): Fix accesses before the allocated
array.  Add some microoptimizations.

2005-09-30  Miloslav Trmac  <mitr@redhat.com>

* modules/default.-c (salt_initializer_des, salt_initializer_md5)
(salt_initializer_blowfish): Remove unnecessary variables, fold values
in lu_common_default_salt_specifier ().

2005-09-29  Miloslav Trmac  <mitr@redhat.com>

* modules/files.c (libuser_shadow_init): Avoid useless runtime
computation.

* modules/files.c (lu_files_uses_elevated_privileges): Hardcode "/etc"
as default, like other functions.
* Makefile.am (modules_libuser_files_la_CPPFLAGS)
(modules_libuser_shadow_la_CPPFLAGS): Don't define SYSCONFDIR.
(modules_libuser_files_la_CPPFLAGS): Define SYSCONFDIR directly.
(SYSCONFDIR): Remove definition.

2005-09-14  Miloslav Trmac  <mitr@redhat.com>

* apps/apputil.c (lu_authenticate_unprivileged): Correctly handle
pam_get_item () failures.

2005-09-13  Miloslav Trmac  <mitr@redhat.com>

* configure.in: Version 0.54.
* Makefile.am (lib_libuser_la_LDFLAGS): Update revision.

* NEWS: Update.

* apps/apputil.h
* lib/internal.h: Add G_GNUC_INTERNAL to all declarations.

* lib/util.c (lu_strv_len): Remove.
* lib/user_private.h (lu_strv_len): Remove declaration.

* lib/user.c (lu_default_int): Replace lu_str_case_equal () with its
contents.
* lib/util.c (lu_str_case_equal, lu_str_equal)
(lu_account_name_is_valid): Remove unused functions (not exported in
public header files).
* lib/internal.h (lu-str_case_equal, lu_str_equal)
(lu_account_name_is_valid: Remove
declarations.

* apps/apputil.c (lu_strconcat): Comment out like its only user.
* apps/apputil.h (lu_strconcat): Remove declaration.

* lib/internal.h: Merge lib/modules.h and lib/util.h.
* lib/user_private.h: Move internal interfaces to internal.h.
* Makefile.am (lib_libuser_la_SOURCES)
* docs/reference/Makefile.am (IGNORE_HFILES)
* lib/config.c
* lib/entity.c
* lib/misc.c
* lib/modules.c
* lib/scache.c
* lib/user.c
* modules/krb5.c: Update.

2005-09-12  Miloslav Trmac  <mitr@redhat.com>

* apps/apputil.c (lu_converse)
* apps/lnewusers.c (main)
* lib/error.c (lu_error_free)
* python/misc.c (libuser_prompt_setattr): Remove conditionals around
g_free () or g_strfreev ().

* apps/lchfn.c (main)
* apps/lnewusers.c (main)
* lib/util.c (lu_strv_len)
* modules/files.c (parse_generic): Use g_strv_length ().
* lib/user_private.h (lu_strv_len): Mark as deprecated.

* apps/apputil.c (lu_converse): Actually use the "pending" messages.

* lib/entity.c (quark_from_attribute): Use g_ascii_strdown ().

* modules/files.c (struct format_specifier): Remove member position,
assume position == index + 1.
(format_passwd, format_group, format_shadow, format_gshadow)
(parse_generic, format_generic, generic_mod): Update.

* lib/entity.c (lu_ent_add_int)
* modules.files.c (format_generic, generic_mod): Beautify.

* modules/files.c (generic_mod): Simplify name extraction.

* modules/files.c (format_field): New function.
(format_generic, generic_mod): Use format_field ().

* lib/entity.c (quark_from_attribute): New function.
(lu_ent_get_int, lu_ent_clear_int, lu_ent_set_int, lu_ent_add_int):
Use quark_from_attribute ().

* modules/files.c (generic_mod): Fix crash when attribute is missing.
* tests/files_test.py (Tests.testUserMod4): New test.

* modules/files.c (parse_generic): Use size_t for field index.

* apps/lchage.c (read_ndays): Assume array != NULL
&& array->n_values > 0.  Beautify.

* lib/user.c (merge_ent_array_duplicates)
* modules/files.c (generic_is_locked)
* modules/ldap.c (lu_ldap_lookup, get_ent_adds): Beautify.

* apps/lchage.c (main)
* apps/lchsh.c (main)
* apps/luserdel.c (main)
* lib/user.c (lu_dispatch)
* modules/files.c (lu_shadow_user_lookup_id, lu_shadow_group_lookup_id)
(format_generic): Simplify conditions based on the guarantee
below.

* docs/reference/tmpl/entity.sgml: Document that attribute values have
always at least one value.
* lib/entity.c (lu_ent_set_int, lu_ent_del_int): Remove the attribute
if there are no values.

2005-06-08  Miloslav Trmac  <mitr@redhat.com>

* configure.in: Version 0.53.8.

* NEWS: Update.

* tests/ldap_test: Remove temporary debugging modification.

* lib/user.c (lu_name_allowed, INVALID_NAME_CHARS): Permit "portable"
user and group names as defined by SUSv3, plus trailing $.
* tests/files_test.py (Tests.testUserAddPrep): New test.

* lib/error.h: Use G_GNUC_PRINTF.
* python/debug.h (FIXME): Remove unused definition.

2005-06-04  Miloslav Trmac  <mitr@redhat.com>

* autogen.sh: Don't set CFLAGS, we don't run configure any more.

* configure.in: Use gettext 0.14.3.

* tests/ldap_test: Really use tests/ldaprc.

2005-05-20  Miloslav Trmac  <mitr@redhat.com>

* autogen.sh: Document the full set of testing flags.  Remove hardcoded
paths (used to be necessary to workaround parsing paths in configure).

* configure.in, Makefile.am: Don't attempt to parse paths in configure,
let (make) expand the variables.
* libuser.conf.in: Don't use both @scdir@ and @sysconfdir@.

* tests/config_test.sh: New file.
* tests/config.conf: Rename from tests/config.conf.in.  Define
defaults/moduledir to point to the build directory.
* tests/config_test.c: Don't define LIBUSER_CONF, it is defined by the
wrapper script now.

* configure.in: Remove many unnecessary tests, simplify others.  Fix
checking for __secure_getenv().
* Makefile.am: Hardcode variables with only a single possible value

* configure.in: Disable building of static libraries.
* Makefile.am: Don't remove *.{a,la} of plugins.

2005-04-30  Miloslav Trmac  <mitr@redhat.com>

* configure.in: Version 0.53.7.

* NEWS: Update.

* configure.in: Remove unused GETTEXT_PACKAGE definition.

* po/LINGUAS: New file, moved from ALL_LINGUAS in configure.in.
Add missing languages (bn_IN, en_GB, et, fi, gu, he, id, ka, ku, lo,
mr, si, sq, ur).

2005-04-24  Miloslav Trmac  <mitr@redhat.com>

* configure.in: Version 0.53.6.

* NEWS: Update.

* Makefile.am: Don't ship test/config_test in distribution tarball.

* autogen.sh: Don't automatically run configure.
* Makefile.am: Update.

* tests/config_test.c, tests/config.conf: New files.
* Makefile.am: Add tests/config_test.c and tests/config.conf.

* lib/config.c (lu_cfg_init): Don't ignore keys with empty values.

* lib/config.c (struct config_config): Store the configuration
in parsed form, not only the text of the config file.
(lu_cfg_init): Parse the configuration only at initialization time.
(lu_cfg_done): Update.
(lu_cfg_read, lu_cfg_read_keys): Use the paresd configuration.
(compare_section_names, compare_key_string, gather_values): New
functions.

2005-04-15  Miloslav Trmac  <mitr@redhat.com>

* configure.in: Version 0.53.5.

* NEWS: Update.

* tests/files_test.py (Tests.testUserEnumerate1): Rename from
testUserEnumerate.
(Tests.testGroupsEnumerate1): Rename from testGroupsEnumerate.
(Tests.testUsersEnumerateFull1): Rename from testUsersEnumerateFull.
Simplify.
(Tests.testGroupsEnumerateFull1): Rename from testGroupsEnumerateFull.
Simplify.
(Tests.testUsersEnumerateByGroup3): Simplify.
(Tests.testUserEnumerate2, Tests.testUsersEnumerateByGroup4)
(Tests.testUsersEnumerateFull2, Tests.testGroupsEnumerate2)
(Tests.testGroupsEnumerateByUser4, Tests.testGroupsEnumerateFull2):
New tests.

* modules/files.c (lu_files_enumerate)
(lu_files_users_enumerate_by_group)
(lu_files_groups_enumerate_by_user, lu_files_enumerate_full): Skip
nss_compat lines (starting with '+' or '-').

* tests/files_test: Update initial file contents.

* apps/apputil.c: Remove unnecessary include.

* configure.in: Use AM_PATH_PYTHON instead of --with-python-version.

* Makefile.am (pythonexecdir): Replace by pyexecdir.
(DISTCHECK_CONFIGURE_FLAGS): Remove
--with-python-version.
(PYTHON_CPPFLAGS): New definition.

2005-04-06  Miloslav Trmac  <mitr@volny.cz>

* configure.in: Version 0.53.4.

* NEWS: Update.

2005-04-06  Miloslav Trmac  <mitr@redhat.com>

* modules/ldap.c (ldap_attribute_map): Fix "cn" objectclass.
(lu_ldap_needed_objectclasses): Don't add "account" objectclass if it
is already present.
(lu_ldap_fudge_objectclasses): Add debugging output.

2005-03-05  Miloslav Trmac  <mitr@redhat.com>

* configure.in: Version 0.53.3.

* NEWS: Update.

2005-03-04  Miloslav Trmac  <mitr@redhat.com>

* apps/apputil.c (lu_homedir_populate, lu_signal_nscd)
(lu_mailspool_create_remove)
* modules/files.c (lu_files_create_backup, generic_add, generic_del):
Add more error checking.

* modules/ldap.c: Include Cyrus SASL v2 header file.

* modules/krb5.c (lu_krb5_user_add, lu_krb5_user_mod)
(lu_krb5_user_del, lu_krb5_user_do_lock, lu_krb5_user_islocked)
(lu_krb5_user_setpass): Fix checking of lu_ent magic.

* docs/reference/libuser-sections.txt: Add lu_values_equal.
* docs/reference/tmpl/value.sgml: Document lu_values_equal ().

2005-01-17  Miloslav Trmac  <mitr@redhat.com>

* configure.in: Version 0.53.2.

* NEWS: Update.

* tests/utils_test
* tests/utils.conf.in
* tests/utils_group
* tests/utils_gshadow
* tests/utils_passwd
* tests/utils_shadow: New files.
* Makefile.am: Add tests/utils_test.

* apps/lgroupmod.c (main): Fix ignoring of other changes when one
of -p, -P, -L, -U is used.  Fix group ID changes (look up group
members in the original group, and only after applying other
member list modifications; don't change primary group ID for users
that have a different primary group).

* apps/lgroupmod.1: Fix typo.

* apps/lnewusers.c (main): Don't use "users" if the input
specifies a nonexistent group name.  Use the specified user ID.
* apps/lnewusers.1: Update.

* apps/luseradd.c (main): Actually implement -p and -P.

* apps/lusermod.c (main): Fix ignoring of other changes when one
of -p, -P, -L, -U is used.

2005-01-15  Miloslav Trmac  <mitr@redhat.com>

* apps/lchage.1
* apps/lgroupadd.1
* apps/lgroupdel.1
* apps/lgroupmod.1
* apps/lid.1
* apps/lnewusers.1
* apps/lpasswd.1
* apps/luseradd.1
* apps/luserdel.1
* apps/lusermod.1: New files.
* Makefile.am: Add new man pages.

* apps/lchage.c (main): Fix cut-and-paste error in -E and -W.
* apps/lpasswd.c (main): Make sure the password is always
'\0'-terminated.
* apps/luseradd.c (main): Exit if a new group can't be created.

2004-12-13  Miloslav Trmac  <mitr@redhat.com>

* configure.in: Version 0.53.1.

* NEWS: Update.

* python/libusermodule.c (initlibuser): Export UT_NAMESIZE from
<utmp.h>.
* pythone/modules.txt: Document UT_NAMESIZE.

2004-11-14  Miloslav Trmac  <mitr@redhat.com>

* configure.in: Version 0.53.

* NEWS: Update.

* docs/reference/libuser-sections.txt
* docs/reference/tmpl/user.sgml: Document lu_user_unlock_nonempty ()
and lu_group_unlock_nonempty ().

* tests/files_test.py (Tests.testUserUnlockNonempty1)
(Tests.testUserUnlockNonempty2, Tests.testUserUnlockNonempty3)
(Tests.testGroupUnlockNonempty1, Tests.testGroupUnlockNonempty2)
(Tests.testGroupUnlockNonempty3)
* tests/ldap_test.py (Tests.testUserUnlockNonempty1)
(Tests.testUserUnlockNonempty2, Tests.testUserUnlockNonempty3)
(Tests.testGroupUnlockNonempty1, Tests.testGroupUnlockNonempty2)
(Tests.testGroupUnlockNonempty3): Add tests for
lu_user_unlock_nonempty ()

* modules/files.c (reset_default_context): Don't report error in
restoring default context, there is no way to handle them anyway.

* python/admin.c (libuser_admin_unlock_user)
(libuser_admin_unlock_group): Allow calling lu_user_unlock_nonempty ()
and lu_group_unlock_nonempty ().
* python/modules.txt: Document unlockUser nad unlockGroup changes.

* tests/files_test.py (Tests.testUserUnlock3)
(Tests.testGroupUnlock3)
* tests/ldap_test.py (Tests.testUserUnlock3)
(Tests.testGroupUnlock2): Test that empty password fields can be
unlocked.

* modules/ldap.c (enum lock_op): New definition.
(lu_ldap_handle_lock): Use enum lock_op.  All callers changed.
(lu_ldap_user_unlock_nonempty, lu_ldap_group_unlock_nonempty)
(libuser_ldap_init): Handle user_unlock_nonempty and
group_unlock_nonempty.

* modules/files.c (enum lock_op): New definition.
(lock_process): Use enum lock_op, return error status.
(generic_lock): Use enum lock_op.  All callers changed.
(lu_files_user_unlock_nonempty, lu_files_group_unlock_nonempty)
(lu_shadow_user_unlock_nonempty, lu_shadow_group_unlock_nonempty)
(libuser_files_init, libuser_shadow_init): Handle user_unlock_nonempty
and group_unlock_nonempty.

* modules/sasldb.c (lu_sasldb_user_unlock_nonempty)
(lu_sasldb_group_unlock_nonempty, libuser_sasldb_init): Define
user_unlock_nonempty and group_unlock_nonempty stubs.

* lib/error.h (lu_error_unlock_empty): New definition.
* lib/error.c (lu_strerror, lu_error_is_error): Handle
lu_error_unlock_empty.

* lib/user_private.h (LU_MODULE_VERSION): Bump.
(struct lu_module): New members user_unlock_nonempty,
group_unlock_nonempty.
* lib/modules.c (lu_modules_load): Handle new struct lu_module members.
* lib/user.c (lu_user_unlock_nonempty, lu_group_unlock_nonempty): New
functions.
(lu_dispatch_id): New values user_unlock_nonempty,
group_unlock_nonempty.
(run_single, run_list, lu_dispatch): Handle new lu_dispatch_id values.
* lib/user.h: Add declarations.

* NEWS: Update.

* tests/files_test.py (Tests.testUserLock1, Tests.testUserLock2)
(Tests.testUserUnlock1, Tests.testUserUnlock2)
(Tests.testUserIslocked1, Tests.testUserIslocked2)
(Tests.testUserSetpass, Tests.testUserRemovepass)
(Tests.testGroupLock1, Tests.testGroupLock2)
(Tests.testGroupUnlock1, Tests.testGroupUnlock2)
(Tests.testGroupIsLocked1, Tests.testGroupIsLocked2)
(Tests.testGroupSetpass, Tests.testGroupRemovepass): Test the functions
don't change the non-shadow password fields.

* modules/files.c (generic_setpass): Allow setting a shadow password
even if the current shadow password is invalid.  All callers updated.

* apps/luseradd.c (main): Don't attempt to create a user group
if --gid specifies a numerical ID of a non-existing group.

* apps/lnewusers.c (main): Fix handling of empty home directory field.

* apps/lusermod.c (main): Make copies of entity values that get
destroyed by lu_user_modify ().  Get a list of groups an user is in
before renaming the user.  Don't reuse 'ent' for group entitites.

* NEWS: Update.

2004-11-13  Miloslav Trmac  <mitr@redhat.com>

* modules/files.c (struct format specifier): New member def_if_empty.
(format_passwd, format_group, format_shadow, format_gshadow): Update.
(parse_generic): Check for def_if_empty.

* apps/lgroupadd.c (main)
* apps/lgroupmod.c (main)
* apps/lchage.c (read_ndays)
* apps/lnewusers.c (main)
* apps/luseradd.c (main)
* apps/lusermod.c (main)
* lib/misc.c (lu_value_get_id)
* lib/user.c (lu_default_int)
* modules/files.c (parse_field)
* modules/ldap.c (lu_ldap_lookup)
* samples/lookup.c (main): Check strto* () for error yet more properly.

* tests/files.conf.in, tests/files_test, tests/files_test.py: New
files.

* Makefile.am: Add tests/files_test.
(EXTRA_DIST): Don't change values depending on whether LDAP is used.

* modules/files.c (libuser_files_init, libuser_shadow_init): Allow
using the modules as non-root if explicitly requested.

2004-11-09  Miloslav Trmac  <mitr@redhat.com>

* tests/ldap_test.py (Tests.testUserLookupId)
(Tests.testGroupLookupId): Test large ID values.
(Tests.testUserAdd4, Tests.testUserMod3, Tests.testGroupAdd3)
(Tests.testGroupMod3): New tests.

* apps/lusermod.c (main): Fix user renaming in groups where the
user is a member or administrator.

* python/ent.c (libuser_convert_to_value): Handle whole id_t
range.

* python/ent.c (libuser_convert_to_value): Report Python exception
instead of aborting.  Return success/failure status.
(libuser_entity_setattr, libuser_entity_add, libuser_entity_set)
(libuser_entity_set_item): Handle errors reported by
libuser_convert_to_value().

* python/ent.c (convert_value_array_pylist): Handle G_TYPE_INT64.

* python/admin.c (lubser_admin_lookup_user_id)
(libuser_admin_lookup_group_id, libuser_admin_create_home)
(libuser_admin_get_first_unused_id_type): Handle whole uid_t/gid_t
range.

2004-11-08  Miloslav Trmac  <mitr@redhat.com>

* lib/user.c (lu_default_int): Use id_t.

* lib/user.c (lu_get_first_unused_id): Change the interface to use
id_t.  Don't allow (id_t)-1.
* lib/user_private.h: Update prototype.

* modules/files.c (format_passwd, format_group): Use
G_TYPE_INVALID for id_t.
(parse_field): Handle G_TYPE_INVALID.

* modules/files.c (parse_field): New function, split from
parse_generic ().  Don't interpret input as octal or hexadecimal
numbers.
(parse_generic): Use parse_field ().

* modules/ldap.c (lu_ldap_lookup): Convert id_t values to numbers,
not strings.  Don't interpret input as octal or hexadecimal
numbers.

* samples/lookup.c (main): Handle whole id_t range.

* lib/user.c (lu_default_int): Convert id_t values to numbers, not
strings.  Don't interpret input as octal or hexadecimal numbers.

* lub/user.c (lu_default_int): Handle whole range of uid_t/gid_t in
'%u' substitution.

* lib/user.c (lu_default_int): Remove copy-and-pasted usage of
idkeystring as a generic fallback.

* lib/user.c (lu_default_int): Handle whole ID range.

* lib/user.c (compare_strings): Replace compare_ints ().
(merge_ent_array_duplicates): Use lu_value_strdup () instead of
poking in GValues.

* modules/ldap.c (value_compare): Removed function.

* lib/entity.c (lu_ent_add_int)
* lib/user.c (remove_duplicate_values)
* modules/ldap.c (arrays_equal, get_ent_mods): Use lu_values_equal ().

* lib/misc.c (lu_values_equal): New function.
* lib/user.h: Add declaration.

* apps/lgroupmod.c (main)
* apps/lgroupadd.c (main)
* apps/luseradd.c (main)
* apps/lusermod.c (main): Handle whole gid_t/uid_t range for
'--gid' and '--uid', respectively.

2004-11-07  Miloslav Trmac  <mitr@redhat.com>

* apps/apputil.h (INVALID): Removed definition.

* apps/apputil.c (lu_mailspool_create_remove)
* apps/lgroupadd.c (main)
* apps/lgroupmod.c (main)
* apps/lnewusers.c (main)
* apps/luseradd.c (main)
* apps/lusermod.c (main): Use LU_VALUE_INVALID_ID to indicate unknown
value.

* lib/user.c (INVALID): Removed definition.
(extract_id, convert_user_name_to_id, convert_group_name_to_id):
Return LU_VALUE_INVALID_ID on failure.  All callers changed.
(lu_dispatch): Use LU_VALUE_INVALID_ID to indicate unknown value.
All callers changed.

* samples/testuser.c (dump_attribute): Handle G_TYPE_INT64.

* modules/ldap.c (lu_ldap_user_lookup_id): Handle whole uid_t range.
(lu_ldap_group_lookup_id, lu_ldap_users_enumerate_by_group): Handle
whole gid_t range.

* modules/files.c (lu_files_user_lookup_id)
(lu_shadow_user_lookup_id): Handle whole uid_t range.
(lu_files_group_lookup_id, lu_shadow_group_lookup_id)
(lu_files_users_enumerate_by_group): Handle whole gid_t range.

* lib/user.c (run_single, run_list): Use id_t for ldata.  All callers
changed.
(convert_user_name_to_id): Return uid_t.
(convert_group_name_to_id): Return gid_t.

* lib/entity.c (lu_ent_dump): Handle G_TYPE_INT64.

* apps/luserdel.c (main): Handle whole gid_t range.

* apps/luseradd.c (main): Handle whole gid_t range.

* apps/lnewusers.c (main): Handle whole uid_t/gid_t range, don't ignore
invalid values.

* apps/lchage.c (read_ndays): Handle G_TYPE_INT64.

* apps/apputil.c (lu_mailspool_create_remove)
* apps/lgroupmod.c (main)
* apps/lnewusers.c (main)
* apps/luseradd.c (main)
* apps/luserdel.c (main)
* modules/ldap.c (lu_ldap_groups_enumerate_by_user): Use
lu_value_get_id ().

* docs/reference/tmpl/value.sgml: New file.

* lib/misc.c (lu_value_get_id): New function.
* lib/user.h: Add declaration.
(LU_VALUE_INVALID_ID): New macro.

* apps/lgroupadd.c (main)
* apps/lgroupmod.c (main)
* apps/lnewusers.c (main)
* apps/luseradd.c (main)
* apps/lusermod.c (main)
* lib/user.c (lu_default_int): Use lu_value_init_set_id ().

* lib/misc.c (lu_value_init_set_id): New function.
* lib/user.h: Add declaration.
* lib/misc.c (lu_value_strdup): Handle G_TYPE_INT64.

* lib/misc.c (lu_strdup_value): Rename to lu_value_strdup (). All
callers changed.
* lib/user.h: Rename declaration.

* apps/lchage.c (read_ndays)
* apps/lnewusers.c (main)
* apps/luseradd.c (main)
* lib/user.c (lu_default_int)
* modules/files.c (parse_generic)
* modules/ldap.c (lu_ldap_lookup)
(lu_ldap_groups_enumerate_by_user): Properly check strtol () for error.

2004-11-05  Miloslav Trmac  <mitr@redhat.com>


* modules/files.c (generic_lock, generic_is_locked, generic_setpass)
* apps/lchfn.c (main): Use lu_strdup_value ().

* modules/files.c (generic_is_locked): Fix memory leak.

2004-11-04  Miloslav Trmac  <mitr@redhat.com>

* modules/ldap.c (get_ent_adds, get_ent_mods, lu_ldap_set)
(lu_ldap_del, lu_ldap_handle_lock, lu_ldap_is_locked)
(lu_ldap_setpass): Use lu_strdup_value () instead of
value_as_string ().
(value_as_string): Removed function.

* modules/sasldb.c (lu_sasldb_user_munge, lu_sasldb_user_is_locked):
Use lu_strdup_value ().

2004-11-03  Miloslav Trmac  <mitr@redhat.com>

* apps/apputil.c (lu_mailspool_create_remove)
* apps/lchfn.c (main)
* apps/lchsh.c (main)
* apps/lid.c (main)
* modules/files.c (lu_shadow_user_lookup_id, lu_shadow_group_lookup_id)
(format_generic, generic_mod, generic_del): Use lu_strdup_value ().

* lib/misc.c (lu_strdup_value): New function.
* lib/user.h: Add declaration.
* docs/reference/tmpl/entity.sgml
* docs/reference/libuser-sections.txt: Document lu_strdup_value ().

2004-11-02  Miloslav Trmac  <mitr@redhat.com>

* configure.in: Version 0.52.6.

* NEWS: Update.

2004-11-01  Miloslav Trmac  <mitr@redhat.com>

* modules/sasldb.c (lu_sasldb_user_lookup_name, lu_sasldb_user_munge)
(lu_sasldb_user_is_locked): Remove assertions on possible error codes,
undocumented codes happen too.

* modules/sasldb.c (libuser_sasldb_init): Fix self-describing module
name.

* modules/sasldb.c (lu_sasldb_user_removepass)
(lu_sasldb_group_removepass): New functions
(libuser_sasldb_init): Set the user_removepass and group_removepass
handlers.

* lib/modules.c (lu_modules_load): Don't close a NULL handle.

* modules/sasldb.c (lu_sasldb_user_add): Return TRUE on success.

* configure.in
* modules/sasldb.c (lu_sasldb_user_lookup_name, lu_sasldb_user_munge)
(libuser_sasldb_init): Use Cyrus SASL v2.

* modules/ldap.c (bind_server): Don't attempt to bind using NULL bind
DN.

* modules/ldap.c (bind_server): Report at least the first encountered
bind error.

2004-10-30  Miloslav Trmac  <mitr@redhat.com>

* apps/lchfn.c (main)
* apps/lchsh.c (main)
* apps/lnewusers.c (main)
* samples/enum.c (main)
* samples/testuser.c (main): Output error messages on stderr.

* apps/lchfn.c (main): Exit if specified user does not exist.

* apps/lnewusers.c (main): Don't attempt to act on improperly formatted
lines.

* po/POTFILES.in: Add missing files.

* modules/ldap.c (lu_ldap_set, lu_ldap_del): Remove superfluous '\n'
and '.\n' at message ends.

* apps/lgroupadd.c (main)
* apps/lgroupdel.c (main)
* apps/lgroupmod.c (main)
* apps/lchage.c (main)
* apps/lchfn.c (main)
* apps/lchsh.c (main)
* apps/lid.c (main)
* apps/lnewusers.c (main)
* apps/luseradd.c (main)
* apps/luserdel.c (main)
* apps/lusermod.c (main)
* python/admin.c (libuser_admin_do_wrap, libuser_admin_setpass):
* samples/enum.c (main):
* samples/homedir.c (main):
* samples/lookup.c (main):
* samples/testuser.c (main): Use lu_strerror () instead of
(error ? error->string : _("unknown error")).  Report error cause in
more error messages.

* apps/lchsh.c (main): Report error if shell was not changed.

* modules/ldap.c (lu_ldap_set, lu_ldap_handle_lock)
(lu_ldap_setpass)
* modules/files.c (set_default_context, reset_default_context)
(generic_setpass)
* lib/config.c (lu_cfg_init)
* apps/apputil.c (lu_authenticate_unprivileged): Mark strings for
translation.

* lib/util.c (lu_util_line_get_matchingx): Fix memory leak.

2004-10-14  Miloslav Trmac  <mitr@redhat.com>

* lib/error.h (LU_ERROR_CHECK): Add missing '\n'.

2004-10-11  Miloslav Trmac  <mitr@redhat.com>

* configure.in: Version 0.52.5.

* NEWS: Update.

* python/admin.c (libuser_admin_add_user)
(libuser_admin_modify_user)
(libuser_admin_delete_user): Fix memory leak.

* python/admin.c (libuser_admin_add_user)
(libuser_admin_delete_user): Fix reference counting.

* python/modules.txt: Fix modifyUser documentation about not creating
home directory by default.

* python/admin.c (libuser_admin_modify_user): Pass original entity
to libuser_admin_move_home().

2004-10-10  Miloslav Trmac  <mitr@redhat.com>

* configure.in: Version 0.52.4.

* NEWS: Update.

* python/misc.c (libuser_prompt_destroy): Fix memory leak.
(libuser_admin_python_prompter): Properly copy struct libuser_prompt
to avoid double free().

* python/admin.c (libuser_admin_enumerate_users)
(libuser_admin_enumerate_groups)
(libuser_admin_enumerate_users_by_group)
(libuser_admin_enumerate_groups_by_user): Fix memory leaks.

* python/admin.c (libuser_admin_enumerate_users_full)
(libuser_admin_enumerate_groups_full)
(libuser_admin_enumerate_users_by_group_full)
(libuser_admin_enumerate_groups_by_user_full)
* python/ent.c (convert_value_array_pylist)
(libuser_entity_getattrlist):
* python/libusermodule.c (libuser_get_user_shells):
* python/misc.c (libuser_admin_python_prompter): Fix memory leaks.

2004-10-09  Miloslav Trmac  <mitr@redhat.com>

* lib/entity.c (lu_ent_free): Fix memory leak.

* modules/files.c (generic_add): Fix memory leak.

* lib/user.c (merge_ent_array_duplicates): Remove fflush (from
debugging?).

* modules/files.c (lu_files_enumerate_full): Fix memory leak.

2004-09-29  Miloslav Trmac  <mitr@redhat.com>

* configure.in: Version 0.52.3.

* NEWS: Update.

* Makefile.am: Readd -D_LIBUSER_MODULE for modules.

2004-09-28  Miloslav Trmac  <mitr@redhat.com>

* configure.in: Version 0.52.2.

* NEWS: Update.

* modules/ldap.c (lu_ldap_set): Beautify debug messages.

* modules/ldap.c (connect_server): Allow ldap URIs, don't require TLS
for servers specified by URIs.
* docs/sgml/libuser.sgml: Document URI support.

2004-09-27  Miloslav Trmac  <mitr@redhat.com>

* configure.in: Version 0.52.1.

* NEWS: Update.

* modules/files.c (set_default_context): Make sure *prev_context is
always initialized.

2004-09-27  Miloslav Trmac  <mitr@redhat.com>

* configure.in: Version 0.52.

* autogen.sh: Create the `admin' subdirectory if needed.

* Makefile.am (CVSTAG): Fix definition.

* Makefile.am (archive): Ship with formatted documentation.

* configure.in: Define AC_CONFIG_AUX_DIR.

* configure.in: Remove various unneeded parts.

* configure.in, Makefile.am: Use automake conditionals instead of
MODULES.
* Makefile.am (TESTS): Define only if LDAP.

* Makefile.am: Use AM_CPPFLAGS to eliminate the most redundant lines.

* Makefile.am (uninstall-local): Fix typo.

* Makefile.am: Link exactly with needed libraries.

* docs/sgml/Makefile.am: Merge with docs/Makefile.am.

* Makefile.am (CVSTAG): Define portably.

* configure.in: Use new-style AC_INIT and AM_INIT_AUTOMAKE.
Set automake options `subdir-objects' and `-Wall'.

* modules/ldap.c (lu_ldap_lookup): Silence gcc warning.

* apps/Makefile.am, lib/Makefile.am, modules/Makefile.am,
samples/Makefile.am: Merge with top-level Makefile.am.
* apps/lchage.c, apps/lchfn.c, apps/lgroupadd.c, apps/lgroupdel.c,
apps/lgroupmod.c, apps/lid.c, apps/lnewusers.c, apps/lpasswd.c,
apps/luseradd.c, apps/luserdel.c, apps/lusermod.c, samples/enum.c,
python/admin.c, python/ent.c, python/misc.c, python/libusermodule.c,
python/quotamodule.c, samples/field.c, samples/homedir.c,
samples/lookup.c, samples/quotaq.c, samples/prompt.c,
samples/testuser.c: Change path of config.h.

* NEWS: Update.

* tests/ldap_test.py (Tests.testUserDel, Tests.testUserLock1)
(Tests.testUserLock2, Tests.testUserUnlock1)
(Tests.testUserUnlock2, Tests.testUserIslocked1)
(Tests.testUserIslocked2, Tests.testUserSetpass1)
(Tests.testUserSetpass2, Tests.testUserSetpass3)
(Tests.testUserRemovepass1, Tests.testUserRemovepass2)
(Tests.testUserRemovepass3, Tests.testUsersEnumerate)
(Tests.testUsersEnumerateByGroup1)
(Tests.testUsersEnumerateByGroup2)
(Tests.testUsersEnumerateByGroup3, Tests.testUsersEnumerateFull)
(Tests.testGroupLookupName, Tests.testGroupLookupId)
(Tests.testGroupAdd1, Tests.testGroupAdd2, Tests.testGroupMod1)
(Tests.testGroupMod2, Tests.testGroupDel, Tests.testGroupLock1)
(Tests.testGroupLock2, Tests.testGroupUnlock1)
(Tests.testGroupUnlock2, Tests.testGroupIsLocked1)
(Tests.testGroupIsLocked2, Tests.testGroupSetpass1)
(Tests.testGroupSetpass2, Tests.testGroupSetpass3)
(Tests.testGroupRemovepass1, Tests.testGroupRemovepass2)
(Tests.testGroupRemovepass3, Tests.testGroupsEnumerate)
(Tests.testGroupsEnumerateByUser1)
(Tests.testGroupsEnumerateByUser2)
(Tests.testGroupsEnumerateByUser3, Tests.testGroupsEnumerateFull):
New tests.

* tests/ldap_test.py (Tests.testUserAdd2, Tests.testUserMod2): Update
for final password entity model.

* modules/ldap.c (lu_ldap_is_locked): Remove unneeded parameter `type'.
All callers changed.

* tests/ldap_test: Clean up after running the tests.

* tests/ldap_test.py: Workaround openssl's inability to handle
repeated library loading and unloading.

* modules/ldap.c (lu_ldap_groups_enumerate_by_user): Don't consider
all string representations of numbers invalid.
(lu_ldap_groups_enumerate_by_user): Don't free data owned by the
entity.

* lib/user.c (run_single): Don't run user_removepass when
group_removepass is wanted.

* modules/ldap.c (lu_ldap_group_removepass): Implement.

* modules/ldap.c (lu_ldap_is_locked): Use LU_GROUPPASSWORD and
POSIXGROUP for groups.

* modules/ldap.c (lu_ldap_setpass): Don't attempt to remove the
attribute if it does not exist.
(lu_ldap_setpass): Use LU_GROUPPASSWORD for groups.

* modules/ldap.c (lu_ldap_handle_lock): Use LU_GROUPPASSWORD for
groups.

* modules/ldap.c (ldap_attribute_map): Remove LU_SHADOWPASSWORD.
(get_ent_adds): Skip LU_SHADOWPASSWORD.  It should be completely
ignored now.

* python/libusermodule.c (initlibuser): Fix libuser.GROUPPASSWORD.

2004-09-26  Miloslav Trmac  <mitr@redhat.com>

* lib/user.c (lu_end): Fix memory leak.

* modules/ldap.c (lu_ldap_ent_to_dn): Remove parameter `applicability'.
All callers changed.

* modules/ldap.c (lu_ldap_fudge_objectclasses): Use the mod_values
macro.
(ldap_attribute_map): Make members point to constant strings.
Casts added to users where needed.
(lu_ldap_user_attributes, lu_ldap_group_attributes): Make it a constant
array of constant strings.
(libuser_ldap_init): Store converted pointers to data that will be
eventually freed as part of the context.
(lu_ldap_lookup): Use mapped_user_attributes, mapped_group_attributes.
(map_from_ldap): Remove.
(lu_ldap_close_module): Free mapped_user_attributes,
mapped_group_attributes.

2004-09-25  Miloslav Trmac  <mitr@redhat.com>

* modules/ldap.c (lu_ldap_needed_objectclasses): s/User/Entity/g
(lu_ldap_needed_objectclasses): Fix debugging printout.
(lu_ldap_needed_objectclasses): Ignore attributes not applicable to
given entity type.

* modules/ldap.c (ldap_attribute_map): Remove mapping for
LU_ADMINISTRATORNAME.
(SHADOWGROUP): Remove.

* python/admin.c (libuser_admin_removepass_user)
(libuser_admin_removepass_group): Throw exception on error.

* modules/ldap.c (lu_ldap_user_removepass): Implement.

* modules/ldap.c (lu_ldap_is_locked): Fix memory leak.
(lu_ldap_is_locked): Map libuser attribute names to LDAP names.

* modules/ldap.c (lu_ldap_setpass): Initialize addvalues[0] and
rmvalues[0] even if the original password is already encrypted.
(lu_ldap_setpass): Map libuser attribute names to LDAP names.
(lu_ldap_setpass): Remove (maybe all) values before adding new values.
(lu_ldap_setpass): Fix memory leak.

* modules/ldap.c (lu_ldap_handle_lock): Don't skip LU_CRYPTED twice.
(lu_ldap_handle_lock): Fix memory leaks.
(lu_ldap_handle_lock): Don't remove and add the same value.
(lu_ldap_handle_lock): Avoid unnecessary g_malloc0()/g_free() pair.
(lu_ldap_handle_lock): Don't drop LU_CRYPTED when unlocking unlocked
account.
(lu_ldap_handle_lock): Don't lock locked accounts again.

* modules/ldap.c (lu_ldap_user_attributes): Drop LU_SHADOWPASSWORD.
(get_ent_adds): Drop LU_SHADOWPASSWORD, not LU_USERPASSWORD.

* modules/ldap.c (lu_ldap_set): Remove parameter `attributes'.  All
callers changed.

2004-09-24  Miloslav Trmac  <mitr@redhat.com>

* configure.in: Version 0.51.12.

* Makefile.am: Remove the spec file and "release" tagging from CVS,
rework the spec file a bit.

* configure.in: Don't create libuser.spec.
* NEWS: Move data from libuser.spec.in.
* libuser.spec.in: Remove.

* tests/ldap.conf.in, tests/ldaprc, tests/ldap_skel.ldif,
tests/ldap_test.py, tests/slapd.conf.in: New files
* Makefile.am (TESTS, EXTRA_DIST): Use and distribute tests.

* python/ent.c (libuser_entity_set): Don't both return success and
indicate error at the same time.

* python/ent.c (libuser_entity_set_item): Don't clear the entity
if the new value has invalid type.

* modules/files.c (generic_lookup): Fix memory leak.
* python/ent.c (libuser_convert_to_value): Fix memory leak.

* modules/ldap.c (get_ent_mods, lu_ldap_set): Special-case entry
renaming.
(lu_ldap_set): Fix desired RDN computation in rename.

* modules/ldap.c (lu_ldap_set): Use the original name when
looking up the DN of an entry that is being renamed.

2004-09-23  Miloslav Trmac  <mitr@redhat.com>

* configure.in: Version 0.51.11.

* libuser.conf.in: Avoid mentioning /usr/lib* in config file.

2004-09-21  Miloslav Trmac  <mitr@redhat.com>

* modules/ldap.c (lu_ldap_set): New parameter `add'.  All callers
changed.

* modules/ldap.c (get_ent_mods): Simplify somewhat.

* modules/ldap.c (objectclass_present, lu_ldap_needed_objectclasses)
(get_ent_adds): Split and customize/fix from
lu_ldap_fudge_objectclasses ().
(lu_ldap_fudge_objectclasses): Use lu_ldap_needed_objectclasses ().

* modules/ldap.c (ACCOUNT): New macro.
(SHADOWACCOUNT): Define as "shadowAccount" again.

* modules/ldap.c (ldap_attribute_map): Remove unused member
`ldap_attribute_key'.

* modules/ldap.c (lu_ldap_user_lookup_name, lu_ldap_user_lookup_id):
Add LU_LDAP_SHADOW to `applicability' argument.

* python/libusermodule.c (initlibuser): Add missing attribute names.

2004-09-19  Miloslav Trmac  <mitr@redhat.com>

* python/admin.c (libuser_admin_setattr): Fix reference counting.

2004-09-18  Miloslav Trmac  <mitr@redhat.com>

* python/misc.c (libuser_admin_python_prompter, libuser_admin_prompt):
Fix reference counting.

* modules/ldap.c (libuser_ldap_init): Don't set error when it was
already set.

2004-09-17  Miloslav Trmac  <mitr@redhat.com>

* modules/ldap.c (value_compare): Make sense of comparison same for
longs and strings.

* modules/ldap.c (lu_ldap_ent_to_dn, libuser_ldap_init):
Fix memory leaks.

* modules/ldap.c (libuser_ldap_init, bind_server): Respect bind_simple
and bind_sasl.

2004-09-20  Miloslav Trmac  <mitr@redhat.com>

* apps/lchfn.1, apps/lchsh.1: New files.
* apps/Makefile.am (dist_man_MANS): Distribute new man pages.