summaryrefslogtreecommitdiffstats
path: root/ldap/xpcom/TODO.txt
diff options
context:
space:
mode:
Diffstat (limited to 'ldap/xpcom/TODO.txt')
-rw-r--r--ldap/xpcom/TODO.txt155
1 files changed, 155 insertions, 0 deletions
diff --git a/ldap/xpcom/TODO.txt b/ldap/xpcom/TODO.txt
new file mode 100644
index 000000000..ff70c2bcd
--- /dev/null
+++ b/ldap/xpcom/TODO.txt
@@ -0,0 +1,155 @@
+housecleaning for first 0.x release
+-----------------------------------
+* error handling: sort out what should be NS_ASSERTIONs vs. normal
+ error conditions (eg network & data errors), especially in nsLDAPChannel.
+ also shouldn't be casting results of nsILDAPConnection::GetErrorString to
+ void in ldapSearch. (ideally this would use xpidl nsresult decls
+ (bug 13423), but that's not done yet). This also requires some
+ threadsafety work related to the data and interfaces touched by
+ nsLDAPChannel::Cancel, since these are used in the connection
+ callbacks, and we also need to be able to cancel from the connection
+ callbacks themselves.
+
+* audit for and fix leaks / bloat
+
+* destroy connection & thread when done with it; deal with timeouts
+ (blocked on LDAP C SDK 4.1, in the hopes that the NSPR
+ binding of the IO functions will provide us with some way to pop out
+ of the select() that's called under ldap_result(). It may not be worth
+ implementing this until nsLDAPService is resurrected. If this
+ doesn't work, we may have to give nsLDAPConnection an event queue &
+ loop of its own, instead of using the LDAP C SDK as a vector to get
+ events over there.
+
+items blocked waiting for other work
+------------------------------------
+* go through the various options that can be used with the SDK function
+ ldap_set_options() and decide if and where the various functions should
+ be used. This will include memory allocator settings, and possibly
+ threadsafety callbacks (if necessary). (blocked waiting on LDAP C
+ SDK 4.1 to land, since it contains NSPR bindings for some of this).
+
+* searches that return lots of entries to the nsLDAPChannel
+ (eg (sn=Smith) at netcenter) mostly stall out the UI. moving most of the
+ callback work off the UI thread to the LDAP connection thread didn't
+ help; so this seems to be lossage in the event system itself (bug 50104).
+
+* deal with race condition that happens if data comes back after
+ nsLDAPChannel::Cancel is called. AsyncStreamListener expects
+ GetStatus to return OK, and asserts when it doesn't. (blocked waiting
+ on insight from Warren about nsSocketTransport's use of mCancelStatus).
+
+* ensure that multiple calls to Cancel don't do the wrong thing
+
+* move the ldap_unbind() call out of the nsLDAPConnection destructor,
+ since nsLDAPConnection will soon go back to being callable from the
+ UI thread, and ldap_unbind() is actually synchronous. additionally,
+ arrange for the connection thread to shutdown. (waiting for
+ nsILDAPService to be implemented on the theory that nsILDAPService
+ might have it's own thread and it would be reasonable to call
+ ldap_unbind() from that thread).
+
+* currently nsILDAPOperation::SimpleBind is called as though it were
+ asynchronous (ie from the UI thread), which it mostly is -- the call
+ to connect() can stall. We could use the ASYNC_CONNECT flag, but it
+ seems to do weird stuff on Linux, and mcs says it isn't well tested
+ anyway. At the moment, my feeling is that fixing ASYNC_CONNECT is
+ probably the right thing to do, but the bind could actually be
+ pushed from nsILDAPOperation into nsILDAPConnection and then called
+ after the thread for the connection is spun up (waiting on help from
+ the LDAP SDK folks: bug 50074).
+
+misc
+----
+* verify that ldap_parse_result() and ldap_get_ldaperrno() aren't
+ required to be called from the same thread as ldap_result() and
+ before the thread-specific ldaperrno has a chance to change. Note:
+ now that ldap_parse_result is only called inside the initializer
+ nsLDAPMessage::Init(), this is probably no longer an issue there at
+ least. Need to confirm.
+
+* replace instances of (obsolete) |static NS_DEFINE_IID| variables
+ with direct calls to NS_GET_IID in the code.
+
+* investigate use of DNS in LDAP sdk. I think sync functions used in the
+ wrong places (eg they end up getting called from Mozilla on the UI thread)?
+
+* audit for and implement any appropriate NOT_IMPLEMENTED functions
+
+* re-read the IDL for interfaces implemented by nsLDAPChannel.cpp make sure
+ all interfaces are implemented correctly
+
+* implement progress info interfaces, if possible (% done)
+
+* investigate the MOZILLA_CLIENT define as used by the SDK. eg do we still
+ want the reference to "xp_sort.h"?
+
+* i18n / l10n (any text strings)
+
+* cachability of nsILDAPChannel content: browser cache? ldap_memcache? both?
+
+* use a rebind_proc?
+
+* HTMLize nsLDAPChannel output for linkification
+* the LDAP SDK returns UTF8, but I think nsILDAPChannel is handing it
+ off to callers as ASCII. How does this all relate to the stated
+ UCS2 policy in Mozilla?
+
+* all attributes are assumed to be strings right now. This probably
+ needs to change: assume all attributes are binary, use some
+ heuristic to figure out if they're a string. I wonder how
+ ldapsearch does this.
+
+* grep for XXXs and fix the issues
+
+rdf datasource
+--------------
+
+* revamp nsILDAPService (currently unused code) to manage LDAP
+ connections and allow for sharing connections between browser
+ clients. I think this should obviate the need to hold onto the
+ connection with a delegate factory.
+
+* non-anonymous binding (ie nsLDAPURL supports x-bind-name -- I
+ suspect this may come with the LDAP C SDK version after 4.1,
+ though.)
+
+testing
+-------
+* see how the browser copes when it does such a big search that the server
+ only returns partial results and an error.
+
+perf
+----
+* rather than having one thread per nsILDAPConnection, have multiple
+ nsILDAPConnections share the same thread. possibly pre-spin up a
+ thread-pool to handle this?
+
+* nsLDAPService: assuming that we do the above and start using
+ nsLDAPService again, need to implement shutdown for nsLDAPService
+ (probably analogous to the way nsSocketTransportService shuts down.
+ but how does nsIShutdownListener fit in here? and CanUnload?)
+
+* remove any unnecessary thread-safety code (NS_IMPL_THREADSAFE) to avoid
+ locking overhead. need to figure out if everything must be
+ threadsafe or not.
+
+later
+-----
+* rationalize the logging strategy. right now there is a mix of
+ PR_LOG/NS{WARNING|ERROR} and nsIConsoleService and non-logging,
+ as I have been vacillating on how much logging it's really important to have
+ (part of my thought process about the XPCOM-wrapper being part of
+ Mozilla-as-platform)
+* get rid of inappropriate use of nsVoidKey by implementing an nsPRInt32Key
+* handle referrals
+* failover
+* addressbook/mail UI glue
+* PSM certs from directory glue(?)
+* secure (& proxied/socksified?) ldap
+* make the LDAP C SDK autoconf glue not be a shim and not require
+ nsprpub build infrastructure. requires work with the LDAP C SDK
+ owners, and shouldn't this shouldn't happen until after the most
+ current ldap SDK code lands in mozilla.org anyway.
+* figure out our strategy for LDAPv2 vs. LDAPv3. right now, the code just
+ uses the C SDK's default of always advertising itself as LDAPv2.