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.
178 lines
5.9 KiB
178 lines
5.9 KiB
#include "stdafx.h"
|
|
#include "resource.h"
|
|
#include "shlwapi.h"
|
|
#include "validate.h"
|
|
|
|
int CValidate::ValidateParams(HWND hDlg, HINSTANCE hInst, TCHAR *szDesc, BOOL bServer)
|
|
{
|
|
TCHAR szTitle[MAX_PATH] = _T(""), szText[MAX_PATH] = _T("");
|
|
LoadString(hInst, IDS_MAINWINDOWTITLE, szTitle, SIZEOF_TCHARBUFFER(szTitle));
|
|
|
|
LoadString(hInst, bServer ? IDS_INVALID_SERVER_NAME : IDS_INVALID_DOMAIN_NAME,
|
|
szText, SIZEOF_TCHARBUFFER(szText));
|
|
|
|
if (!*szDesc)
|
|
{
|
|
TCHAR szText[MAX_PATH] = _T("");
|
|
LoadString(hInst, IDS_E_SPECIFY_SRV, szText, SIZEOF_TCHARBUFFER(szText));
|
|
MessageBox(hDlg, szText, szTitle, MB_OK|MB_ICONSTOP);
|
|
return 1;
|
|
}
|
|
|
|
if (bServer) //The characters cannot contain even spaces and tabs.
|
|
{
|
|
if ( (NULL != _tcschr(szDesc, _T(' '))) || (NULL != _tcschr(szDesc, _T('\t'))) )
|
|
{
|
|
MessageBox(hDlg, szText, szTitle, MB_OK|MB_ICONSTOP);
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
//Kill all the leading spaces and trailing spaces.
|
|
StrTrim(szDesc, L" \t");
|
|
|
|
//Not all characters can be white spaces. Now that all the leading and
|
|
//trailing spaces are removed, verify if the string has become empty.
|
|
if (!*szDesc)
|
|
{
|
|
TCHAR szText[MAX_PATH] = _T("");
|
|
LoadString(hInst, IDS_ALL_SPACES, szText, SIZEOF_TCHARBUFFER(szText));
|
|
MessageBox(hDlg, szText, szTitle, MB_OK|MB_ICONSTOP);
|
|
return 1;
|
|
}
|
|
|
|
//The characters ; : " < > * + = \ | ? , are illegal in machine name.
|
|
while (*szDesc)
|
|
{
|
|
if ( (*szDesc == _T(';')) || (*szDesc == _T(':')) || (*szDesc == _T('"')) || (*szDesc == _T('<')) ||
|
|
(*szDesc == _T('>')) || (*szDesc == _T('*')) || (*szDesc == _T('+')) || (*szDesc == _T('=')) ||
|
|
(*szDesc == _T('\\')) || (*szDesc == _T('|')) || (*szDesc == _T(',')) || (*szDesc == _T('?')) )
|
|
{
|
|
MessageBox(hDlg, szText, szTitle, MB_OK|MB_ICONSTOP);
|
|
return 1;
|
|
}
|
|
szDesc = CharNext(szDesc);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
BOOL CValidate::IsValidUserName(TCHAR *szDesc)
|
|
{
|
|
//A user name cannot consist solely of periods (.) and spaces.
|
|
//NOTE:- " " is invalid. ")))))" is invalid.
|
|
//But "(((.) )" is a valid string. (Confusion?)
|
|
|
|
TCHAR szTemp[CL_MAX_USERNAME_LENGTH + 1] = _T("");
|
|
|
|
lstrcpy(szTemp, szDesc);
|
|
StrTrim(szTemp, _T(" "));
|
|
if (!*szTemp)
|
|
return FALSE;
|
|
|
|
lstrcpy(szTemp, szDesc);
|
|
StrTrim(szTemp, _T("."));
|
|
if (!*szTemp)
|
|
return FALSE;
|
|
|
|
lstrcpy(szTemp, szDesc);
|
|
StrTrim(szTemp, _T("("));
|
|
if (!*szTemp)
|
|
return FALSE;
|
|
|
|
lstrcpy(szTemp, szDesc);
|
|
StrTrim(szTemp, _T(")"));
|
|
if (!*szTemp)
|
|
return FALSE;
|
|
|
|
return TRUE; //OK
|
|
}
|
|
|
|
int CValidate::ValidateUserName(HWND hwnd, HINSTANCE hInst, TCHAR *szDesc)
|
|
{
|
|
TCHAR szTitle[MAX_PATH] = _T(""), szText[MAX_PATH] = _T("");
|
|
LoadString(hInst, IDS_MAINWINDOWTITLE, szTitle, SIZEOF_TCHARBUFFER(szTitle));
|
|
|
|
//At this stage the user name can be empty.
|
|
if (!*szDesc)
|
|
return 0; //No problems.
|
|
|
|
if (*szDesc)
|
|
{
|
|
if (!IsValidUserName(szDesc))
|
|
{
|
|
LoadString(hInst, IDS_INVALID_PARAMS, szText, SIZEOF_TCHARBUFFER(szText));
|
|
MessageBox(hwnd, szText, szTitle, MB_OK|MB_ICONSTOP);
|
|
return 1;
|
|
}
|
|
}
|
|
//The characters " / \ [ ] : ; | = , + * ? < > are illegal in user name.
|
|
while (*szDesc)
|
|
{
|
|
if ( (*szDesc == _T('"')) || (*szDesc == _T('/')) || (*szDesc == _T('\\')) || (*szDesc == _T('[')) ||
|
|
(*szDesc == _T(']')) || (*szDesc == _T(':')) || (*szDesc == _T(';')) || (*szDesc == _T('|')) ||
|
|
(*szDesc == _T('=')) || (*szDesc == _T(',')) || (*szDesc == _T('+')) ||(*szDesc == _T('*')) ||
|
|
(*szDesc == _T('?')) || (*szDesc == _T('<')) || (*szDesc == _T('>')))
|
|
{
|
|
LoadString(hInst, IDS_INVALID_USER_NAME, szText, SIZEOF_TCHARBUFFER(szText));
|
|
MessageBox(hwnd, szText, szTitle, MB_OK|MB_ICONSTOP);
|
|
return 1;
|
|
}
|
|
szDesc = CharNext(szDesc);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
BOOL
|
|
CValidate::Validate(HWND hDlg, HINSTANCE hInst)
|
|
{
|
|
//Validate the description.
|
|
TCHAR szBuf[MAX_PATH] = _T("");
|
|
GetDlgItemText(hDlg, IDC_DESCRIPTION, szBuf, SIZEOF_TCHARBUFFER(szBuf) - 1);
|
|
|
|
TCHAR szTitle[MAX_PATH] = _T("");
|
|
LoadString(hInst, IDS_MAINWINDOWTITLE, szTitle, SIZEOF_TCHARBUFFER(szTitle));
|
|
|
|
//Do a validation for the server name entered.
|
|
GetDlgItemText(hDlg, IDC_SERVER, szBuf, SIZEOF_TCHARBUFFER(szBuf) - 1);
|
|
if (0 < ValidateParams(hDlg, hInst, szBuf, TRUE))
|
|
{
|
|
HWND hEdit = GetDlgItem(hDlg, IDC_SERVER);
|
|
SetFocus(hEdit);
|
|
SendMessage(hEdit, EM_SETSEL, (WPARAM) 0, (LPARAM) -1);
|
|
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, TRUE);
|
|
return FALSE;
|
|
}
|
|
|
|
GetDlgItemText(hDlg, IDC_USERNAME, szBuf, SIZEOF_TCHARBUFFER(szBuf) - 1);
|
|
|
|
if (0 < ValidateUserName(hDlg, hInst, szBuf))
|
|
{
|
|
HWND hEdit= GetDlgItem(hDlg, IDC_USERNAME);
|
|
SendMessage(hEdit, EM_SETSEL, (WPARAM) 0, (LPARAM) -1);
|
|
SetFocus(hEdit);
|
|
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, TRUE);
|
|
return FALSE;
|
|
}
|
|
|
|
GetDlgItemText(hDlg, IDC_DOMAIN, szBuf, SIZEOF_TCHARBUFFER(szBuf) - 1);
|
|
|
|
if (*szBuf)
|
|
{
|
|
if (0 < ValidateParams(hDlg, hInst, szBuf))
|
|
{
|
|
HWND hEdit = GetDlgItem(hDlg, IDC_DOMAIN);
|
|
//Now the domain name is stripped off any leading and trailing
|
|
//spaces and tabs. Set this as the new text.
|
|
SetDlgItemText(hDlg, IDC_DOMAIN, szBuf);
|
|
SetFocus(hEdit);
|
|
SendMessage(hEdit, EM_SETSEL, (WPARAM) 0, (LPARAM) -1);
|
|
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, TRUE);
|
|
return FALSE;
|
|
}
|
|
SetDlgItemText(hDlg, IDC_DOMAIN, szBuf);
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|