v3.54 - 2006-09-19
  * Fix a bug with LDAPUserFolder where another UserFolder was returned when LUF
    was requested [jvloothuis]

v3.53 - 2006-09-08
  * Removed refresh.txt. You should add this locally if you want to use it.
    [hannosch]

  * getUsers: efficiency improvement: anti-double user inclusion is done by
    checking key presence in a dict instead of looking up name in a list
    [b_mathieu]

  * Fix searchUsersByAttribute returning twice the same user id when a second
    source is present
    [b_mathieu]

v3.52 - 2006-05-30

  * Plone 2.1 service release

v3.51 - 2006-05-15

  * Changed getLocalRolesForDisplay to check for 'Manage properties' instead of
    'Access contents information'. This is still not perfect but at least
    Anonymous can no longer get at local roles information this way.
    Fixes http://dev.plone.org/plone/ticket/5492
    [stefan]

  * Remove some noise log message and the product name parameter from ToolInit.
    [hannosch]

  * Forces exact match with LDAP on user search

v3.5 - 2005-12-20

  * By default, uses title instead of meta_type in the source management
    pages. [pjgrizel]

  * It's now possible to search very quickly users from a group
    in LDAP; long-awaited improvement! [pjgrizel]

  * Correct some wrong security settings.
    [hannosch]

  * Fix some stupid failing tests so finally all tests pass again.
    [hannosch]

  * Fix encoding warning in GroupUserFolder.py
    [encolpe]

  * Made the GroupDataTool call notifyModified() on members who are
    added or removed from a group
    [bmh]

v3.4 - 20050904

  * Dynamically fixed the remaining bug in folder_localrole_form.

  * Now the users tab in ZMI allow you to search a user (useful w/ LDAP)

  * Fixed a bug in Plone 2.0 UI when searching a large set of users

  * Added a 'wizard' tab to help in managing LDAP sources.

  * Fixed getProperty in GroupDataTool not to acquire properties.
    [panjunyong]

[v3.3 - 20050725]

  * Added an 'enable/disable' feature on the sources. Now, you can entierly
    disable a users source without actually removing it. Very useful for
    testing purposes!

  * Removed an optimization when user is None in authenticate(), so
    than you can use GRUF with CASUserFolder (thanks to Alexandre
    Sauv?mr.lex@free.fr>)

  * Fixed 1235351 (possible infinite recursion in an audit method)

  * Fixed [ 1243323 ] GRUF: bug in createGrouparea() in GroupsTool.py

[v3.23 - 20050724]

  * Fixed unit tests. Now the unit tests are working with the latest ZTC
    version.
    [tiran]

[v3.22 - 20050706]

  * Fixed a missing import in GroupsTool.py (http://plone.org/collector/4209)
    [hannosch]

  * Fixed a nested groups issue with LDAPUserFolder. This is not a widely
    used schema with ldap anyway.
    [pjgrizel]

  * Fixed LDAPUserFolderAdapter's search_by_dn bug: search by _login_attr
    but not _rdnattr
    [panjunyong]

  * _getLocalRolesForDisplay was marking users as groups for groups that had
    the same as users (http://plone.org/collector/3711).  Made unit tests run
    even if LDAPUserFolder is not installed.
    [alecm]

[v3.2 - 20050307]

  Service release.

[v3.2RC2 - 20050305]

  * Now your user sources (especially LUF) can have a 'portait' property which
    will be used as your user's portrait. This works only in 'preview.txt'-mode.

  * You can put a 'notifyGroupAreaCreated' in your 'groups' folder as you would
    be able to put a 'notifyMemberAreaCreated' in your 'members' folder.
    So you can execute some code at group area creation. Thanks to F. Carlier !

  * Added a helper table on the sources tab to help managing LUF group mappings

  * Fixed a bug in Zope 2.7 preventing the zope quickstart page to show up.
    A hasUsers() method was missing from GRUF's API.

  * Fixed a bug in ZMI which prevented LUF cached users to be individually
    managed by GRUF.


[v3.2RC1 - 20041215]

  * _doChangeUser and _doChangeGroup lost existing groups if the groups argument
    was omitted. Fixed these and the Zope 2.5-style APIs accordingly.
    [stefan]

  * Updated API to have a better conformance to the original Zope API.
    Thanks to Stefan H Holek for this clever advice.

  * Uncommented cache clearing code in _doChangeUser as it appears to be required.
    [stefan]

  * Added a Plone 2.0 optional patch to improve LDAP and groups management.
    It's basically a preview of what will be done in Plone 2.1 for users managment.
    For example, now, you can assign local roles to users in your LDAP directory,
    EVEN if they're not in the cache in folder_localrole_form.
    Other "preview" features will come later. Please read README and PloneFeaturePreview.py
    files for more explanations on these.

  * Made manage_GRUFUsers page a little faster with LDAP by preventing users count.

  * Fixed [ 1051387 ] addGroup fails if type 'Folder' is not implicitly addable.

  * Fixed other minor or cosmetic bugs

  * Group mapping is automatically created by LDAPGroupFolder when you create a group
    with its interface.

v3_1_1 - 20040906

  * Fixed a bug in getProperty() - it always returned None !

  * Fixed a bug which caused AUTHENTICATED_USER source id to be invalid

v3_1 - 20040831

  * Group-to-role mapping now works for LDAPGroupFolder

  * Debug mode now allows broken source not to be checken against

  * Fixed getUser() bug with remote_user_mode (getUser(None) now returns None).
    Thanks to Marco Bizzari.

v3_0 - 20040623

  * Minor interface changes

  * Documentation update

v3_0Beta2

  * Various bug fixes

  * Better support for Plone UI. PLEASE USE PLONE2's pjgrizel-gruf3-branch IN SVN!
    See README-Plone for further explanation

v3_0Beta1

  * API REFACTORING

  * FAR BETTER LDAP SUPPORT (see README-LDAP.stx)

v2_0 - 20040302

  * Reindexing new GroupSpace objects
    2004/03/10 Maik Rder

  * Speedup improvements by Heldge Tesdal

  * Fixed ZMI overview refreshing bug

  * GroupsTool method createGrouparea now calls the GroupSpace
    method setInitialGroup with the group that it is created for.
    In case this method does not exists, the default behaviour
    is employed. This is done so that the GroupSpace can decide on its
    own what the policy should be regarding the group that it is
    initially created for.
    See the implementation of GrufSpaces for an example of how this
    can be used in order to give the initial group the role GroupMember.
    2004/02/25 Maik Rder

  * Removed GroupSpace code, which can now be found in
    http://ingeniweb.sourceforge.net/Products/GrufSpaces
    2004/02/25 Maik Rder

v2_0Beta3 - 20040224

  * Improved performance on LDAP Directories

  * Fixed various Plone UI bugs (password & roles changing)

  * Fixed "AttributeError: URL1" bug in ZMI

v2_0Beta2 - 20031222

  * Added GroupSpace object for Plone websites (see website/GroupSpaceDesign_xx.stx)

  * Fixed __getattr__-related bug

  * Fixed inituser-related bug

  * Cosmetic fixes and minor bugs

v2_0Beta1 - 20031026

  * Include support for multi-sources

v1_32 - 20030923

  * Pass __getitem__ access onto user objects (XUF compatibility)

  * Allow ZMI configuration of group workspaces (CMF Tool)

  * Added security declarations to CMF tools

  * new getPureUserNames() and getPurseUsers() methods to get user
    objects without group objects

v1_31 - 20030731

  * Many performance improvements (tree and audit views)

  * Fixed a recursion pb. on the left pane tree (!)

  * Added a batch view for "overview" page when there's more than
    100 users registered in the system

v1_3 - 20030723

  * GRUF NOW SUPPORTS NESTED GROUPS - Transparently, of course.

  * Updated website information & screenshots

  * Major ZMI improving, including everywhere-to-everywhere links,
    edition of a single user or group, and minor cosmetic fixes

  * The tree view in ZMI now show groups and user (if there's no more
    than 50, to avoid having server outage)

  * Improved performance

  * Improved test plan

  * Fixed a bug in password generation algorythm with non-iso Python installs

  * Fixed a minor bug in group acquisition stack (it apparently had no side-effect)

v1_21 - 20030710

  * ZMI cosmetic fixes

  * Fixed the bug that prevented LDAP-defined attributes to be acquired by GRUFUser.
    This bug showed-up with LDAPUserFolder.

v1_2 - 20030709

  * HTML documentation

  * Add a management tab on GRUF to allow users and groups to be created
    at this top-level management interface.

v1_1 - 20030702

  * Security improvements

  * Added an 'audit' tab to check what's going on

  * GroupsTool and GroupDataTool added for Plone

  * Improved Plone skins

  * Improved Plone installation

  * GRUF Users now 'inherit' from their underlying user object

v1_0RC1 - 20030514

  * Code cleaning

  * Documentation improving

  * API improving (added a few utility methods)

  * UI improving (see skins changes)

  * getId() bug fixing (see ChangeLog)

v0_2 - 20030331

  * Users are now acquired correctly, which prevents you from hotfixing anything !!! :-)

  * This fixed Zope 2.5 w/ Plone bug

  * Better log reporting

  * Validated with LDAPUserFolder and SimpleUserFolder

v0_1 - 20021126

  * User creation is now supported

  * Fixed a bug (with an axe) that prevented Zope module Owner.py code to work.
    The Owner.py calls aq_inner and aq_parent methods on a User object to get its
    security context. So it found the underlying User object instead of the GRUF
    itself. So we fixed this by setting dummy UserFolder-context methods on the
    GRUFUser objects. This is ugly and should be fixed later by acquiring the
    underlying User object from a better context.

  * Fixed getUserName in GRUFUser that returned group names without the "group"
    prefix.

  * Fixed various "cosmetic" bugs

  * Documented the whole stuff

v0_0 - 20021126

  Started to work on this wonderful product.

