From 3690f6c10df5a2d4c4087b73dba606548a3c51fd Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Wed, 18 Apr 2007 21:45:22 +0000 Subject: [PATCH] More NIM Developer documentation updates Revisions to the plug-in architecture documentation. Adds a graphic showing the plug-in architecture Defines "ALIASES" in the Makefile so that the current NIM API Version number will be used within the docs at build time. ticket: new git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@19490 dc483132-0cff-0310-8789-dd5450dbe970 --- src/windows/identity/doc/Makefile | 3 + .../doc/images/modules_plugins_krb5.png | Bin 0 -> 22193 bytes src/windows/identity/doc/plugin_framework.h | 132 ++++++++++++------ src/windows/identity/doc/plugin_main.h | 59 +++----- src/windows/identity/doc/plugin_structure.h | 10 +- 5 files changed, 124 insertions(+), 80 deletions(-) create mode 100644 src/windows/identity/doc/images/modules_plugins_krb5.png diff --git a/src/windows/identity/doc/Makefile b/src/windows/identity/doc/Makefile index 39b20a5aa..89380aff3 100644 --- a/src/windows/identity/doc/Makefile +++ b/src/windows/identity/doc/Makefile @@ -1,5 +1,6 @@ # # Copyright (c) 2004 Massachusetts Institute of Technology +# Copyright (c) 2007 Secure Endpoints Inc. # # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation files @@ -53,6 +54,8 @@ INPUT += "$(SRC)\kmm" INPUT += "$(SRC)\kherr" !ifdef BUILD_AFS INPUT += "$(SRC)\plugins\afs" + +ALIASES = "apiversion=$(NETIDMGR_VERSION_API)" !endif IMAGE_PATH = "$(SRC)\doc\images" diff --git a/src/windows/identity/doc/images/modules_plugins_krb5.png b/src/windows/identity/doc/images/modules_plugins_krb5.png new file mode 100644 index 0000000000000000000000000000000000000000..127e89e8dd10faf16b794cce9eb838040de06fab GIT binary patch literal 22193 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�gaH|V0V=9(eVw+ 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 literal 0 HcmV?d00001 diff --git a/src/windows/identity/doc/plugin_framework.h b/src/windows/identity/doc/plugin_framework.h index 39d6ac18f..a10af2a6f 100644 --- a/src/windows/identity/doc/plugin_framework.h +++ b/src/windows/identity/doc/plugin_framework.h @@ -28,75 +28,119 @@ /*! \page pi_framework Plug-in Framework -\section pi_fw_pnm Plug-ins and Modules +\section pi_fw_pnm Introduction to Plug-ins, Modules and Messages \subsection pi_fw_pnm_p Plug-ins -A Network Identity Manager plug-in is a package that implements a defined API that will -perform credentials management or related tasks on behalf of Network Identity Manager. -The core Network Identity Manager codebase does not interact directly with Kerberos v5 or -AFS or any other external entity directly. Instead, plug-ins are used. +A plug-in is a package that implements a defined API that will perform +credentials management or related tasks on behalf of Network Identity +Manager. -Each plug-in has a name. The name should be unique among the loaded -plug-ins, or the plug-in will fail to load. +The Network Identity Manager architecture is message based. The core +of each plug-in is a message handler. The plug-in integrates with the +application by subscribing to, and handling specific types of +messages. -The method in which Network Identity Manager communicates with a plug-in depends on the -plug-in type. For more information on each plug-in type, please refer -to \ref pi_pt. - -Most plug-in types rely on a message processor for communication. -During plug-in registration, the module specifies the message processor -for the plug-in, which acts as the only point of contact between the -Network Identity Manager core and the plug-in. Some other plug-ins require exporting -specific functions. +The plug-in message handler runs in its own thread and receive +asynchronous messages. There are exceptions, such as when one plug-in +requires another plug-in to handle a specific message before it can +handle the message. In addition, during certain operations that +require user interaction, each plug-in can delegate code that will run +in the main application thread (the user interface thread) to process +window messages. \subsection pi_fw_pnw_m Modules One or more plug-ins can be bundled together into a module. A module -is a dynamically loadable library which exports a specific -set of callbacks. Currently, the only two required callbacks for a -module are : +is a dynamically loadable library which exports a specific set of +callbacks. Currently, the only two required callbacks for a module +are : - init_module(), and - exit_module() -\section pi_fw_pm Plug-in/Module Manager +For more information about how a module is structured, see \ref +pi_structure . + +\subsection pi_fw_pnm_msg Messages and Message Queues + +An integral part of this framework is the messaging system. Most of +the communication between the Network Identity Manager application and +plug-ins is conducted through passing messages. + +A message has a type and subtype and is denoted in this documentation +as \< \e message_type, \e message_subtype\>. For example, when a +plug-in is loaded, the first message it receives is \< ::KMSG_SYSTEM, +::KMSG_SYSTEM_INIT \>. + +Each thread in the application, specially threads that were created +for individual plug-in messages handlers, has an associated message +queue that stores and manages all the messages that have been sent to +subscribers in that thread. + +The most common recipient of a message is a message callback function +(see ::kmq_callback_t ). The message handler for a plug-in is one such +example. A message callback function receives the message type, +subtype and two optional parameters for the message. + +Any acceptable recipient can subscribe to broadcast messages of any +type. Once subscribed, whenever a message of that type is broadcast, +the message will get queued on the corresponding message queue. Then, +one of the dispatch functions can dispatch the message to the correct +callback function. (see ::kmq_dispatch). + +Next \subpage pi_fw_pm ... -The plug-in manager maintains a separate thread for loading and -registering modules. When a module is successfully loaded and it +*/ + +/*! + +\page pi_fw_pm Module Manager + +The module manager is tasked with loading, unloading and managing the +plug-in message processing. It maintains a separate thread for loading +and registering modules. When a module is successfully loaded and it registers one or more plug-ins, a new thread is created for each plug-in. Plug-in specific initialization and other callback functions -are called from within this new thread. This is to prevent one plug-in -from "hanging" other plug-ins and the main Network Identity Manager -user interface threads. +are called from within this new thread. This is to prevent one +plug-in from "hanging" other plug-ins and the main Network Identity +Manager user interface threads. Read more : - \ref pi_structure \subsection pi_fw_pm_load Load sequence -When kmm_load_module() is called, the following sequence of events -occur: +When kmm_load_module() is called to load a specific module, the +following sequence of events occur: -- The standard system search path is used to locate the binary. +- The registration information for the module is located on the + registry key \c + \Software\MIT\NetIDMgr\PluginManager\Modules\[ModuleName]. -- The binary is loaded into the address space of Network Identity Manager along with - any dependencies not already loaded. +- The \c ImagePath value from the registration information is used to + locate the module binary. If it is not an absolute path, then the + binary is located using the standard system search path starting + from the directory in which Network Identity Manager binaries are + located. -- If the Network Identity Manager core binary is signed, then the signature is checked - against the system and user certificate stores. If this fails, the - module is unloaded. See \ref pi_fw_pm_unload. +- The binary is loaded into the address space of Network Identity + Manager along with any dependencies not already loaded. -- init_module() for the loaded module is called. If this function - returns an error or if no plug-ins are registered, then the module is - unloaded. See \ref pi_fw_pm_unload. +- If the Network Identity Manager core binary is signed, then the + signature is checked against the system and user certificate stores. + If this fails, the module is unloaded. See \ref pi_fw_pm_unload. + +- The init_module() entry point for the loaded module is called. If + this function returns an error or if no plug-ins are registered, + then the module is immediately unloaded. See \ref pi_fw_pm_unload. - During processing of init_module(), if any localized resource libraries are specified using kmm_set_locale_info(), then one of the localized libraries will be loaded. See \ref pi_localization - During processing of init_module(), the module registers all the - plug-ins that it is implementing by calling kmm_register_plug-in() for + plug-ins that it is implementing by calling kmm_register_plugin() for each. - Once init_module() returns, each plug-in is initialized. The method @@ -111,23 +155,29 @@ occur: - During normal operation, any registered plug-ins for a module can be unloaded explicitly, or the plug-in itself may signal that it should be unloaded. If at anytime, all the plug-ins for the module are - unloaded, then the module itself is also unloaded unless the NoUnload - registry value is set in the module key. + unloaded, then the module itself is also unloaded unless the \c + NoUnload registry value is set in the module key. \subsection pi_fw_pm_unload Unload sequence - For each of the plug-ins that are registered for a module, the exit code is invoked. The method by which this happens depends on the - plug-in type. The plug-in is not given a chance to object to the + plug-in type. The plug-in is not given a chance to veto the decision to unload. Each plug-in is responsible for performing cleanup tasks, freeing resources and unsubscribing from any message classes that it has subscribed to. -- exit_module() is called for the module. +- The exit_module() entry point is called for the module. - If any localized resource libraries were loaded for the module, they are unloaded. - The module is unloaded. +The following diagram illustrates the relationship between modules and +plug-ins as implemented in the Kerberos 5 plug-in distributed with +Network Identity Manager. + +\image html modules_plugins_krb5.png + */ diff --git a/src/windows/identity/doc/plugin_main.h b/src/windows/identity/doc/plugin_main.h index feb4a25d3..70040b285 100644 --- a/src/windows/identity/doc/plugin_main.h +++ b/src/windows/identity/doc/plugin_main.h @@ -29,38 +29,42 @@ \page plug-ins Network Identity Manager Modules and Plug-ins -Plug-ins and localization are handled by the Network Identity Manager Module Manager -API. Each plug-in consists of a dynamically loadable library and zero -or more associated resource libraries. + The Network Identity Manager application does not include any + ability to manage any specific type of credential. Instead it + exposes a framework on which plug-ins can be implemented to manage + credentials. -For more information about Network Identity Manager Plug-ins, see the following -sections: + Plug-ins and localization are handled by the Network Identity + Manager Module Manager API. -- \subpage pi_framework -- \subpage pi_pt -- \subpage pi_structure -- \subpage pi_localization + The following sections describe plug-ins in detail: + + - \subpage pi_framework + - \subpage pi_pt + - \subpage pi_structure + - \subpage pi_localization */ /*! \page pi_pt Plug-in Types -The types of plug-ins that are currently supported by Network Identity Manager are : +The types of plug-ins that are currently supported by Network Identity +Manager are : \section pi_pt_cred Credential Provider A credential provider plug-in essentially acts as an interface between -Network Identity Manager and some entity which defines the credentials for the purpose -of managing those credentials. +Network Identity Manager and some entity which defines the credentials +for the purpose of managing those credentials. There can be more than one credential provider in a module. \subsection pi_pt_cred_comm Communication -Communication between Network Identity Manager and a credential provider occurs -through a message processor. When registering a credential provider, -the module initialization code in init_module() specifies -::KHM_PITYPE_CRED as the \a type member and sets \a msg_proc member to -a valid message processor in the ::khm_plug-in record. +Communication between Network Identity Manager and a credential +provider occurs through a message processor. When registering a +credential provider, the module initialization code in init_module() +specifies ::KHM_PITYPE_CRED as the \a type member and sets \a msg_proc +member to a valid message processor in the ::khm_plugin record. \subsection pi_pt_cred_init Initialization @@ -72,8 +76,8 @@ guaranteed to be the first message it receives. The callback function should return KHM_ERROR_SUCCESS if it initializes properly or some other value otherwise. If the return -value signals an error, then the plug-in is assume to not be loaded and -immediately unregistered. +value signals an error, then the plug-in is assumed to have failed +initialization and is immediately unloaded. The message processor is automatically subscribed to the following message types: @@ -86,7 +90,6 @@ obtain new credentials. This is because other plug-ins that may depend on the new credential messages may not be loaded at this time. See the section on \ref cred_msgs for more information. - \subsection pi_pt_cred_exit Uninitialization When the plug-in is to be removed, the module manager sends a @@ -107,22 +110,6 @@ unsubscribed from as they are automatically removed. Since credential managers may receive privileged information, the signature requirements for credential managers are specially strict. -\section pi_pt_conf Configuration Provider - -Provides configuration information. -[TODO: fill in] - -\subsection pi_pt_conf_comm Communication -[TODO: fill in] - -\subsection pi_pt_conf_init Initialization -[TODO: fill in] - -\subsection pi_pt_conf_exit Uninitialization -[TODO: fill in] - -\subsection pi_pt_conf_other Other Notes - */ diff --git a/src/windows/identity/doc/plugin_structure.h b/src/windows/identity/doc/plugin_structure.h index c82af7b69..452029e4f 100644 --- a/src/windows/identity/doc/plugin_structure.h +++ b/src/windows/identity/doc/plugin_structure.h @@ -29,9 +29,13 @@ \page pi_structure Structure of a module -A Network Identity Manager module is a dynamically loadable library with a -specific set of exported symbols. Each export symbol and general -notes about writing a plug-in module are documented below. +A Network Identity Manager module is a dynamically loadable library +with a specific set of exported symbols. Each export symbol and +general notes about writing a plug-in module are documented below. + +\section pi_str_reg Registration and Version Information + +[TODO] \section pi_str_init Initialization -- 2.26.2