diff options
| author | Sam Hartman <hartmans@mit.edu> | 2011-09-28 21:02:14 +0000 |
|---|---|---|
| committer | Sam Hartman <hartmans@mit.edu> | 2011-09-28 21:02:14 +0000 |
| commit | caef99b21536d9e8c2f9c637fcf020b4e082db5d (patch) | |
| tree | b360ec8449876ea170691685cde758d9849fc8ef /src/windows/leash/Krb4RealmHostMaintenance.cpp | |
| parent | 8481c14298a1886f63bec0d7cdfd800a86b4c127 (diff) | |
Initial import of KFW 3.2.2 Leash32 code
Signed-off-by: Alexey Melnikov <aamelnikov@gmail.com>
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@25278 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/windows/leash/Krb4RealmHostMaintenance.cpp')
| -rw-r--r-- | src/windows/leash/Krb4RealmHostMaintenance.cpp | 373 |
1 files changed, 373 insertions, 0 deletions
diff --git a/src/windows/leash/Krb4RealmHostMaintenance.cpp b/src/windows/leash/Krb4RealmHostMaintenance.cpp new file mode 100644 index 000000000..7e8ad4f07 --- /dev/null +++ b/src/windows/leash/Krb4RealmHostMaintenance.cpp @@ -0,0 +1,373 @@ +// ************************************************************************************** +// File: Krb4RealmHostMaintenance.cpp +// By: Arthur David Leather +// Created: 12/02/98 +// Copyright @1998 Massachusetts Institute of Technology - All rights reserved. +// Description: CPP file for Krb4RealmHostMaintenance.h. Contains variables and functions +// for Kerberos Four Properties +// +// History: +// +// MM/DD/YY Inits Description of Change +// 12/02/98 ADL Original +// ************************************************************************************** + + +#include "stdafx.h" +#include "leash.h" +#include "KrbProperties.h" +#include "Krb4Properties.h" +#include "Krb4AddToRealmHostList.h" +#include "Krb4RealmHostMaintenance.h" +#include "Krb4EditRealmHostList.h" +#include "lglobals.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#endif + +///////////////////////////////////////////////////////////////////////////// +// CKrb4RealmHostMaintenance dialog + + +IMPLEMENT_DYNCREATE(CKrb4RealmHostMaintenance, CPropertyPage) + +CKrb4RealmHostMaintenance::CKrb4RealmHostMaintenance() : CPropertyPage(CKrb4RealmHostMaintenance::IDD) +{ + m_defectiveLines = 0; + m_initDnsKdcLookup = m_newDnsKdcLookup = 0; +} + +CKrb4RealmHostMaintenance::~CKrb4RealmHostMaintenance() +{ +} + +void CKrb4RealmHostMaintenance::DoDataExchange(CDataExchange* pDX) +{ + CPropertyPage::DoDataExchange(pDX); + //{{AFX_DATA_MAP(CKrb4RealmHostMaintenance) + DDX_Control(pDX, IDC_LIST_KRB4_REALM_HOST, m_RealmHostList); + //}}AFX_DATA_MAP +} + + +BEGIN_MESSAGE_MAP(CKrb4RealmHostMaintenance, CPropertyPage) + //{{AFX_MSG_MAP(CKrb4RealmHostMaintenance) + ON_BN_CLICKED(IDC_BUTTON_KRB4_REALM_HOST_ADD, OnButtonRealmHostAdd) + ON_BN_CLICKED(IDC_BUTTON_KRB4_REALM_HOST_EDIT, OnButtonRealmHostEdit) + ON_BN_CLICKED(ID_BUTTON_KRB4_REALM_HOST_REMOVE, OnButtonRealmHostRemove) + ON_LBN_SELCHANGE(IDC_LIST_KRB4_REALM_HOST, OnSelchangeListRemoveHost) + ON_LBN_DBLCLK(IDC_LIST_KRB4_REALM_HOST, OnDblclkListRemoveHost) + ON_BN_CLICKED(IDC_BUTTON_REALMHOST_MAINT_HELP2, OnButtonRealmhostMaintHelp2) + ON_BN_CLICKED(IDC_KRB4_DNS_KDC, OnCheckDnsKdcLookup) + //}}AFX_MSG_MAP +END_MESSAGE_MAP() + +///////////////////////////////////////////////////////////////////////////// +// CKrb4RealmHostMaintenance message handlers + +BOOL CKrb4RealmHostMaintenance::OnInitDialog() +{ + CPropertyPage::OnInitDialog(); + + CStdioFile krbCon; + if (!krbCon.Open(CKrbProperties::m_krbPath, CFile::modeReadWrite)) + { // can't find file, so lets set some defaults + + m_RealmHostList.AddString(KRB_REALM " " KRB_MASTER); + } + else + { + memset(lineBuf, '\0', sizeof(lineBuf)); + krbCon.ReadString(lineBuf, sizeof(lineBuf)); + while (TRUE) + { + if (!krbCon.ReadString(lineBuf, sizeof(lineBuf))) + break; + + *(lineBuf + strlen(lineBuf) - 1) = 0; + + if (!strchr(lineBuf, ' ') && !strchr(lineBuf, '\t')) + { // found a defective line + m_defectiveLines++; + } + + if ( !strncmp(".KERBEROS.OPTION.",lineBuf,17) ) { + char * p = &lineBuf[17]; + while (isspace(*p)) + p++; + if (!strcmp("dns",p)) + m_initDnsKdcLookup = m_newDnsKdcLookup = 1; + } else { + if (LB_ERR == m_RealmHostList.AddString(lineBuf)) + { + LeashErrorBox("OnInitDialog::Can't read Configuration File", + CKrbProperties::m_krbPath); + krbCon.Close(); + return FALSE; + } + } + } + + krbCon.Close(); + } + + m_RealmHostList.SetCurSel(0); + + if (!m_RealmHostList.GetCount()) + { + GetDlgItem(ID_BUTTON_KRB4_REALM_HOST_REMOVE)->EnableWindow(FALSE); + GetDlgItem(IDC_BUTTON_KRB4_REALM_HOST_EDIT)->EnableWindow(FALSE); + } + + return TRUE; +} + +BOOL CKrb4RealmHostMaintenance::OnApply() +{ + CStdioFile krbCon; + if (!krbCon.Open(CKrbProperties::m_krbPath, CFile::modeCreate | + CFile::modeNoTruncate | + CFile::modeReadWrite)) + { + LeashErrorBox("OnApply::Can't open Configuration File", + CKrbProperties::m_krbPath); + return TRUE; + } + + memset(lineBuf, '\0', sizeof(lineBuf)); + if (!krbCon.ReadString(lineBuf, sizeof(lineBuf))) + { +//-----ADL----///strcpy(lineBuf, CKrb4ConfigOptions::m_newDefaultRealm); + strcat(lineBuf, "\n"); + } + + krbCon.SetLength(0); + krbCon.WriteString(lineBuf); + for (INT maxItems = m_RealmHostList.GetCount(), item = 0; item < maxItems; item++) + { + memset(lineBuf, '\0', sizeof(lineBuf)); + if (!m_RealmHostList.GetText(item, lineBuf)) + break; + + krbCon.WriteString(lineBuf); + krbCon.WriteString("\n"); + } + + if ( m_newDnsKdcLookup ) + krbCon.WriteString(".KERBEROS.OPTION. dns\n"); + + krbCon.Close(); + return TRUE; +} + +void CKrb4RealmHostMaintenance::OnOK() +{ + CPropertyPage::OnOK(); +} + +void CKrb4RealmHostMaintenance::OnCancel() +{ + CPropertyPage::OnCancel(); +} + +void CKrb4RealmHostMaintenance::OnCheckDnsKdcLookup() +{ + m_newDnsKdcLookup = (BOOL)IsDlgButtonChecked(IDC_KRB4_DNS_KDC); + SetModified(TRUE); +} + +void CKrb4RealmHostMaintenance::ResetDefaultRealmComboBox() +{ // krb4 is loaded without krb5 + CHAR lineBuf[REALM_SZ + MAX_HSTNM + 20]; + + int maxItems = m_RealmHostList.GetCount(); + + CKrbConfigOptions::m_krbRealmEditbox.ResetContent(); + + for (int xItems = 0; xItems < maxItems; xItems++) + { + m_RealmHostList.GetText(xItems, lineBuf); + + LPSTR space = strchr(lineBuf, ' '); + if (space) + *space = 0; + else + ASSERT(0); + + if (CB_ERR == CKrbConfigOptions::m_krbRealmEditbox.FindStringExact(-1, lineBuf)) + { // no dups + if (LB_ERR == CKrbConfigOptions::m_krbRealmEditbox.AddString(lineBuf)) + { + MessageBox("OnInitDialog::Can't add to Kerberos Realm Combobox", + "Leash", MB_OK); + return; + } + } + } + + CHAR krbhst[MAX_HSTNM + 1]; + CHAR krbrlm[REALM_SZ + 1]; + + strcpy(krbrlm, CKrbConfigOptions::m_newDefaultRealm); + memset(krbhst, '\0', sizeof(krbhst)); + + // Check for Host + // don't use KRB4 - krb_get_krbhst - would have to re-logon, on file location + // change, to use this function + extern int krb_get_krbhst(char* h, char* r, int n); + if (KFAILURE == krb_get_krbhst(krbhst, krbrlm, 1)) + { + MessageBox("We can't find the Host Server for your Default Realm!!!", + "Leash", MB_OK); + return; + } + + CKrbConfigOptions::m_hostServer = krbhst; +} + +void CKrb4RealmHostMaintenance::OnButtonRealmHostAdd() +{ + CKrb4AddToRealmHostList addToRealmHostList; + + if (IDOK == addToRealmHostList.DoModal()) + { + if (addToRealmHostList.GetNewRealm().IsEmpty()) + ASSERT(0); + + CString newLine; + newLine = addToRealmHostList.GetNewRealm() + " " + addToRealmHostList.GetNewHost(); + + if (addToRealmHostList.GetNewAdmin()) + newLine += " admin server"; + + // We don't want duplicate items in Listbox + if (LB_ERR != m_RealmHostList.FindStringExact(-1, newLine)) + { // found duplicate item in Listbox + LeashErrorBox("OnButtonRealmHostAdd::Found a Duplicate Item!\nCan't add to List", + newLine); + return; + } + + + m_RealmHostList.InsertString(0, newLine); + m_RealmHostList.SetCurSel(0); + SetModified(TRUE); + + ResetDefaultRealmComboBox(); + + if (1 == m_RealmHostList.GetCount()) + { + GetDlgItem(ID_BUTTON_KRB4_REALM_HOST_REMOVE)->EnableWindow(); + GetDlgItem(IDC_BUTTON_KRB4_REALM_HOST_EDIT)->EnableWindow(); + } + } +} + +void CKrb4RealmHostMaintenance::OnButtonRealmHostEdit() +{ + INT selItemIndex = m_RealmHostList.GetCurSel(); + LPSTR pSelItem = new char[m_RealmHostList.GetTextLen(selItemIndex) + 1]; + if (!pSelItem) + ASSERT(0); + + CString selItem; + m_RealmHostList.GetText(selItemIndex, selItem); + strcpy(pSelItem, selItem); + + CKrb4EditRealmHostList editRealmHostList(pSelItem); + delete [] pSelItem; + + if (IDOK == editRealmHostList.DoModal()) + { + CString editedItem = editRealmHostList.GetEditedItem(); + if (0 != selItem.CompareNoCase(editedItem) && + LB_ERR != m_RealmHostList.FindStringExact(-1, editedItem)) + { + LeashErrorBox("OnButtonRealmHostEdit::Found a Duplicate!\nCan't add to List", + editedItem); + + return; + } + + m_RealmHostList.DeleteString(selItemIndex); + m_RealmHostList.InsertString(selItemIndex, editRealmHostList.GetEditedItem()); + m_RealmHostList.SetCurSel(selItemIndex); + SetModified(TRUE); + + ResetDefaultRealmComboBox(); + } +} + +void CKrb4RealmHostMaintenance::OnButtonRealmHostRemove() +{ + if (IDYES != AfxMessageBox("You are about to remove an item from the list!\n\nContinue?", + MB_YESNO)) + return; + + INT curSel = m_RealmHostList.GetCurSel(); + m_RealmHostList.DeleteString(curSel); // Single Sel Listbox + + if (-1 == m_RealmHostList.SetCurSel(curSel)) + m_RealmHostList.SetCurSel(curSel - 1); + + SetModified(TRUE); + + ResetDefaultRealmComboBox(); + + if (!m_RealmHostList.GetCount()) + { + GetDlgItem(ID_BUTTON_KRB4_REALM_HOST_REMOVE)->EnableWindow(FALSE); + GetDlgItem(IDC_BUTTON_KRB4_REALM_HOST_EDIT)->EnableWindow(FALSE); + } + + /* For Mult. Sel Listbox + const LONG MAX_SEL_BUF = m_RealmHostList.GetSelCount(); + LPINT selectBuf = new INT[MAX_SEL_BUF]; + + for (INT maxSelected = m_RealmHostList.GetSelItems(MAX_SEL_BUF, selectBuf), del=0, sel=0; + sel < maxSelected; sel++) + { + if (LB_ERR == m_RealmHostList.DeleteString(*(selectBuf + sel) - del)) + MessageBox("Help", "Error", MB_OK); + else + del++; + } + + delete selectBuf; + */ +} + +void CKrb4RealmHostMaintenance::OnSelchangeListRemoveHost() +{ + //SetModified(TRUE); +} + + +void CKrb4RealmHostMaintenance::OnDblclkListRemoveHost() +{ + OnButtonRealmHostEdit(); +} + +BOOL CKrb4RealmHostMaintenance::PreTranslateMessage(MSG* pMsg) +{ + if (m_defectiveLines) + { + if (m_defectiveLines == 1) + LeashErrorBox("Found a defective entry in file", + CKrbProperties::m_krbPath, "Warning"); + else if (m_defectiveLines > 1) + LeashErrorBox("Found more then one defective entry in file", + CKrbProperties::m_krbPath, "Warning"); + } + + m_defectiveLines = 0; + return CPropertyPage::PreTranslateMessage(pMsg); +} + +void CKrb4RealmHostMaintenance::OnButtonRealmhostMaintHelp2() +{ + MessageBox("No Help Available!", "Note", MB_OK); +} |
