Including CURL with Solaris

Stefan Teleman <Stefan.Teleman at Sun.COM>
15 March 2007

1.      Summary and motivation

        The Internet has created the necessity for a standardized
        syntax format for accessing remote object references. In 1994,
        IETF published the URI [Uniform Resource Identifier] Specification
        [RFC 1630] [76], followed by the URN [Uniform Resource Name]
        Specification [RFC 1737] [77] and the URL [Uniform Resource Locator]
        Specification [RFC 1738] [16]. Since then, the terms URI, URL and
        URN have been used interchangeably.  While subtle distinctions
        between URI, URL and URN do exist, these differences have become,
        in practice, largely academic.

        This evolution has created the need for programmatic and userland
        facilities supporting remote object referencing and data transfers,
        compliant to the specifications outlined above.

        CURL [http://curl.haxx.se/] [1] provides such a collection of
        facilities in a portable and platform independent implementation.
        CURL is known to run on most UNIX platforms, as well as Windows.

        This FastTrack proposes the integration of CURL in Solaris.
        CURL is Open Source Software, and is developed and maintained
        outside of SMI. As such, the SFW Consolidation is the natural choice
        for Solaris integration.

        This case proposes the most recent stable release of CURL, 7.16.1.

        CURL stands for 'C-URL' [where 'C' refers to the C Programming
        Language]. For the purposes of this document, the terms CURL and
        LibCURL are semantically equivalent. The 'curl' executable is a
        wrapper around the LibCURL library [libcurl.so.3.0.0], and implements
        a command-line interface to the facilities provided by LibCURL.
        
        This case seeks Micro/Patch Release Binding.

2.      Technical issues

        2.1.    Key objects

        /usr/bin/curl
        /usr/bin/curl-config

        /usr/lib/libcurl.so.3.0.0
        /usr/lib/libcurl.so.3 -> /usr/lib/libcurl.so.3.0.0
        /usr/lib/libcurl.so -> /usr/lib/libcurl.so.3.0.0

        /usr/include/curl/curl.h
        /usr/include/curl/curlver.h
        /usr/include/curl/easy.h
        /usr/include/curl/mprintf.h
        /usr/include/curl/multi.h
        /usr/include/curl/stdcheaders.h
        /usr/include/curl/types.h

        /usr/share/man/man1/curl.1
        /usr/share/man/man1/curl-config.1

        /usr/share/man/man3/libcurl.3
        /usr/share/man/man3/curl_easy_cleanup.3
        /usr/share/man/man3/curl_easy_duphandle.3
        /usr/share/man/man3/curl_easy_escape.3
        /usr/share/man/man3/curl_easy_getinfo.3
        /usr/share/man/man3/curl_easy_init.3
        /usr/share/man/man3/curl_easy_perform.3
        /usr/share/man/man3/curl_easy_reset.3
        /usr/share/man/man3/curl_easy_setopt.3
        /usr/share/man/man3/curl_easy_strerror.3
        /usr/share/man/man3/curl_easy_unescape.3
        /usr/share/man/man3/curl_escape.3
        /usr/share/man/man3/curl_formadd.3
        /usr/share/man/man3/curl_formfree.3
        /usr/share/man/man3/curl_formget.3
        /usr/share/man/man3/curl_free.3
        /usr/share/man/man3/curl_getdate.3
        /usr/share/man/man3/curl_getenv.3
        /usr/share/man/man3/curl_global_cleanup.3
        /usr/share/man/man3/curl_global_init.3
        /usr/share/man/man3/curl_global_init_mem.3
        /usr/share/man/man3/curl_mprintf.3
        /usr/share/man/man3/curl_multi_add_handle.3
        /usr/share/man/man3/curl_multi_assign.3
        /usr/share/man/man3/curl_multi_cleanup.3
        /usr/share/man/man3/curl_multi_fdset.3
        /usr/share/man/man3/curl_multi_info_read.3
        /usr/share/man/man3/curl_multi_init.3
        /usr/share/man/man3/curl_multi_perform.3
        /usr/share/man/man3/curl_multi_remove_handle.3
        /usr/share/man/man3/curl_multi_setopt.3
        /usr/share/man/man3/curl_multi_socket.3
        /usr/share/man/man3/curl_multi_strerror.3
        /usr/share/man/man3/curl_multi_timeout.3
        /usr/share/man/man3/curl_share_cleanup.3
        /usr/share/man/man3/curl_share_init.3
        /usr/share/man/man3/curl_share_setopt.3
        /usr/share/man/man3/curl_share_strerror.3
        /usr/share/man/man3/curl_slist_append.3
        /usr/share/man/man3/curl_slist_free_all.3
        /usr/share/man/man3/curl_strequal.3
        /usr/share/man/man3/curl_unescape.3
        /usr/share/man/man3/curl_version.3
        /usr/share/man/man3/curl_version_info.3
        /usr/share/man/man3/libcurl-easy.3
        /usr/share/man/man3/libcurl-errors.3
        /usr/share/man/man3/libcurl-multi.3
        /usr/share/man/man3/libcurl-share.3
        /usr/share/man/man3/libcurl-tutorial.3

        /usr/share/doc/curl/index.html
        /usr/share/doc/curl/curl.html
        /usr/share/doc/curl/curl-config.html

        LibCURL's functionality is provided by one executable [curl], and
        one shared library [libcurl.so.3.0.0]. LibCURL implements a very
        large number of Internet-related protocols, authentication mechanisms,
        and data transfer facilities.  Key aspects of the specifications
        implemented, and facilities provided, by, LibCURL are listed below.

        CURL is largefile aware and is 64-bit clean. CURL is not thread-safe,
        and its functions are not reentrant. Calls to public functions within
        the LibCURL library, from different threads, must be serialized. The
        private LibCURL interfaces use static data structures [for internal
        consumption only].

        2.2.    Specifications

        LibCURL implements the following Specifications:

        NAME            DESCRIPTION                                     NOTES

        RFC 0822        Standard for ARPA Internet Text Messages        [8]
        RFC 0850        Standard for Interchange of USENET Messages     [9]
        RFC 0959        File Transfer Protocol [FTP]                    [10]
        RFC 1036        Standard for Interchange of USENET Messages     [11]
        RFC 1123        Requirements for Internet Hosts -- Application and 
Support      [12]
        RFC 1350        Trivial File Transfer Protocol [TFTP]           [13]
        RFC 1635        Anonymous FTP                                   [14]
        RFC 1639        FTP Operation Over Big Address Records [FOOBAR] [15]
        RFC 1738        Uniform Resource Locators [URL]                 [16]
        RFC 1777        Lightweight Directory Access Protocol [LDAP]    [17]
        RFC 1808        Relative Uniform Resource Locators              [18]
        RFC 1867        Form-based File Upload in HTML                  [19]
        RFC 1884        IPv6                                            [20]
        RFC 1928        SOCKS Protocol                                  [21]
        RFC 1945        HTTP/1.0                                        [22]
        RFC 1950        Z-LIB                                           [23]
        RFC 1951        DEFLATE                                         [24]
        RFC 1952        GZip                                            [25]
        RFC 1959        LDAP URL
        RFC 2045        MIME Part 1: Format of Internet Message Bodies  [26]
        RFC 2046        MIME Part 2: Media Types                        [27]
        RFC 2047        MIME Part 3: Message Header Extensions for Non-ASCII 
Text       [28]
        RFC 2048        MIME Part 4: Registration Procedures            [29]
        RFC 2049        MIME Part 5: Conformance Criteria and Examples  [30]
        RFC 2068        HTTP/1.1                                        [31]
        RFC 2109        HTTP Session and State Management               [32]
        RFC 2133        IPv6 Sockets                                    [33]
        RFC 2183        Content-Disposition Header                      [34]
        RFC 2184        MIME Parameter Value and Encoded Word Extensions        
[35]
        RFC 2228        FTP Security Extensions                         [36]
        RFC 2229        Dictionary Server Protocol                      [37]
        RFC 2231        MIME Parameter Value and Encoded Word Extensions        
[38]
        RFC 2246        TLS Protocol 1.0                                [39]
        RFC 2255        New LDAP URL                                    [40]
        RFC 2326        Real Time Streaming Protocol [RTSP]             [41]
        RFC 2373        IP Version 6 Addressing Architecture            [42]
        RFC 2388        Returning Values from Forms: multipart/form-data        
[43]
        RFC 2389        Feature negotiation mechanism for the File Transfer 
Protocol    [44]
        RFC 2396        Uniform Resource Identifiers [URI]: Generic Syntax      
[45]
        RFC 2428        FTP Extensions for IPv6 and NATs                [46]
        RFC 2459        Internet X.509 Public Key Infrastructure: Certificate 
and CRL Profile   [47]
        RFC 2518        HTTP Extensions for Distributed Authoring: WebDAV       
[48]
        RFC 2553        Basic Socket Interface Extensions for IPv6      [49]
        RFC 2577        FTP Security Considerations                     [50]
        RFC 2616        HTTP/1.1 [Obsoletes RFC 2068]                   [51]
        RFC 2617        HTTP Authentication: Basic and Digest Access 
Authentication     [52]
        RFC 2640        Internationalization of the File Transfer Protocol      
[53]
        RFC 2718        Guidelines for new URL Schemes                  [54]
        RFC 2732        Format for Literal IPv6 Addresses in URL's      [55]
        RFC 2817        Upgrading to TLS Within HTTP/1.1                [56]
        RFC 2818        HTTP Over TLS                                   [57]
        RFC 2854        The 'text/html' Media Type                      [58]
        RFC 2936        HTTP MIME Type Handler Detection                [59]
        RFC 2964        Use of HTTP State Management                    [60]
        RFC 2965        HTTP State Management Mechanism                 [61]
        RFC 3280        Internet X.509 Public Key Infrastructure        [62]
        RFC 3493        Basic Socket Interface Extensions for IPv6      [63]
        RFC 3513        Internet Protocol Version 6 [IPv6] Addressing 
Architecture      [64]
        RFC 3617        Uniform Resource Identifier [URI] Scheme and 
Applicability Statement 
for TFTP        [65]
        RFC 3986        Uniform Resource Identifier [URI]: Generic Syntax       
[66]
        RFC 4217        Securing FTP with TLS                           [67]
        RFC 4248        The telnet URI Scheme                           [68]
        RFC 4346        The Transport Layer Security [TLS] Protocol Version 1.1 
        [69]
        RFC 4366        Transport Layer Security [TLS] Extensions       [70]
        Cookie Spec     Persistent Client State - HTTP Cookies          [71]
        Draft SPNEGO    HTTP Authentication: SPNEGO Access Authentication As 
implemented 
in Microsoft Windows 2000       [72]
        Draft SecSH/SCP/SFTP/SSH/URI-04 Uniform Resource Identifier [URI] 
Scheme for 
Secure File Transfer Protocol [SFTP] and Secure Shell [SSH]     [73]
        Draft Web Proxy TCP Tunneling   Tunneling TCP based protocols through 
Web proxy 
servers         [74]
        NTLM            The NTLM Authentication Protocol                [75]

        2.3.    Language bindings

        CURL is written in C. No other language bindings are provided by
        the canonical distribution.

        2.4.    Documentation

        CURL provides an extensive and complete documentation set in UNIX
        manual format, as well as HTML. We propose that the full documentation
        set be included with the Solaris integration.

3.      Interfaces

        3.1.    Interface Stability

        CURL is an Open Source project, and its design, development and
        release schedule are external to SMI. CURL makes no implicit or
        explicit promises or guarantees of API or ABI compatibility
        between releases.

        3.2.    Imported interfaces

        In addition to the Standard C Library and Network Services Library
        Interfaces, CURL depends on, and imports interfaces, from:

        NAME                    NOTES

        OpenSSL                 PSARC/2003/500  [2]
        Z-Lib                   PSARC/2006/537  [3]
        LDAP [OpenLDAP]         PSARC/1997/276 et seq.  [4]
        Kerberos [MIT]          PSARC/1999/617 et seq.  [5]
        LibIDN                  PSARC/2007/000  [6]
        GNU TLS                 PSARC/2002/621  [7]

        The LDAP, Kerberos and GNU TLS bindings are optional. The OpenSSL,
        Z-Lib and LibIDN bindings are mandatory.

        3.3.    Exported interfaces

        NAME                    STABILITY               NOTES

        SUNWcurl                Uncommitted             Package name

        /usr/bin/curl           Uncommitted             Executable location
        /usr/bin/curl-config    Uncommitted             Shell script location

        /usr/lib/libcurl.so.3.0.0       Uncommitted     Library location
        /usr/lib/libcurl.so.3   Uncommitted             Symbolic link
        /usr/lib/libcurl.so     Uncommitted             Symbolic link

        /usr/include/curl/      Uncommitted             Include files
        
4.      References

        [1]     http://curl.haxx.se/
        [2]     http://www.openssl.org/
        [3]     http://www.gzip.org/zlib/
        [4]     http://www.openldap.org/
        [5]     http://web.mit.edu/kerberos/dist/index.html
        [6]     http://www.gnu.org/software/libidn/
        [7]     http://www.gnu.org/software/gnutls/
        [8]     http://www.ietf.org/rfc/rfc0822.txt
        [9]     http://www.ietf.org/rfc/rfc0850.txt
        [10]    http://www.ietf.org/rfc/rfc0959.txt
        [11]    http://www.ietf.org/rfc/rfc1036.txt
        [12]    http://www.ietf.org/rfc/rfc1123.txt
        [13]    http://www.ietf.org/rfc/rfc1350.txt
        [14]    http://www.ietf.org/rfc/rfc1635.txt
        [15]    http://www.ietf.org/rfc/rfc1639.txt
        [16]    http://www.ietf.org/rfc/rfc1738.txt
        [17]    http://www.ietf.org/rfc/rfc1777.txt
        [18]    http://www.ietf.org/rfc/rfc1808.txt
        [19]    http://www.ietf.org/rfc/rfc1867.txt
        [20]    http://www.ietf.org/rfc/rfc1884.txt
        [21]    http://www.ietf.org/rfc/rfc1928.txt
        [22]    http://www.ietf.org/rfc/rfc1945.txt
        [23]    http://www.ietf.org/rfc/rfc1945.txt
        [24]    http://www.ietf.org/rfc/rfc1951.txt
        [25]    http://www.ietf.org/rfc/rfc1952.txt
        [26]    http://www.ietf.org/rfc/rfc1959.txt
        [27]    http://www.ietf.org/rfc/rfc2045.txt
        [28]    http://www.ietf.org/rfc/rfc2046.txt
        [29]    http://www.ietf.org/rfc/rfc2047.txt
        [30]    http://www.ietf.org/rfc/rfc2048.txt
        [31]    http://www.ietf.org/rfc/rfc2049.txt
        [32]    http://www.ietf.org/rfc/rfc2068.txt
        [33]    http://www.ietf.org/rfc/rfc2109.txt
        [34]    http://www.ietf.org/rfc/rfc2133.txt
        [35]    http://www.ietf.org/rfc/rfc2183.txt
        [36]    http://www.ietf.org/rfc/rfc2184.txt
        [37]    http://www.ietf.org/rfc/rfc2228.txt
        [38]    http://www.ietf.org/rfc/rfc2229.txt
        [39]    http://www.ietf.org/rfc/rfc2231.txt
        [40]    http://www.ietf.org/rfc/rfc2246.txt
        [41]    http://www.ietf.org/rfc/rfc2255.txt
        [41]    http://www.ietf.org/rfc/rfc2326.txt
        [42]    http://www.ietf.org/rfc/rfc2373.txt
        [43]    http://www.ietf.org/rfc/rfc2388.txt
        [44]    http://www.ietf.org/rfc/rfc2389.txt
        [45]    http://www.ietf.org/rfc/rfc2396.txt
        [46]    http://www.ietf.org/rfc/rfc2428.txt
        [47]    http://www.ietf.org/rfc/rfc2459.txt
        [48]    http://www.ietf.org/rfc/rfc2518.txt
        [49]    http://www.ietf.org/rfc/rfc2553.txt
        [50]    http://www.ietf.org/rfc/rfc2577.txt
        [51]    http://www.ietf.org/rfc/rfc2616.txt
        [52]    http://www.ietf.org/rfc/rfc2617.txt
        [53]    http://www.ietf.org/rfc/rfc2640.txt
        [54]    http://www.ietf.org/rfc/rfc2718.txt
        [55]    http://www.ietf.org/rfc/rfc2732.txt
        [56]    http://www.ietf.org/rfc/rfc2817.txt
        [57]    http://www.ietf.org/rfc/rfc2818.txt
        [58]    http://www.ietf.org/rfc/rfc2854.txt
        [59]    http://www.ietf.org/rfc/rfc2936.txt
        [60]    http://www.ietf.org/rfc/rfc2964.txt
        [61]    http://www.ietf.org/rfc/rfc2965.txt
        [62]    http://www.ietf.org/rfc/rfc3280.txt
        [63]    http://www.ietf.org/rfc/rfc3493.txt
        [64]    http://www.ietf.org/rfc/rfc3513.txt
        [65]    http://www.ietf.org/rfc/rfc3617.txt
        [66]    http://www.ietf.org/rfc/rfc3986.txt
        [67]    http://www.ietf.org/rfc/rfc4217.txt
        [68]    http://www.ietf.org/rfc/rfc4248.txt
        [69]    http://www.ietf.org/rfc/rfc4346.txt
        [70]    http://www.ietf.org/rfc/rfc4366.txt
        [71]    http://curl.haxx.se/rfc/cookie_spec.html
        [72]    http://curl.haxx.se/rfc/draft-brezak-spnego-http-04.txt
        [73]    http://curl.haxx.se/rfc/draft-ietf-secsh-scp-sftp-ssh-uri-04.txt
        [74]    
http://curl.haxx.se/rfc/draft-luotonen-web-proxy-tunneling-01.txt
        [75]    http://curl.haxx.se/rfc/ntlm.html
        [76]    http://tools.ietf.org/html/rfc1630
        [77]    http://www.ietf.org/rfc/rfc1737.txt


-- 
Stefan Teleman
Sun Microsystems, Inc.
Stefan.Teleman at Sun.COM


Reply via email to