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.
