Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

541 lines
18 KiB

/**********************************************************************/
/** Microsoft LAN Manager **/
/** Copyright(c) Microsoft Corp., 1990 **/
/**********************************************************************/
/*
* History
* gregj 4/16/91 Cloned from COMPUTER class
* gregj 4/22/91 Added USER, USER_11.
* gregj 4/29/91 Results of 4/29/91 code review
* with chuckc, jimh, terryk, ericch
* gregj 5/21/91 Use new LOCATION class
* gregj 5/22/91 Support LOCATION's LOCATION_TYPE constructor
* SimoP 6/13/91 GetInfo and WriteInfo in class USER
* moved to public
* jonn 7/19/91 Writable USER_11 object
* jonn 8/06/91 Updated to latest NEW_LM_OBJ spec
* jonn 8/12/91 Code review changes
* rustanl 8/26/91 Changed [W_]CloneFrom parameter from * to &
* jonn 8/29/91 Added ChangeToNew()
* jonn 9/04/91 Added UserComment accessors
* jonn 9/05/91 Added IsOKState() and IsConstructedState()
* terryk 9/11/91 Add LOGON_USER object
* jonn 9/17/91 Added Parms accessors
* terryk 9/19/91 Move LOGON_USER back to lmomisc.hxx
* terryk 10/07/91 type changes for NT
* terryk 10/21/91 type changes for NT
* jonn 11/01/91 Added parms filter
* jonn 12/11/91 Added LogonHours accessors
* thomaspa 1/21/92 Added Rename() to USER
* beng 05/07/92 Removed LOGON_HOURS_SETTING elsewhere
*/
#ifndef _LMOUSER_HXX_
#define _LMOUSER_HXX_
#include "lmobj.hxx"
#include "lhourset.hxx"
#include "uiassert.hxx"
#if defined(UNICODE)
#define UI_NULL_USERSETINFO_PASSWD SZ(" ")
#else
#define UI_NULL_USERSETINFO_PASSWD NULL_USERSETINFO_PASSWD
#endif
/*************************************************************************
NAME: USER
SYNOPSIS: Superclass for manipulation of users
Will eventually support deletion of existing users
INTERFACE:
QueryName
Returns the user's account name.
Rename
Changes the name of the user account on NT
SetName
Sets the user's account name.
PARENT: LOC_LM_OBJ
USES:
CAVEATS:
NOTES:
HISTORY:
gregj 4/22/91 Created
gregj 4/29/91 Added ValidateAccount(), use BUFFER
gregj 5/21/91 Use new LOCATION class
gregj 5/22/91 Support LOCATION_TYPE constructor
SimoP 6/13/91 GetInfo and WriteInfo in class USER
moved public
thomaspa 1/21/92 Added Rename()
**************************************************************************/
DLL_CLASS USER : public LOC_LM_OBJ
{
private:
VOID CtAux( const TCHAR *pszAccount ); // constructor helper
protected:
DECL_CLASS_NLS_STR( _nlsAccount, UNLEN ); // account name, may be ""
APIERR HandleNullAccount();
APIERR W_CloneFrom( const USER & user );
virtual APIERR I_Delete( UINT uiForce );
public:
USER(const TCHAR *pszAccount, const TCHAR *pszLocation = NULL);
USER(const TCHAR *pszAccount, enum LOCATION_TYPE loctype);
USER(const TCHAR *pszAccount, const LOCATION & loc);
~USER();
const TCHAR *QueryName() const;
APIERR Rename( const TCHAR *pszAccount );
APIERR SetName( const TCHAR *pszAccount );
};
/*************************************************************************
NAME: USER_11
SYNOPSIS: Wrapper for User APIs, level 11
USER_11 does not support WriteInfo or WriteNew, since
the API does not support NetUserSetInfo[11] or
NetUserAdd[11].
Unlike USER_2, a non-admin without accounts privilege
may read USER_11 information on him/herself.
INTERFACE: Construct with account name and server/domain name
I_GetInfo
Retrieves info about the user, returns a standard
error code.
QueryPriv
Returns the user's privilege level.
QueryAuthFlags
Returns the user's authorization flags mask.
IsPrintOperator
TRUE if the user is a print operator
IsCommOperator
TRUE if the user is a comm queue operator
IsServerOperator
TRUE if the user is a server operator
IsAccountsOperator
TRUE if the user is an accounts operator
QueryComment
Returns the comment set by administrator
QueryUserComment
Returns the comment set by user
QueryFullName
Returns the user's fullname
QueryHomeDir
Returns the user's home directory
QueryParms
Returns the user's application parameters
QueryWorkstations
Returns the user's valid logon workstations,
wkstas are separated by " "
QueryLogonHours
Returns the user's logon hours setting
QueryPasswordAge
QueryLastLogon
QueryLastLogoff
QueryBadPWCount
QueryNumLogons
QueryLogonServer
QueryCountryCode
QueryMaxStorage
QueryCodePage
All currently unimplemented.
SetComment
SetUserComment
SetFullName
SetPriv
SetAuthFlags
SetHomeDir
SetParms
SetLogonHours
Set information about the USER_11 object.
Returns ERROR_GEN_FAILURE if USER_11 obj not valid
ERROR_INVALID_PARAM if input param invalid
NERR_Success if ok.
TrimParams
Like LM21 NIF, User Manager trims certain Dialin
information out of the parms field when a user is
cloned. This does not happen automatically on
CloneFrom, instead the caller must call TrimParams
explicitly.
PARENT: USER
USES: NLS_STR, LOGON_HOURS_SETTING
CAVEATS: (internal) The fields which appear both as member objects
and in the API buffer should be accessed only as member
objects. The API buffer is not updated until
WriteInfo/WriteNew. This allows subclasses to use the
same accessors.
NOTES: The IsXxxxOperator methods are wrappers around
specific flags in the QueryAuthFlags() return.
They will always be FALSE if the user is an
administrator, since only USER privilege accounts
need operator rights.
HISTORY:
gregj 4/22/91 Created
gregj 4/29/91 Added unimplemented method placeholders
gregj 5/22/91 Support LOCATION_TYPE constructor
jonn 7/22/91 Writable
jonn 9/17/91 Added parms
**************************************************************************/
/*
NT BUGBUG: The following definition of MAX_USER_INFO_SIZE_11
is not safe for NT. It should be moved to a global header file.
*/
#define MAX_USER_INFO_SIZE_11 (sizeof(struct user_info_11) + \
((MAXCOMMENTSZ+1) * 4) + ((PATHLEN+1) * 2) + MAX_PATH+1 + \
(8 * (MAX_PATH) + 1) )
DLL_CLASS USER_11 : public USER
{
private:
VOID CtAux(); // constructor helper
UINT _uPriv;
ULONG _flAuth;
NLS_STR _nlsComment;
NLS_STR _nlsUserComment;
NLS_STR _nlsFullName;
NLS_STR _nlsHomeDir;
NLS_STR _nlsParms;
NLS_STR _nlsWorkstations;
LOGON_HOURS_SETTING _logonhrs;
protected:
APIERR W_CloneFrom( const USER_11 & user11 );
virtual APIERR W_CreateNew();
virtual APIERR I_GetInfo();
public:
USER_11(const TCHAR *pszAccount, const TCHAR *pszLocation = NULL);
USER_11(const TCHAR *pszAccount, enum LOCATION_TYPE loctype);
USER_11(const TCHAR *pszAccount, const LOCATION & loc);
~USER_11();
// redefined in LOCAL_USER
virtual UINT QueryPriv() const;
virtual ULONG QueryAuthFlags() const;
BOOL IsPrintOperator() const;
BOOL IsCommOperator() const;
BOOL IsServerOperator() const;
BOOL IsAccountsOperator() const;
inline const TCHAR *QueryComment () const
{ CHECK_OK(NULL); return _nlsComment.QueryPch(); }
inline const TCHAR *QueryUserComment () const
{ CHECK_OK(NULL); return _nlsUserComment.QueryPch(); }
inline const TCHAR *QueryFullName () const
{ CHECK_OK(NULL); return _nlsFullName.QueryPch(); }
inline const TCHAR *QueryHomeDir () const
{ CHECK_OK(NULL); return _nlsHomeDir.QueryPch(); }
inline const TCHAR *QueryParms () const
{ CHECK_OK(NULL); return _nlsParms.QueryPch(); }
inline const TCHAR *QueryWorkstations () const
{ CHECK_OK(NULL); return _nlsWorkstations.QueryPch(); }
inline const LOGON_HOURS_SETTING & QueryLogonHours () const
{ return _logonhrs; }
// unimplemented
inline LONG QueryPasswordAge() const { return 0L; }
inline LONG QueryLastLogon() const { return 0L; }
inline LONG QueryLastLogoff() const { return 0L; }
inline UINT QueryBadPWCount() const { return 0; }
inline UINT QueryNumLogons() const { return 0; }
inline const TCHAR *QueryLogonServer () const { return NULL; }
inline UINT QueryCountryCode() const { return 0; }
inline LONG QueryMaxStorage() const { return 0L; }
inline UINT QueryCodePage() const { return 0; }
APIERR SetComment( const TCHAR *pszComment );
APIERR SetUserComment( const TCHAR *pszUserComment );
APIERR SetFullName( const TCHAR *pszFullName );
APIERR SetPriv( UINT uPriv );
APIERR SetAuthFlags( ULONG flAuth );
APIERR SetHomeDir( const TCHAR *pszHomeDir );
APIERR SetParms( const TCHAR *pszParms );
APIERR SetWorkstations( const TCHAR *pszWorkstations );
APIERR SetLogonHours( const UCHAR * pLogonHours = NULL,
UINT unitsperweek = LOGON_HOURS_SETTING::cHoursPerWeek );
APIERR SetLogonHours( const LOGON_HOURS_SETTING & logonhrs )
{
return SetLogonHours( logonhrs.QueryHoursBlock(),
logonhrs.QueryUnitsPerWeek() );
}
APIERR TrimParams();
};
/*************************************************************************
NAME: USER_2
SYNOPSIS: Wrapper for User APIs, level 2
USER_2 must be used whenever the user wishes to use
WriteInfo or WriteNew.
INTERFACE: Construct with account name and server/domain name
Interface is as USER_11, except that USER_2 supports
I_GetInfo
Reads in the current state of the object
I_WriteInfo
Writes the current state of the object to the
API. This write is atomic, either all
parameters are set or none are set.
I_CreateNew
Sets up the USER_2 object with default values in
preparation for a call to WriteNew
I_WriteNew
Adds a new user account
CloneFrom
Makes this USER_2 instance an exact copy of the
parameter USER_2 instance. All fields including
name and state will be copied. If this operation
fails, the object will be invalid. The parameter
must be a USER_2 and not a subclass of USER_2.
QueryUserFlags
Returns the user's user flags
QueryAccountExpires
Returns the user's account expires information
QueryScriptPath
Returns the user's script path
SetUserFlags
SetAccountExpires
SetScriptPath
Set information about the USER_2 object
Returns error code which is NERR_Success
on success
QueryPassword
Queries the user password. Note that this
information may be bogus, since the API does not
provide this information. Instead, GetInfo() will
set this to NULL_USERSETINFO_PASSWORD (see access.h).
SetPassword
Changes the user password.
QueryUserFlag
SetUserFlag
Queries/changes any single flag in the user flags
(usriX_flags).
QueryAccountDisabled
QueryUserCantChangePass
QueryUserPassRequired
QueryNoPasswordExpire
SetAccountDisabled
SetUserCantChangePass
SetUserPassRequired
SetNoPasswordExpire
Queries/changes specific flags in the user flags:
account disabled
user-cannot-change-password
password-required
PARENT: USER_11
USES: NLS_STR
HISTORY:
jonn 7/22/91 Created
jonn 4/27/92 USER_2 and USER_3 virtual dtor
**************************************************************************/
/*
NT BUGBUG: The following definition of MAX_USER_INFO_SIZE_2
is not safe for NT. It should be moved to a global header file.
*/
#define MAX_USER_INFO_SIZE_2 (sizeof(struct user_info_2) + \
((MAXCOMMENTSZ+1) * 4) + ((PATHLEN+1) * 3) + MAX_PATH+1 + \
(8 * (MAX_PATH) + 1) )
DLL_CLASS USER_2 : public USER_11
{
private:
UINT _afUserFlags;
LONG _lAcctExpires;
NLS_STR _nlsPassword;
NLS_STR _nlsScriptPath;
VOID CtAux(); // constructor helper
protected:
APIERR W_Write(); // helper for I_WriteInfo and I_WriteNew
APIERR W_CloneFrom( const USER_2 & user2 );
virtual APIERR W_CreateNew();
virtual APIERR I_GetInfo();
virtual APIERR I_WriteInfo();
virtual APIERR I_CreateNew();
virtual APIERR I_WriteNew();
virtual APIERR I_ChangeToNew();
BOOL QueryUserFlag( UINT afMask ) const;
APIERR SetUserFlag( BOOL fFlag, UINT afMask );
public:
USER_2(const TCHAR *pszAccount, const TCHAR *pszLocation = NULL);
USER_2(const TCHAR *pszAccount, enum LOCATION_TYPE loctype);
USER_2(const TCHAR *pszAccount, const LOCATION & loc);
virtual ~USER_2();
inline const TCHAR * QueryPassword() const
{ CHECK_OK(NULL); return _nlsPassword.QueryPch(); }
// must be a valid password with null-termination
APIERR SetPassword( const TCHAR *pszPassword );
BOOL QueryAccountDisabled() const;
APIERR SetAccountDisabled( BOOL fAccountDisabled );
BOOL QueryUserCantChangePass() const;
APIERR SetUserCantChangePass( BOOL fUserCantChangePass );
BOOL QueryNoPasswordExpire() const;
APIERR SetNoPasswordExpire( BOOL fNoPasswordExpire );
BOOL QueryUserPassRequired() const;
APIERR SetUserPassRequired( BOOL fUserPassRequired );
BOOL QueryLockout() const;
APIERR SetLockout( BOOL fLockout );
APIERR CloneFrom( const USER_2 & user2 );
inline const TCHAR * QueryScriptPath() const
{ CHECK_OK(NULL); return _nlsScriptPath.QueryPch(); }
inline LONG QueryAccountExpires() const
{ CHECK_OK(0L); return _lAcctExpires; }
inline UINT QueryUserFlags() const
{ CHECK_OK(0); return _afUserFlags; }
APIERR SetScriptPath( const TCHAR * pszPath );
APIERR SetAccountExpires( LONG lExpires );
APIERR SetUserFlags( UINT afFlags );
};
/*************************************************************************
NAME: LOCAL_USER
SYNOPSIS: Local user info class
INTERFACE:
LOCAL_USER()
Constructor. Construct the object with a
domain name or server name; the two are
distinguished by the leading \\. Any error
(server/domain not found, etc.) will be
reported at GetInfo time. A NULL (default)
parameter means the logon domain. A password
for share-level servers can also be specified.
I_GetInfo()
Gets information about the logged on user,
pertaining to the specified domain or server.
Returns a standard LANMAN error code.
ERROR_INVALID_PASSWORD (86) usually indicates
that it's a share-level server.
QueryPriv()
Returns the logged on user's privilege level.
QueryAuthFlags()
Returns the logged on user's authorization
flags (operator rights).
IsShareLevel()
Returns TRUE if the named server is share level
(and the given password was valid for ADMIN$).
PARENT: USER_11
HISTORY:
gregj 4/16/91 Created
gregj 4/22/91 Derived from USER_11
gregj 4/29/91 Added IsShareLevel()
gregj 5/22/91 Support LOCATION_TYPE constructor
**************************************************************************/
DLL_CLASS LOCAL_USER : public USER_11
{
protected:
BOOL _fAdminConnect; // TRUE if ADMIN$ use made
TCHAR _szPassword [PWLEN+3]; // ADMIN$ password
virtual APIERR I_GetInfo();
public:
LOCAL_USER( const TCHAR *pszLocation = NULL, const TCHAR *pszPassword = NULL );
LOCAL_USER( enum LOCATION_TYPE loctype );
~LOCAL_USER();
UINT QueryPriv() const;
ULONG QueryAuthFlags() const;
BOOL IsShareLevel() const;
};
#endif // _LMOUSER_HXX_