// ===================================================================
// Title:       User-Security Identity
// Filename:    User28_Identity.mof
// Version:     2.8
// Release:     Final
// Date:        Jan 26, 2004
// ===================================================================
// Copyright 2003-2004 Distributed Management Task Force, Inc. (DMTF).
// All rights reserved.
// DMTF is a not-for-profit association of industry members dedicated
// to promoting enterprise and systems management and interoperability.
// DMTF specifications and documents may be reproduced for uses
// consistent with this purpose by members and non-members,
// provided that correct attribution is given.
// As DMTF specifications may be revised from time to time,
// the particular version and release date should always be noted.
// 
// Implementation of certain elements of this standard or proposed
// standard may be subject to third party patent rights, including
// provisional patent rights (herein "patent rights"). DMTF makes
// no representations to users of the standard as to the existence
// of such rights, and is not responsible to recognize, disclose, or
// identify any or all such third party patent right, owners or
// claimants, nor for any incomplete or inaccurate identification or
// disclosure of such rights, owners or claimants. DMTF shall have no
// liability to any party, in any manner or circumstance, under any
// legal theory whatsoever, for failure to recognize, disclose, or
// identify any such third party patent rights, or for such party's
// reliance on the standard or incorporation thereof in its product,
// protocols or testing procedures. DMTF shall have no liability to
// any party implementing such standard, whether such implementation
// is foreseeable or not, nor to any patent owner or claimant, and shall
// have no liability or responsibility for costs or losses incurred if
// a standard is withdrawn or modified after publication, and shall be
// indemnified and held harmless by any party implementing the
// standard from any and all claims of infringement by a patent owner
// for such implementations.
// 
// For information about patents held by third-parties which have
// notified the DMTF that, in their opinion, such patent may relate to
// or impact implementations of DMTF standards, visit
// http://www.dmtf.org/about/policies/disclosures.php.
// ===================================================================
// Description: The User Model extends the management concepts that
//              are related to users and security.
//              This file defines the concepts and classes related to
//              Identities.
// 
//              The object classes below are listed in an order that
//              avoids forward references. Required objects, defined
//              by other working groups, are omitted.
// ===================================================================
// Change Log for v2.8 Final
//  CR1218 - Clarified the Identity Description, added the
//  IdentityContext
//           association, removed the property IdentityContexts in lieu
//           of the association, promoted Experimental classes to Final
//  CR1221 - Identity class also promoted to Final
//  CR1235 - Corrected copyright
// 
// Change Log for v2.8 Preliminary
//  CR1011 - Added Identity and Privilege; Deprecated UsersAccess and
//           AccessControlInformation and their related classes
//  CR1026 - Extended Identity with an IPNetworkIdentity subclass
// ===================================================================

#pragma Locale ("en_US")


// ==================================================================
// Identity
// ==================================================================
   [Version ( "2.8.0" ), Description (
       "An instance of an Identity represents a ManagedElement that "
       "acts as a security principal within the scope in which it is "
       "defined and authenticated. (Note that the Identity's scope is "
       "specified using the association, CIM_IdentityContext.) "
       "ManagedElements with Identities can be OrganizationalEntities, "
       "Services, Systems, etc. The ManagedElement 'behind' an "
       "Identity is described using the AssignedIdentity association. "
       "\n\n"
       "Within a given security context, an Identity may be imparted a "
       "level of trust, usually based on its credentials. A trust "
       "level is defined using the CIM_SecuritySensitivity class, and "
       "associated with Identity using CIM_ElementSecuritySensitivity. "
       "Whether an Identity is currently authenticated is evaluated by "
       "checking the CurrentlyAuthenticated boolean property. This "
       "property is set and cleared by the security infrastructure, "
       "and should only be readable within the management "
       "infrastructure. The conditions which must be met/authenticated "
       "in order for an Identity's CurrentlyAuthenticated Boolean to "
       "be TRUE are defined using a subclass of PolicyCondition - "
       "AuthenticationCondition. The inheritance tree for "
       "AuthenticationCondition is defined in the CIM Policy Model. \n"
       "\n"
       "Subclasses of Identity may include specific information "
       "related to a given AuthenticationService or authority (such as "
       "a security token or computer hardware port/communication "
       "details) that more specifically determine the authenticity of "
       "the Identity. An instance of Identity may be persisted even "
       "though it is not CurrentlyAuthenticated, in order to maintain "
       "static relationships to Roles, associations to accounting "
       "information, and policy data defining authentication "
       "requirements. Note however, when an Identity is not "
       "authenticated (CurrentlyAuthenticated = FALSE), then "
       "Privileges or rights SHOULD NOT be authorized. The lifetime, "
       "validity, and propagation of the Identity is dependent on a "
       "security infrastructure's policies.")]
class CIM_Identity : CIM_ManagedElement {

      [Key, Description (
          "Within the scope of the instantiating Namespace, InstanceID "
          "opaquely and uniquely identifies an instance of this class. "
          "In order to ensure uniqueness within the NameSpace, the "
          "value of InstanceID SHOULD be constructed using the "
          "following 'preferred' algorithm: \n"
          "<OrgID>:<LocalID> \n"
          "Where <OrgID> and <LocalID> are separated by a colon ':', "
          "and where <OrgID> MUST include a copyrighted, trademarked "
          "or otherwise unique name that is owned by the business "
          "entity creating/defining the InstanceID, or is a registered "
          "ID that is assigned to the business entity by a recognized "
          "global authority. (This is similar to the <Schema "
          "Name>_<Class Name> structure of Schema class names.) In "
          "addition, to ensure uniqueness <OrgID> MUST NOT contain a "
          "colon (':'). When using this algorithm, the first colon to "
          "appear in InstanceID MUST appear between <OrgID> and "
          "<LocalID>. \n"
          "<LocalID> is chosen by the business entity and SHOULD not "
          "be re-used to identify different underlying (real-world) "
          "elements. If the above 'preferred' algorithm is not used, "
          "the defining entity MUST assure that the resultant "
          "InstanceID is not re-used across any InstanceIDs produced "
          "by this or other providers for this instance's NameSpace. \n"
          "For DMTF defined instances, the 'preferred' algorithm MUST "
          "be used with the <OrgID> set to 'CIM'.")]
   string InstanceID;

      [Description (
          "Boolean indicating whether this Identity has been "
          "authenticated, and is currently known within the scope of "
          "an AuthenticationService or authority. By default, "
          "authenticity SHOULD NOT be assumed. This property is set "
          "and cleared by the security infrastructure, and should only "
          "be readable within the management infrastructure. Note that "
          "its value, alone, may not be sufficient to determine "
          "authentication/ authorization, in that properties of an "
          "Identity subclass (such as a security token or computer "
          "hardware port/ communication details) may be required by "
          "the security infrastructure.")]
   boolean CurrentlyAuthenticated = FALSE;
};


// ===================================================================
// IdentityContext
// ===================================================================
   [Association, Version ( "2.8.0" ), Description (
       "This relationship defines the context (for example, a System "
       "Service) of an Identity.")]
class CIM_IdentityContext {

      [Key, Description (
          "An Identity whose context is defined.")]
   CIM_Identity REF ElementInContext;

      [Key, Description (
          "The ManagedElement that provides context or scope for the "
          "Identity.")]
   CIM_ManagedElement REF ElementProvidingContext;
};


// ===================================================================
// AssignedIdentity
// ===================================================================
   [Association, Version ( "2.8.0" ), Description (
       "This relationship associates an Identity to a specific "
       "ManagedElement, whose trust is represented.")]
class CIM_AssignedIdentity {

      [Key, Description (
          "An Identity of the referenced ManagedElement.")]
   CIM_Identity REF IdentityInfo;

      [Key, Max ( 1 ), Description (
          "The ManagedElement assigned to a specific Identity.")]
   CIM_ManagedElement REF ManagedElement;
};


// ==================================================================
// IPNetworkIdentity
// ==================================================================
   [Version ( "2.8.0" ), Description (
       "IPNetworkIdentity is used to represent the various network "
       "identities that may be used for an IPProtocolEndpoint. The "
       "relationship between the NetworkIdentity and the "
       "IPProtocolEndpoint is modeled by the AssignedIdentity "
       "association, inherited from CIM_Identity. This association "
       "could also be used to relate an address range or other "
       "endpoint collection with the Identity."), 
    MappingStrings { "IPSP Policy Model.IETF|IKEIdentity" }]
class CIM_IPNetworkIdentity : CIM_Identity {

      [Required, Description (
          "The IdentityType specifies the type of IP network Identity. "
          "The list of identities was generated from Section 4.6.2.1 "
          "of RFC2407. Note that the enumeration is different than the "
          "RFC list, since the value 'Other' is taken into account."), 
       ValueMap { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
          "11", "12", "..", "0x8000.." }, 
       Values { "Other", "IPV4 Address", "FQDN", "User FQDN",
          "IPV4 Subnet Address", "IPV6 Address", "IPV6 Subnet Address",
          "IPV4 Address Range", "IPV6 Address Range", "DER ASN1 DN",
          "DER ASN1 GN", "KEY ID", "DMTF Reserved", "Vendor Reserved" }, 
       MappingStrings { "IPSP Policy " 
          "Model.IETF|IKEIdentity.IdentityType",
          "RFC2407.IETF|Section 4.6.2.1" }, 
       ModelCorrespondence { "CIM_IPNetworkIdentity.IdentityValue" }]
   uint16 IdentityType;

      [Required, Description (
          "IdentityValue contains a string encoding of the Identity. "
          "For Identity instances that are address types, the "
          "IdentityValue string value may be omitted and the "
          "associated IPProtocolEndpoint, RangeOfIPAddresses or "
          "similar class is used to define this information. The class "
          "is associated using the AssignedIdentity relationship."), 
       MappingStrings { "IPSP Policy " 
          "Model.IETF|IKEIdentity.IdentityValue" }, 
       ModelCorrespondence { "CIM_IPNetworkIdentity.IdentityType" }]
   string IdentityValue;
};


// ===================================================================
// end of file
// ===================================================================
