/**********************************************************************/ /** 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 #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 extern "C" { #include #include } #include #include #include #include #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; }