aboutsummaryrefslogtreecommitdiff
path: root/lib/krb5/krb5-plugin.cat7
diff options
context:
space:
mode:
Diffstat (limited to 'lib/krb5/krb5-plugin.cat7')
-rw-r--r--lib/krb5/krb5-plugin.cat7168
1 files changed, 168 insertions, 0 deletions
diff --git a/lib/krb5/krb5-plugin.cat7 b/lib/krb5/krb5-plugin.cat7
new file mode 100644
index 000000000000..6d8ac426ace7
--- /dev/null
+++ b/lib/krb5/krb5-plugin.cat7
@@ -0,0 +1,168 @@
+
+KRB5-PLUGIN(7) BSD Miscellaneous Information Manual KRB5-PLUGIN(7)
+
+NNAAMMEE
+ kkrrbb55--pplluuggiinn -- plugin interface for Heimdal
+
+SSYYNNOOPPSSIISS
+ ##iinncclluuddee <<kkrrbb55..hh>>
+ ##iinncclluuddee <<kkrrbb55//aann22llnn__pplluuggiinn..hh>>
+ ##iinncclluuddee <<kkrrbb55//ccccaacchhee__pplluuggiinn..hh>>
+ ##iinncclluuddee <<kkrrbb55//ddbb__pplluuggiinn..hh>>
+ ##iinncclluuddee <<kkrrbb55//kkuusseerrookk__pplluuggiinn..hh>>
+ ##iinncclluuddee <<kkrrbb55//llooccaattee__pplluuggiinn..hh>>
+ ##iinncclluuddee <<kkrrbb55//sseenndd__ttoo__kkddcc__pplluuggiinn..hh>>
+
+DDEESSCCRRIIPPTTIIOONN
+ Heimdal has a plugin interface. Plugins may be statically linked into
+ Heimdal and registered via the krb5_plugin_register(3) function, or they
+ may be dynamically loaded from shared objects present in the Heimdal
+ plugins directories.
+
+ Plugins consist of a C struct whose struct name is given in the associ-
+ ated header file, such as, for example, _k_r_b_5_p_l_u_g_i_n___k_u_s_e_r_o_k___f_t_a_b_l_e and a
+ pointer to which is either registered via krb5_plugin_register(3) or
+ found in a shared object via a symbol lookup for the symbol name defined
+ in the associated header file (e.g., "kuserok" for the plugin for
+ krb5_kuserok(3) ).
+
+ The plugin structs for all plugin types always begin with the same three
+ common fields:
+ 1. _m_i_n_o_r___v_e_r_s_i_o_n , an int. Plugin minor versions are defined in each
+ plugin type's associated header file.
+ 2. _i_n_i_t , a pointer to a function with two arguments, a krb5_context
+ and a void **, returning a krb5_error_code. This function will be
+ called to initialize a plugin-specific context in the form of a void
+ * that will be output through the init function's second argument.
+ 3. _f_i_n_i , a pointer to a function of one argument, a void *, consisting
+ of the plugin's context to be destroyed, and returning void.
+
+ Each plugin type must add zero or more fields to this struct following
+ the above three. Plugins are typically invoked in no particular order
+ until one succeeds or fails, or all return a special return value such as
+ KRB5_PLUGIN_NO_HANDLE to indicate that the plugin was not applicable.
+ Most plugin types obtain deterministic plugin behavior in spite of the
+ non-deterministic invocation order by, for example, invoking all plugins
+ for each "rule" and passing the rule to each plugin with the expectation
+ that just one plugin will match any given rule.
+
+ There is a database plugin system intended for many of the uses of data-
+ bases in Heimdal. The plugin is expected to call heim_db_register(3)
+ from its _i_n_i_t entry point to register a DB type. The DB plugin's _f_i_n_i
+ function must do nothing, and the plugin must not provide any other entry
+ points.
+
+ The krb5_kuserok plugin adds a single field to its struct: a pointer to a
+ function that implements kuserok functionality with the following form:
+
+ static krb5_error_code
+ kuserok(void *plug_ctx, krb5_context context, const char *rule,
+ unsigned int flags, const char *k5login_dir,
+ const char *luser, krb5_const_principal principal,
+ krb5_boolean *result)
+
+ The _l_u_s_e_r , _p_r_i_n_c_i_p_a_l and _r_e_s_u_l_t arguments are self-explanatory (see
+ krb5_kuserok(3) ). The _p_l_u_g___c_t_x argument is the context output by the
+ plugin's init function. The _r_u_l_e argument is a kuserok rule from the
+ krb5.conf file; each plugin is invoked once for each rule until all plug-
+ ins fail or one succeeds. The _k_5_l_o_g_i_n___d_i_r argument provides an alterna-
+ tive k5login file location, if not NULL. The _f_l_a_g_s argument indicates
+ whether the plugin may call krb5_aname_to_localname(3)
+ (KUSEROK_ANAME_TO_LNAME_OK), and whether k5login databases are expected
+ to be authoritative (KUSEROK_K5LOGIN_IS_AUTHORITATIVE).
+
+ The plugin for krb5_aname_to_localname(3) is named "an2ln" and has a sin-
+ gle extra field for the plugin struct:
+
+ typedef krb5_error_code (*set_result_f)(void *, const char *);
+
+ static krb5_error_code
+ an2ln(void *plug_ctx, krb5_context context, const char *rule,
+ krb5_const_principal aname, set_result_f set_res_f, void *set_res_ctx)
+
+ The arguments for the _a_n_2_l_n plugin are similar to those of the kuserok
+ plugin, but the result, being a string, is set by calling the _s_e_t___r_e_s___f
+ function argument with the _s_e_t___r_e_s___c_t_x and result string as arguments.
+ The _s_e_t___r_e_s___f function will make a copy of the string.
+
+FFIILLEESS
+ libdir/plugin/krb5/* Shared objects containing plugins for
+ Heimdal.
+
+EEXXAAMMPPLLEESS
+ An example an2ln plugin that maps principals to a constant "nouser" fol-
+ lows:
+
+ #include <krb5/an2ln_plugin.h>
+
+ static krb5_error_code
+ nouser_plug_init(krb5_context context, void **ctx)
+ {
+ *ctx = NULL;
+ return 0;
+ }
+
+ static void nouser_plug_fini(void *ctx) { }
+
+ static krb5_error_code
+ nouser_plug_an2ln(void *plug_ctx, krb5_context context,
+ const char *rule,
+ krb5_const_principal aname,
+ set_result_f set_res_f, void *set_res_ctx)
+ {
+ krb5_error_code ret;
+
+ if (strcmp(rule, "NOUSER") != 0)
+ return KRB5_PLUGIN_NO_HANDLE;
+
+ ret = set_res_f(set_res_ctx, "nouser");
+
+ return ret;
+ }
+
+ krb5plugin_an2ln_ftable an2ln = {
+ KRB5_PLUGIN_AN2LN_VERSION_0,
+ nouser_plug_init,
+ nouser_plug_fini,
+ nouser_plug_an2ln,
+ };
+
+ An example kuserok plugin that rejects all requests follows. (Note that
+ there exists a built-in plugin with this functionality; see
+ krb5_kuserok(3) ).
+
+ #include <krb5/kuserok_plugin.h>
+
+ static krb5_error_code
+ reject_plug_init(krb5_context context, void **ctx)
+ {
+ *ctx = NULL;
+ return 0;
+ }
+
+ static void reject_plug_fini(void *ctx) { }
+
+ static krb5_error_code
+ reject_plug_kuserok(void *plug_ctx, krb5_context context, const char *rule,
+ unsigned int flags, const char *k5login_dir,
+ const char *luser, krb5_const_principal principal,
+ krb5_boolean *result)
+ {
+ if (strcmp(rule, "REJECT") != 0)
+ return KRB5_PLUGIN_NO_HANDLE;
+
+ *result = FALSE;
+ return 0;
+ }
+
+ krb5plugin_kuserok_ftable kuserok = {
+ KRB5_PLUGIN_KUSEROK_VERSION_0,
+ reject_plug_init,
+ reject_plug_fini,
+ reject_plug_kuserok,
+ };
+
+SSEEEE AALLSSOO
+ krb5_plugin_register(3) krb5_kuserok(3) krb5_aname_to_localname(3)
+
+HEIMDAL December 21, 2011 HEIMDAL