Printer Services Mail Archive: PS> SMB Reference Info - SMB

PS> SMB Reference Info - SMB URL I-D

From: McDonald, Ira (imcdonald@sharplabs.com)
Date: Tue Aug 06 2002 - 15:35:21 EDT

  • Next message: McDonald, Ira: "PS> FW: IPP (Job/Doc) Object Attributes work-in-progress"

    Hi folks,

    Per today's PSI telecon question (from Kirk Ocke) about the content
    of an SMB reference, see "SMB Filesharing URL Scheme":

    ftp://ftp.ietf.org/internet-drafts/draft-crhertel-smb-url-03.txt

    Abstract

       The Server Message Block (SMB) protocol is one of the most widely
       used network filesystem protocols in existence. This document
       describes a format for an SMB Uniform Resource Locator. The SMB URL
       can be used to indicate SMB workgroups, servers, shares, files,
       inter-process communications pipes, print queues, and devices; the
       objects in the SMB network filesystem space.

    This is an excellent spec, with good references. That said, the
    complexities of an SMB reference (and how to resolve one for NetBIOS
    names to and from DNS names and IP addresses) are sufficient that
    I propose we (PSI) punt and just use URL forms for SMB references.

    Cheers,
    - Ira McDonald
      High North Inc

    -------------------------------------------------------------------
    [some excerpts]

    Table of Contents

    1. Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
       1.1. Purpose . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
    2. URL Definition. . . . . . . . . . . . . . . . . . . . . . . . . . . 4
       2.1 NBT Transport. . . . . . . . . . . . . . . . . . . . . . . . . 4
          2.1.1 nbt_name . . . . . . . . . . . . . . . . . . . . . . . . . 5
          2.1.2 ntdomain . . . . . . . . . . . . . . . . . . . . . . . . . 5
          2.1.3 nbt_context. . . . . . . . . . . . . . . . . . . . . . . . 5
       2.2. Relative SMB URLs. . . . . . . . . . . . . . . . . . . . . . . 6
       2.3. Fragments. . . . . . . . . . . . . . . . . . . . . . . . . . . 7
       2.4. Use of the 'port' Field. . . . . . . . . . . . . . . . . . . . 7
    3. Relationship Between the URL and the UNC Formats. . . . . . . . . . 7
    4. Authentication and Security Considerations. . . . . . . . . . . . . 7
    5. SMB URL Semantics . . . . . . . . . . . . . . . . . . . . . . . . . 8
    6. Character Encoding Issues . . . . . . . . . . . . . . . . . . . . . 9
    7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . 9
    8. References. . . . . . . . . . . . . . . . . . . . . . . . . . . . .10
    9. Author's Address. . . . . . . . . . . . . . . . . . . . . . . . . .10
    Appendix A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10

    1. Introduction

       The Server Message Block protocol (SMB) was created in the 1980's by
       Dr. Barry Feigenbaum at IBM Corporation. It was later extended by
       IBM, 3Com, Intel, and Microsoft. SMB is now also known by the name
       CIFS, which stands for Common Internet FileSystem.

       SMB was originally carried via a proprietary network transport, the
       interface to which was called NetBIOS (Network Basic Input Output
       System). Two Internet RFCs ([RFC1001], [RFC1002]) were published
       which describe a mechanism for implementing the NetBIOS API on top
       of TCP and UDP. Those RFCs are now known collectively as Internet
       Standard #19 (STD 19), and the protocol they describe is known as
       NBT (for NetBIOS over TCP).

       SMB is intended to be transport independent. In addition to
       transport via NBT, SMB may be carried directly on TCP/IP without the
       intervening NetBIOS emulation layer.

       Several attempts have been made to document and even standardize the
       SMB protocol ([XOPENSMB], [ONET], [SNIACIFS]), yet the further
       development of SMB remains under the control of Microsoft. Despite
       its proprietary nature, the workings of SMB are sufficiently well
       known that SMB filesharing has been successfully implemented by
       several third-party commercial vendors, and in Open Source. SMB
       server and client software is available for a wide variety of
       operating system platforms. The very large number of systems which
       support this form of filesharing make an SMB URL scheme both
       practical and desirable.

       1.1. Purpose

       This document does not attempt to describe the implementation of the
       SMB protocol itself. The goal is to present the syntax of the SMB
       URL, and explain how it maps to the features of SMB.

    2. URL Definition

       An SMB URL may begin with one of two protocol prefixes: "smb" or
       "cifs". Both are considered to be equivalent.

       The following grammar defines the syntax of the SMB URL. It is
       based upon the grammar given in Appendix A of [RFC2396], as amended
       by [RFC2732]. Refer to those RFCs for any token definitions missing
       from the grammar below.

          smb_URL = ( SMB_absURL | SMB_relURL ) [ "#" fragment ]
          smb_absURL = scheme "://"
                          [ smb_net_path ] [ "?" [ nbt_context ] ]
          smb_relURL = abs_path | rel_path
          scheme = "smb" | "cifs"

          smb_net_path = smb_server [ abs_path ]

          smb_server = [ smb_userinfo "@" ] smb_srv_name [ ":" port ]

          smb_srv_name = nbt_name | host
          nbt_name = netbiosname [ "." scope_id ]
          netbiosname = 1*( netbiosnamec ) *( netbiosnamec | "*" )
          netbiosnamec = ( alphanum | escaped | ":" | "=" | "+" | "$" |
                            "," | "-" | "_" | "!" | "~" | "'" | "(" | ")" )
          scope_id = domainlabel *( "." domainlabel )

          smb_userinfo = [ ntdomain ";" ] username [ ":" password ]
          ntdomain = *( unreserved | escaped |
                             "&" | "=" | "+" | "$" | "," )
          username = *( unreserved | escaped |
                             "&" | "=" | "+" | "$" | "," )
          password = *( unreserved | escaped |
                             "&" | "=" | "+" | "$" | "," )

          nbt_context = nbt_param *(";" nbt_param )

          nbt_param = ( ( "NBNS=" | "WINS=" ) host )
                          | ( "CALLED=" netbiosname )
                          | ( "CALLING=" netbiosname )
                          | ( ( "WORKGROUP=" | "NTDOMAIN=" ) nbt_name )



    This archive was generated by hypermail 2b29 : Tue Aug 06 2002 - 15:35:25 EDT