Skip to content

Debian Changelog ldaptor (0.0.39)

2005

ldaptor (0.0.39) unstable; urgency=low

   * Cleanups:
     - Sort results before comparison in unit tests. Avoid spurious errors
       in test_ldiftree.Tree.test_children_twoChildren. Make unit tests
       explicitly shuffle results to avoid such false negative tests in the
       future. Closes: #307101.

 -- Tommi Virtanen <tv@debian.org>  Fri, 6 May 2005 14:46:31 +0300

ldaptor (0.0.38) unstable; urgency=low

   * Bugfixes:
     - WebUI:
       - rewrite webui search DN linking to be more nevowy and not assume
         ldaptor is the root resource.

 -- Tommi Virtanen <tv@debian.org>  Fri, 4 Mar 2005 14:46:28 +0200

ldaptor (0.0.37) unstable; urgency=low

   * Bugfixes:
     - ldaptor.checkers:
       - trap LDAPUnwillingToPerform and make it just an UnauthorizedLogin
         in LDAPBindingChecker.
     - WebUI:
       - do not stringify i18n PlaceHolder, just pass it through to
         flattening.
       - Port nevow commits r1252 and r1253: handle interpolation of i18n
         strings better.
       - Make zebra tables not reverse colors on refresh, by moving state
         from resource to request.
 
   * Cleanups:
     - Remove dead code.
     - Use CSS in webui service password changing layout.

 -- Tommi Virtanen <tv@debian.org>  Wed, 23 Feb 2005 23:00:57 +0200

ldaptor (0.0.36) unstable; urgency=low

   * Applications changes:
     - Enforce validFrom and validUntil in ServiceBindingProxy. Closes:
       ldaptor#22.
     - I18n support in webui and translation to finnish.
 
   * API changes:
     - Do not parallelize password setting, abort on first error.
     - When aborting password setting, use a real exception and not a
       string as explanation.
 
   * Refactorings to adapt to Twisted/Nevow APIs:
     - In webui, use annotate.Choice in a way that works with nevow 0.3 and
       0.4pre.
 
   * Bugfixes:
     - Add ldaptor.protocols.ldap.autofill that was missed earlier.
     - Clean up and python2.4-proof LDAPAttributeTypeAndValue parsing.
     - Do not repeat the form error message for each argument in webui
       change_password.
 
   * Cleanups:
     - WebUI:
       - refactor to separate service password setting, for reuse
         elsewhere.
       - make zebra tables set CSS styles, not just background colors.
       - redo webui service password changing form layout.
       - avoid annotate.Password in webui password changing, it
         results in poor layout.
       - use table for nicer layout of service password controls.
 
   * Packaging:
     - Add missing depends on python2.3-pyopenssl, python2.3-crypto.
 
   * Administrivia:
     - Run unit tests after the install target, with the installed code
       base.

 -- Tommi Virtanen <tv@debian.org>  Wed, 23 Feb 2005 11:13:08 +0200

ldaptor (0.0.35) unstable; urgency=low

   * Bugfixes:
     - Fix LDAPServer to understand new e.bind() semantics from r196.
 
   * Packaging:
     - Bumped standards version to 3.6.1.

 -- Tommi Virtanen <tv@debian.org>  Fri, 28 Jan 2005 19:49:24 +0200

ldaptor (0.0.34) unstable; urgency=low

   * Brown paper bag time, 0.0.33 was never uploaded. Epydoc --check only
     check and generates no output, reverting back to do not complain about
     missing docstrings.

 -- Tommi Virtanen <tv@debian.org>  Sun, 23 Jan 2005 03:32:46 +0200

ldaptor (0.0.33) unstable; urgency=low

   * Conceptual changes:
     - Add our own LDAP schema file. To use in slapd, add line "include
       /etc/ldaptor/ldaptor.schema" to /etc/ldap/slapd.conf.
     - Switch service-specific password support in svcbindproxy and webui
       change_password to use new-style password entries, for nicer slapd
       ACLs. Closes: ldaptor#20.
 
   * API changes:
     - Add a pumpingDeferredError to test utils, for consistency.
     - Allow overriding things by subclassing LDAPConfig and setting
       attributes.
     - Allow overriding identity search filter at LDAPConfig instantiation
       time.
     - Change e.bind() semantics to defer more, and return self or raise.
     - Add LDAPEntryWithClient.bind() that sends a BindRequest to the
       server.
     - Deprecate LDAPClient.bind(dn, auth) in favor of e.bind(auth).
     - Proxy now takes an ILDAPConfig parameter to init and not just
       overrides.
 
   * Bugfixes:
     - Escape "=" in RDN values.
     - Remove ldaptor.protocols.ldap.__all__, it's unnecessary and had
       wrong content.
 
   * Cleanups:
     - Convert U32 to unix-style newlines.
     - Epydoc formatting fixes.
     - Make epydoc complain about missing docstrings.
     - Fix API doc home page URL.
 
   * Packaging:
     - When running unit tests from debian/rules, ensure PYTHONPATH gets an
       explicit . in it -- for the poor guy running a build as root.
       Closes: #291615.
     - Include everything needed for successful unit test run in
       Build-Depends-Indep. Closes: #290236, #291618.

 -- Tommi Virtanen <tv@debian.org>  Sun, 23 Jan 2005 02:52:56 +0200

ldaptor (0.0.32) unstable; urgency=low

   * Conceptual changes:
     - Client-side STARTTLS support. Closes: ldaptor#1.
 
   * Applications changes:
     - The following now use the configuration, making --base optional:
       - ldaptor-ldap2maradns
       - ldaptor-search
       - ldaptor-ldap2pdns
       - ldaptor-ldap2passwd
       - ldaptor-ldap2dhcpconf
     - ldaptor-ldap2pdns now reconnects when needed.
     - WebUI:
     - Server:
 
   * API changes:
     - Remove ldapclient.LDAPSearch in favor of e.search().
     - Switch from LDAPClient.queue() to one of the following. Needed to
       notify in flight operations of lost connection, and all around
       prettier.
       - d=c.send(op)
       - d=c.send_multiResponse(op, fn, ..)
       - c.send_noResponse(op)
     - Add LDAPEntryWithClient.lookup() that was accidentally left out.
     - Add BaseLDAPEntry.hasMember().
 
   * Refactorings to adapt to Ldaptor APIs:
     - Refactor to avoid LDAPSearch, use ldapsyntax, config and
       ldapconnector:
       - ldaptor-ldap2maradns
       - ldaptor-search
       - ldaptor-ldap2pdns
       - ldaptor-ldap2dhcpconf
       - ldaptor-ldap2passwd
       - ldaptor-rename
 
   * Bugfixes:
     - In ldaptor-ldap2maradns, make sure the netmask.* A record is in
       octet format (and not as number of bits).
     - Refactor LDAPClient.bind() so it acknowledges completion of the
       request, removing it from onwire message tracking.
     - Fix cut-paste code: ldaptor-ldap2passwd took attributes arguments,
       which only made it break.
     - Make LDAPConnector fail nicely on DNs with no equivalent DNS domain,
       and no override.
     - Make .commit() not break the ldapsyntax entry journal.
     - Nicer error handling in LDAPBindingChecker; now passes
       LDAPInvalidCredentials to the caller as UnauthorizedLogin.
 
   * Cleanups:
     - Avoid buffering results in ldaptor-ldap2maradns.
     - Extract common DNS utility functions to ldaptor.dns.
 
   * Administrivia:
     - Make non-script executable files have mode 0644, not 0755.
     - Clean up generated files in doc/.

 -- Tommi Virtanen <tv@debian.org>  Wed, 12 Jan 2005 00:02:56 +0200

2004

ldaptor (0.0.31) unstable; urgency=low

   * Conceptual changes:
     - Service-specific passwords: added a mechanism that allows having
       "subpasswords" that are only used with particular services; e.g.
       let the userPassword attribute be used only for SSH logins, and use
       additional "mail" and "web" password, stored in an attribute called
       "servicePassword". The value is two whitespace-separated fields:
       service name and userPassword-style password digest. See
       ServiceBindingProxy for more.
     - LDIFTree allows LDAP server data storage an a one entry per file
       format, with nice unixy semantics.
 
   * Applications changes:
     - WebUI:
       - Add pretty label to search form submit button.
       - Service-specific password editing support. Closes: ldaptor#17.
     - Server:
       - New LDIFTree storage backend, storing the LDAP as a filesystem
         directory tree, with one entry per file in LDIF format.
       - Add LDAP proxy support.
       - Add ServiceBindingProxy, an LDAP proxy that handles non-anonymous
         bind requests specially. Closes: ldaptor#15.
 
   * API changes:
     - Get rid of MutableString:
       - Add pureber.berDecodeObject, remove pureber.ber2object.
       - Add pureber.berDecodeLength, remove pureber.berlen2int.
       - Switch LDAPClient and LDAPServer buffers to be plain strings.
       - Remove MutableString.
     - Change the BER decoding mechanism:
       - Add classmethod fromBER instead of using __init__ in two
         roles.
       - Remove old-style decode support.
     - Add pureber.berDecodeMultiple, mainly for use by subclasses of
       BERSequence.
     - Large lengths appeared to be negative, switched berlen2int to
       using longs.
     - Split LDAPServer to BaseLDAPServer, so one has a choice of
       inheriting something without any handle_* methods.
     - Make ldapsyntax.LDAPEntryWithClient.move() remove the old RDN.
     - Make ldapsyntax.LDAPEntryWithClient.move() change the entry's idea
       of its own DN.
 
   * Refactorings to adapt to Ldaptor APIs:
     - Use connectAnonymously in parallelsearch example.
 
   * Refactorings to adapt to Twisted/Nevow APIs:
     - Nevow ISerializable is deprecated.
     - ctx.{allPatterns,patternGenerator} are now called
       ctx.tag.allPatterns etc.
     - all IRequest APIs take a context.
     - switch from getDynamicChild to childFactory.
     - addSlash where appropriate.
     - return URLs instead of explicit redirects.
     - switch from renderHTTP to child_.
     - switch from locateChild to childFactory.
     - Twisted >1.3 moves SRVConnector to twisted.names.srvconnect.
 
   * Bugfixes:
     - Fix BER length encoding for lengths greater than 127, add unit
       tests.
     - Make many __repr__'s work even when __init__ failed.
     - Make sure every LDAP wire class takes a tag argument.
     - Make LDAPDelRequest also understand keyword argument value, as
       that is what LDAPString uses.
     - Fix and test handling of unknown match types.
     - Fix and unit test saltless non-client setPassword.
     - Fix DistinguishedName order comparison.
     - Make sure configuration does not interfere with the lmPasswords in
       the unit tests.
     - Make nevow data access to LDAP entry attributes work.
     - Add items() to LDAPEntry IContainer adapter's attributes child;
       webui search needs it.
     - Webui edit can now edit attributes that are in the RDN. Closes:
       ldaptor#5.
     - Improve handling of missing baseDN in configuration.
 
   * Cleanups:
     - Remove dead code.
     - Remove the hack-and-slashed RFC file that served as a TODO note.
     - Override IOPump to pass around more than one byte at a time, saves
       >10 seconds in unit tests and protocol decoding of partial messages
       is unit tested elsewhere anyway.
     - Improve ldaptor.testutil error messages, accept any true/false value
       and not just 1 and 0.
     - Clean up LDAPServer.handleUnknown.
     - Prettify LDAPMessage.__repr__
     - Prettify LDAPResult.__repr__
     - If ldapsyntax.LDAPEntryWithClient.search gets a bad response from
       the LDAP server, raise a real exception and not an assert.
     - When converting delta Modifications to LDAP, convert them to basic
       data types for easier debugging and unit testing.
     - Be consistent and use "ctx" everywhere in webui change_password.
     - Add nevow renderer that produces zebra tables.
     - Make ldapsyntax.LDAPEntryWithClient.move() accept strings etc. as
       newDN, add unit test.
     - Make epydoc happy.
     - Simplify ldap-intro document generation.
 
   * Packaging:
     - Depend on Nevow v0.3.0 or later.
     - Depend on Twisted v1.3.0 or later.
     - Switch to CDBS.
     - Add an ldaptor-common package to contain conffiles.
     - Run unit tests before building debs.
     - Include the unit tests in the distributed files.
 
   * Administrivia:
     - Add TODO notes.
     - Update ignore file lists to match currently generated files.
     - Export dia files to format png-libart, not just png. This makes the
       export reliable. Hint from Debian bug#275959.

 -- Tommi Virtanen <tv@debian.org>  Fri, 10 Dec 2004 17:39:36 +0200

ldaptor (0.0.30) unstable; urgency=low

   * Install the webui template and CSS files that were missing
     from the deb. Unit tests really don't cover everything :(

 -- Tommi Virtanen <tv@debian.org>  Tue, 17 Aug 2004 17:06:07 +0300

ldaptor (0.0.29) unstable; urgency=low

   * Brown paper bag time; 0.0.28 was never uploaded.
   * Remove nevow dependency from ILDAPConfig, it seems to work just fine
     as just a components.Interface. This is the real fix, I
     promise. Closes: #264179.

 -- Tommi Virtanen <tv@debian.org>  Tue, 17 Aug 2004 16:48:42 +0300

ldaptor (0.0.28) unstable; urgency=low

   * Applications changes:
     - Support smarter object creation plugins in webui add.
   * Cleanups:
     - Remove references to dead code.
     - Make sure LDAPAttributeTypeAndValue repr works even if
       __init__ raised an exception.
     - Make sambaSamAccount autofiller actually useful, add unit tests.
   * Packaging:
     - Make ldaptor-webui depend on python2.3-nevow. Closes: #264179.

 -- Tommi Virtanen <tv@debian.org>  Tue, 17 Aug 2004 16:32:03 +0300

ldaptor (0.0.27) unstable; urgency=low

   * Applications changes:
     - WebUI:
       - ldaptor-webui has been ported to nevow.
       - move now acts more like a shopping cart.
       - Move most of the command line options of ldaptor-webui to
         configuration file only; please switch to using a .tac file.
     - Server:
       - Support fetching the rootDSE.
       - Claim to support the extended operation for password changing.
       - Support non-anonymous bind against SSHA passwords stored in
         userPassword attributes.
       - Handle entry deletion.
     - Add configuration file support. See files
       /usr/share/doc/ldaptor-{doc,webui}/examples/global.cfg in packages
       ldaptor-doc and ldaptor-webui.
     - New-style Samba schema support, with objectClass sambaSamAccount.
     - Add support for Samba LanMan password hashes, disabled by
       default but configurable.
     - Drop python 2.2 support, using 2.3 features.
     - Allow serviceLocationOverride to have the empty DN ("") as
       key, overriding default location (DNS SRV records) for everything.
 
   * Documentation changes:
     - Terminate addressbook example LDIFs with empty line so they
       are actually valid LDIF.
     - Modernize addressbook example files.
 
   * API changes:
     - Generic:
       - Add ldapfilter.parseMaybeSubstring(), which takes attributeType and
         partial filter as arguments, and allows e.g.  easily searching one
         attributeType based on user input, without user having to understand
         LDAP filters.
       - Make DistinguishedName and RelativeDistingushedName do the right
         thing even without explicit stringValue and listOfRDN keyword
         arguments.
       - Add comparison operators to schema.ObjectClassDescription, so they
         can be sorted.
       - Make DistinguishedNames equal their canonical string
         representations and hash identically.
       - Rename ReadOnlyInmemoryLDAPEntry.putChild to .addChild, make
         it accept rdn also as a string.
       - Added setPassword support to inmemory.
       - Added ILDAPConfig.
     - Client:
       - Make LDAPClient.queue take extra arguments and pass them to the
         callback given. Minimizes need for lambdas.
       - Add ldapsyntax.LDAPEntryWithClient.addChild().
       - Remove ldapclient.LDAPAddEntry, it is now unused.
       - LDAPEntryWithClient.search() now understands attributes=None
         to mean do not return any attributes.
     - Server:
       - Allow returning None from the message handler.
       - handle_* API changed: now handlers can happily just
         raise whatever they want, and fail_* (or failDefault) are used
         to map the exception to LDAP errors.
       - Added function checkControls() that all handlers should call
         with unsupported controls. It raises error if unsupported
         controls include any critical controls.
 
   * Refactorings to adapt to Ldaptor APIs:
     - Make webui edit use entry.fetch() instead of
       ldapclient.LDAPSearch.
 
   * Refactorings to adapt to Twisted/nevow APIs:
     - Tell nevow how to serialize DistinguishedNames.
     - Tell nevow how to serialize LDAP entries.
     - Create an IContainer adaptor for LDAPEntries.
     - Switch webui to use ISession.
     - Follow Twisted DNS resolver API changes in
       ldaptor-find-server.
 
   * Bugfixes:
     - Fix bug where entry.undo() switched off journaling and thus
       sending any further updates to the server.
     - In server, make failing searches indicate why they failed.
     - Make sure LDAPFilter_and and LDAPFilter_or know how to decode
       filter elements.
     - Initialize BaseLDAPEntry attributes early so __repr__ works
       even when __init__ was buggy.
     - Protect against passing None to DistinguishedName.
     - Raise LDAPOther, not LDAPUnknownError; unknown errors should
       only be created by ldaperrors.get().
     - Protect against no subschemaSubentry attribute in fetchschema.
     - Make LDAPEntryWithClient repr work even in invalid state.
     - Fix wrong number of arguments in handling unknown requests in
       server. (Closes: #261837)
     - Make sure LDAPEntryWithClient.delete can handle all kinds of
       errors and not just LDAPDelResponse.
     - In webui, protect against issue74 in nevow.guard. Can only be
       triggered by adjusting the URL manually.
     - Support LDAP controls in ldapserver, but only by ignoring
       non-critical ones and triggering an error on critical ones.
       (Closes: #263210)
 
   * Cleanups:
     - Remove dead imports, code, TODO entries etc.
     - Improve unit test coverage:
       - Test ldapfilter parsing whitespace handling.
       - Add a simple unit test for callable serviceLocationOverride.
       - Do automated testing of webui.
       - Add unit tests for fetchschema.
       - Test that the server can provide schemas, if the data is
         right.
       - Test failing searches in ldapsyntax.
       - Test failing delete in ldapsyntax.
       - In pureldap unit tests, use pureber.ber2object() instead of
         instantiating the class directly, to simulate real use better.
       - Allow overriding the BERDecoderContext to use in pureldap unit
         tests.
       - Unit test serialize/unserialize of pureldap.LDAPMessage.
     - Prettify:
       - Use pyparsing .setName() in ldapfilter parsing for nicer
         debugging.
       - Make PasswordSetAggregateError stringify itself nicely.
       - Rename webui change_password action "Choose Password" to "Set
         Password", it describes the action better.
       - Add a more helpful assertion message.
       - Avoid periods at end of error messages, they can be added when
         doing actual outputting.
       - Show pretty error when invalid DN is given to
         --service-location= command line parameter.
       - Nicer repr for pureber.BERDecoderContext.
       - Nicer exception when pureber.ber2object sees an unknown tag.
     - Code readability and cleanliness:
       - Use constants from string module in LDAP filter parsing.
       - Use pyparsing.delimitedList in ldapfilter parsing.
       - Use "bool()" instead of "not not".
       - Clean up dn handling in BaseLDAPEntry.
       - Clean up webui delete and improve error handling.
       - Modernize ldaptor-fetchschema.
       - Modernize ldaptor-getfreenumber.
       - Make autofillers share code.
     - Developments support:
       - LDAPClient and LDAPServer can now toggle debug output
         dynamically.
     - Do Things Right:
       - Switch to relative URLs when referring to CSS stylesheets.
       - domainComponent is an attributeType, not an objectClass.
         Replace with dcObject.
 
   * Packaging:
     - Drop python 2.2 support.

 -- Tommi Virtanen <tv@debian.org>  Thu, 5 Aug 2004 23:05:11 +0300

ldaptor (0.0.26) unstable; urgency=low

   * Documentation changes:
     - Archive sketch of the interfaces (with no explanation :).
 
   * Bugfixes:
     - Override __eq__ and __ne__ in pureber.BERBase too, otherwise
       UserList's implementation of those overrode BERBase.__cmp__ and
       caused false equalities.
     - Reimplement ldapfilter, with Unit Test flavor. Use pyparsing
       to make it really handle extra data and backslash escaping.
     - When calling filt.asText() for LDAP filters, make sure to
       backslash escape special characters.
 
   * Cleanups:
     - Typo in docstring.
     - Add nicer repr of pureldap.LDAPMatchingRuleAssertion, to make the
       problem easier to spot.
 
   * Packaging:
     - Depend on pythonX.Y-pyparsing.
     - New enough dia is in unstable, so upload to unstable again.
 
   * Administrivia:
     - Add TODO notes.

 -- Tommi Virtanen <tv@debian.org>  Sat, 26 Jun 2004 14:34:06 +0300

ldaptor (0.0.25) experimental; urgency=low

   * Pre-generate documentation in build target, don't wait until
     install target. Makes dia work with dpkg-buildpackage
     -rfakeroot, because "debian/rules build" is run without
     fakeroot, and then dia can scribble in the home directory of
     the real user, not /root/.dia. Ungh. I'm filing a bug on dia.

 -- Tommi Virtanen <tv@debian.org>  Mon, 17 May 2004 19:51:11 +0300

ldaptor (0.0.24) experimental; urgency=low

   * Applications changes:
     - Can now generate diffs of two LDAP entries, or even two full trees,
       and use that either to modify LDAP entries at a server, or generate
       LDIF modification commands. Can also parse LDIF modification files.
       See ldaptor-ldifdiff, ldaptor-ldifpatch.
 
   * Documentation changes:
     - Addressbook example source:
       - Bugfixes and cleanups.
       - Rewrite addressbook examples to use nevow instead of woven
         and make them runnable via .tac files.
     - Modernize addressbook-slides:
       - Remove htmldiff hack, use meld instead. Simplify things a bit.
       - Add new addressbook-slides-server.tac that launches meld
         automatically when you load that page, useful for presentations.
       - Add CSS stylesheet.
       - New DTD version, fix to conform to DTD.
       - Split 01_repl into screen-size chunks.
     - In addressbook slides, use smaller pictures to make sure they fit on
       screen.
     - In addressbook examples, let one user have a valid password and edit
       access, so the same server can be used to demo ldaptor-webui.
     - Note in ldap-intro documentation that OpenLDAP doesn't allow
       changing objectClasses of existing objects.
     - Fix typo in doc/examples/ldif2ldif.
     - Docstring cleanup.
     - Switch from graphviz to dia for figures. (Closes: #242147)
     - In example LDIFs, rename Erkki Esim to Ample Exam, for i18n.
 
   * API changes:
     - First stages of LDIFTree work; initial support for storing LDIFs in a
       tree form.
     - Add inmemory data backend.
     - Start using interfaces, abstract common LDAP entry things into
       ldaptor.entry, ldaptor.attributeset.
     - Add module ldaptor.delta.
     - Add LDAPEntry.match().
     - Add IConnectedLDAPEntry.lookup().
     - The LDAP server prototype code has changed a lot, not summarizing
       here.
     - Rename ldifprotocol.LDIF.completed() to more specific
       gotEntry(), so inmemory DB loading can have .gotDatabase() or
       something, and .completed() won't look confusing there.
     - Switch ldifprotocol into producing BaseLDAPEntries.
     - Add ldaptor.entry.EditableLDAPEntry, make
       ldapsyntax.LDAPEntryWithClient inherit EditableLDAPEntry.
     - Make LDAPConnector accepts dns also as strings.
     - LDAPConnector accepts overrides that are callable, and lets them
       take control of the connecting. This is mostly meant for unit
       testing.
 
   * Internal refactorings:
     - Refactor to remove client-specific details from LDAPAttributeSet and
       to generalize the concept of a Modification so it can be used with
       LDIF also.
     - Refactor LDAPAttributeSet to interits Set.
     - Switch BaseLDAPEntry to a be a new-style class.
 
   * Bugfixes:
     - Fix webui search basedn navilinks.
     - In ldaptor-fetchschema, start logging so errors are reported to the
       user.
     - Ignore case in attributeType names.
     - LDIF parsing:
       - Support splitted lines in ldifprotocol.LDIF.
       - Fix LDIF parsing when values have no leading space.
       - Protect against "<" values (external URL) in LDIF parsing.
       - Make ldifprotocol support versioned LDIF files.
     - Make LDAPServer error handling to actually talk sane
       things on the wire.
     - Detect truncated LDIF files, raise
       ldifprotocol.LDIFTruncatedError.
     - Handle different capitalizations of 'objectClass' in
       BaseLDAPEntry.
     - Finish schema parsing.
     - Fix bug where ldapserver raises an exception on non-anonymous
       binds. It was missed in ldaperrors refactor, add unit tests so it
       will not be missed again. (Closes: #244543)
     - When LDAPServer receives unknown protocol requests, reply sanely and
       do not close the connection. Thanks to Guido Trotter.
       (Closes: #244861)
     - Notice differences in attributeType when comparing
       LDAPAttributeSets.
     - In LDAPAttributeSet, override those parts of sets.Set which
       assume class creation works without arguments (as we need the
       key always).
 
   * Cleanups:
     - Start gathering unit tests for the server protocol.
     - Stringify MutableStrings to simplify things. MutableStrings
       shouldn't leak out of pureber and pureldap.
     - Use the canonical way to write objectClass in
       pureldap.LDAPFilterMatchAll; especially needed as the server code is
       currently case-dependent.
     - Nicer repr for LDAPAttributeSets.
     - Make sure BaseLDAPEntry LDIFfication lists attribute values in
       sorted order for reproducability.
     - Add comparisons to RelativeDistingushedName in order to have
       stable unit test results.
 
   * Packaging:
     - Build-depend on dia (new enough dia to not need X11 at build time)
       => uploading to experimental.

 -- Tommi Virtanen <tv@debian.org>  Mon, 17 May 2004 19:27:00 +0300

ldaptor (0.0.23) unstable; urgency=low

   * Bugfixes:
     - Fix a totally embarassing bug that left ldaptor-webui.deb
       almost empty.

 -- Tommi Virtanen <tv@debian.org>  Fri, 12 Mar 2004 17:20:03 +0200

ldaptor (0.0.22) unstable; urgency=low

   * Applications changes:
     - Partial rewrite of ldaptor-webui add to handle structural
       objectclasses separately from auxiliary objectclasses.
 
   * Documentation changes:
     - Add an example of using ldaptor-webui via twisted-web.
 
   * API changes:
     - Removed ldaptor.cred, it is no longer used.
 
   * Refactorings to adapt to Twisted APIs:
     - Switch from twisted.web.static.redirectTo() to
       twisted.web.util.redirectTo(), don't import static anymore.
 
   * Internal refactorings:
     - Move resource creation from ldaptor-webui script to library.
 
   * Bugfixes:
     - Make sure errors in ldaptor-webui add are passed along.
     - Explicitly fail when schema objectclasses refer to unknown
       attributetypes.
     - Make ldaptor-webui baseDN form work even when it's not at the root
       of the web server.
 
   * Cleanups:
     - Remove unused import in ldaptor-webui.

 -- Tommi Virtanen <tv@debian.org>  Fri, 12 Mar 2004 16:58:12 +0200

ldaptor (0.0.21) unstable; urgency=low

   * Documentation changes:
     - Added document "Introduction to LDAP".
     - Added example web-based application, a simple addressbook
       search, and slides demonstrating how one might write one
       incrementally. These might not make much sense without
       the talk (or even with it), my apologies for that.
     - Upgrade to docbook-slides 3.2.0.
     - Allow xsltproc to use net in case the XML catalog isn't well
       setup -- will re-enable --nonet when docbook-slides registers
       with xml-core.
 
   * API changes:
     - Add a new utility function
       ldapconnector.LDAPClientCreator.connectAnonymously(), which does
       an anonymous bind on behalf of the caller.
     - Allow ldaptor.apps.webui.htmlify.htmlify_attributes() to work on
       sets and sequences alike.
     - Search supports new sizeLimitIsNonFatal flag, that makes
       sizeLimitExceeded errors from server just truncate the result
       list instead of aborting the search.
     - Implement LDAPExtendedResponse.
 
   * Refactorings to adapt to Ldaptor APIs:
 
   * Refactorings to adapt to Twisted APIs:
     - Adapt to Twisted changing Options superclass from UserDict to
       dict: Options mixins can no longer inherit Options, as otherwise
       python2.3 throws a TypeError: Cannot create a consistent method
       resolution order (MRO) for bases. Closes: #232255, 223632,
       232022.
     - Add twisted newcred support.
     - Partial woven support (twisted.web.widgets is deprecated, but
       now woven is deprecated too, in favor of newov! I can't keep
       up!)
       - Woven integration of the basic LDAP objects.
       - ldaptor-webui search, delete and change_password
     - Ldaptor-webui refactoring
       - newcred and simpleguard
       - get rid of twisted.internet.app
 
   * Internal refactorings:
     - Refactor LDAP filter parsing to have all the things looking like
       (key=...) in one function.
     - Refactor ldaperrors to actually use the exception classes.
     - Modularize the experimental LDAP server implementation.
 
   * Bugfixes:
     - Fix webui moves: typo in variable name, handle
       distinguishednames as objects and not strings.
     - Make sure the port number is an integer before using it in
       LDAPConnector.
     - Add proper stringification to LDAPClientConnectionLostException;
       used to cause tuple index errors in LDAPException.__str__().
     - Make URLs like http://localhost:38980/dc=example,dc=com (no
       trailing slash) work in ldaptor-webui.
     - In ldaptor-webui search, do not show the default twisted form
       error screen when there was no form submitted. Ugly workaround
       that provides default values instead of '', I can't seem to find
       a nicer way.
 
   * Cleanups:
     - Remove unused methods and imports.
     - Remove BidirDict, it's not used anymore.
     - Remove debug prints.
     - Move from equality comparison to identity comparison when
       comparing against None. Cleaner and should even be faster.
     - Cleanup doc/Makefile
       - split the massive "do all" target into smaller targets
       - protect targets against missing parent directories of target
         file
       - move the HTML diff files and such out of doc/examples/
     - Cleanup LDAPException stringification, protect against
       exceptions with neither arguments nor class attribute name.
     - Cleanup indentation.
     - Pychecker cleanups.
 
   * Packaging:
     - Add build-depends needed for generating the documentation.
     - Move examples/ to doc/examples/
     - Make sure the documents can be built automatically.
     - Build-Depend on things needed for generating the documentation.
     - Add a new binary package, ldaptor-doc, that will contain the
       documentation.
     - Depend on a new enough version of Twisted.
 
   * Administrivia:
     - Edit TODO notes.
     - Ignore documentation generated files.
     - Add unit test coverage checking.
     - When rsyncing documentation to pyramid.twistedmatrix.com, rsync
       the full directories of slides, not just the index.html.

 -- Tommi Virtanen <tv@debian.org>  Sun, 29 Feb 2004 00:23:15 +0200

2003

ldaptor (0.0.20) unstable; urgency=low

   * Applications changes:
     - Whoops, the syntax for singe-element tuple literals bit me
       again. Switch webui change_password to using lists, it's what Guido
       wants.
 
   * Bugfixes:
     - Explicitly stringify the dn to transparently work with
       DistinguishedName objects.
 
   * Packaging:
     - Drop python2.1, Twisted no longer supports it. Closes: #196038.
     - Let dh_python handle removing *.pyc from the deb and generating them
       in postinst (and use dh_clean to clean up after it). Make
       python-ldaptor's dependency to python be a versioned one. Not using
       dh_python's automagic, as it doesn't seem to work right. Closes:
       #205398.
 
   * Administrivia:
     - Add TODO entry about some SyntaxWarnings triggered by scoping.
     - Fix typo in setup-*.py.

 -- Tommi Virtanen <tv@debian.org>  Mon, 25 Aug 2003 22:22:20 +0300

ldaptor (0.0.19) unstable; urgency=low

   * Fix reference to non-existent local variable dn in webui
     change_password.py
   * Python 2.3 is now the default.

 -- Tommi Virtanen <tv@debian.org>  Sat, 9 Aug 2003 14:18:15 +0300

ldaptor (0.0.18) unstable; urgency=low

   * Bugfixes:
     - Make serviceLocationOverrides work once again in LDAPConnector.

 -- Tommi Virtanen <tv@debian.org>  Sun, 3 Aug 2003 10:17:00 +0300

ldaptor (0.0.17) unstable; urgency=low

   * API changes:
     - Add LDAPClientCreator.

 -- Tommi Virtanen <tv@debian.org>  Sun, 3 Aug 2003 10:01:19 +0300

ldaptor (0.0.16) unstable; urgency=low

   * Applications changes:
     - Make ldaptor-passwd actually follow it's usage. Defaults to
       changing password of the bind DN, if unspecified.
     - Make ldaptor-passwd Samba password changing more intelligent;
       instead of a Boolean, it's now a tristate option, with the new
       value "auto" checking for objectClass and setting the Samba
       password if and only if it sees the value sambaAccount there.
     - ldaptor-passwd now always changes all applicable passwords.
     - Hierarchical structure editing in ldaptor-webui is done, remove from
       TODO.
     - In ldaptor-webui change_password, don't make the DN a form
       field, there's no point in changing it at that time.
     - In ldaptor-webui, parse invalid base DNs and complain to user.
     - In ldaptor-webui, store DNs as DistinguishedNames, not as
       strings.
     - We fully support DNS SRV records now.
     - Add sample app bin/ldaptor-fetchschema, and notes on it's
       future direction. The current output looks ugly.
 
   * API changes:
     - LDAPObject.namingContext returns the naming context containing
       the LDAP object.
     - Deprecate LDAPModifyAttributes in LDAPObject, ldaptor-webui.
     - Add password changing support to LDAPObject.
     - LDAPModifyPassword is no longer used anywhere, remove it.
     - Add LDAPObject.items().
     - Add LDAPObject.fetch().
     - Support partial fetching in LDAPObject.fetch().
     - Add LDAPObject.setPassword_Samba().
     - Remove LDAPModifySambaPassword, it has no users anymore.
     - LDAPObject.setPassword() password setting now changes all
       applicable passwords automatically.
     - Remove LDAPModifyAttributes as obsolete.
     - "key in ldapobject" support, better iteration support for
       LDAPObject keys and key values.
     - Move authentication bits from ldaptor-webui main script to
       ldaptor.cred module.
     - Prevent removing attributes that are in the RDN of the object.
     - DistinguishedName now parses the actual values in DNs into
       attributetypes and values, and raises
       InvalidRelativeDistinguishedName for malformed RDNs.
     - Add preliminary support for LDAP object data content
       suggestions. Still need to implement a lot more hints and
       integrate into ldaptor-webui.
     - Add simple&stupid server-side support. Only knows bind/unbind
       and search, and all searches return no items.
     - Add LDIF parsing support.
     - Move ldaptor.protocols.ldap.ldapfilter to ldaptor.ldapfilter.
     - Split LDAP schema implementation into pure-ASCII parsing part
       and LDAP client remote schema fetching.
     - Rename the module that does LDAP schema fetching over the
       client connection to fetchschema, to better separate it from
       the ASCII schema parser.
     - Rename LDAPObject to LDAPEntry, that might be a bit more
       descriptive.
 
   * Refactorings to adapt to Ldaptor APIs:
     - Deleting LDAP object is now done via LDAPObject.delete().
     - Switch from ldapclient helpers to LDAPObjects in ldaptor-webui
       mass_change_password.
     - Change ldaptor-webui change_password to use
       LDAPObject.setPassword() instead of LDAPModifyPassword.
     - In ldaptor-passwd, use LDAPObject.setPassword_Samba() instead
       of LDAPModifySambaPassword.
     - Rewrite more code away from LDAPSearch.
     - Refactor ldaptor-ldap2passwd to use LDAPObjects.
     - Refactor ldaptor-webui add and delete to use LDAPObjects and
       DistinguishedNames more.
     - Modernize the ldap_parallelsearch.py example to use
       LDAPEntries.
 
   * Refactorings to adapt to Twisted APIs:
     - Authorizer.setApplication() has been obsoleted, apparently
       .setServiceCollection() does the same thing.
     - Use new-style maybeDeferred.
     - Switch from standard unittest to Twisted's trial. Also
       reorganized the package to match trial's expectations; that
       is, removed the lib/ dir.
     - Move from my own waitForDeferred to twisted's deferredResult,
       deferredError.
     - Rewrite the ldap_parallelsearch.py example to suit
       twisted.internet.protocol.ClientCreator and to not use global
       variables.
 
   * Refactorings to adapt to Python APIs:
     - Avoid using deprecated features of python.
 
   * Internal refactorings:
     - ldaptor-webui's Gadget() does not need or want the base DN; it
       asks it from the user.
     - Work towards running ldaptor-webui from an .rpy: add state
       serialization support, make serviceLocationOverride optional.
 
   * Bugfixes:
     - Use a python2.1 scope rules compatible lambda.
     - Add missing module ldapconnector to package
       ldaptor.protocols.ldap's __all__ list.
     - Make LDAPSearchRequest inherit BERSequence so that it has a
       comparison function.
     - Make sure the other dn is not just a string in
       DistinguishedName.contains().
     - Fix broken test and implementation for
       LDAPObject.setPassword() -- used to change the password for the
       bind DN.
     - Be more explicit by stringifying DNs before trying to do
       string-like operations on them.
     - Avoid requesting LDAPIdentities before the necessary LDAP
       connection has opened.
 
   * Cleanups:
     - Cleanup unit tests and merge similar functionality into helper
       functions.
     - Remove unintelligible comments in md4.py.
     - Avoid non-ASCII in source (but still keep it in the test).
     - Add unit tests for NT password hashing.
     - Add test for LDAPObject.keys().
     - Clean up LDAPObject journal handling. Rename journal operation
       classes, provide a superclass to inherit, and give
       LDAPAttributeSet a real API to submit changes.
     - Actually call fail.getErrorMessage, don't just print the
       function.
 
   * Packaging:
     - Depend on twisted >= 1.0.6
     - Change Debian section for python{,2.1,2.2}-ldaptor from
       interpreters to python.
 
   * Administrivia:
     - API documentation:
       - Support setting PYTHONPATH outside the script (to use CVS
         Twisted).
       - New home page URL.
       - Support uploading the API docs.
     - Ignore editor backup files.
     - Ignore Twisted tap files.
     - Fix admin/doctest-all.py that got broken in the lib/
       reorganization.

 -- Tommi Virtanen <tv@debian.org>  Sat, 2 Aug 2003 14:06:32 +0300

ldaptor (0.0.15) unstable; urgency=low

   * Typo fix.

 -- Tommi Virtanen <tv@debian.org>  Sat, 25 Jan 2003 18:11:31 +0200

ldaptor (0.0.14) unstable; urgency=low

   * Refactor ldaptor-webui add to use new-style getFreeNumber --
     missed this the first time around.
   * Python 2.1 namespace handling compatibility.

 -- Tommi Virtanen <tv@debian.org>  Sat, 25 Jan 2003 18:05:11 +0200

ldaptor (0.0.13) unstable; urgency=low

   * Bring test suite up to date.
   * Beginnings of a more Pythonic LDAP API.
   * Make ldapclient.LDAPModifyAttributes use Deferreds.
   * Pass ldapclient when creating LDAPObject, not at every use.
   * Simplify filter handling in ldaptor-search.
   * Add comparison functions for LDAPObjects.
   * LDAPObject.search now supports kwarg callback, which allows
     processing search results one by one.
   * Support creating API docs with epydoc.
   * Add bin/ldaptor-ldap2pdns
   * Docs and TODO update.
   * Allow empty base setting.
   * Support for parsing and generating string representations of
     LDAP Distinguished Names (DNs).
   * Display usage to stderr in ldaptor-namingcontexts.
   * Support for finding the domain name, and via DNS SRV, the
     server, related to an LDAP DN.
   * ldaptor-webui SRV support: options --host and --port are gone,
     finds LDAP servers for domainComponent-style DNs via DNS SRV
     records. If you don't have them, and don't want to fix that,
     use --service-location='dc=example,dc=com:ldap.example.com'.
   * Increase DNS timeout to 5 seconds.
   * Add DistinguishedName.contains()
   * Make DistinguishedName hashable.
   * Use the client for this session to fetch the attributes, don't
     open up a new connection.
   * Enable log to stderr in ldaptor-webui.
   * Runtime-changeable base DN support in ldaptor-webui: the base
     DN is now the first path segment in the URL, and you can
     navigate in the tree freely.
   * Bugfix for ldaptor-ldap2dhcpconf, used to assert when there
     were no sharedNets.
   * Fix an uninterruptible infinite loop in ldaptor-webui
     shutdown.
   * In ldaptor-webui, support search scopes.
   * In ldaptor-webui, show base object when no search has been
     done.
   * LDAP DN renaming support.
   * Various minor bugfixes.

 -- Tommi Virtanen <tv@debian.org>  Sun, 19 Jan 2003 17:32:03 +0200

2002

ldaptor (0.0.12) unstable; urgency=low

   * Be epydoc-friendly in docstrings.
   * LDAP server closing connection due to idle timeout is now
     handled properly.
   * Added option --identity-base, setting the base dn for the
     search of identities (done with --identity-search).

 -- Tommi Virtanen <tv@debian.org>  Sat, 7 Dec 2002 13:57:19 +0200

ldaptor (0.0.11) unstable; urgency=low

   * New options-based, changeable search fields. To get the old
     behaviour, use --search-field=Name='(cn=%(input)s)'
     --search-field=UserID='(uid=%(input)s)'
     --search-field=Email='(mail=%(input)s)'.

 -- Tommi Virtanen <tv@debian.org>  Sun, 24 Nov 2002 21:16:23 +0200

ldaptor (0.0.10) unstable; urgency=low

   * ldaptor-ldap2dhcp bugfixes, cleanup, and support for
     per-subnet DNS and WINS servers.
   * Be more careful about the Debian section information.
   * In ldaptor-webui, allow editing missing optional fields of
     objects.

 -- Tommi Virtanen <tv@debian.org>  Thu, 31 Oct 2002 20:14:36 +0200

ldaptor (0.0.9) unstable; urgency=low

   * Copy over my MutableString implementation from Twisted, they
     are deprecating it. The one in UserString has very different
     behaviour. Closes: #163772.
   * Twisted Process wants the reactor.. Let's play along.
   * Handle no change -case better in ldaptor-webui mass password
     change.
   * Update TODO to reflect current situation.
   * Lots of places refer to ldaperrors.other, provide that.
   * Work on ldaptor-ldap2dhcpconf, ldaptor-ldap2maradns.
   * Bug fix in ldaptor-webui add.

 -- Tommi Virtanen <tv@debian.org>  Sun, 27 Oct 2002 12:28:14 +0200

ldaptor (0.0.8) unstable; urgency=low

   * Take out the python2.3 support, Twisted doesn't support 2.3
     yet anyway.

 -- Tommi Virtanen <tv@debian.org>  Thu, 19 Sep 2002 20:06:26 +0300

ldaptor (0.0.7) unstable; urgency=low

   * Don't leave LDAP connections open, cleanup.
   * ldaptor-webui search no longer leaks LDAP server connections
     for every search
   * Misc bug fixes.
   * Use Failures.
   * Default ldaptor-webui port is now 38980 (think "ldap and
     http").
   * New tool ldaptor-ldap2passwd
   * Added TODO notes.
   * Support changing Samba passwords.
   * Add functionality to get free uidNumbers.
   * Find free uidNumber/gidNumber in ldaptor-webui add.
   * Avoid Twisted deprecation warnings.
   * Support adding objects composed of multiple objectclasses.
   * Mark mandatory attributes with an asterisk.
   * Some pychecker cleanups.
   * Protect setup-*.py against pychecker importing them.
   * Packaging cleanups; python2.2 as default, python2.3 support,
     better descriptions.
   * Fix upstream location.

 -- Tommi Virtanen <tv@debian.org>  Thu, 8 Aug 2002 10:21:51 +0300

ldaptor (0.0.6) unstable; urgency=low

   * Twisted ClientFactory and Protocol connectionLost refactor.

 -- Tommi Virtanen <tv@debian.org>  Thu, 8 Aug 2002 10:21:07 +0300

ldaptor (0.0.5) unstable; urgency=low

   * ldaptor-passwd generated password setting failed as it tried
     to handle a list of one string as a string.
   * Depend on pwgen.
   * Add change_password.
   * Rename mass_password_change to mass_change_password, to fit
     the task-oriented naming convention.
   * Don't accept empty passwords in ldaptor-webui change_password.
   * Get rid of the rest of the implicit localhosts.
   * Moving bidirdict into ldaptor package as distutils can't
     handle it otherwise.
   * Added asText method for LDAPFilter_substrings, webui search
     should no longer fail.
   * LDAPClient.bind() now returns a Deferred.
     LDAPClient.handle_bind_success() and
     LDAPClient.handle_bind_fail() are gone.
   * LDAPClient.bind() deferred bugfixes.
   * Added ability to use shorthands for Identity names.
   * Lots of minor bugfixes.

 -- Tommi Virtanen <tv@debian.org>  Thu, 8 Aug 2002 10:16:19 +0300

ldaptor (0.0.4) unstable; urgency=low

   * Remove the obsolete ldaptor.twisted package.

 -- Tommi Virtanen <tv@debian.org>  Sat, 3 Aug 2002 16:20:21 +0300

ldaptor (0.0.3) unstable; urgency=low

   * NOTE: Requires a CVS version of twisted!
   * New upstream version.
   * tcp.Client -> reactor.clientTCP
   * Removed old code in ldaptor.twisted that got in the way of
     imports.
   * Added options --generate and --bind-auth-fd
   * Fix widget in ldaptor-webui search page.
   * Twisted Connector refactor.
   * Add hint that 'description' attributetype is always multiline.
   * Starting to use Deferreds everywhere.
   * Exception-based errors.
   * Add asText() methods to LDAPFilter*-classes, convert objects
     to textual filter representation.
   * Implement LDAPFilter_not.
   * Add mass_password_change to ldaptor-webui.
   * Added utility to generate debian/changelog automatically from
     BitKeeper.

 -- Tommi Virtanen <tv@debian.org>  Sat, 3 Aug 2002 15:55:09 +0300

ldaptor (0.0.2) unstable; urgency=low

   * NOTE: Requires a CVS version of twisted!
   * NOTE: Upgrade from 0.0.1 can fail.
   * Split package into library, ldaptor-webui and
     ldaptor-utils. Support multiple python versions in library.
   * Added new command line utilities:
     - ldaptor-namingcontexts to list naming contexts of a server.
     - ldaptor-ldap2dhcpconf is the start of a tool to export host
       entries from LDAP in a format suitable for a DHCP server.
     - ldaptor-ldap2maradns does pretty much the same for DNS, in
       (partial) maradns zone format; it was just so much easier.
     - note that the ldaptor-ldap2{dhcpconf,maradns} input format
       will change as I try to cram in a few more features
       (separate physical network location from DNS domain -- they
       are currently bound together).
     - ldaptor-search aims to be a full replacement for ldapsearch.
     - ldaptor-passwd allows changing passwords (as per RFC3062).
   * ldaptor-webui:
     - added support for "Advanced" searching with raw LDAP filter
       strings.
     - change parameter --port to --http-port, for clarity.
     - fix navi links.
   * Make all LDAP server, port and base settings explicit.
   * Add ldapfilter and ldif modules.
   * Create ldaptor.usage to store common option processing.
   * Change twisted.python.defer to twisted.internet.defer and
     twisted.protocols.protocol to twisted.internet.protocol.
   * Handle unsolicited LDAP notifications.
   * New test subsystem.
   * Rewrite LDAP protocol error number storage to be
     bi-directional; you can resolve a number to a string.

 -- Tommi Virtanen <tv@debian.org>  Sun, 28 Jul 2002 20:30:06 +0300

ldaptor (0.0.1) unstable; urgency=low

   * Initial Release.

 -- Tommi Virtanen <tv@debian.org>  Sun, 26 May 2002 18:08:30 +0300