mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
811 lines
24 KiB
811 lines
24 KiB
/**********************************************************************/
|
|
/** Microsoft LAN Manager **/
|
|
/** Copyright(c) Microsoft Corp., 1991 **/
|
|
/**********************************************************************/
|
|
|
|
/*
|
|
UserProp.hxx
|
|
|
|
Header file for the user properties dialog and subdialogs.
|
|
|
|
FILE HISTORY:
|
|
JonN 17-Jul-1991 Created
|
|
JonN 27-Aug-1991 PROP_DLG code review changes
|
|
JonN 29-Aug-1991 Added Copy... variant
|
|
JonN 03-Sep-1991 Added validation
|
|
JonN 03-Sep-1991 Preparation for code review
|
|
JonN 05-Sep-1991 Added USER_MEMB array
|
|
JonN 11-Sep-1991 USERPROP_DLG Code review changes part 1 (9/6/91)
|
|
Attending: KevinL, RustanL, JonN, o-SimoP
|
|
JonN 16-Oct-1991 Changed SLE to SLE_STRIP
|
|
o-SimoP 11-Dec-1991 Added USER2_LISTBOX and TRISTATE
|
|
JonN 20-Oct-1991 Graphical buttons
|
|
JonN 01-Jan-1992 Changed W_MapPerformOneAPIError to
|
|
W_MapPerformOneError
|
|
Split PerformOne() into
|
|
I_PerformOneClone()/Write()
|
|
JonN 12-Feb-1992 Allow A/U/G except for downlevel
|
|
JonN 27-Feb-1992 Added QueryUser3Ptr
|
|
JonN 23-Apr-1992 Changed powin to pumadminapp
|
|
thomaspa 28-Apr-1992 Alias membership support
|
|
JonN 14-May-1992 Hide unused buttons
|
|
JonN 28-May-1992 Enable force logoff checkbox
|
|
JonN 24-Aug-1992 Nonbold font for graphical buttons (bug 739)
|
|
JonN 31-Aug-1992 Re-enable %USERNAME%
|
|
JonN 29-Sep-1993 Re-enable ForcePWChange for multiselect
|
|
|
|
*/
|
|
|
|
#ifndef _USERPROP_HXX_
|
|
#define _USERPROP_HXX_
|
|
|
|
class USER_3; // for QueryUser3Ptr
|
|
class USER_NW; // for QueryUserNWPtr
|
|
|
|
#include <propdlg.hxx>
|
|
#include <lmouser.hxx> // USER_2
|
|
#include <lmomemb.hxx> // USER_MEMB
|
|
#include <asel.hxx>
|
|
#include <slestrip.hxx>
|
|
#include <slist.hxx>
|
|
#include <usr2lb.hxx>
|
|
#include <usrmain.hxx> // UM_TARGET_TYPE
|
|
|
|
typedef USER_2 * PUSER_2;
|
|
typedef USER_3 * PUSER_3;
|
|
typedef USER_NW * PUSER_NW;
|
|
typedef USER_MEMB * PUSER_MEMB;
|
|
|
|
|
|
// tristate checkbox's states
|
|
enum AI_TRI_STATE
|
|
{
|
|
AI_TRI_CHECK,
|
|
AI_TRI_UNCHECK,
|
|
AI_TRI_INDETERMINATE
|
|
};
|
|
|
|
|
|
// List of all subdialogs including "none"
|
|
typedef enum UM_SUBDIALOG_TYPE {
|
|
UM_SUBDLG_NONE = -1,
|
|
UM_SUBDLG_GROUPS = 0,
|
|
UM_SUBDLG_PRIVS,
|
|
UM_SUBDLG_PROFILES,
|
|
UM_SUBDLG_HOURS,
|
|
UM_SUBDLG_VLW,
|
|
UM_SUBDLG_DETAIL,
|
|
UM_SUBDLG_DIALIN,
|
|
UM_SUBDLG_NCP
|
|
};
|
|
|
|
// Maximum number of buttons
|
|
#define UM_NUM_USERPROP_BUTTONS 7
|
|
|
|
|
|
// forward references
|
|
class SAM_ALIAS;
|
|
class SAM_RID_MEM;
|
|
|
|
/*************************************************************************
|
|
|
|
NAME: RID_AND_SAM_ALIAS
|
|
|
|
SYNOPSIS: Wrapper for an alias RID and corresponding SAM_ALIAS for
|
|
use with Alias Membership
|
|
|
|
INTERFACE: RID_AND_SAM_ALIAS()
|
|
~RID_AND_SAM_ALIAS()
|
|
|
|
QueryRID() - return the alias RID
|
|
|
|
SetSamAlias() - set the SAM_ALIAS pointer
|
|
|
|
QuerySamAlias() - return the SAM_ALIAS pointer
|
|
|
|
IsBuiltin - True if the alias belongs to the Builtin
|
|
SAM domain, false if it belongs to the
|
|
Accounts domain
|
|
|
|
PARENT:
|
|
|
|
HISTORY:
|
|
Thomaspa 28-Apr-1992 Created
|
|
**************************************************************************/
|
|
class RID_AND_SAM_ALIAS
|
|
{
|
|
private:
|
|
ULONG _rid;
|
|
BOOL _fBuiltin;
|
|
SAM_ALIAS * _psamalias;
|
|
|
|
public:
|
|
RID_AND_SAM_ALIAS( ULONG rid,
|
|
BOOL fIsBuiltin,
|
|
SAM_ALIAS * psamalias = NULL );
|
|
~RID_AND_SAM_ALIAS();
|
|
|
|
ULONG QueryRID( void ) const
|
|
{ return _rid; }
|
|
|
|
void SetSamAlias( SAM_ALIAS * psamalias );
|
|
|
|
SAM_ALIAS * QuerySamAlias( void ) const
|
|
{ return _psamalias; }
|
|
|
|
BOOL IsBuiltin()
|
|
{ return _fBuiltin; }
|
|
|
|
|
|
};
|
|
|
|
DECLARE_SLIST_OF( RID_AND_SAM_ALIAS )
|
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
NAME: USERPROP_DLG
|
|
|
|
SYNOPSIS: USERPROP_DLG is the base dialog class for all variants
|
|
of the main User Properties dialog.
|
|
|
|
INTERFACE:
|
|
QueryUser2Ptr: Returns a pointer to the USER_2 for this
|
|
selected user.
|
|
QueryUser3Ptr: Returns a pointer to the USER_3 for this
|
|
selected user. Only valid if focus is on an
|
|
NT server.
|
|
SetUser2Ptr: Changes the pointer to the USER_2 for this
|
|
selected user. Deletes the previous pointer.
|
|
QueryUserMembPtr: Returns a pointer to the USER_MEMB
|
|
for this selected user.
|
|
SetUserMembPtr: Changes the pointer to the USER_MEMB
|
|
for this selected user. Deletes the previous pointer.
|
|
I_PerformOne_Clone: Clones the USER_2 and/or the
|
|
USER_MEMB for this selected user.
|
|
I_PerformOne_Write: Writes out the cloned USER_2 and/or
|
|
USER_MEMB for this selected user.
|
|
IsDownlevelVariant(): Indicates whether this User
|
|
Properties dialog and its subdialogs are
|
|
downlevel (LM2x) variants.
|
|
IsNetWareInstalled(): Indicates whether this User
|
|
Properties dialog and its subdialogs support
|
|
NetWare.
|
|
QuerySubdialogType(): Query what kind of subdialog should
|
|
be mapped to one of the subproperty buttons
|
|
|
|
QueryAdminAuthority(): Query the ADMIN_AUTHORITY
|
|
QuerySlAddToAliases(): Query the SLIST of aliases to join
|
|
QuerySlRemoveFromAliases(): Query the SLIST of aliases to leave
|
|
QueryAccountsSamRidMemPtr(): Query SAM_RID_MEM pointer for
|
|
user for Accounts alias
|
|
membership
|
|
SetAccountsSamRidMemPtr(): Set SAM_RID_MEM pointer for
|
|
user for Accounts alias
|
|
membership
|
|
QueryBuiltinSamRidMemPtr(): Query SAM_RID_MEM pointer for
|
|
user for Builtin alias
|
|
membership
|
|
SetBuiltinSamRidMemPtr(): Set SAM_RID_MEM pointer for
|
|
user for Builtin alias
|
|
membership
|
|
I_GetAliasMemberships(): Get both SAM_RID_MEM
|
|
pointers for the user
|
|
|
|
These virtuals are rooted here:
|
|
W_LMOBJtoMembers: Loads information from the USER_2 and
|
|
USER_MEMB into the class data members
|
|
W_MembersToLMOBJ: Loads information from the class data members
|
|
into the USER_2 and USER_MEMB
|
|
GetNWPassword: Get the NetWare Password from password dialog.
|
|
W_DialogToMembers: Loads information from the dialog into the
|
|
class data members
|
|
W_MapPerformOneError: When PerformOne encounters an
|
|
error, this method determines whether any field
|
|
should be selected and a more specific error
|
|
message displayed.
|
|
|
|
GeneralizeString: If the last path component of the string is
|
|
<Username><Extension>, replace that with
|
|
%USERNAME%<Extension>.
|
|
DeGeneralizeString: If the last path component of the string is
|
|
%USERNAME%<Extension>, replace that with
|
|
<Username><Extension>.
|
|
|
|
_nlsComment: Contains the current contents of the
|
|
Comment edit field. This will initially be the
|
|
empty string if _fIndeterminateComment is TRUE,
|
|
but may later change when OK is pressed. The comment
|
|
for multiply-selected users will not be changed if
|
|
the users originally had different comments and
|
|
the contents of the edit field are the empty
|
|
string.
|
|
_fIndeterminateComment: TRUE iff multiple users are
|
|
selected who did not originally all have the
|
|
same comment.
|
|
_fIndetNowComment: TRUE iff the control is currently in
|
|
its indeterminate state. For the Comment field,
|
|
this means that the contents are empty and
|
|
_fIndeterminateComment is TRUE (if FALSE, the
|
|
empty string would be the real desired comment).
|
|
For checkboxes, this would mean that the
|
|
checkbox is in tristate, regardless of
|
|
_fIndeterminate.
|
|
|
|
_fAccountDisabled: see _nlsComment. The default
|
|
value is TRUE.
|
|
_fIndeterminateAccountDisabled: see _fIndeterminateComment.
|
|
_fIndetNowAccountDisabled: see _fIndetNowComment.
|
|
However, for checkboxes this field is not
|
|
dependent on _fIndeterminate; unlike _fIndetNowComment,
|
|
we can distinguish a "tristate" control state.
|
|
_fCommonHomeDirCreated - TRUE if a common homedir was specified
|
|
for a multiselect edit, and the dir was created.
|
|
_fGeneralizedHomeDir - TRUE if user typed in username in
|
|
the homedir field using %USERNAME%
|
|
_apgbButtons: An array of pointers to the graphical
|
|
buttons which should be displayed.
|
|
_aphiddenctrl: An array of pointers to HIDDEN_CONTROL
|
|
objects which hide unused graphical buttons.
|
|
|
|
_apsamrmAccounts - array of pointers to SAM_RID_MEMs
|
|
representing the initial Alias membership for each
|
|
user.
|
|
_apsamrmBuiltin - array of pointers to SAM_RID_MEMs
|
|
representing the initial Alias membership for each
|
|
user.
|
|
_slAddToAliases - list of aliases to which to add the user(s)
|
|
_slRemoveFromAliases - list of aliases from which to remove
|
|
the user(s)
|
|
|
|
PARENT: PROP_DLG
|
|
|
|
NOTES: The GetOne, PerformOne and QueryObjectName methods of
|
|
USERPROP_DLG assume an "edit user(s)" variant instead of
|
|
a "new user" variant. For new user variants, these
|
|
must be redefined. New user variants are required to
|
|
pass psel==NULL to the constructor.
|
|
|
|
USERPROP_DLG's constructor is protected. However, its
|
|
destructor is virtual and public, to allow subclasses to
|
|
delete objects of class USERPROP_DLG *.
|
|
|
|
HISTORY:
|
|
JonN 17-Jul-1991 Created
|
|
o-SimoP 11-Dec-1991 Added USER_LISTBOX to member and to constructor
|
|
JonN 12-Feb-1992 Table-driven button generator
|
|
Allow A/U/G except for downlevel
|
|
JonN 19-Feb-1992 Moved UserCannotChangePass from USERACCT_DLG
|
|
Thomaspa 28-Apr-1992 Alias membership support
|
|
JonN 31-Aug-1992 Re-enable %USERNAME%
|
|
JonN 19-Jan-1993 Added _nlsLastPassword
|
|
JonN 13-Oct-1993 Removed _nlsLastPassword
|
|
JonN 28-Dec-1993 Added account lockout
|
|
**************************************************************************/
|
|
|
|
|
|
class USERPROP_DLG: public PROP_DLG
|
|
{
|
|
|
|
protected:
|
|
const UM_ADMIN_APP * _pumadminapp;
|
|
const LAZY_USER_LISTBOX * _pulb;
|
|
|
|
private:
|
|
|
|
const LAZY_USER_SELECTION * _psel;
|
|
|
|
PUSER_2 * _apuser2;
|
|
PUSER_MEMB * _apusermemb;
|
|
SAM_RID_MEM ** _apsamrmAccounts;
|
|
SAM_RID_MEM ** _apsamrmBuiltin;
|
|
|
|
SLIST_OF( RID_AND_SAM_ALIAS) _slAddToAliases;
|
|
SLIST_OF( RID_AND_SAM_ALIAS) _slRemoveFromAliases;
|
|
|
|
static APIERR RemoveGroup( const TCHAR * psz,
|
|
USER_MEMB * pumemb );
|
|
|
|
enum UM_SUBDIALOG_TYPE QuerySubdialogType( UINT iButton );
|
|
|
|
// set user membership to pumembOld plus global group described by RID
|
|
APIERR I_SetExtendedMembership( USER_MEMB * pumembOld,
|
|
ULONG ulRidAddGroup,
|
|
BOOL fForce );
|
|
protected:
|
|
|
|
UINT _cItems;
|
|
|
|
NLS_STR _nlsComment;
|
|
BOOL _fIndeterminateComment;
|
|
BOOL _fIndetNowComment;
|
|
|
|
BOOL _fAccountDisabled;
|
|
BOOL _fIndeterminateAccountDisabled;
|
|
BOOL _fIndetNowAccountDisabled;
|
|
|
|
BOOL _fAccountLockout;
|
|
BOOL _fIndeterminateAccountLockout;
|
|
BOOL _fIndetNowAccountLockout;
|
|
|
|
enum AI_TRI_STATE _triCannotChangePasswd;
|
|
|
|
TRISTATE _cbAccountDisabled;
|
|
TRISTATE * _pcbAccountLockout;
|
|
TRISTATE _cbUserCannotChange;
|
|
|
|
SLE _sleComment;
|
|
GRAPHICAL_BUTTON ** _apgbButtons;
|
|
HIDDEN_CONTROL ** _aphiddenctrl;
|
|
FONT _fontHelv;
|
|
|
|
BOOL _fCommonHomeDirCreated;
|
|
BOOL _fGeneralizedHomeDir;
|
|
|
|
TRISTATE * _pcbNoPasswordExpire;
|
|
HIDDEN_CONTROL * _phiddenNoPasswordExpire;
|
|
enum AI_TRI_STATE _triNoPasswordExpire;
|
|
|
|
TRISTATE * _pcbForcePWChange;
|
|
HIDDEN_CONTROL * _phiddenForcePWChange;
|
|
enum AI_TRI_STATE _triForcePWChange;
|
|
|
|
TRISTATE * _pcbIsNetWareUser;
|
|
HIDDEN_CONTROL * _phiddenIsNetWareUser;
|
|
enum AI_TRI_STATE _triIsNetWareUser;
|
|
BOOL _fNetWareUserChanged;
|
|
BOOL _fPasswordChanged;
|
|
BOOL _fCancel;
|
|
INT _nMsgPopupRet;
|
|
|
|
RESOURCE_STR _resstrUsernameReplace;
|
|
STRLIST _strlstExtensionReplace;
|
|
|
|
USERPROP_DLG(
|
|
const TCHAR * pszResourceName,
|
|
const UM_ADMIN_APP * pumadminapp,
|
|
const LOCATION & loc,
|
|
const LAZY_USER_SELECTION * psel, // "new user" variants pass NULL
|
|
const LAZY_USER_LISTBOX * pulb = NULL
|
|
) ;
|
|
|
|
/* inherited from PROP_DLG */
|
|
virtual APIERR GetOne(
|
|
UINT iObject,
|
|
APIERR * pErrMsg
|
|
);
|
|
virtual APIERR InitControls();
|
|
|
|
/* inherited from PERFORMER */
|
|
virtual APIERR PerformOne(
|
|
UINT iObject,
|
|
APIERR * pErrMsg,
|
|
BOOL * pfWorkWasDone
|
|
);
|
|
|
|
virtual APIERR W_LMOBJtoMembers(
|
|
UINT iObject
|
|
);
|
|
virtual APIERR W_MembersToLMOBJ(
|
|
USER_2 * puser2,
|
|
USER_MEMB * pusermemb
|
|
);
|
|
virtual APIERR GetNWPassword (USER_2 * puser2,
|
|
NLS_STR * pnlsNWPassword,
|
|
BOOL * pfCancel);
|
|
|
|
virtual APIERR W_DialogToMembers(
|
|
);
|
|
virtual MSGID W_MapPerformOneError(
|
|
APIERR err
|
|
);
|
|
|
|
|
|
virtual BOOL OnOK( void );
|
|
|
|
virtual BOOL OnCommand( const CONTROL_EVENT & ce );
|
|
|
|
public:
|
|
|
|
/* virtual destructor required, see above */
|
|
virtual ~USERPROP_DLG();
|
|
|
|
virtual BOOL IsCloneVariant( void );
|
|
|
|
/* inherited from PERFORMER */
|
|
virtual UINT QueryObjectCount( void ) const;
|
|
virtual const TCHAR * QueryObjectName(
|
|
UINT iObject
|
|
) const;
|
|
|
|
APIERR I_PerformOne_Clone(
|
|
UINT iObject,
|
|
USER_2 ** ppuser2New,
|
|
USER_MEMB ** ppusermembNew
|
|
);
|
|
APIERR I_PerformOne_Write(
|
|
UINT iObject,
|
|
USER_2 * puser2New,
|
|
USER_MEMB * pusermembNew,
|
|
BOOL * pfWorkWasDone,
|
|
OWNER_WINDOW * pwndPopupParent = NULL
|
|
);
|
|
|
|
USER_2 * QueryUser2Ptr( UINT iObject );
|
|
USER_3 * QueryUser3Ptr( UINT iObject );
|
|
USER_NW * QueryUserNWPtr( UINT iObject );
|
|
VOID SetUser2Ptr( UINT iObject, USER_2 * puser2New );
|
|
USER_MEMB * QueryUserMembPtr( UINT iObject );
|
|
VOID SetUserMembPtr( UINT iObject, USER_MEMB * pusermembNew );
|
|
|
|
SAM_RID_MEM * QueryAccountsSamRidMemPtr( UINT iObject );
|
|
VOID SetAccountsSamRidMemPtr( UINT iObject, SAM_RID_MEM *psamrmNew );
|
|
|
|
SAM_RID_MEM * QueryBuiltinSamRidMemPtr( UINT iObject );
|
|
VOID SetBuiltinSamRidMemPtr( UINT iObject, SAM_RID_MEM *psamrmNew );
|
|
|
|
APIERR I_GetAliasMemberships( ULONG ridUser,
|
|
SAM_RID_MEM ** ppsamrmAccounts,
|
|
SAM_RID_MEM ** ppsamrmBuiltin );
|
|
|
|
enum UM_TARGET_TYPE QueryTargetServerType() const
|
|
{ return _pumadminapp->QueryTargetServerType(); }
|
|
|
|
inline BOOL IsDownlevelVariant() const
|
|
{ return (QueryTargetServerType() == UM_DOWNLEVEL); }
|
|
|
|
BOOL IsNetWareInstalled(void)
|
|
{ return _pumadminapp->IsNetWareInstalled(); }
|
|
|
|
|
|
inline BOOL DoShowGroups() const
|
|
{ return (QueryTargetServerType() != UM_WINDOWSNT); }
|
|
|
|
inline const ADMIN_AUTHORITY * QueryAdminAuthority()
|
|
{ return _pumadminapp->QueryAdminAuthority(); }
|
|
|
|
inline SLIST_OF( RID_AND_SAM_ALIAS) * QuerySlAddToAliases()
|
|
{ return &_slAddToAliases; }
|
|
|
|
inline SLIST_OF( RID_AND_SAM_ALIAS) * QuerySlRemoveFromAliases()
|
|
{ return &_slRemoveFromAliases; }
|
|
|
|
ULONG QueryHelpOffset( void ) const;
|
|
|
|
APIERR GeneralizeString ( NLS_STR * pnlsGeneralizeString,
|
|
const TCHAR * pchGeneralizeFromUsername,
|
|
const NLS_STR * pnlsExtension = NULL );
|
|
APIERR GeneralizeString ( NLS_STR * pnlsGeneralizeString,
|
|
const TCHAR * pchGeneralizeFromUsername,
|
|
STRLIST& strlstExtensions );
|
|
APIERR DegeneralizeString( NLS_STR * pnlsDegeneralizeString,
|
|
const TCHAR * pchDegeneralizeToUsername,
|
|
const NLS_STR * pnlsExtension = NULL,
|
|
BOOL * pfDidDegeneralize = NULL );
|
|
APIERR DegeneralizeString( NLS_STR * pnlsDegeneralizeString,
|
|
const TCHAR * pchDegeneralizeToUsername,
|
|
STRLIST& strlstExtensions,
|
|
BOOL * pfDidDegeneralize = NULL );
|
|
STRLIST& QueryExtensionReplace()
|
|
{ return _strlstExtensionReplace; }
|
|
BOOL * QueryGeneralizedHomeDirPtr()
|
|
{ return &_fGeneralizedHomeDir; }
|
|
|
|
inline const SUBJECT_BITMAP_BLOCK & QueryBitmapBlock() const
|
|
{ return _pumadminapp->QueryBitmapBlock(); }
|
|
|
|
//
|
|
// Tells whether User Profile field should be enabled for this target
|
|
//
|
|
BOOL QueryEnableUserProfile();
|
|
|
|
BOOL IsNetWareChecked (void)
|
|
{ return ((_pcbIsNetWareUser != NULL) &&(_pcbIsNetWareUser->IsChecked())) ; }
|
|
|
|
|
|
|
|
} ; // class USERPROP_DLG
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
NAME: SINGLE_USERPROP_DLG
|
|
|
|
SYNOPSIS: SINGLE_USERPROP_DLG is the base dialog class for variants of
|
|
the User Properties dialog which manipulate single user
|
|
instances (i.e. all except for EDITMULTI_USERPROP_DLG).
|
|
|
|
INTERFACE:
|
|
_nlsFullName: The current contents of the FullName edit field.
|
|
Note that _fIndeterminateFullName and
|
|
_fIndetNowFullName are not necessary, since multiple
|
|
selection is not supported here.
|
|
_nlsPassword: see _nlsFullName, and see NOTES below.
|
|
|
|
PARENT: USERPROP_DLG
|
|
|
|
NOTES: The LM API gives special handling to the password field.
|
|
Under no circumstances will the API tell you a user's
|
|
password; instead, NetUserGetInfo returns a special
|
|
string in this field, NULL_USERSETINFO_PASSWD (defined
|
|
in access.h). This string consists of 14 spaces. If
|
|
the same string is handed back to NetUserSetInfo, the
|
|
password will be unchanged. According to the latest UI
|
|
Standards FuncSpec (v1.00+), this string of 14 spaces is
|
|
precisely what should be placed in the dialog; this
|
|
allows the admin to give the user a null password by
|
|
changing the contents of the edit field to an empty
|
|
string.
|
|
|
|
We do not need the _nlsInit and _fValidInit data members
|
|
in this class. These data members are only needed for
|
|
multiple selection.
|
|
|
|
HISTORY:
|
|
JonN 20-Aug-1991 Created
|
|
|
|
**************************************************************************/
|
|
|
|
class SINGLE_USERPROP_DLG: public USERPROP_DLG
|
|
{
|
|
friend class USER_SUBPROP_DLG;
|
|
|
|
private:
|
|
|
|
NLS_STR _nlsFullName;
|
|
NLS_STR _nlsPassword;
|
|
|
|
SLE_STRIP _sleFullName;
|
|
PASSWORD_CONTROL _passwordNew;
|
|
PASSWORD_CONTROL _passwordConfirm;
|
|
|
|
protected:
|
|
SINGLE_USERPROP_DLG(
|
|
const TCHAR * pszResourceName,
|
|
const UM_ADMIN_APP * pumadminapp,
|
|
const LOCATION & loc,
|
|
const LAZY_USER_SELECTION * psel // "new user" variants pass NULL
|
|
) ;
|
|
|
|
virtual APIERR InitControls();
|
|
|
|
/* inherited from USERPROP_DLG */
|
|
virtual APIERR W_LMOBJtoMembers(
|
|
UINT iObject
|
|
);
|
|
virtual APIERR W_MembersToLMOBJ(
|
|
USER_2 * puser2,
|
|
USER_MEMB * pusermemb
|
|
);
|
|
virtual APIERR GetNWPassword (USER_2 * puser2,
|
|
NLS_STR * pnlsNWPassword,
|
|
BOOL * pfCancel);
|
|
|
|
const TCHAR * GetPassword (void)
|
|
{ return _nlsPassword.QueryPch(); }
|
|
|
|
void SetPasswordChanged (void)
|
|
{ _fPasswordChanged = TRUE; }
|
|
|
|
virtual APIERR W_DialogToMembers(
|
|
);
|
|
virtual MSGID W_MapPerformOneError(
|
|
APIERR err
|
|
);
|
|
|
|
public:
|
|
|
|
/* virtual destructor required, see USERPROP_DLG */
|
|
virtual ~SINGLE_USERPROP_DLG();
|
|
|
|
} ; // class SINGLE_USERPROP_DLG
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
NAME: EDITSINGLE_USERPROP_DLG
|
|
|
|
SYNOPSIS: EDITSINGLE_USERPROP_DLG is the dialog class for the edit
|
|
one user variant of the User Properties dialog.
|
|
|
|
PARENT: SINGLE_USERPROP_DLG
|
|
|
|
HISTORY:
|
|
JonN 01-Aug-1991 Created
|
|
|
|
**************************************************************************/
|
|
|
|
class EDITSINGLE_USERPROP_DLG: public SINGLE_USERPROP_DLG
|
|
{
|
|
|
|
private:
|
|
|
|
SLT _sltLogonName;
|
|
|
|
protected:
|
|
|
|
/* inherited from PROP_DLG */
|
|
virtual APIERR InitControls();
|
|
|
|
virtual ULONG QueryHelpContext( void );
|
|
|
|
public:
|
|
|
|
EDITSINGLE_USERPROP_DLG(
|
|
const UM_ADMIN_APP * pumadminapp,
|
|
const LOCATION & loc,
|
|
const LAZY_USER_SELECTION * psel
|
|
) ;
|
|
|
|
/* virtual destructor required, see USERPROP_DLG */
|
|
virtual ~EDITSINGLE_USERPROP_DLG();
|
|
|
|
virtual BOOL OnCommand( const CONTROL_EVENT & ce );
|
|
|
|
} ; // class EDITSINGLE_USERPROP_DLG
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
NAME: EDITMULTI_USERPROP_DLG
|
|
|
|
SYNOPSIS: EDITMULTI_USERPROP_DLG is the dialog class for the edit
|
|
multiple users variant of the User Properties dialog.
|
|
|
|
PARENT: USERPROP_DLG
|
|
|
|
HISTORY:
|
|
JonN 01-Aug-1991 Created
|
|
o-SimoP 11-Dec-1991 uses USER2_LISTBOX
|
|
**************************************************************************/
|
|
|
|
class EDITMULTI_USERPROP_DLG: public USERPROP_DLG
|
|
{
|
|
|
|
private:
|
|
|
|
USER2_LISTBOX _lbLogonNames;
|
|
|
|
protected:
|
|
|
|
virtual ULONG QueryHelpContext( void );
|
|
|
|
public:
|
|
|
|
EDITMULTI_USERPROP_DLG(
|
|
const UM_ADMIN_APP * pumadminapp,
|
|
const LOCATION & loc,
|
|
const LAZY_USER_SELECTION * psel,
|
|
const LAZY_USER_LISTBOX * pulb
|
|
) ;
|
|
|
|
/* virtual destructor required, see USERPROP_DLG */
|
|
virtual ~EDITMULTI_USERPROP_DLG();
|
|
|
|
} ; // class EDITMULTI_USERPROP_DLG
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
NAME: NEW_USERPROP_DLG
|
|
|
|
SYNOPSIS: NEW_USERPROP_DLG is the dialog class for the new user
|
|
variant of the User Properties dialog. This includes
|
|
both "New User..." and "Copy User...".
|
|
|
|
INTERFACE:
|
|
GetOne()
|
|
PerformOne()
|
|
QueryObjectName()
|
|
These methods are all defined in USERPROP_DLG,
|
|
but the versions there are meant for use in
|
|
"edit user(s)" variants rather than "new user"
|
|
variants.
|
|
CloneAliasMemberships()
|
|
Copy the alias memberships of an existing user.
|
|
|
|
PARENT: SINGLE_USERPROP_DLG
|
|
|
|
NOTES: The _nlsNewProfile and _nlsNewHomeDir fields are
|
|
provided for new (esp. clone) variants where %USERNAME%
|
|
must work without entering the Profiles subdialog.
|
|
|
|
HISTORY:
|
|
JonN 24-Jul-1991 Created
|
|
JonN 30-Dec-1991 Inherits PerformOne from USERPROP_DLG
|
|
JonN 13-May-1992 Dialog does not close for New variant
|
|
JonN 28-May-1992 Enable force logoff checkbox
|
|
JonN 02-Sep-1992 Re-enable %USERNAME%
|
|
|
|
**************************************************************************/
|
|
|
|
class NEW_USERPROP_DLG: public SINGLE_USERPROP_DLG
|
|
{
|
|
friend class USER_SUBPROP_DLG;
|
|
|
|
private:
|
|
|
|
PUSH_BUTTON _pbOKAdd;
|
|
|
|
SLE_STRIP _sleLogonName;
|
|
NLS_STR _nlsLogonName;
|
|
const TCHAR * _pszCopyFrom;
|
|
ULONG _ridCopyFrom;
|
|
|
|
NLS_STR _nlsNewHomeDir;
|
|
NLS_STR _nlsNewProfile;
|
|
|
|
BOOL _fDefaultForcePWChange;
|
|
|
|
APIERR CloneAliasMemberships();
|
|
|
|
protected:
|
|
|
|
/* inherited from PROP_DLG */
|
|
virtual APIERR GetOne(
|
|
UINT iObject,
|
|
APIERR * pErrMsg
|
|
);
|
|
virtual APIERR InitControls();
|
|
|
|
virtual APIERR PerformOne(
|
|
UINT iObject,
|
|
APIERR * pErrMsg,
|
|
BOOL * pfWorkWasDone
|
|
);
|
|
|
|
virtual ULONG QueryHelpContext( void );
|
|
|
|
/* inherited from USERPROP_DLG */
|
|
virtual APIERR W_LMOBJtoMembers(
|
|
UINT iObject
|
|
);
|
|
virtual APIERR W_MembersToLMOBJ(
|
|
USER_2 * puser2,
|
|
USER_MEMB * pusermemb
|
|
);
|
|
virtual APIERR W_DialogToMembers(
|
|
);
|
|
virtual MSGID W_MapPerformOneError(
|
|
APIERR err
|
|
);
|
|
|
|
virtual BOOL OnOK( void ); // this variant does not close on OK
|
|
|
|
virtual BOOL OnCancel( void ); // This variant sometimes dismisses TRUE
|
|
|
|
public:
|
|
|
|
NEW_USERPROP_DLG(
|
|
const UM_ADMIN_APP * pumadminapp,
|
|
const LOCATION & loc,
|
|
const TCHAR * pszCopyFrom = NULL,
|
|
ULONG ridCopyFrom = 0L
|
|
) ;
|
|
|
|
/* virtual destructor required, see USERPROP_DLG */
|
|
virtual ~NEW_USERPROP_DLG();
|
|
|
|
virtual BOOL IsCloneVariant( void );
|
|
const TCHAR * QueryClonedUsername( void );
|
|
|
|
/* inherited from PERFORMER */
|
|
virtual const TCHAR * QueryObjectName(
|
|
UINT iObject
|
|
) const;
|
|
|
|
const TCHAR * QueryNewHomeDir()
|
|
{ return _nlsNewHomeDir.QueryPch(); }
|
|
APIERR SetNewHomeDir( const TCHAR * pchClonedHomeDir )
|
|
{ return _nlsNewHomeDir.CopyFrom( pchClonedHomeDir ); }
|
|
const TCHAR * QueryNewProfile()
|
|
{ return _nlsNewProfile.QueryPch(); }
|
|
APIERR SetNewProfile( const TCHAR * pchClonedProfile )
|
|
{ return _nlsNewProfile.CopyFrom( pchClonedProfile ); }
|
|
|
|
} ; // class NEW_USERPROP_DLG
|
|
|
|
|
|
#endif //_USERPROP_HXX_
|