Template Version: @(#)sac_nextcase 1.64 07/13/07 SMI
This information is Copyright 2008 Sun Microsystems
1. Introduction
    1.1. Project/Component Working Name:
         Native LDAP standalone tools (Duckwater)
    1.2. Name of Document Author/Supplier:
         Author:  Nicolas Williams
    1.3  Date of This Document:
        11 April, 2008
4. Technical Description

I'm sponsoring this fasttrack for Tomas Heran.  The timer is set to
expire on April 18, 2008.  The requested release binding is 'patch'.

Duckwater Standalone LDAP naming client utilities

BACKGROUND
==========

The Duckwater project (see PSARC/2007/694 and PSARC/2006/247) intends to
deliver simplified naming services configuration and management by
updating old tools, and introducing new tools and components that
leverage SMF to store naming configurations, and provide consistent
'SMF-like' cfg/adm interfaces for administrative use.

This case provides for separate delivery of a phase 0 sub-component of
the duckwater project that has no dependencies on SMF or other duckwater
enhancements that are planned for subsequent phases.  This separate
delivery is needed to address some high call generating CRs and improve
some serious approachability issues in LDAP setup and configuration
immediately.


PROBLEM
=======

There are four highly visible issues with LDAP naming services that
are documented/tracking by the following CRs:

4880322 TLSv1/SSL support needs to become integrated in all LDAP client
        programs
4942874 RFE: native ldap client with ssl restricted to ports 636/389
5035244 Make ldapaddent a standalone tool
6227396 *ldaplist* should refer to ldapclient(1M) when ldap not
        configured

These issues can be summarized as:

[1] Administrators are unable to upload naming data into directory
    server using ldapaddent(1M) unless the system running ldapaddent,
    has first been configured for LDAP naming.  This implies that the
    Initial state of the network repository must be empty, and the
    client using the repository must be configured to use the empty
    repository before the repository can be loaded with data from an
    existing repository (i.e., existing NIS data).

    ldaplist(1) has same limitation.  You can not query a repository
    to see if it has naming data unless your client is configured to
    use that naming data.  This is a serious administration design flaw
    and approachability issue in LDAP naming today.

[2] The tool used to initialize the client machine ldapclient(1M)
    has no provision to specify authentication credentials or
    credential type when initializing a client.  This forces all
    directory servers to support open (port 389 with no security)
    binds to the directory server to initialize clients.  Customers
    that want to secure a directory server to use only TLS/SSL
    for all access to the directory server are unable to do so.

[3] Related to [2], ldap_cachemgr(1M) currently requires anonymous
    (open port 389) non-TLS access to the RootDSE of any directory
    server even if other access is specified as TLS/SSL.
    
[4] Users wishing to use TLS/SSL are required to use port 636 (the
    default LDAP TLS/SSL port).  Even though LDAP servers typically
    allow other ports to be specified, the current implementation only
    supports port 636.

    [Note: The standard method for using TLS with LDAP ("StartTLS")
           is not supported by Solaris' libldap5.so.  More on this
           below.]


SOLUTION
========

To address problems [1] and [2], ldapclient(1M), ldapaddent(1M) and
ldaplist(1) will be updated to support a common set of command line
options that are both consistent amongst all three programs and also
consistent with the other LDAP tool interfaces delivered by the Solaris
and directory server product lines.  [I.e., the ldapsearch(1),
ldapadd(1), ldapdelete(1), ldapmodify(1), ldapmodrdn(1) command line
APIs].

The following command line options to be supported are:

     -h LDAP_server[:serverPort] An address (or a name) and a port
                                of the  LDAP server in  which the
                                entries   will  be   stored.  The
                                current naming  service specified
                                in  the   nsswitch.conf  file  is
                                used. The  default value  for the
                                port is  389, except when  TLS is
                                specified  in the  authentication
                                method. In this case, the default
                                LDAP server  port number  is 636.


     -M  domainName             The  name of  a domain  served by
                                the  specified   server.  If  not
                                specified,  the   default  domain
                                name will be used.  This is  used
                                to derive a base DN for searches.


     -N profileName             Specify  the  DUAProfile name.  A
                                profile  with  such   a  name  is
                                supposed to  exist on  the server
                                specified    by     -h    option.
                                Otherwise,  a default  DUAProfile
                                will be  used. The  default value
                                is default.


     -P certifPath              The  certificate   path  for  the
                                location   of   the   certificate
                                database. The  value is  the path
                                where  security   database  files
                                reside.  This  is  used  for  TLS
                                support,  which  is specified  in
                                the    authenticationMethod   and
                                serviceAuthen-     ticationMethod
                                attributes.   The    default   is
                                /var/ldap.

     -D bindDN                  Specifies an entry which has read
                                (and    write    in    case    of
                                ldapaddent(1M))   permission   to
                                appropriate  part   of  the  DIT.

     -w bind_password           Password    to   be    used   for
                                authenticating  the   bindDN.  If
                                this  parameter  is missing,  the
                                command   will   prompt   for   a
                                password. NULL  passwords are not
                                supported in LDAP.

                                When you use  -w bind_password to
                                specify the  password to  be used
                                for authentication,  the password
                                is visible to  other users of the
                                system   by  means   of  the   ps
                                command,  in script  files or  in
                                shell history.

                                If the  value of "-"  is supplied
                                as a  password, the  command will
                                prompt for a password.


     -j filename                Specify  a  file  containing  the
                                password for  the bind DN  or the
                                password for the SSL client's key
                                database.    To    protect    the
                                password,  use   this  option  in
                                scripts and place the password in
                                a  secure  file. This  option  is
                                mutually exclusive of the -w opt-
                                ion.

Man page diffs listing which of the commands ldaplist(1),
ldapaddent(1M) and ldapclient(1M) will receive which new command
line options are provided in the materials directory.

The interface stability level of ldapaddent(1M), ldaplist(1) and
ldapclient(1M) remain Committed.

In addition to modifying the command line tools, internal enhancements
will be made to the Contracted Consolidation Private private interfaces
in the libsldap library and in ldap_cachemgr(1M) to support the new
command line options of the modified tools and to address the problems
in [3] and [4].

Enhancements to libsldap will not affect existing contracted interfaces.
All new enhancements will be considered Contracted Consolidation
private. All existing contracts with libsldap will remain in effect.

The specific enhancements are provided in the revised libsldap API
document and provided in the case materials for reference.

Currently libldap.so.5, the default libldap in Solaris, lacks the
necessary ldap TLS APIs, that allow a TLS session to be enabled after a
unsecured LDAP connection has been made (START-TLS).

These APIs will be delivered when the current Mozilla libldap,
libldap.so.6, currently delivered by the directory server team
(Directory Server 6 [WSARC/2005/285] and later) is integrated into
Solaris, replacing libldap.so.5.

A future project will address this limitation once the new TLS APIs from
libldap.so.6 are available.


6. Resources and Schedule
    6.4. Steering Committee requested information
        6.4.1. Consolidation C-team Name:
                ONNV
    6.5. ARC review type: FastTrack
    6.6. ARC Exposure: open


Reply via email to