/* * Copyright (c) 2005 Massachusetts Institute of Technology * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /* $Id$ */ /*! \page plugins NetIDMgr Modules and Plugins Plugins and localization are handled by the NetIDMgr Module Manager API. Each plugin consists of a dynamically loadable library and zero or more associated resource libraries. For more information about NetIDMgr Plugins, see the following sections: - \subpage pi_framework - \subpage pi_pt - \subpage pi_structure - \subpage pi_localization */ /*! \page pi_pt Plugin Types The types of plugins that are currently supported by NetIDMgr are : \section pi_pt_cred Credential Provider A credential provider plugin essentially acts as an interface between NetIDMgr 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 NetIDMgr 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 Once init_module() has completed, the module manager sends a <::KMSG_SYSTEM,::KMSG_SYSTEM_INIT> message to the message processor. For credential provider plugins, <::KMSG_SYSTEM,::KMSG_SYSTEM_INIT> is 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 plugin is assume to not be loaded and immediately unregistered. The message processor is automatically subscribed to the following message types: - ::KMSG_SYSTEM - ::KMSG_KCDB Although a plugin can use the <::KMSG_SYSTEM,::KMSG_SYSTEM_INIT> message enumerate existing credentials in the system, it should not obtain new credentials. This is because other plugins 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 plugin is to be removed, the module manager sends a <::KMSG_SYSTEM,::KMSG_SYSTEM_EXIT> to the message processor. The plugin must perform any necessary shutdown operations, free up resources and unsubscribe from any messages that it has subscribed to. This message is guaranteed to be the last message received by a credentials manager plugin if the plugin unsubsribes from all additional message classes that it subsribed to. The message types that the message processor is automatically subscribed to (See \ref pi_pt_cred_init) do not have to be unsubscribed from as they are automatically removed. \subsection pi_pt_cred_other Other Notes 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 */