TODO list and ROADMAP
---------------------

NOTE: [1.0] denotes features to be implemented for 1.0
      [1.x] denotes features to be implemented for 1.0 or later


----------------
INTERESTING BUGS
----------------

* [1.0] Handle update referrals - iff I can find out how to detect them

* [1.x] Allow to use a "master password" for passwords stored in the
  .gq config file. Shouldn't be too hard - either implement through
  the encoding XML element, or do this through the xmlsec library
  once it becomes available in mainstream distros.

* [1.x] update schemabrowse tree on serverlist update (browsetree
  already done) - Will be done when the GtkTree gets removed in schema
  browse mode.

* [1.x] search mode: (peter) - improve display type support. Will be
  done when the CList gets replaced with a gtk2 widget.

* Proper OpenLDAP 2.1 support, taking care of all DN-related issues wrt 
  the encoding of unusual DNs (Honor RFC2253 and the possible
  hex-encoding there even for OpenLDAP 2.0.x More generally: Deal with
  special characters in DNs.)

* [1.x] Better error reporting of LDAP error situations. Currently we handle
  LDAP_SUCCESS and LDAP_SERVER_DOWN but ignore the rest. Pointed out
  indirectly by Bernhard Reiter <bernhard@intevation.de>.

* [1.x] Think about the moving stuff in browse mode: 
  Either
    - Should move deletion out of the moving business and delay
      it until _after_ we have ended the moving
    - OR should we delete and retry in order to circumvent any
      sizelimits???

* Take care to properly deal with schema information in case of a lost
  connection with a server. - Maybe not actually necessary, a quick
  check revealed that schema information seems to never be stored for
  longer periods of time.

* [1.x] Entry widget: fonts are not used on startup

------------------
UNINTERESTING BUGS
------------------

* load_context errors should pop up after mainwin


-----
MINOR
-----

* use scrolled area in error_flush: ldifadd.c may generate 1000s of
  errors This is not as simple as it seems. Just using a scrolled
  window won't work, as the autosizing of the dialog will not work
  properly then.

* make the add attribute button insensitive if the shown object is not
  an extensibleObject

------------
ENHANCEMENTS
------------

* [1.x] Rewrite the preferences layout - do it like Mozilla (Bert)

* [1.x] Enhance the rudimentary run-type typing system to catch
  improper use of data structures

* Make the tabs (Search/Browse/Schema) object oriented. Partly done.

* templates: allow defaults? 

* ability to limit visible attributes for objectclasses (do not show
  empty attributes one never uses anyway) (suggested by Chris Jackson
  <cjackson@ghsinc.com>) - partly done: missing: make configurable in 
  what one is not interested at all

* Allow to "apply" a template to an already existing object + add
  default values from template as well (suggested by Chris Jackson
  <cjackson@ghsinc.com>)
* import from LDIF

* dt_oc: allow for automatic addition of intermediate
  objectClasses. Add a default "top" template, with only the single
  "top" objectClass. These two changes allow for efficient addition of
  objects of a single "class".  Suggested by Emil Assarsson
  <emil.assarsson@bolina.hsb.se> * Add all superclasses should they be
  missing when adding objectClasses.  [Jonas Petersson <zap@xms.se>]

* nested main loop invocations during possibly long running LDAP
  operations (any search), allow to interrupt running operations in
  certain situations.  See mail by Emil Assarsson
  <emil.assarsson@bolina.hsb.se> dated Wed, 09 Oct 2002 19:40:37
  +0200.

* [1.x] Even more gtk2 support. I would like to switch the Schema
  Browser to the new gtk2 GtkTreeView infrastructure. For 1.0 the old
  browser must remain working.

* [1.x] never do ldap_add when moving trees. (Use triangulation like
  with the towers of hanoi?) Only change DNs to make sure NO
  information can get lost.

* [1.x] More displaytypes
  + PKCS7 and PKCS12 browsers

* [1.x] Rewrite drag-and-drop:
  - _only_ use ldap_modrdn when moving trees within one server. This
    allows to take care of hidden attributes implicitly


--------
BLUE SKY
--------

* schema designer (when OpenLDAP supports writable schema)
* generate change and undo log in LDIF

#########################################################################
#########################################################################
#########################################################################

-------------------------------------
FIXED BUGS / IMPLEMENTED ENHANCEMENTS
-------------------------------------

* [1.0] Implement the new saving-policy for all cases.

* [1.0] search mode:
	- multiple selections, abstract selection list function for delete,
	  export to LDIF etc

* [1.0] dt_password: Add LANMAN hash for completeness.

* [1.0] Make ALL LDAP operations referral-safe (that is, change all ldap_* to 
  ldap_*_ext and set ManageDSAit iff necessary)
  - Done for ldap_search
  - Done for ldap_rename

  Some probably still missing, but...

* [1.0] Re-introduce  the Export to LDIF functionality for servers
  - done for servers and referrals alike

* [1.x] Split browse.c into several files - it is > 2500 lines long now

* [1.0] SECURITY: Think about the extended referred-to server authentication
  tests in get_referral_server and the security implications (configurable?)
  - Implemented through the addition of yet another preferences tab

* [1.0] Search-Mode: Get rid of sortdn - implement through search options

* [1.0] Drag'n'Drop: Avoid unnecessary refreshes of temporary objects
  in the right pane.

* [1.x] improve gtk2 support - Quite impressive by now.

* [1.0] Search-Mode: Avoid circular reference when chasing referrals, use
  maximum recursion depth for chasing. - partly done, but OK: the
  max. recursion depths allows to avoid infinit recursion.

* [1.0] Referral support
  - Make search mode referral-aware

* [1.x] Make struct ldapserver a reference counting GObject to make
  sure we do not get into trouble due to the handing around of 
  servers between various modes. Until then: think about willingly
  leaking the memory used for transient servers.

* [1.0] Search-Mode: Get rid of show_oc - implement through attributes to 
  show for he search result (partly done)

* [1.0] Search-Mode: Allow to specify the recursion depth when
  following referrals, allow to show referrals instead of following then.

* [1.0] Improve LDAP error reporting - most error messages now indicate what
  object (eq. server, LDAP entry) caused the problem.

* [1.0] Referral support
  - somehow indicate a referral in the browse tree and allow to 
    follow it, maybe through the context menu? Configurable?
  - Make context menu in browse mode node-type specific. Eg. the
    current context menu does not make sense for referral nodes or
    server nodes.
  - allow to specify bind dn/pw/method for followed referrals, currently
    only anonymous binds get used

* search mode: (peter)
  Take displaytypes into account when building the search result list. It does
  not make sense to show a jpegPhoto as a string... [rudimentary support]

* [1.0] work towards gtk2 - mostly done, need the XML parser change
  (see below) for encoding reasons.

* [1.0] Get rid of Hashtables as central data structures. This is to
  get in some type safety. [Mostly done by Bert for tabs, done by
  Peter for mainwin and preferences]
  Use a run-type typing system to catch improper use of data structures 

* [1.0] schemabrowse mode: items require a double-click to be selected, not
        a single click as usual

* [1.0] schemabrowse mode: context menu on server, refresh option segfaults

* [1.0] search mode: double-click to select/edit an entry doesn't work
  Cause: Signal handling in GTK2 has changed. The button press signal
  handler returned TRUE unconidtionally, signalling to gtk that the 
  signal was handled even when it was not button 3.

* [1.0] search mode: "find in browser" and "add all to browser" segfault
  - but only if no browse mode tab has been shown previously - fixed

* [1.0] Switch to a proper XML parser for configuration file
  parsing. MUST DO THIS or we will end in an encoding mess when using
  gtk2. When first starting up, the encoding of an old configuration
  file must be found out. The only way to do this is by using the
  default codepage setting. The need to switch to a proper parser also
  arises due to the requirement to properly parse multi-byte
  characters in config files. This does not really work currently.

* search mode:
	- change in server config should initialize searchbase combo, too
          (seems to be done for quite a while!)
	- RMB on entry in search mode shouldn't deselect the entry
          (cannot reproduce)

* update browse ctree on serverlist update
* make refresh_mode_serverlist(): combo in search mode, delete/add/change in
  browse mode. tablist can be used for this now... (done for browse and search
   mode already, similar to the above issue)

* take schema from entry

* Take care of possible buffer overflow situations. Pointed out by
  Bernhard Reiter <bernhard@intevation.de>. As always, there may be
  issues remaining.

* [1.0] Support for the extensibleObject object class

* first startup: deleting default localhost server segfaults (FIXED??)

* [1.0] More displaytypes
  + Most notably a calendar to enter dates and times

* [1.0] encode passwords in .gq - this doesn't add any real security, but at
  least the password cannot be easily remembered if one happens to
  glance at it. (This is similar to why HTTP basic authentication
  encodes the password).

* [1.0] LDAP URI support in addition to server/port [check patches by
  "Árpád, Magosányi" <mag@bunuel.tii.matav.hu> and 
  Albrecht Dreß <adress@idsystems-ag.de>]

* put up rootDSE info in browse mode's server detail (cn=monitor?)

  -> well, we now have some interesting information there, but
     probably not what Bert had in mind.
  UPDATE (2002-09-25): Now we actually take information directly 
  from the root DSE

* [1.0] Fix dt_password.c: handling of the construction of encoded passwords
  (get rid of any strcpy, strcat and only using GByteArray methods)

* [1.0] Allow to change displaytypes on-the-fly

* mainwin: ^c makes a browse tab!
* get rid of hardcoded dep on libssl, only link when needed
* get rid of hardcoded dep on libcrypto - now DISPLAYTYPE_PASSWORD is turned
  off if we do not have crypto support available.
* probe for V2 or V3 on connect, store in struct ldapserver. Use ber_free
  only if V3 supported.
* occasional core-dumps in brose mode - might be related to browsehash_free, 
  hard to reproduce (hopefully fixed)
* I18N (peter)
* Make the search tab context menu (right aka button 3 click) work the same
  way as it does in the other tabs
* When using the dt_oc combo box menu and _not_ selecting a new
  objectClass the objectClass gets deleted from the attribute. This
  may lead to data loss (attributes may be deleted) if the changes get
  applied afterwards. ADDITIONAL NOTE: to make clear what I mean:
  selecting the drop down menu for the dt_oc combobox and then
  dragging the mouse selects the first element of the drop down list,
  which is the empty element. Releasing the mouse effectively removes
  the objectclass (peter)

  FIXED by putting the current value in the first place in the combo
  list. This also makes it easier to remember the old value of the
  combobox.

* Do not show the password in the preferences window if it has been
  entered interactively before (peter)

* changing the RDN suddenly dumps core!!! Seems to be related to 
  refresh_subtree! (peter)

* browse mode: refresh of subtree after RDN mod selects first entry
  in subtree -> find and select the entry with the new RDN instead
  NOTE: This seems to have gotten worse. When testing this, the behaviour
  was totally erratic (peter) - Fixed in new browse mode implementation

* check for the codeset ISO-8859-1 vs ISO8859-1 to be used for iconv
  in configure.in

* Better keyboard support (at least for main menu) (peter) - will probably 
  have to wait for gtk2 - mostly done

