class='cKeyword'>#include "stdafx.h"
class='cKeyword'>#include "guiwin32.h"
class='cKeyword'>#include "UserInputDialog.h"
class='cKeyword'>#include <stdlib.h>
class='cKeyword'>#include <stdio.h>
class='cKeyword'>#include <memory.h>
class='cKeyword'>#include <string.h>
class='cKeyword'>#include <ntypes.h>
class='cKeyword'>#include <defines.h>
class='cKeyword'>#include <unicode.h>
class='cKeyword'>class='cKeyword'>#ifdef _DEBUG
class='cKeyword'>#define new DEBUG_NEW
class='cKeyword'>#undef THIS_FILE
static class='cKeyword'>char THIS_FILE[] = __FILE__;
class='cKeyword'>#endif
BEGIN_MESSAGE_MAP(CGuiwin32App, CWinApp)
END_MESSAGE_MAP()
CGuiwin32App::CGuiwin32App()
{
m_processCount = 0;
}
CGuiwin32App guiwin32App;
BOOL CGuiwin32App::InitInstance()
{
BOOL rVal = CWinApp::InitInstance();
return rVal;
}
BOOL WINAPI CGuiwin32App::DllMain( HINSTANCE hinstDLL, DWORD dwReason, LPVOID howLoaded )
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
if (dwReason == DLL_PROCESS_ATTACH )
{
m_processCount++;
}
else if ( dwReason == DLL_PROCESS_DETACH )
{
if ( m_processCount > 0 )
m_processCount--;
}
return TRUE;
}
int CGuiwin32App::SetupLCMDLL()
{
ourProcessID = (long) GetCurrentProcessId();
return 0;
}
int CGuiwin32App::TakeDownLCMDLL()
{
return 0;
}
int getUserInput( int flags, CString **pwd, int *changePwd, CString **newPwd )
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
UserInputDialog* dlg;
dlg = new UserInputDialog( flags & PASSWORD_CHANGE );
if ( dlg->DoModal() == IDOK ) {
*pwd = new CString(dlg->m_UserInput);
*changePwd = (dlg->m_ChangePassword == TRUE);
*newPwd = new CString(dlg->m_newPwd);
delete dlg;
return IDOK;
} else {
*changePwd = 0;
delete dlg;
return IDCANCEL;
}
}
void showPwdChanged()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CString title,msg;
title.LoadString(IDS_PWD_CHANGED_TITLE);
msg.LoadString(IDS_PWD_CHANGED);
MessageBox( NULL, msg, title, MB_OK );
}
void showChangePasswordFailed()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CString title,msg;
title.LoadString(IDS_PWD_CHANGED_TITLE);
msg.LoadString(IDS_PWD_CHANGED_TITLE);
MessageBox( NULL, msg, title, MB_OK );
}
int LCM00000001( MAF_Handle mh ) {
nint32 err = 0, mafErr =0;
CPWD_INFO pwdInfo;
unicode puPassword[MAX_CLEAR_PWD_CHARS] = {0};
size_t passwordLen = 0;
CString *userIn = NULL, *newPwd = NULL;
int changePwd=0;
class='cKeyword'>char pwd[128];
size_t replyLen;
long ourProcessID = GetCurrentProcessId();
mafErr = MAF_Begin (mh);
if (mafErr)
{
return mafErr;
}
passwordLen=sizeof(puPassword);
if (MAF_GetAttribute(mh, NMAS_AID_PASSWORD, NULL, &passwordLen, puPassword) == 0
&& passwordLen > sizeof(unicode))
{
MAF_PutAttribute(mh, NMAS_AID_PASSWORD, NULL, 0, NULL);
userIn = new CString((LPCWSTR)puPassword);
}
else
{
if ( getUserInput( 0, &userIn, &changePwd, &newPwd ) != IDOK )
{
err = NMAS_E_LOGIN_CANCELED;
goto REPORT_ERROR;
}
}
passwordLen = userIn->GetLength();
if (passwordLen < sizeof(pwd))
{
strcpy(pwd, LPCTSTR(*userIn));
pwd[passwordLen] = (class='cKeyword'>char)NULL;
}
else
{
err = NMAS_E_BUFFER_OVERFLOW;
goto REPORT_ERROR;
}
pwdInfo.error = 0;
pwdInfo.infoFlags = 0;
if (changePwd)
{
pwdInfo.infoFlags |= PASSWORD_CHANGE;
}
mafErr = MAF_Write(mh, sizeof(pwdInfo), &pwdInfo);
if (mafErr)
{
goto MAF_ERROR;
}
mafErr = MAF_XWrite(mh, passwordLen, pwd);
memset(pwd, 0xCC, sizeof(pwd));
if (mafErr)
{
goto MAF_ERROR;
}
mafErr = MAF_Read(mh, &replyLen, &err);
if (mafErr || replyLen < 4 || err)
{
goto MAF_ERROR;
}
if (changePwd)
{
passwordLen = newPwd->GetLength();
if (passwordLen < sizeof(pwd))
{
strcpy(pwd, LPCTSTR(*newPwd));
pwd[passwordLen] = (class='cKeyword'>char)NULL;
}
else
{
err = NMAS_E_BUFFER_OVERFLOW;
goto REPORT_ERROR;
}
mafErr = MAF_XWrite( mh, passwordLen, pwd);
memset(pwd, 0xCC, sizeof(pwd));
if (mafErr)
{
goto MAF_ERROR;
}
mafErr = MAF_Read( mh, &replyLen, &err);
if (!mafErr && replyLen >= 4 && !err)
{
showPwdChanged();
}
else
{
showChangePasswordFailed();
}
}
REPORT_ERROR:
if (err)
{
MAF_Write(mh, 4, &err);
}
MAF_ERROR:
if (!err)
{
err = mafErr;
}
if (userIn != NULL)
{
delete userIn;
}
if (newPwd != NULL)
{
delete newPwd;
}
MAF_End (mh, err, 0, 0);
return mafErr;
}