# 0.7.10

Release Date: 2000-08-27

- Better compatibility 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 compatibility issues with upcoming OpenLDAP 2.0.)
- Tweaked CSS files a bit but this needs more work. (Any good web designer willing to contribute?)

# 0.7.9

Release Date: 2000-08-02

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

# 0.7.8

Release Date: 2000-07-30

- 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 RFC 1123.
- 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 compatibility with quoted data in RDN-components.
- separated HTTP server module (independent of web2ldap now)
- Updated documentation and web pages. Still not really complete...

# 0.7.7

Release Date: 2000-07-06

Misc. stuff
  - 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.
  - Split 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 changes:
  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

# 0.7.6

Release Date: 2000-06-18

- 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. Split 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 based on M2Crypto.
- 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.

# 0.7.5

Release Date: 2000-04-07

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

# 0.7.4

Release Date: 2000-04-06

- Fixed missing module import when running stand-alone.

# 0.7.3

Release Date: 2000-04-05

- J. Stezenbach provided a patched version of charset.py for faster character set conversion.
- J. Stezenbach 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 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.

# 0.7.2

Release Date: 2000-02-27

- 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.

# 0.7.1

Release Date: 2000-02-26

- 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.

# 0.7.0

Release Date: 2000-02-20

- 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.