windows-nt/Source/XPSP1/NT/net/mmc/dhcp/cred.cpp
2020-09-26 16:20:57 +08:00

181 lines
4.9 KiB
C++

/**********************************************************************/
/** Microsoft Windows/NT **/
/** Copyright(c) Microsoft Corporation, 1997 - 2000 **/
/**********************************************************************/
/*
cred.cpp
This file contains all of the prototypes for the
credentials dialog used for DDNS.
FILE HISTORY:
*/
#include "stdafx.h"
#include "cred.h"
#include "lsa.h" // RtlEncodeW/RtlDecodeW
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CCredentials dialog
CCredentials::CCredentials(CWnd* pParent /*=NULL*/)
: CBaseDialog(CCredentials::IDD, pParent)
{
//{{AFX_DATA_INIT(CCredentials)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CCredentials::DoDataExchange(CDataExchange* pDX)
{
CBaseDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCredentials)
DDX_Control(pDX, IDOK, m_buttonOk);
DDX_Control(pDX, IDC_EDIT_CRED_USERNAME, m_editUsername);
DDX_Control(pDX, IDC_EDIT_CRED_PASSWORD2, m_editPassword2);
DDX_Control(pDX, IDC_EDIT_CRED_PASSWORD, m_editPassword);
DDX_Control(pDX, IDC_EDIT_CRED_DOMAIN, m_editDomain);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCredentials, CBaseDialog)
//{{AFX_MSG_MAP(CCredentials)
ON_EN_CHANGE(IDC_EDIT_CRED_USERNAME, OnChangeEditCredUsername)
ON_EN_CHANGE(IDC_EDIT_CRED_DOMAIN, OnChangeEditCredDomain)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCredentials message handlers
BOOL CCredentials::OnInitDialog()
{
CBaseDialog::OnInitDialog();
CString strUsername, strDomain, dummyPasswd;
LPTSTR pszUsername, pszDomain;
pszUsername = strUsername.GetBuffer(MAX_PATH);
pszDomain = strDomain.GetBuffer(MAX_PATH);
// call the DHCP api to get the current username and domain
DWORD err = DhcpServerQueryDnsRegCredentials((LPWSTR) ((LPCTSTR) m_strServerIp),
MAX_PATH,
pszUsername,
MAX_PATH,
pszDomain);
strUsername.ReleaseBuffer();
strDomain.ReleaseBuffer();
if (err == ERROR_SUCCESS)
{
m_editUsername.SetWindowText(strUsername);
m_editDomain.SetWindowText(strDomain);
// set the password fields to something
dummyPasswd = _T("xxxxxxxxxx");
m_editPassword.SetWindowText( dummyPasswd );
m_editPassword2.SetWindowText( dummyPasswd );
}
else
{
::DhcpMessageBox(err);
}
m_fNewUsernameOrDomain = FALSE;
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CCredentials::OnOK()
{
CString strUsername, strDomain, strPassword1, strPassword2, dummyPasswd;
dummyPasswd = _T("xxxxxxxxxx");
// grab the username and domain
m_editUsername.GetWindowText(strUsername);
m_editDomain.GetWindowText(strDomain);
// grab the passwords and make sure they match
m_editPassword.GetWindowText(strPassword1);
m_editPassword2.GetWindowText(strPassword2);
if (strPassword1.Compare(strPassword2) != 0)
{
// passwords don't match
AfxMessageBox(IDS_PASSWORDS_DONT_MATCH);
m_editPassword.SetFocus();
return;
}
//
// run through the following code if user changed passwd.
//
if ( strPassword2 != dummyPasswd )
{
// encode the password
unsigned char ucSeed = DHCP_ENCODE_SEED;
LPTSTR pszPassword = strPassword1.GetBuffer((strPassword1.GetLength() + 1) * sizeof(TCHAR));
RtlEncodeW(&ucSeed, pszPassword);
// send to the DHCP api.
DWORD err = ERROR_SUCCESS;
err = DhcpServerSetDnsRegCredentials((LPWSTR) ((LPCTSTR) m_strServerIp),
(LPWSTR) ((LPCTSTR) strUsername),
(LPWSTR) ((LPCTSTR) strDomain),
(LPWSTR) ((LPCTSTR) pszPassword));
if (err != ERROR_SUCCESS)
{
// something failed, notify the user
::DhcpMessageBox(err);
return;
}
}
CBaseDialog::OnOK();
}
void CCredentials::OnChangeEditCredUsername()
{
if (!m_fNewUsernameOrDomain)
{
m_fNewUsernameOrDomain = TRUE;
m_editPassword.SetWindowText(_T(""));
m_editPassword2.SetWindowText(_T(""));
}
}
void CCredentials::OnChangeEditCredDomain()
{
if (!m_fNewUsernameOrDomain)
{
m_fNewUsernameOrDomain = TRUE;
m_editPassword.SetWindowText(_T(""));
m_editPassword2.SetWindowText(_T(""));
}
}
void CCredentials::SetServerIp(LPCTSTR pszServerIp)
{
m_strServerIp = pszServerIp;
}