// ===================================================================
// Title:       Solaris User Schema mof specification 1.0
// Filename:    Solaris_Users1.0.mof
// Version:     1.0
// Author:      Sun Microsystems, Inc.
// Description: Solaris User schema.
// ===================================================================

#pragma Locale ("en_US")



    [Provider ("com.sun.wbem.solarisprovider.usermgr.auths.Solaris_AuthorizationAttribute"),
     Description("RBAC authorization right definition")
    ]
class Solaris_AuthorizationAttribute
{

    [propagated("CIM_System.CreationClassName"), 
     key, 
     Description("The scoping domain type from the weak assoication to an "
		 "instance of a Solaris_AdminDomain subclass, represented "
		 "as the subclass creation class name.")
    ]
    string SystemCreationClassName;

    [propagated("CIM_System.Name"), 
     key, 
     Description("The scoping domain name from the weak association to an "
		 "instance of a Solaris_AdminDomain subclass.")
    ]
    string SystemName;

    [read, 
     key, 
     Description("The authorization hierarchical name.")
    ]
    string authName;

    [read, 
     Description("The authorization short description.")
    ]
    string shortDesc;

    [read, 
     Description("The authorization long description.")
    ]
    string longDesc;

    [read, 
     Description("The RBAC security data in key/value format.")
    ]
    string SolarisAttrKeyValue;

    [Description("Method to return list of authorizations granted to a user.")]
    sint32 getUserAuths([IN] string userName, [OUT] string authNames[]);

};

    [Provider ("com.sun.wbem.solarisprovider.usermgr.execs.Solaris_ExecutionProfile"),
     Description("Execution profile Class definition.")
    ]
class Solaris_ExecutionProfile
{

    [propagated("CIM_System.CreationClassName"), 
     key, 
     Description("The scoping domain type from the weak assoication to an "
		 "instance of a Solaris_AdminDomain subclass, represented "
		 "as the subclass creation class name.")
    ]
    string SystemCreationClassName;

    [propagated("CIM_System.Name"), 
     key, 
     Description("The scoping domain name from the weak association to an "
		 "instance of a Solaris_AdminDomain subclass.")
    ]
    string SystemName;

    [key, 
     Description("The Profile name.")
    ]
    string ProfileName;

    [key, 
     Description("Policy associated with profile.")
    ]
    string PolicyName = "";

    [key, 
     Description("The type of exec attribute.")
    ]
    string Type = "";

    [key, 
     Description("The Id of exec attribute.")
    ]
    string ExecID = "";

    [read, 
     write, 
     Description("The RBAC security data in key/value format.")
    ]
    string SolarisAttrKeyValue = "";

    [Description("Method to return list of exec_attr entries. "
		"It takes a profileName, type and policy as input "
		"parameters and returns an array of exec_attr entries"
		" represented as strings.")
    ]
    sint32 bulkData(
    	[IN] string profileName,
	[IN] string type,
	[IN] string policy,
	[OUT] string exec_attrs[]
    );
};

    [Provider ("com.sun.wbem.solarisprovider.usermgr.groups.Solaris_UserGroup"),
     Description("Solaris User Group")
    ]
class Solaris_UserGroup
{
    [propagated("CIM_System.CreationClassName"), 
     key, 
     Description("The scoping domain type from the weak assoication to an "
		 "instance of a Solaris_AdminDomain subclass, represented "
		 "as the subclass creation class name.")
    ]
    string SystemCreationClassName;

    [propagated("CIM_System.Name"), 
     key, 
     Description("The scoping domain name from the weak association to an "
		 "instance of a Solaris_AdminDomain subclass.")
    ]
    string SystemName;

    [key, 
     Description("The Group name.")
    ]
    string GroupName;

    [key, 
     Description("The Group Id.")
    ]
    string GroupID = "";

    [Description("Operating System Type.")]
    string OSType = "";

    [Description("Group Password.")]
    string Password = "";

    [Description("The Id of exec attribute.")]
    string GroupMembers[] ;

    [Description("Method to return bulk group data.")]
    sint32 bulkData([IN] string filter, [OUT] string data[]);

    [Description("Method to return next available GID.")]
    sint32 getNextAvailableGID([OUT] string groupID);
};


    [Provider ("com.sun.wbem.solarisprovider.usermgr.profs.Solaris_ProfileAttribute")
    ]
class Solaris_ProfileAttribute
{

    [propagated("CIM_System.CreationClassName"), 
     key, 
     Description("The scoping domain type from the weak assoication to an "
		 "instance of a Solaris_AdminDomain subclass, represented "
		 "as the subclass creation class name.")
    ]
    string SystemCreationClassName;

    [propagated("CIM_System.Name"), 
     key, 
     Description("The scoping domain name from the weak association to an "
		 "instance of a Solaris_AdminDomain subclass.")
    ]
    string SystemName;

    [key, 
     Description("The Profile name.")
    ]
    string ProfileName;

    [Description("The Profile long description.")]
    string LongDescription = "Unknown";

    [read, 
     write, 
     Description("The RBAC security data in key/value format.")
    ]
    string SolarisAttrKeyValue = "";

    [Description("Method to return list of profiles granted to a user.")]
    sint32 getUserProfs([IN] string userName, 
			[IN] Boolean deep, 
			[OUT] string profNames[]);

    [Description("Method to return list of executables in a directory.")]
    sint32 getExecutables([IN] string dirPath, [OUT] string executables[]);
};

    [Provider ("com.sun.wbem.solarisprovider.usermgr.aliases.Solaris_EmailAlias")
    ]
class Solaris_EmailAlias
{

    [propagated("CIM_System.CreationClassName"), 
     key, 
     Description("The scoping domain type from the weak assoication to an "
		 "instance of a Solaris_AdminDomain subclass, represented "
		 "as the subclass creation class name.")
    ]
    string SystemCreationClassName;

    [propagated("CIM_System.Name"), 
     key, 
     Description("The scoping domain name from the weak association to an "
		 "instance of a Solaris_AdminDomain subclass.")
    ]
    string SystemName;

    [read, 
     key, 
     Description("The alias that is being acted on.")
    ]
    string aliasName;

    [read, 
     write, 
     Description("The list of aliases.")
    ]
    string aliasMembers;

    [Description("Method to return bulk email alias data.")]
    sint32 bulkData([IN] string filter, [OUT] string data[]);

};

    [Provider ("com.sun.wbem.solarisprovider.usermgr.homedir.Solaris_UserHomeDirectory")
    ]
class Solaris_UserHomeDirectory : CIM_Directory
{

    [read, 
     write, 
     Description("The users name to use as the home directory path.")
    ]
    string userName;

    [read, 
     write, 
     Description("The primary group.")
    ]
    string primaryGroup;

    [read, 
     write, 
     Description("The users id to use in creating the home directory path.")
    ]
    string uid;

    [read, 
     write, 
     Description("Flag indicating that initialization files should be copied "
		 "to the home directory.")
    ]
    boolean initFiles;

    [read, 
     write, 
     Description("The path to the files to copy to the user's home directory.")
    ]
    string initFilePath;

    [read, 
     write, 
     Description("Flag indicating that the home directory should be "
		 "auto mounted at user login.")
    ]
    boolean autoMountHomeDir;

    [read, 
     write, 
     Description("Flag indicating that the user name should be used "
		 "to form a unique home directory path name.")
    ]
    boolean useUserNameInPath;

    [read, 
     write, 
     Description("Flag indicating that the home directory path name "
		 "should be modified.")
    ]
    boolean homeDirForceModify;

    [read, 
     write, 
     Description("Flag indicating that the home directory server name "
		 "should be modified.")
    ]
    boolean homeDirAllowModifyServer;

    [read, 
     write, 
     Description("The Home directory owner permissions for creating files.")
    ]
    string ownerPerms;

    [read,
     write, 
     Description("The Home directory group permissions for creating files.")
    ]
    string groupPerms;

    [read, 
     write, 
     Description("The Home directory world permissions for creating files.")
    ]
    string worldPerms;

    [read, 
     write, 
     Description("Use this property to change the pathname of "
		 "an existing file during a setInstance call.")
    ]
    string newPathName;

    [read, 
     write, 
     Description("Script to run before adding the user's home directory.")
    ]
    string scriptBefore;

    [read, 
     write, 
     Description("Script to run after adding the user's home directory.")
    ]
    string scriptAfter;

};

    [Provider ("com.sun.wbem.solarisprovider.usermgr.users.Solaris_UserAccount"),
     Description (
     "Solaris_UserAccount is the information specifying a user identity "
     "which can be authenticated on a Solaris operating system by a unique "
     "username and password.  The username is unique within a management "
     "scope specified by the CIM_Account superclass properties "
     "SystemCreationClassName, which must be a subclass of Solaris_AdminDomain, "
     "and SystemName, which must be a Solaris host name or a name service "
     "domain name.  The Solaris login username is mapped to the Name property "
     "and the Solaris UID is mapped to the UserID property in CIM_Account. ")
    ]
class Solaris_UserAccount:CIM_Account
{

    // =================================================================
    // Properties from super class used for Solaris accounts:
    //
    //   SystemCreationClassName - Subclass of Solaris_AdminDomain to
    //                identify management domain type (key)
    //
    //   SystemName - Management domain name, either a system host name
    //                or a name service domain name (key)
    //
    //   CreationClassName - Always set to this class name (key)
    //
    //   Name       - Solaris user name (key)
    //
    //   UserID     - Solaris security identifier (same as Name)
    //
    // All other super class properties are not supported.
    // =================================================================

    [read, 
     write, 
     Description("The Account UID.")
    ]
    string userUID;

    [read, 
     write, 
     Description("The Account login password.")
    ]
    string loginPassword;

    [read, 
     write, 
     Description("The User's full name.")
    ]
    string fullName;

    [read, 
     write, 
     Description("The User's description.")
    ]
    string userDescr;

    [read, 
     write, 
     Description("The User's Type.  This may be a Role or a User type.")
    ]
    string userType;

    [read, 
     write, 
     Description("The User's Primary Group.")
    ]
    string primaryGroup;

    [read, 
     write, 
     Description("The User's secondary group membership(s).")
    ]
    string secondaryGroups[];

    [read, 
     write, 
     Description("The User Account Expiration Date.")
    ]
    datetime accountExpireDate;

    [read, 
     write, 
     Description("Flag indicating that the user account should be locked.")
    ]
    boolean isAccountLocked;

    [read, 
     write, 
     Description("The number of days the user has until they "
		 "must change their password.")
    ]
    string mustChangePasswdInDays;

    [read, 
     write, 
     Description("The number of days a user can not re-use a password.")
    ]
    string doNotReusePwdForDays;

    [read, 
     write, 
     Description("The number of days before a user's password expires "
		 "that they will start to receive warnings.")
    ]
    string warnBeforePwdExpiresDays;
	
    [read, 
     write, 
     Description("The number days a password can be inactive before "
   		 "it is automatically expired.")
    ]
    string pwdInactiveDays;

    [read, 
     write, 
     Description("Flag indicating the the user account login password "
		 "should be changed.")
    ]
    boolean changePasswd;

    [read, 
     write, 
     Description("Flag indicating that a new user account password "
		 "has been specified.")
    ]
    boolean hasPasswd;

    [read, 
     write, 
     Description("Used Internally.")
    ]
    boolean pwdForceModify;

    [read, 
     write, 
     Description("The Name of the Home Directory server.")
    ]
    string homeDirServer;

    [read, 
     write, 
     Description("The Home Directory path name.")
    ]
    string homeDirPathName;

    [read,  
     write, 
     Description("Flag indicating that the home directory should be "
		 "auto mounted at user login.")
    ]
    boolean autoMountHomeDir;

    [read, 
     write, 
     Description("Flag indicating that the home directory path name "
		 "should be modified.")
    ]
    boolean homeDirForceModify;

    [read, 
     write, 
     Description("Flag indicating that the home directory server name "
		 "should be modified.")
    ]
    boolean homeDirAllowModifyServer;

    [read, 
     write, 
     Description("The Home directory owner permissions for creating files.")
    ]
    string ownerPerms;

    [read, 
     write, 
     Description("The Home directory group permissions for creating files.")
    ]
    string groupPerms;

    [read, 
     write, 
     Description("The Home directory world permissions for creating files.")
    ]
    string worldPerms;

    [read, 
     write, 
     Description("The path to the files to copy to the user's home directory.")
    ]
    string initFilePath;

    [read, 
     write, 
     Description("The User's Mail Server.")
    ]
    string mailServer;

    [read, 
     write, 
     Description("Flag indicating that the user mail box server name "
		 "should be modified.")
    ]
    boolean mailBoxAllowModifyServer;

    [read, 
     write, 
     Description("Used Internally.")
    ]
    boolean mailBoxForceModify;

    [read, 
     write, 
     Description("The User's initial shell.")
    ]
    string initialShell;

    [read, 
     write, 
     Description("The Template that will be used when creating a user.")
    ]
    string templateName;

    [read, 
     write, 
     Description("The RBAC security data in key/value format.")
    ]
    string SolarisAttrKeyValue;

    [Description("Method to return next available user UID.")]
    sint32 getNextUID([IN] string seed, [OUT] string uid);

    [Description("Method to return a list of roles a user may assume.")]
    sint32 getUserRoles([IN] string userName, [OUT] string roleNames[]);

    [Description("Method to return bulk user summary data.")]
    sint32 bulkData([IN] string type, 
   		    [IN] string filter,
		    [OUT] string data[]);

    [read, 
     write, 
     Description("Used during modify to rename an existing user.")
    ]
    string newName;
    

};


    [Provider ("com.sun.wbem.solarisprovider.usermgr.template.Solaris_Template")
    ]
class Solaris_UserTemplate 
{

    [key, 
     read,
     Description ("A user defined template name which is a Record identifier.")
    ]
    string tName;

    [read, 
     write, 
     Description("Name of the user that last modified the instance.")
    ]
    string tUserName;

    [read, 
     write, 
     Description("Last date and time of modification")
    ]
    datetime modDateTime;

    [read, 
     write, 
     Description("Describes a particuliar template.")
    ]
    string tDescription;

    [read, 
     write, 
     Description("The Home directory server.")
    ]
    string homeDirServer;

    [read, 
     write, 
     Description("The path for the Home Directory.")
    ]
    string homeDirPath;

    [read, 
     write, 
     Description("Flag indicating that the user name should be used "
		 "to form a unique home directory path name.")
    ]
    boolean useUserNameInPath;

    [read, 
     write, 
     Description("Mail server.")
    ]
    string mailServer;

    [read, 
     write, 
     Description("The user's Mailbox.")
    ]
    string mailbox;

    [read, 
     write, 
     Description("Directory to copy files from when creating the user account.")
    ]
    string dirToCopyFilesFrom;

    [read, 
     write, 
     Description("Primary Group for the user.")
    ]
    string primaryGroup;

    [read, 
     write, 
     Description("List of Secondary Groups to add the user to.")
    ]
    string secondaryGroups[];

    [read, 
     write, 
     Description("Script to run before adding the user's home directory.")
    ]
    string scriptBefore;

    [read, 
     write, 
     Description("Script to run after adding the user's home directory.")
    ]
    string scriptAfter;

    [read, 
     write, 
     Description("Flag indicating that the home directory should be "
		 "auto mounted at user login.")
    ]
    boolean autoMountHomeDir;

    [read, 
     write, 
     Description("Initial shell.")
    ]
    string initialShell;

    [read, 
     write, 
     Description("The Home directory permissions.")
    ]
    string homeDirPerms;

    [read, 
     write, 
     Description("User must change password at first login.")
    ]
    boolean changePwdAtLogin;

    [read, 
     write, 
     Description("Change Password every N days.")
    ]
    string changePwdInterval;

    [read, 
     write, 
     Description("The password is valid for N days.")
    ]
    string pwdValidTime;

    [read, 
     write, 
     Description("When user will start to receive warnings that "
		 "password is going to expire.")
    ]
    string warnPwdExpire;

    [read, 
     write, 
     Description("The User Account Expiration Date.")
    ]
    string accountExpireDate;

    [read, 
     write, 
     Description("User can not re-use paswsword for N-days.")
    ]
    string doNotReUsePwdFor;

};

    [Provider ("com.sun.wbem.solarisprovider.usermgr.mbox.Solaris_MailBox")]
class Solaris_MailBox
{
    [read, 
     key, 
     Description("The user that owns the mail box.")
    ]
    string userName;

    [read, 
     write, 
     Description("The user's UID.")
    ]
    string userUID;

    [read, 
     write, 
     Description("The User's Mail Server.")
    ]
    string mailServer;

    [read, 
     write, 
     Description("Flag indicating that the user mail box server name "
		 "should be modified.")
    ]
    boolean mailBoxAllowModifyServer;

    [read, 
     write, 
     Description("Used Internally.")
    ]
    boolean mailBoxForceModify;

    [read, 
     write, 
     Description("Use this value to rename an existing Mailbox during "
		 "a setInstance call.")
    ]
    string newUserName;

};

