krb5 commit: Document GSSAPI name type behavior

Greg Hudson ghudson at MIT.EDU
Mon Jul 2 02:24:59 EDT 2012


https://github.com/krb5/krb5/commit/68092d23093c646c03ccfefc07f8ae8984b32ba2
commit 68092d23093c646c03ccfefc07f8ae8984b32ba2
Author: Greg Hudson <ghudson at mit.edu>
Date:   Fri Jun 29 21:45:26 2012 -0400

    Document GSSAPI name type behavior
    
    Separate out the general interpretation of GSSAPI name types by the
    krb5 mechanism from the specific behavior of host-based and principal
    name types when used as acceptor names.

 doc/rst_source/krb_appldev/gssapi.rst |   83 +++++++++++++++++++++++---------
 1 files changed, 59 insertions(+), 24 deletions(-)

diff --git a/doc/rst_source/krb_appldev/gssapi.rst b/doc/rst_source/krb_appldev/gssapi.rst
index f96d60d..4556c14 100644
--- a/doc/rst_source/krb_appldev/gssapi.rst
+++ b/doc/rst_source/krb_appldev/gssapi.rst
@@ -13,13 +13,54 @@ behave with the krb5 mechanism as implemented in MIT krb5, as well as
 krb5-specific extensions to the GSSAPI.
 
 
+Name types
+----------
+
+A GSSAPI application can name a local or remote entity by calling
+gss_import_name_, specifying a name type and a value.  The following
+name types are supported by the krb5 mechanism:
+
+* **GSS_C_NT_HOSTBASED_SERVICE**: The value should be a string of the
+  form ``service`` or ``service at hostname``.  This is the most common
+  way to name target services when initiating a security context, and
+  is the most likely name type to work across multiple mechanisms.
+
+* **GSS_KRB5_NT_PRINCIPAL_NAME**: The value should be a principal name
+  string.  This name type only works with the krb5 mechanism, and is
+  defined in the ``<gssapi_krb5.h>`` header.
+
+* **GSS_C_NT_USER_NAME** or **GSS_C_NULL_OID**: The value is treated
+  as an unparsed principal name string, as above.  These name types
+  may work with mechanisms other than krb5, but will have different
+  interpretations in those mechanisms.  **GSS_C_NT_USER_NAME** is
+  intended to be used with a local username, which will parse into a
+  single-component principal in the default realm.
+
+* **GSS_C_NT_ANONYMOUS**: The value is ignored.  The anonymous
+  principal is used, allowing a client to authenticate to a server
+  without asserting a particular identity (which may or may not be
+  allowed by a particular server or Kerberos realm).
+
+* **GSS_C_NT_MACHINE_UID_NAME**: The value is uid_t object.  On
+  Unix-like systems, the username of the uid is looked up in the
+  system user database and the resulting username is parsed as a
+  principal name.
+
+* **GSS_C_NT_STRING_UID_NAME**: As above, but the value is a decimal
+  string representation of the uid.
+
+* **GSS_C_NT_EXPORT_NAME**: The value must be the result of a
+  gss_export_name_ call.
+
+
 Acceptor names
 --------------
 
-A GSSAPI server uses gss_accept_sec_context_ to establish a security
-context based on tokens provided by the client.  The
-*acceptor_cred_handle* parameter determines what keytab entries may be
-authenticated to by the client, if the krb5 mechanism is used.
+A GSSAPI server application uses gss_accept_sec_context_ to establish
+a security context based on tokens provided by the client.  The
+*acceptor_cred_handle* parameter determines what
+:ref:`keytab_definition` entries may be authenticated to by the
+client, if the krb5 mechanism is used.
 
 The simplest choice is to pass **GSS_C_NO_CREDENTIAL** as the acceptor
 credential.  In this case, clients may authenticate to any service
@@ -30,22 +71,19 @@ contrary.
 
 A server may acquire an acceptor credential with gss_acquire_cred_ and
 a *cred_usage* of **GSS_C_ACCEPT** or **GSS_C_BOTH**.  If the
-*desired_name* parameter is **GSS_C_NO_NAME**, clients, as above, be
+*desired_name* parameter is **GSS_C_NO_NAME**, then clients will be
 allowed to authenticate to any service principal in the default
-keytab.
+keytab, just as if no acceptor credential was supplied.
 
 If a server wishes to specify a *desired_name* to gss_acquire_cred_,
-the most common method is to call gss_import_name_ with an
-*input_name_type* of **GSS_C_NT_HOSTBASED_SERVCE** and an
-*input_name_buffer* containing a string of the form ``service`` or
-``service at hostname``.  If the input name contains just a *service*,
-then clients will be allowed to authenticate to any host-based service
-principal (that is, a principal of the form
-``service/hostname at REALM``) for the named service, regardless of
-hostname or realm, as long as it is present in the default keytab.  If
-the input name contains both a *service* and a *hostname*, clients
-will be allowed to authenticate to any host-based principal for the
-named service and hostname, regardless of realm.
+the most common choice is a host-based name.  If the host-based
+*desired_name* contains just a *service*, then clients will be allowed
+to authenticate to any host-based service principal (that is, a
+principal of the form ``service/hostname at REALM``) for the named
+service, regardless of hostname or realm, as long as it is present in
+the default keytab.  If the input name contains both a *service* and a
+*hostname*, clients will be allowed to authenticate to any host-based
+principal for the named service and hostname, regardless of realm.
 
 .. note:: If a *hostname* is specified, it will be canonicalized
           using forward name resolution, and possibly also using
@@ -62,14 +100,11 @@ named service and hostname, regardless of realm.
           ``service at localhostname``, where *localhostname* is the
           string returned by gethostname().
 
-It is also possible to directly specify a service principal name using
-the *input_name_type* value **GSS_KRB5_NT_PRINCIPAL_NAME** (defined in
-``<gssapi_krb5.h>``), and an *input_name_buffer* containing an
-unparsed principal name.  Doing so will prevent the server application
-from working with mechanisms other than krb5.  If the a service
-principal name is specified, clients will only be allowed to
-authenticate to that principal in the default keytab.
+If the *desired_name* is a krb5 principal name or a local system name
+type which is mapped to a krb5 principal name, clients will only be
+allowed to authenticate to that principal in the default keytab.
 
 .. _gss_accept_sec_context: http://tools.ietf.org/html/rfc2744.html#section-5.1
 .. _gss_acquire_cred: http://tools.ietf.org/html/rfc2744.html#section-5.2
+.. _gss_export_name: http://tools.ietf.org/html/rfc2744.html#section-5.13
 .. _gss_import_name: http://tools.ietf.org/html/rfc2744.html#section-5.16


More information about the cvs-krb5 mailing list