web2ldap - Changes
Author: michael@stroeder.com
Description: web2ldap: History of released versions
Keywords: LDAP, WWW, SSL gateway, Python, single sign-on, Security, Directory, PKI, LDIF, DSML

# web2ldap - Changes History of released versions | Information News Features Demo Roadmap | Support Download Feedback Related | Documentation Installing Configuration Security Changes Files

## web2ldap 0.8.1

Release Date: 2000-12-20

Changes since 0.8.0:

- Bug fixes:
  - Wrong regex pattern for select lists in cgiforms.py fixed.
  - Some select fields did not use the right charset.
  - Fixed displaying displayName attribute.
  - Fixed ldapbase.SplitRDN() (affected modrdn command).
  - Default of modrdn input field was displayed as HTML.
  - Proper handling of UTF-8 characters in namingContexts attribute of RootDSE.
  - Handling of form data more robust.
  - Corrected handling of RDNs when DN has only one component.
  - Avoid any LDAP operations before first bind.

## web2ldap 0.8.0

Release Date: 2000-12-02

Changes since 0.7.10:

- Nice displaying of certificate and CRL attributes including certificate extensions if at least sub-module asn1 of Pisces is installed on the system (automatically detected). Credits go to Jeremy Hylton for his work on the ASN.1 parser and helping me understanding it.
- New parameter web2ldapcnf.hosts.ldap_def['timeout'] for specifying a timeout (seconds) for search operations.
- Login not longer mandantory at beginning of session. User can explictly bind after connecting to server.
- Avoid making a LDAP connection when not necessary (e.g. when displaying add form).
- Displayed LDAP URLs are all URL-quoted now and handling of LDAP URLs stored in attribute is more robust and smarter.
- Some efforts were done to browse global directories in a reasonable manner.
- Simple support for direct use of LDAP URLs (short hack):
  `[web2ldap URL]/ldapurl?[LDAP URL]`
  will display the entry or do a search.
- Gracefully handling of exceptions which make a re-login of a user necessary: ldap.INSUFFICIENT_ACCESS, ldap.INVALID_CREDENTIALS, ldap.INAPPROPRIATE_AUTH etc. User can re-login and retry command.
- Smarter handling of LDAPv3 referrals: Instead of relying on the referral handling of the underlying lib the referral exceptions are caught and the user is prompted for new bind DN / password for connecting to the referred host and repeat the action before the referral was received.
  Credits go to Konstantin Chuguev for patching python-ldap to do correct error handling when result() method is called.
- Compability issues:
  - web2ldap now makes use of the new Unicode features introduced in recent Python versions because the handling of different character encoding is faster and cleaner.
    => You have to upgrade your Python installation at least to version 2.0.
  - For cleaner exception handling python-ldap prior to 1.8 is not longer supported since the ldap.LDAPError exception base class is used now. This affects mainly the Windows platform since I do not know of pre-compiled python-ldap version later than 1.5. Feel free to contribute!
  - Moved parameters web2ldapcnf.misc.search_attrsonly and web2ldapcnf.misc.search_attrs to web2ldapcnf.hosts.ldap_def. You have to adjust your local configuration files!
- Code cleaning:
  - All LDAP-related strings are internally handled as Unicode string types.
  - Handle more input field stuff with the fine cgiforms module.
  - LDAP session objects. First step towards session handling with pickeable session objects.
  - Simplified many function calls into module w2lcore.
  - All exception handling of LDAP errors is done in module w2lhandler except exceptions which needs special handling in a specific context.
- Bug fixes:
  - Correct handling of DNs with quoted comma.
  - Some code was too case-sensitive with handling attribute type names.
  - Fixed some compability issues with Python 1.6+.
  - Fixed some vCard issues. Still not perfect but usable most times.
  - Correct handling of special characters when putting together LDAP filter string (RFC 2254).
  - Fixed typo in main exception handling.

## web2ldap 0.7.10

Release Date: 2000-08-27

Changes since 0.7.9:

- Better compability and defaults for running from scratch under Win32 platform.
- New form parameter ldap_basedn is used throughout the whole session.
- List of possible base DNs of LDAP servers are automatically queried if a connect is done to a LDAPv3 server with namingContexts attribute set or UMich-derived LDAPv2 server and entry cn=config. User can select the search root from select list.
- New configuration scheme: any configuration parameter in the dictionary web2ldapcnf.hosts.ldap_def is now retrieved by looking at string-key 'ldap://ldap_host/ldap_basedn', 'ldap_host', '_' ('_' is meant as the overall default) in this order. This allows to hold several database backends on the same host with the same DNS name. It also shortens the ldap_def dictionary by avoiding having to repeat same options for every server and makes browsing of completely unconfigured hosts easy. This concept should still handle your old config files correctly (except the specific changes of some variables described below!).
- Over-featured configuration of required security level was simplified (You have to adjust your old config!).
  - No more parameter web2ldapcnf.misc.security_level_default any more. This is set in overall default in web2ldapcnf.hosts.ldap_def['_']['security_level'] now.
  - Type of dictionary parameter web2ldapcnf.hosts.ldap_def[]['security_level'] was changed to a simple integer for the required security level. Security levels which depends on a specific command might turn out to be less secure because of possible bugs in implementation/configuration.
- vCard and printable HTML output is based on template files similar to the read_template's. This has the advantage to use different templates per object class.
  Path names of template files for vCards and printable HTML are set with parameter web2ldapcnf.hosts.ldap_def[..]['vcard_template'] and web2ldapcnf.hosts.ldap_def[..]['print_template'] (You have to adjust your old config! See example.).
- Code cleaning:
  - moved functions for widely used HTML output from module w2lcore.py to new module w2lgui.py
  - moved/renamed function w2lcore.HTTPHeader() to httphelper.SendHeader()
  - Function w2lgui.CommandButton() expects UTF-8-encoded parameters now and does the conversion itself. The result is some performance loss but the code is less buggy.
  - Modules does not catch all exceptions with except: anymore.
  - Empty parameters are not ignored any more.
  - Non-existent parameters are set to None to distinguish them from empty parameters.
  - w2ldelete.DelTree() is now non-recursive.
  - Smart login is now done in ldapbase.SmartLogin() => w2lcore.LDAPSessionParams() looks nicer now.
  - Handle missing parameter ldap_dn with required flag of cgiforms.formFieldClass()
  - Some case-sensitive bugs fixed when building search result table.
- All output of read is now wrapped by a <div id=MessageDiv></div> no matter if the output is a table or generated with a template (templates changed!).
- New <div id=StatusDiv></div> for section with status line containing current DN, host name and bind DN above main menu.
- Be as case-respecting as possible when displaying attribute types without being case-sensitive in attribute handling. (This fixes compability issues with upcoming OpenLDAP 2.0.)
- Tweaked CSS files a bit but this needs more work. (Any good web designer willing to contribute?)

## web2ldap 0.7.9

Release Date: 2000-08-02

Changes since 0.7.8:

- Fixed missing import of module ldif in w2lhandler.py.
- Pass only ldif.ldif_pattern to TextAreaClass.__init__()

## web2ldap 0.7.8

Release Date: 2000-07-30

Changes since 0.7.7:

- Wrapper script for running as persistent PythonHandler under the control of the Apache module mod_python.
- Use gzip-encoding for saving network bandwidth if client has sent `Accept-Encoding: gzip` in the HTTP header.
- Improved HTTP header data. Especially date format is now conform to RFC1123.
- New parameter standalone.run_username for defining the username for setuid() when started as root.
- New parameter standalone.debug_log for setting path name of debugging log file. Redirect sys.stderr and sys.stdout to debug log if running detached.
- Fixed bug with being too case-sensitive with LDIF data and input fields when modifying entries.
- Relaxed DN regex checking for compability with quoted data in RDN-components.
- separated HTTP server module (independent of web2ldap now)
- Updated documentation and web pages. Still not really complete...

## web2ldap 0.7.7

Release Date: 2000-07-06

Changes since 0.7.6:

- Handle parsing of wrong LDIF data gracefully.
- Use os.fork() to detach from console if running on Posix platform.
- If threading is turned off the ForkingMixIn is used to run a forking server when running under Posix-platform.
- Fixed bug: Changing objectClass attribute of an entry works again. New object classes were ignored.
- Splitted calling the CGI-BIN and calling the stand-alone server into two different scripts cgi-bin/web2ldap.py and sbin/web2ldap.py to make a clean separation for users and package maintainers.
- Dropped support for form parameter ldap_url. Was not used and made coding much more complicated.
- Code cleaning:
  - All form.add() method calls are done in module w2lhandler.py now.
  - Cleaned up parameter handling.
  - Handling of search form parameters in single form field objects. Should be slightly faster.
- Configuration module web2ldapcnf.py is divided into the following sub-modules:
  - misc.py: various options
  - standalone.py: options only needed when running as stand-alone web server
  - hosts.py: specific parameters for different LDAP hosts
  - cgibin.py: options only needed when running via CGI-BIN interface under the control of a web server

## web2ldap 0.7.6

Release Date: 2000-06-18

Changes since 0.7.5:

- Partial display of search result table with ->> and <<- buttons for previous and next page. The benefit is a better usability because there's not so much HTML data sent to the browser.
  Due to limitations of LDAP the search results are retrieved completely from the LDAP server up to the last result index displayed. E.g. displaying search results 201 to 210 means sending the results 1 to 200 to /dev/null.
- Moved configuration files to separate directory (like /etc/web2ldap) for easy producing of Linux-packages. Splitted former configuration file module web2ldapcnf.py into directory module web2ldapcnf/ containing modules all.py and standalone.py.
- New parameter web2ldapcnf.input_maxfieldlen for specifying maximum length of input data for attributes.
- Base search form for very simple searches (default now). The search form can be customized with a HTML template file.
- Select base, advanced or expert search form with select list of search button.
- Search results produce handy URL links for LDAP search URLs and mailto-links for group mailings.
- Alternate output formats (DSML, LDIF, pretty-printable) are chosen from a select list with one button now.
- Content negotiation with HTTP_ACCEPT_LANGUAGES for serving multi-language variants of template files (only search form and read templates by now).
- SSL-enabled when running as a stand-alone gateway (credits go to Ng Pheng Siong <ngps@post1.com> for providing the module M2Crypto). This means a lot of more parameters to configure. ;-) Please do not ask me how to create server certs etc. The OpenSSL and mod_ssl docs might be a good start for learning about this topic. ;-)
- Improved HTML output (lower-cased, checked with tidy) - first little steps to XHTML.
- Send \r\n in HTTP header in platform independent manner.
- Bunch of small fixes. (still recovering from errors with the new module structure introduced in 0.7.3...).
- The semantics of the parameter search_attr has changed. It represents the LDAP attribute name now (was userfriendly name before). Incompatible changes in configuration (see parameters web2ldapcnf.search_attr and web2ldapcnf.ldap_knownattr!!!
- Parameter search_maxhits in ldap_def dictionary abandoned.
- If no IP addr is given with option -l the stand-alone mode binds to INADDR_ANY for listening on all network devices available.
- Simple address-based access control with client's IP address in stand-alone mode. See new parameter web2ldapcnf.access_allowed for defining a list of networks which are allowed access.

## web2ldap 0.7.5

Release Date: 2000-04-07

Changes since 0.7.4:

- Small fixes.
- Display current RDN as input default when choosing modrdn.

## web2ldap 0.7.4

Release Date: 2000-04-06

Changes since 0.7.3:

- Fixed missing module import when running stand-alone.

## web2ldap 0.7.3

Release Date: 2000-04-05

Changes since 0.7.2:

- J. Stezenbach <yawyi@gmx.net> provided a patched version of charset.py for faster character set conversion.
- J. Stezenbach <yawyi@gmx.net> provided a solution for the hanging socket when running as stand-alone and catching ErrorExitClass exception in HandleHTTPRequest().
- All functionality is put into modules for reducing start-up latency especially when running as CGI-BIN (thanks again to J. Stezenbach <yawyi@gmx.net> for giving the right optimization hints).
- Use string templates for displaying entry data in search result table (new parameters!).
- Make asynchronous searches to behave less memory-consuming especially when downloading large amount of LDIF or DSML data.
- New per-host parameter search_maxhits introduced to limit the number of search results displayed in search result table. This means: Behave nicer on large sites.

## web2ldap 0.7.2

Release Date: 2000-02-27

Changes since 0.7.1:

- Added button downloading DSML-formatted directory data. (Very preliminary and primitive implementation of a DSML level 1 producer. This needs testing!).
- Fixed bug with LDIF data containing non-ASCII characters.
- Cleaned up password setting and added support for SMD5 and SSHA hash types. Also hash types can be restricted in the per-host configuration.

## web2ldap 0.7.1

Release Date: 2000-02-26

Changes since 0.7.0:

- Stand-alone mode delivers documents from web2ldapcnf.document_root now.
- Added attribute thumbnailphoto to web2ldapcnf.ldap_binaryattr.
- Changed the behaviour of the Easy Search button:
  If the base DN is empty the current DN is displayed as default search base. This is more handy if browsing in big X.500 trees.
- Some bug-fixes.

## web2ldap 0.7.0

Release Date: 2000-02-20

Changes since 0.6.10:

- Stand-alone mode by deriving own HTTP handler class from SimpleHTTPServer.SimpleHTTPRequestHandler. Running stand-alone speeds up things dramatically (modules are not re-imported every time).
  And yes, it's multi-threaded (needs testing!!!).
  And yes, it runs under Windows.
- Runs under Windows now.
- Abandoned all global variables.
- Does not use sys.stdin or sys.stdout directly any more.
- Function calls for the web2ldap commands through wrapper-function HandleHTTPRequest().
- Produces correct HTTP expiring header now.
- Make use of useful changes in module cgiforms.py.
- New parameter web2ldapcnf.input_maxattrs.
- New button "Login As" when displaying an entry.

## web2ldap 0.6.10

Release Date: 2000-02-08

Changes since 0.6.9:

- Two small fixes to building of modify list.
- Fixed wrong HTML escaping in displaying of multi-line entries.

## web2ldap 0.6.9

Release Date: 2000-02-07

Changes since 0.6.8:

- Do not print "Go up" buttons for DNs above basedn
- Started writing documentation...
- Fixed problems with URLs and hidden parameters based on DNs containing " quotes.
- Modify: Leave attribute objectClass alone if it does not have to be changed and change objectClass and rest of entry in one call of modify_s().
- Changed effect of web2ldapcnf.print_rawutf8: 0 Never, 1 Smart, 2 Always
- Read single binary data from multi-valued attributes (not yet usable in UI).
- New configuration parameter web2ldapcnf.ldif_maxbytes for limiting the amount of data in the LDIF input field.
- Even more bug hunting, code cleaning and small UI enhancements.
- Escape special HTML/Javascript characters to address security problems with scripting content described in CERT advisory CA-2000-02.

## web2ldap 0.6.8

Release Date: 2000-01-29

Changes since 0.6.7:

- Bug hunting and code cleaning.
- Smarter main menu.
- Graceful error handling.
- Nice confirmation dialogue for delete.
- Recursive delete of sub-trees.

## web2ldap 0.6.7

Release Date: 2000-01-28

Changes since 0.6.6:

- Fixed bug with download of binary attributes introduced in 0.6.5 or 0.6.6
- New handling of SSL-related environment variables: Prefer mod_ssl style with fallback to old ApacheSSL style.

## web2ldap 0.6.6

Release Date: 2000-01-25

Changes since 0.6.5:

- You might have guessed it: Bug hunting and code cleaning!
- Better support and example for CSS

## web2ldap 0.6.5

Release Date: 2000-01-23

Changes since 0.6.4:

- Implemented modrdn.
- Omnipresent button bar throughout the whole UI now (including error messages).
- Direct input of LDIF data possible during adding or modifying entries (e.g. for binary data).
- Display attributes of entry according to the schema categories (required, allowed, not matching).
- Minor bugfixing and code cleaning.
- Display entries with HTML template files depending on objectClass.
- HTML clean-up to be hopefully SGML-conform (and friendly to browsers).
- Configuration parameters for complete <BODY> tag.
- ID params in important HTML tags for using CSS.
- Configuration parameters for string placed in <HEAD></HEAD> section (suitable for placing <STYLE> tags).

## web2ldap 0.6.4

Release Date: 2000-01-06

Changes since 0.6.2:

- Some minor enhancements of user interface
- Fixed a basedn-related bug in smart login search
- Added automatically start of CGIHTTPServer.py if web2ldap.py is invoked from command-line (only Unix up to now).

## web2ldap 0.6.1, 0.6.2, 0.6.3

Release Date: 2000-01-04

- bad day...

## web2ldap 0.6.0

Release Date: 2000-01-03

Changes since 0.5.8:

- started enhanced user interface

## web2ldap 0.5.8

Release Date: 1999-12-29

Changes since 0.5.6:

- some code cleaning / bug fixing
- enhanced direct handling of UTF-8 input/output more conform to HTML4 standard
- new feature: for each host a dictionary with DNs as keys can be created to define the default objectclass and attribute for forming DNs for subordinate entries (see example in cgi-bin/web2ldapcnf.py under host ldap.stroeder.com). This is handy in situations where unexperienced users have to add entries without knowing how to form a new DN.

## web2ldap 0.5.6

Release Date: 1999-12-21

Changes since 0.5.3:

- some code cleaning / bug fixing in login procedure
- some small performance enhancements
- direct output of UTF-8 if browser sends UTF-8 in HTTP_ACCEPTED_CHARSET (e.g. like Netscape Communicator 4.5x does)
- fixed problems with being too case sensitive in modify
- some small improvements in user interface

## web2ldap 0.5.4

(1999-12-13)

- small bugfix

## web2ldap 0.5.3

Release Date: 1999-12-12

Changes since 0.5.2:

- deal with DNs containing spaces between DN components
- fixed behaviour of accidently case sensitive attribute name handling in addform/modifyform

## web2ldap 0.5.2

Release Date: 1999-11-17

Changes since 0.5.0:

- renamed project to web2ldap
- complete re-design of modifyform to make it possible to change objectClass attributes.
- minor enhancements of user interface
- some small bug fixes

## ldap-client-cgi 0.5.1

Release Date: 1999-10-05

## ldap-client-cgi 0.5.0

Release Date: 1999-09-27

Changes since 0.4.4

- complete re-design of add/modify
- client-side schema checking with appropriate input forms for required and allowed attributes
- automatically checking for missing parent DNs if add fails with "NO SUCH OBJECT" for reducing FAQ-traffic on OpenLDAP mailing lists ;-)
- support for setting hashed passwords ({crypt},{md5} and {sha})
- minor enhancements of user interface
- some small bug fixes

## ldap-client-cgi 0.4.4

Release Date: 1999-09-04

Changes since 0.4.2

- some bug fixes
- more complete and slightly faster character conversion

## ldap-client-cgi 0.4.3

Release Date: 1999-08-19

## ldap-client-cgi 0.4.2

Release Date: 1999-08-18

Changes since 0.4.1

- security fix! (forgot METHOD-parameter in a <FORM>-tag)
- small fixes in user interface

## ldap-client-cgi 0.4.1

Release Date: 1999-08-08

Changes since 0.3.1:

- bind without input of full bind-dn (anon search seeks for complete DN first)
- working tree traversal
- almost every parameter configurable for each LDAP host separately
- vCard's for easy download of addresses in address books of NS Comm. and MS IE.
- LDIF output of search results for bulk downloading of addresses (no binary attributes up to now)
- improvements to the user interface
- clean login behaviour
- minor HTML improvements

Dig DejaNews if you're interested in changes of these ancient releases...

## ldap-client-cgi 0.4.0

Release Date: 1999-08-07

## ldap-client-cgi 0.3.1

Release Date: 1999-07-21

## ldap-client-cgi-0.3

Release Date: 1999-07-21

Page last modified: Wednesday, 20-Dec-2000 16:29:25 CET, © by Michael Ströder <michael@stroeder.com>