windows-nt/Source/XPSP1/NT/net/sfm/afp/ui/afpmgr/server.cxx
2020-09-26 16:20:57 +08:00

549 lines
12 KiB
C++

/**********************************************************************/
/** Microsoft Windows NT **/
/** Copyright(c) Microsoft Corp., 1991 **/
/**********************************************************************/
/*
server.cxx
This file contains the definition of SERVER_PARAMETERS_DIALOG.
History:
NarenG 12/15/92 Created.
*/
#define INCL_WINDOWS_GDI
#define INCL_WINDOWS
#define INCL_DOSERRORS
#define INCL_NETERRORS
#define INCL_NETSHARE
#define INCL_NETSERVER
#define INCL_NETCONS
#define INCL_NETLIB
#include <lmui.hxx>
#define INCL_BLT_WINDOW
#define INCL_BLT_DIALOG
#define INCL_BLT_CONTROL
#define INCL_BLT_MISC
#define INCL_BLT_CLIENT
#define INCL_BLT_MSGPOPUP
#define INCL_BLT_SPIN_GROUP
#define INCL_BLT_GROUP
#include <blt.hxx>
extern "C"
{
#include <afpmgr.h>
#include <macfile.h>
}
#include <string.hxx>
#include <uitrace.hxx>
#include <dbgstr.hxx>
#include <netname.hxx>
#include "util.hxx"
#include "srvname.hxx"
#include "server.hxx"
/*******************************************************************
NAME: SERVER_PARAMETERS_DIALOG::SERVER_PARAMETERS_DIALOG
SYNOPSIS: Constructor for SERVER_PARAMETERS_DIALOG class
ENTRY: hwndParent - handle of parent window
EXIT:
RETURNS:
NOTES:
HISTORY:
NarenG 12/15/92 Created
********************************************************************/
SERVER_PARAMETERS_DIALOG::SERVER_PARAMETERS_DIALOG(
HWND hwndParent,
AFP_SERVER_HANDLE hServer,
const TCHAR * pszServerName )
: DIALOG_WINDOW( MAKEINTRESOURCE( IDD_SERVER_PARAMETERS_DIALOG ),
hwndParent ),
_sltServerName( this, IDSP_SLT_SERVERNAME, ELLIPSIS_RIGHT ),
_mleTextMsg( this, IDSP_MLE_LOGINMSG, AFP_MESSAGE_LEN ),
_chkAllowPasswordSaves( this,IDSP_CHK_PASSWORD_SAVES ),
_chkAllowGuestLogons( this, IDSP_CHK_GUESTLOGONS ),
_chkAllowClearTextPasswords( this,IDSP_CHK_CLEARTEXT ),
_mgrpSessionLimit( this, IDSP_RB_UNLIMITED, 2, IDSP_RB_UNLIMITED),
_spsleSessions( this, IDSP_SLE_SESSIONS, 1, 1, AFP_MAXSESSIONS-1,
TRUE, IDSP_SLE_SESSIONS_GROUP ),
_spgrpSessions(this,IDSP_SB_SESSIONS_GROUP, IDSP_SB_SESSIONS_UP,
IDSP_SB_SESSIONS_DOWN),
_pbChange( this, IDSP_PB_CHANGE ),
_dwParmNum( 0 ),
_hServer( hServer )
{
UNREFERENCED( pszServerName );
//
// Make sure everything constructed OK
//
if ( QueryError() != NERR_Success )
return;
APIERR err;
if ( ((err = _mgrpSessionLimit.QueryError()) != NERR_Success )
|| ((err = _spgrpSessions.AddAssociation(&_spsleSessions))!=NERR_Success)
|| ((err = _mgrpSessionLimit.AddAssociation( IDSP_RB_SESSIONS,
&_spgrpSessions ))
!= NERR_Success )
|| ((err = _pbChange.QueryError()) != NERR_Success )
|| ((err = _chkAllowPasswordSaves.QueryError()) != NERR_Success )
|| ((err = _chkAllowGuestLogons.QueryError()) != NERR_Success )
|| ((err = _chkAllowClearTextPasswords.QueryError()) != NERR_Success )
|| ((err = _mleTextMsg.QueryError()) != NERR_Success )
|| ((err = _sltServerName.QueryError()) != NERR_Success )
)
{
ReportError( err );
return;
}
//
// Just to be cool...
//
AUTO_CURSOR Cursor;
err = BASE_ELLIPSIS::Init();
if( err != NO_ERROR )
{
ReportError( err );
return;
}
//
// Set the caption to "SFM Server Attributes of Server".
//
err = ::SetCaption( this, IDS_CAPTION_ATTRIBUTES, pszServerName );
if( err != NERR_Success )
{
ReportError( err );
return;
}
//
// Get the server information.
//
PAFP_SERVER_INFO pAfpServerInfo;
err = ::AfpAdminServerGetInfo( _hServer, (LPBYTE*)&pAfpServerInfo );
if ( err != NO_ERROR )
{
ReportError( AFPERR_TO_STRINGID( err ) );
return;
}
//
// Set the information
//
_sltServerName.SetText( pAfpServerInfo->afpsrv_name );
_chkAllowPasswordSaves.SetCheck(
(INT)(pAfpServerInfo->afpsrv_options &
AFP_SRVROPT_ALLOWSAVEDPASSWORD ));
_chkAllowGuestLogons.SetCheck(
(INT)(pAfpServerInfo->afpsrv_options &
AFP_SRVROPT_GUESTLOGONALLOWED ));
_chkAllowClearTextPasswords.SetCheck(
(INT)(!(pAfpServerInfo->afpsrv_options &
AFP_SRVROPT_CLEARTEXTLOGONALLOWED )));
SetSessionLimit( pAfpServerInfo->afpsrv_max_sessions );
_mleTextMsg.SetText( pAfpServerInfo->afpsrv_login_msg );
//
// Direct the message edit control not to add end-of-line
// character from wordwrapped text lines.
//
_mleTextMsg.SetFmtLines(FALSE);
::AfpAdminBufferFree( pAfpServerInfo );
_pbChange.ClaimFocus();
}
/*******************************************************************
NAME: SERVER_PARAMETERS_DIALOG :: ~SERVER_PARAMETERS_DIALOG
SYNOPSIS: SERVER_PARAMETERS_DIALOG class destructor.
EXIT: The object is destroyed.
HISTORY:
NarenG 02-Oct-1993 Stole from Server Manager and folded
BASE_RES_DIALOG and FILES_DIALOG into one.
********************************************************************/
SERVER_PARAMETERS_DIALOG :: ~SERVER_PARAMETERS_DIALOG()
{
BASE_ELLIPSIS::Term();
} // SERVER_PARAMETERS_DIALOG :: ~SERVER_PARAMETERS_DIALOG
/*******************************************************************
NAME: SERVER_PARAMETERS_DIALOG :: OnCommand
SYNOPSIS: This method is called whenever a WM_COMMAND message
is sent to the dialog procedure.
ENTRY: cid - The control ID from the
generating control.
EXIT: The command has been handled.
RETURNS: BOOL - TRUE if we handled the command.
FALSE if we did not handle
the command.
HISTORY:
NarenG 02-Oct-1993 Stole from Server Manager and folded
BASE_RES_DIALOG and FILES_DIALOG into one.
********************************************************************/
BOOL SERVER_PARAMETERS_DIALOG :: OnCommand( const CONTROL_EVENT & event )
{
DWORD err;
if( event.QueryCid() == _pbChange.QueryCid() )
{
//
// Just to be cool...
//
AUTO_CURSOR Cursor;
//
// Bring up the change server name dialog
//
NLS_STR nlsServerName;
BOOL fOK;
if ( ( err = nlsServerName.QueryError() ) != NERR_Success )
{
::MsgPopup( this, err );
return FALSE;
}
_sltServerName.QueryText( &nlsServerName ) ;
CHANGE_SERVER_NAME_DLG *pDlg = new CHANGE_SERVER_NAME_DLG(
QueryHwnd(),
&nlsServerName );
if ( ( pDlg == NULL )
|| ((err = pDlg->QueryError()) != NERR_Success )
|| ((err = pDlg->Process( &fOK )) != NERR_Success ) )
{
err = err ? err : ERROR_NOT_ENOUGH_MEMORY;
}
delete pDlg;
pDlg = NULL;
if ( err != NO_ERROR )
{
::MsgPopup( this, err );
return FALSE;
}
else
{
if ( fOK )
{
_sltServerName.SetText( nlsServerName );
_dwParmNum |= AFP_SERVER_PARMNUM_NAME;
::MsgPopup( this, IDS_SERVERNAME_CHANGE, MPSEV_WARNING, MP_OK );
}
}
}
return DIALOG_WINDOW::OnCommand( event );
}
/*******************************************************************
NAME: SERVER_PARAMETERS_DIALOG::OnOK
SYNOPSIS: Validate all the information and create the volume.
ENTRY:
EXIT:
RETURNS:
NOTES:
HISTORY:
NarenG 12/15/92 Created
********************************************************************/
BOOL SERVER_PARAMETERS_DIALOG :: OnOK( VOID )
{
APIERR err;
//
// Just to be cool...
//
AUTO_CURSOR Cursor;
AFP_SERVER_INFO AfpServerInfo;
NLS_STR nlsServerName;
if ( ( err = nlsServerName.QueryError() ) != NERR_Success )
{
::MsgPopup( this, err );
Dismiss(FALSE) ;
return(FALSE);
}
//
// Set the server name
//
_sltServerName.QueryText( &nlsServerName );
AfpServerInfo.afpsrv_name = (LPWSTR)(nlsServerName.QueryPch());
//
// Get the logon message
//
UINT cb = _mleTextMsg.QueryTextSize();
NLS_STR nlsMsgText( cb );
//
// Was there any text ?
//
if ( cb <= sizeof(TCHAR) ) // always has a terminating NULL
{
AfpServerInfo.afpsrv_login_msg = NULL;
}
else
{
if ( (( err = nlsMsgText.QueryError() ) != NERR_Success ) ||
(( err = _mleTextMsg.QueryText(&nlsMsgText))!= NERR_Success ))
{
::MsgPopup( this, err );
Dismiss(FALSE) ;
return(TRUE);
}
if ( nlsMsgText.QueryTextLength() > AFP_MESSAGE_LEN )
{
::MsgPopup( this, IDS_MESSAGE_TOO_LONG );
_mleTextMsg.ClaimFocus();
_mleTextMsg.SelectString();
return(FALSE);
}
AfpServerInfo.afpsrv_login_msg = (LPWSTR)(nlsMsgText.QueryPch());
}
//
// Set the server options if the user changed it
//
AfpServerInfo.afpsrv_options = _chkAllowPasswordSaves.QueryCheck()
? AFP_SRVROPT_ALLOWSAVEDPASSWORD
: 0;
AfpServerInfo.afpsrv_options |= _chkAllowGuestLogons.QueryCheck()
? AFP_SRVROPT_GUESTLOGONALLOWED
: 0;
AfpServerInfo.afpsrv_options |= _chkAllowClearTextPasswords.QueryCheck()
? 0 : AFP_SRVROPT_CLEARTEXTLOGONALLOWED;
AfpServerInfo.afpsrv_max_sessions = QuerySessionLimit();
//
// Set this information
//
_dwParmNum |= ( AFP_SERVER_PARMNUM_LOGINMSG |
AFP_SERVER_PARMNUM_OPTIONS |
AFP_SERVER_PARMNUM_MAX_SESSIONS );
err = ::AfpAdminServerSetInfo( _hServer,
(LPBYTE)&AfpServerInfo,
_dwParmNum );
if ( err == NO_ERROR )
{
Dismiss( TRUE );
}
else
{
::MsgPopup( this, AFPERR_TO_STRINGID( err ) );
}
return TRUE;
}
/*******************************************************************
NAME: SERVER_PARAMETERS_DIALOG::QuerySessionLimit
SYNOPSIS: Get the user limit from the magic group
ENTRY:
EXIT:
RETURNS: The user limit stored in the user limit magic group
NOTES:
HISTORY:
NarenG 12/15/92 Created
********************************************************************/
DWORD SERVER_PARAMETERS_DIALOG::QuerySessionLimit( VOID ) const
{
switch ( _mgrpSessionLimit.QuerySelection() )
{
case IDSP_RB_UNLIMITED:
return( AFP_MAXSESSIONS );
case IDSP_RB_SESSIONS:
return( _spsleSessions.QueryValue() );
default:
//
// Should never get here but in case we do, return unlimited
//
return( AFP_MAXSESSIONS );
}
}
/*******************************************************************
NAME: SERVER_PARAMETERS_DIALOG::SetSessionLimit
SYNOPSIS: Sets the user limit on the magic group
ENTRY: dwSessionLimit - maximum number of users allowed
EXIT:
RETURNS:
NOTES:
HISTORY:
NarenG 12/15/92 Created
********************************************************************/
VOID SERVER_PARAMETERS_DIALOG::SetSessionLimit( DWORD dwSessionLimit )
{
if ( dwSessionLimit == AFP_MAXSESSIONS )
{
//
// Set selection to the Unlimited button
//
_mgrpSessionLimit.SetSelection( IDSP_RB_UNLIMITED );
}
else
{
//
// Set the sessions button to the value
//
_mgrpSessionLimit.SetSelection( IDSP_RB_SESSIONS );
_spsleSessions.SetValue( dwSessionLimit );
_spsleSessions.Update();
}
}
/*******************************************************************
NAME: SERVER_PARAMETERS_DIALOG::QueryHelpContext
SYNOPSIS: Query the help context of the dialog
ENTRY:
EXIT:
RETURNS: Return the help context of the dialog
NOTES:
HISTORY:
NarenG 12/15/92 Created
********************************************************************/
ULONG SERVER_PARAMETERS_DIALOG::QueryHelpContext( VOID )
{
return HC_SERVER_PARAMETERS_DIALOG;
}