summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2012-06-05 03:15:33 -0500
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2012-06-05 03:15:33 -0500
commitbf4dbda9682241deffb3ec704e2597a12496d2a8 (patch)
treed7c01382facf23b41713044b6d3cca0d9b80a094
parent8e51437b6331c9ebabd7d5f5db93c825eb8509c5 (diff)
downloadkcmldapcontroller-bf4dbda9.tar.gz
kcmldapcontroller-bf4dbda9.zip
Add (inactive) certificate configuration page
-rw-r--r--src/Makefile.am2
-rw-r--r--src/certconfigpage.cpp119
-rw-r--r--src/certconfigpage.h54
-rw-r--r--src/certconfigpagedlg.ui206
-rw-r--r--src/ldapcontroller.cpp3
-rw-r--r--src/realmintropagedlg.ui2
-rw-r--r--src/realmwizard.cpp29
-rw-r--r--src/realmwizard.h2
8 files changed, 405 insertions, 12 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 04a1a71..da959c7 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -4,7 +4,7 @@ METASOURCES = AUTO
# Install this plugin in the KDE modules directory
kde_module_LTLIBRARIES = kcm_ldapcontroller.la
-kcm_ldapcontroller_la_SOURCES = ldapcontroller.cpp ldapcontrollerconfigbase.ui realmwizard.cpp realmintropagedlg.ui realmintropage.cpp realmconfigpagedlg.ui realmconfigpage.cpp realmfinishpagedlg.ui realmfinishpage.cpp processingdialog.cpp sha1.cc
+kcm_ldapcontroller_la_SOURCES = ldapcontroller.cpp ldapcontrollerconfigbase.ui realmwizard.cpp realmintropagedlg.ui certconfigpagedlg.ui certconfigpage.cpp realmintropage.cpp realmconfigpagedlg.ui realmconfigpage.cpp realmfinishpagedlg.ui realmfinishpage.cpp processingdialog.cpp sha1.cc
kcm_ldapcontroller_la_LIBADD = -lkio $(LIB_TDEUI) -ltdeldap
kcm_ldapcontroller_la_LDFLAGS = -avoid-version -module -no-undefined \
$(all_libraries)
diff --git a/src/certconfigpage.cpp b/src/certconfigpage.cpp
new file mode 100644
index 0000000..1e94336
--- /dev/null
+++ b/src/certconfigpage.cpp
@@ -0,0 +1,119 @@
+/***************************************************************************
+ * Copyright (C) 2012 by Timothy Pearson *
+ * kb9vqf@pearsoncomputing.net *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+
+#include <tqstringlist.h>
+#include <tqlabel.h>
+#include <tqmap.h>
+
+#include <kapplication.h>
+#include <ksimpleconfig.h>
+#include <klocale.h>
+#include <kdebug.h>
+#include <kstandarddirs.h>
+#include <kiconloader.h>
+#include <dcopclient.h>
+#include <kprocess.h>
+#include <klineedit.h>
+#include <ktextedit.h>
+#include <kwizard.h>
+#include <kdialogbase.h>
+#include <tqpushbutton.h>
+#include <tqradiobutton.h>
+#include <kurlrequester.h>
+
+#include "certconfigpage.h"
+
+CertConfigPage::CertConfigPage(TQWidget *parent, const char *name ) : CertConfigPageDlg(parent,name) {
+
+ px_introSidebar->setPixmap(UserIcon("step2.png"));
+
+ connect(generateKeysEnabled, TQT_SIGNAL(stateChanged(int)), this, TQT_SLOT(setUseGeneratedKeys(int)));
+ connect(generateKeysDisabled, TQT_SIGNAL(stateChanged(int)), this, TQT_SLOT(setUseProvidedKeys(int)));
+
+ connect(kerberosPEM, TQT_SIGNAL(textChanged(const TQString&)), this, TQT_SLOT(validateEntries()));
+ connect(kerberosCRT, TQT_SIGNAL(textChanged(const TQString&)), this, TQT_SLOT(validateEntries()));
+ connect(kerberosKEY, TQT_SIGNAL(textChanged(const TQString&)), this, TQT_SLOT(validateEntries()));
+ connect(ldapCRT, TQT_SIGNAL(textChanged(const TQString&)), this, TQT_SLOT(validateEntries()));
+ connect(ldapKEY, TQT_SIGNAL(textChanged(const TQString&)), this, TQT_SLOT(validateEntries()));
+
+ m_parentWizard = dynamic_cast<KWizard*>(parent);
+ m_parentDialog = dynamic_cast<KDialogBase*>(parent);
+}
+
+CertConfigPage::~CertConfigPage() {
+ //
+}
+
+void CertConfigPage::setUseGeneratedKeys(int state) {
+ if (state == TQButton::On) {
+ generateKeysDisabled->setChecked(false);
+
+ processLockouts();
+ validateEntries();
+ }
+}
+
+void CertConfigPage::setUseProvidedKeys(int state) {
+ if (state == TQButton::On) {
+ generateKeysEnabled->setChecked(false);
+
+ processLockouts();
+ validateEntries();
+ }
+}
+
+void CertConfigPage::processLockouts() {
+ kerberosPEM->setEnabled(generateKeysDisabled->isOn());
+ kerberosCRT->setEnabled(generateKeysDisabled->isOn());
+ kerberosKEY->setEnabled(generateKeysDisabled->isOn());
+ ldapCRT->setEnabled(generateKeysDisabled->isOn());
+ ldapKEY->setEnabled(generateKeysDisabled->isOn());
+}
+
+void CertConfigPage::validateEntries() {
+ if (m_parentWizard) {
+ if (generateKeysEnabled->isOn()) {
+ m_parentWizard->nextButton()->setEnabled(true);
+ }
+ else {
+ if ((kerberosPEM->url() != "") && (kerberosCRT->url() != "") && (kerberosKEY->url() != "") && (ldapCRT->url() != "") && (ldapKEY->url() != "")) {
+ m_parentWizard->nextButton()->setEnabled(true);
+ }
+ else {
+ m_parentWizard->nextButton()->setEnabled(false);
+ }
+ }
+ }
+ if (m_parentDialog) {
+ if (generateKeysEnabled->isOn()) {
+ m_parentDialog->enableButton(KDialogBase::Ok, true);
+ }
+ else {
+ if ((kerberosPEM->url() != "") && (kerberosCRT->url() != "") && (kerberosKEY->url() != "") && (ldapCRT->url() != "") && (ldapKEY->url() != "")) {
+ m_parentDialog->enableButton(KDialogBase::Ok, true);
+ }
+ else {
+ m_parentDialog->enableButton(KDialogBase::Ok, false);
+ }
+ }
+ }
+}
+
+#include "certconfigpage.moc"
diff --git a/src/certconfigpage.h b/src/certconfigpage.h
new file mode 100644
index 0000000..57259fc
--- /dev/null
+++ b/src/certconfigpage.h
@@ -0,0 +1,54 @@
+/***************************************************************************
+ * Copyright (C) 2012 by Timothy Pearson *
+ * kb9vqf@pearsoncomputing.net *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+
+#ifndef CERTCONFIGPAGE_H
+#define CERTCONFIGPAGE_H
+
+#include <kwizard.h>
+
+#include "certconfigpagedlg.h"
+
+class TQStringList;
+
+/**Abstract class for the first wizard page. Sets the according selection on save()
+ *@author Timothy Pearson
+ */
+
+class CertConfigPage : public CertConfigPageDlg {
+ Q_OBJECT
+
+public:
+ CertConfigPage(TQWidget *parent=0, const char *name=0);
+ ~CertConfigPage();
+
+public slots:
+ void validateEntries();
+ void processLockouts();
+
+private slots:
+ void setUseGeneratedKeys(int state);
+ void setUseProvidedKeys(int state);
+
+private:
+ KWizard* m_parentWizard;
+ KDialogBase* m_parentDialog;
+};
+
+#endif
diff --git a/src/certconfigpagedlg.ui b/src/certconfigpagedlg.ui
new file mode 100644
index 0000000..80d64da
--- /dev/null
+++ b/src/certconfigpagedlg.ui
@@ -0,0 +1,206 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+ <class>CertConfigPageDlg</class>
+ <widget class="TQWidget">
+ <property name="name">
+ <cstring>CertConfigPageDlg</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>678</width>
+ <height>452</height>
+ </rect>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="TQLabel" row="0" column="0" rowspan="9" colspan="1">
+ <property name="name">
+ <cstring>px_introSidebar</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>170</width>
+ <height>430</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>Panel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="scaledContents">
+ <bool>true</bool>
+ </property>
+ <property name="indent">
+ <number>0</number>
+ </property>
+ </widget>
+ <widget class="TQGroupBox" row="0" column="1">
+ <property name="name">
+ <cstring>groupCertInfo</cstring>
+ </property>
+ <property name="title">
+ <string>Realm Certificate Information (required)</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="TQRadioButton" row="0" column="0">
+ <property name="name">
+ <cstring>generateKeysEnabled</cstring>
+ </property>
+ <property name="text">
+ <string>Generate New Certificates and Keys</string>
+ </property>
+ </widget>
+ <widget class="TQRadioButton" row="1" column="0">
+ <property name="name">
+ <cstring>generateKeysDisabled</cstring>
+ </property>
+ <property name="text">
+ <string>Install Provided Certificates and Keys</string>
+ </property>
+ </widget>
+ <widget class="TQLabel" row="2" column="0">
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="text">
+ <string>Kerberos PKI Anchor</string>
+ </property>
+ </widget>
+ <widget class="KURLRequester" row="2" column="1" colspan="1">
+ <property name="name">
+ <cstring>kerberosPEM</cstring>
+ </property>
+ <property name="mode">
+ <number>25</number>
+ </property>
+ <property name="filter">
+ <cstring>*.pem|PKI Anchor Files (*.pem)</cstring>
+ </property>
+ </widget>
+ <widget class="TQLabel" row="3" column="0">
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="text">
+ <string>Kerberos Public Certificate</string>
+ </property>
+ </widget>
+ <widget class="KURLRequester" row="3" column="1" colspan="1">
+ <property name="name">
+ <cstring>kerberosCRT</cstring>
+ </property>
+ <property name="mode">
+ <number>25</number>
+ </property>
+ <property name="filter">
+ <cstring>*.crt|Public Certificate (*.crt)</cstring>
+ </property>
+ </widget>
+ <widget class="TQLabel" row="4" column="0">
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="text">
+ <string>Kerberos Private Key</string>
+ </property>
+ </widget>
+ <widget class="KURLRequester" row="4" column="1" colspan="1">
+ <property name="name">
+ <cstring>kerberosKEY</cstring>
+ </property>
+ <property name="mode">
+ <number>25</number>
+ </property>
+ <property name="filter">
+ <cstring>*.key|Private Key (*.key)</cstring>
+ </property>
+ </widget>
+ <widget class="TQLabel" row="5" column="0">
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="text">
+ <string>LDAP TLS Public Certificate</string>
+ </property>
+ </widget>
+ <widget class="KURLRequester" row="5" column="1" colspan="1">
+ <property name="name">
+ <cstring>ldapCRT</cstring>
+ </property>
+ <property name="mode">
+ <number>25</number>
+ </property>
+ <property name="filter">
+ <cstring>*.crt|Public Certificate (*.crt)</cstring>
+ </property>
+ </widget>
+ <widget class="TQLabel" row="6" column="0">
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="text">
+ <string>LDAP TLS Private Key</string>
+ </property>
+ </widget>
+ <widget class="KURLRequester" row="6" column="1" colspan="1">
+ <property name="name">
+ <cstring>ldapKEY</cstring>
+ </property>
+ <property name="mode">
+ <number>25</number>
+ </property>
+ <property name="filter">
+ <cstring>*.key|Private Key (*.key)</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer row="3" column="1">
+ <property name="name">
+ <cstring>Spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>30</height>
+ </size>
+ </property>
+ </spacer>
+ <spacer row="7" column="1">
+ <property name="name">
+ <cstring>Spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <layoutdefaults spacing="3" margin="6"/>
+ <layoutfunctions spacing="KDialog::spacingHint" margin="KDialog::marginHint"/>
+</UI>
diff --git a/src/ldapcontroller.cpp b/src/ldapcontroller.cpp
index 87c6949..58cfff1 100644
--- a/src/ldapcontroller.cpp
+++ b/src/ldapcontroller.cpp
@@ -692,6 +692,9 @@ int LDAPController::createNewLDAPRealm(TQWidget* dialogparent, LDAPRealmConfig r
pdialog.setActiveWindow();
tqApp->processEvents();
+ // RAJA FIXME
+ // Threading would be a good idea here, to keep the GUI responsive while the backend code works
+
// Reset improperly uninitialized variables
realmconfig.bonded = true;
diff --git a/src/realmintropagedlg.ui b/src/realmintropagedlg.ui
index 3b4c649..fabd670 100644
--- a/src/realmintropagedlg.ui
+++ b/src/realmintropagedlg.ui
@@ -68,7 +68,7 @@
</sizepolicy>
</property>
<property name="text">
- <string>&lt;p&gt;This Wizard will help you create a new LDAP realm in three quick, easy steps.&lt;/p&gt;
+ <string>&lt;p&gt;This Wizard will help you create a new LDAP realm in four quick, easy steps.&lt;/p&gt;
&lt;p&gt;Please note that this Wizard will overwrite any existing LDAP realms and data.&lt;/p&gt;
&lt;p&gt;If you wish to quit the Wizard, click &lt;b&gt;Cancel&lt;/b&gt; at any time.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;NOTE:&lt;/b&gt; Kerberos and LDAP rely heavily on proper DNS resolution in order to function correctly. Therefore, you must have functional forward and reverse DNS entries for this system in order to complete this Wizard.&lt;/p&gt;</string>
diff --git a/src/realmwizard.cpp b/src/realmwizard.cpp
index a0f4ced..1676ca5 100644
--- a/src/realmwizard.cpp
+++ b/src/realmwizard.cpp
@@ -29,6 +29,7 @@
#include <tqcursor.h>
#include <tqspinbox.h>
#include <tqcheckbox.h>
+#include <tqradiobutton.h>
#include <ksimpleconfig.h>
#include <kglobal.h>
@@ -51,6 +52,7 @@
#include "realmintropage.h"
#include "realmconfigpage.h"
+#include "certconfigpage.h"
#include "realmfinishpage.h"
#include "realmwizard.h"
@@ -69,10 +71,14 @@ RealmWizard::RealmWizard(LDAPController* controller, TQString fqdn, TQWidget *pa
addPage (realmpage, i18n( "Step 2: Set Up New Realm" ) );
setHelpEnabled(TQWizard::page(1), false);
- finishpage = new RealmFinishPage(this);
- addPage (finishpage, i18n( "Step 3: Initialize New Realm" ) );
+ certpage = new CertConfigPage(this);
+ addPage (certpage, i18n( "Step 3: Set Up Certificates" ) );
setHelpEnabled(TQWizard::page(2), false);
+ finishpage = new RealmFinishPage(this);
+ addPage (finishpage, i18n( "Step 4: Initialize New Realm" ) );
+ setHelpEnabled(TQWizard::page(3), false);
+
// Set up some defaults
realmpage->txtKDCPort->setValue(88);
realmpage->txtAdminServerPort->setValue(749);
@@ -88,6 +94,7 @@ RealmWizard::RealmWizard(LDAPController* controller, TQString fqdn, TQWidget *pa
realmpage->txtKDC->setText(m_fqdn);
realmpage->txtAdminServer->setText(m_fqdn);
realmpage->realmNameChanged();
+ certpage->generateKeysEnabled->setChecked(true);
finishpage->ldapAdminGroupname->setText("realmadmins");
finishpage->ldapMachineAdminGroupname->setText("machineadmins");
@@ -97,7 +104,7 @@ RealmWizard::RealmWizard(LDAPController* controller, TQString fqdn, TQWidget *pa
// Kerberos won't work unless the DNS suffix matches the realm name
realmpage->txtRealmName->setEnabled(false);
- setFinishEnabled(TQWizard::page(2), true);
+ setFinishEnabled(TQWizard::page(3), true);
setPosition();
}
@@ -129,6 +136,14 @@ void RealmWizard::next() {
finishpage->ldapAdminRealm->setText(realmpage->txtRealmName->text());
TQWizard::next();
+ certpage->processLockouts();
+ certpage->validateEntries();
+ }
+ else if (currentPage()==certpage) {
+ // RAJA FIXME
+ // What to do with the certificate information?
+
+ TQWizard::next();
finishpage->validateEntries();
}
if (currentPage()==finishpage) {
@@ -150,17 +165,11 @@ bool RealmWizard::askClose(){
return true;
}
else {
- if (currentPage()==realmpage) {
+ if ((currentPage()==certpage) || (currentPage()==finishpage)) {
text = i18n("<p>Are you sure you want to quit the LDAP Realm Wizard?</p>"
"<p>If yes, click <b>Quit</b> and all changes will be lost."
"<br>If not, click <b>Cancel</b> to return and finish your setup.</p>");
}
- else if (currentPage()==finishpage) {
- // RAJA FIXME
- text = i18n("<p>Are you sure you want to quit the LDAP Realm Wizard?</p>"
- "<p>If yes, click <b>Quit</b> and the new realm will remain deactivated pending bonding."
- "<br>If not, click <b>Cancel</b> to return and finish your setup.</p>");
- }
else {
text = i18n("<p>Are you sure you want to quit the LDAP Realm Wizard?</p>"
"<p>If not, click <b>Cancel</b> to return and finish setup.</p>");
diff --git a/src/realmwizard.h b/src/realmwizard.h
index 35624e7..f913a02 100644
--- a/src/realmwizard.h
+++ b/src/realmwizard.h
@@ -34,6 +34,7 @@
class KLanguageCombo;
class RealmIntroPage;
class RealmConfigPage;
+class CertConfigPage;
class RealmFinishPage;
/** RealmWizard is the base class of the project */
@@ -69,6 +70,7 @@ private:
private:
RealmIntroPage* intropage;
RealmConfigPage* realmpage;
+ CertConfigPage* certpage;
RealmFinishPage* finishpage;
bool realm_dirty;
LDAPController* m_controller;