krb5 commit: Rely on module ordering for localauth

Greg Hudson ghudson at MIT.EDU
Thu Jun 27 02:01:22 EDT 2013


https://github.com/krb5/krb5/commit/a6765ca3fa82fa9ac8045fb583d168c542b19585
commit a6765ca3fa82fa9ac8045fb583d168c542b19585
Author: Greg Hudson <ghudson at mit.edu>
Date:   Fri Jun 14 01:55:27 2013 -0400

    Rely on module ordering for localauth
    
    Register built-in localauth modules in the order we want them used by
    default, and document accordingly.
    
    ticket: 7665

 doc/admin/conf_files/krb5_conf.rst |   30 +++++++++++++++---------------
 doc/plugindev/localauth.rst        |    8 ++++----
 src/lib/krb5/os/localauth.c        |   31 ++++++-------------------------
 3 files changed, 25 insertions(+), 44 deletions(-)

diff --git a/doc/admin/conf_files/krb5_conf.rst b/doc/admin/conf_files/krb5_conf.rst
index 0fd3f2c..699628f 100644
--- a/doc/admin/conf_files/krb5_conf.rst
+++ b/doc/admin/conf_files/krb5_conf.rst
@@ -749,30 +749,30 @@ for the local authorization interface, which affects the relationship
 between Kerberos principals and local system accounts.  The following
 built-in modules exist for this interface:
 
-**auth_to_local**
-    This module processes **auth_to_local** values in the default
-    realm's section, and applies the default method if no
-    **auth_to_local** values exist.
-
-**an2ln**
-    This module authorizes a principal to a local account if the
-    principal name maps to the local account name.
-
 **default**
     This module implements the **DEFAULT** type for **auth_to_local**
     values.
 
-**k5login**
-    This module authorizes a principal to a local account according to
-    the account's :ref:`.k5login(5)` file.
+**rule**
+    This module implements the **RULE** type for **auth_to_local**
+    values.
 
 **names**
     This module looks for an **auth_to_local_names** mapping for the
     principal name.
 
-**rule**
-    This module implements the **RULE** type for **auth_to_local**
-    values.
+**auth_to_local**
+    This module processes **auth_to_local** values in the default
+    realm's section, and applies the default method if no
+    **auth_to_local** values exist.
+
+**k5login**
+    This module authorizes a principal to a local account according to
+    the account's :ref:`.k5login(5)` file.
+
+**an2ln**
+    This module authorizes a principal to a local account if the
+    principal name maps to the local account name.
 
 
 PKINIT options
diff --git a/doc/plugindev/localauth.rst b/doc/plugindev/localauth.rst
index 8a87f3e..6f396a9 100644
--- a/doc/plugindev/localauth.rst
+++ b/doc/plugindev/localauth.rst
@@ -33,10 +33,10 @@ residual string of the **auth_to_local** value.
 
 If the module does not set **an2ln_types** but does implement
 **an2ln**, the module's **an2ln** method will be invoked for all
-:c:func:`krb5_aname_to_localname` operations before the built-in
-mechanisms are applied, with *type* and *residual* set to NULL.  The
-module can return KRB5_LNAME_NO_TRANS to defer mapping to the built-in
-mechanisms.
+:c:func:`krb5_aname_to_localname` operations unless an earlier module
+determines a mapping, with *type* and *residual* set to NULL.  The
+module can return KRB5_LNAME_NO_TRANS to defer mapping to later
+modules.
 
 If a module implements **an2ln**, it must also implement
 **free_string** to ensure that memory is allocated and deallocated
diff --git a/src/lib/krb5/os/localauth.c b/src/lib/krb5/os/localauth.c
index e48b3a9..82fc1f9 100644
--- a/src/lib/krb5/os/localauth.c
+++ b/src/lib/krb5/os/localauth.c
@@ -100,18 +100,6 @@ check_conflict(krb5_context context, struct localauth_module_handle **list,
     return 0;
 }
 
-/* If mod is in list, move it to the back. */
-static void
-move_to_back(krb5_plugin_initvt_fn *list, krb5_plugin_initvt_fn mod)
-{
-    for (; *list != NULL && *list != mod; list++);
-    if (*list == NULL)
-        return;
-    for (; *list != NULL; list++)
-        *list = *(list + 1);
-    *(list - 1) = mod;
-}
-
 /* Get the registered localauth modules including all built-in modules, in the
  * proper order. */
 static krb5_error_code
@@ -123,18 +111,18 @@ get_modules(krb5_context context, krb5_plugin_initvt_fn **modules_out)
     *modules_out = NULL;
 
     /* Register built-in modules. */
-    ret = k5_plugin_register(context, intf, "auth_to_local",
-                             localauth_auth_to_local_initvt);
+    ret = k5_plugin_register(context, intf, "default",
+                             localauth_default_initvt);
     if (ret)
         return ret;
-    ret = k5_plugin_register(context, intf, "names", localauth_names_initvt);
+    ret = k5_plugin_register(context, intf, "rule", localauth_rule_initvt);
     if (ret)
         return ret;
-    ret = k5_plugin_register(context, intf, "default",
-                             localauth_default_initvt);
+    ret = k5_plugin_register(context, intf, "names", localauth_names_initvt);
     if (ret)
         return ret;
-    ret = k5_plugin_register(context, intf, "rule", localauth_rule_initvt);
+    ret = k5_plugin_register(context, intf, "auth_to_local",
+                             localauth_auth_to_local_initvt);
     if (ret)
         return ret;
     ret = k5_plugin_register(context, intf, "k5login",
@@ -149,13 +137,6 @@ get_modules(krb5_context context, krb5_plugin_initvt_fn **modules_out)
     if (ret)
         return ret;
 
-    /* Move built-in userok and untyped an2ln localauth modules to back so we
-     * try loaded modules first. */
-    move_to_back(*modules_out, localauth_names_initvt);
-    move_to_back(*modules_out, localauth_auth_to_local_initvt);
-    move_to_back(*modules_out, localauth_k5login_initvt);
-    move_to_back(*modules_out, localauth_an2ln_initvt);
-
     return 0;
 }
 


More information about the cvs-krb5 mailing list