549 lines
12 KiB
C++
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;
|
|
}
|
|
|