Add ability to control PAM options including credential caching and home directory creation

pull/1/head
Timothy Pearson 12 years ago
parent 3caa3ef1be
commit 27b49086f0

@ -4,7 +4,7 @@ METASOURCES = AUTO
# Install this plugin in the KDE modules directory # Install this plugin in the KDE modules directory
kde_module_LTLIBRARIES = kcm_ldapbonding.la kde_module_LTLIBRARIES = kcm_ldapbonding.la
kcm_ldapbonding_la_SOURCES = ldapbonding.cpp ldapconfigbase.ui realmpropertiesdialog.cpp bondintropage.cpp bondintropagedlg.ui bondrealmpage.cpp bondrealmpagedlg.ui bondfinishpage.cpp bondfinishpagedlg.ui bondwizard.cpp ldappasswddlg.cpp kcm_ldapbonding_la_SOURCES = tdeumaskinput.cpp ldapbonding.cpp ldapconfigbase.ui realmpropertiesdialog.cpp bondintropage.cpp bondintropagedlg.ui bondrealmpage.cpp bondrealmpagedlg.ui bondfinishpage.cpp bondfinishpagedlg.ui bondwizard.cpp ldappasswddlg.cpp
kcm_ldapbonding_la_LIBADD = $(LIB_KIO) $(LIB_TDEUI) -ltdeldap kcm_ldapbonding_la_LIBADD = $(LIB_KIO) $(LIB_TDEUI) -ltdeldap
kcm_ldapbonding_la_LDFLAGS = -avoid-version -module -no-undefined \ kcm_ldapbonding_la_LDFLAGS = -avoid-version -module -no-undefined \
$(all_libraries) $(all_libraries)

@ -44,6 +44,7 @@
#include <tdesu/process.h> #include <tdesu/process.h>
#include "tdeumaskinput.h"
#include "ldapbonding.h" #include "ldapbonding.h"
#include "bondwizard.h" #include "bondwizard.h"
#include "ldappasswddlg.h" #include "ldappasswddlg.h"
@ -101,6 +102,12 @@ LDAPConfig::LDAPConfig(TQWidget *parent, const char *name, const TQStringList&)
connect(base->passwordHash, TQT_SIGNAL(activated(int)), this, TQT_SLOT(changed())); connect(base->passwordHash, TQT_SIGNAL(activated(int)), this, TQT_SLOT(changed()));
connect(base->ignoredUsers, TQT_SIGNAL(textChanged(const TQString&)), this, TQT_SLOT(changed())); connect(base->ignoredUsers, TQT_SIGNAL(textChanged(const TQString&)), this, TQT_SLOT(changed()));
connect(base->pamEnableCachedLogons, TQT_SIGNAL(clicked()), this, TQT_SLOT(changed()));
connect(base->pamCreateHomeDirectory, TQT_SIGNAL(clicked()), this, TQT_SLOT(changed()));
connect(base->pamCreateHomeDirectory, TQT_SIGNAL(clicked()), this, TQT_SLOT(processLockouts()));
connect(base->pamCreateHomeDirectoryUmask, TQT_SIGNAL(valueChanged(int)), this, TQT_SLOT(changed()));
connect(base->pamCreateHomeDirectorySkelDir, TQT_SIGNAL(textChanged(const TQString&)), this, TQT_SLOT(changed()));
hostFQDN = LDAPManager::getMachineFQDN(); hostFQDN = LDAPManager::getMachineFQDN();
base->hostFQDN->setEnabled(false); base->hostFQDN->setEnabled(false);
base->hostFQDN->clear(); base->hostFQDN->clear();
@ -158,6 +165,11 @@ void LDAPConfig::load(bool useDefaults )
} }
base->ignoredUsers->setText(m_clientRealmConfig.ignoredUsers); base->ignoredUsers->setText(m_clientRealmConfig.ignoredUsers);
base->pamEnableCachedLogons->setChecked(m_clientRealmConfig.pamConfig.enable_cached_credentials);
base->pamCreateHomeDirectory->setChecked(m_clientRealmConfig.pamConfig.autocreate_user_directories_enable);
base->pamCreateHomeDirectoryUmask->setValue(m_clientRealmConfig.pamConfig.autocreate_user_directories_umask);
base->pamCreateHomeDirectorySkelDir->setURL(m_clientRealmConfig.pamConfig.autocreate_user_directories_skel);
updateRealmList(); updateRealmList();
processLockouts(); processLockouts();
@ -205,6 +217,11 @@ void LDAPConfig::save() {
m_clientRealmConfig.passwordHash = base->passwordHash->currentText(); m_clientRealmConfig.passwordHash = base->passwordHash->currentText();
m_clientRealmConfig.ignoredUsers = base->ignoredUsers->text(); m_clientRealmConfig.ignoredUsers = base->ignoredUsers->text();
m_clientRealmConfig.pamConfig.enable_cached_credentials = base->pamEnableCachedLogons->isChecked();
m_clientRealmConfig.pamConfig.autocreate_user_directories_enable = base->pamCreateHomeDirectory->isChecked();
m_clientRealmConfig.pamConfig.autocreate_user_directories_umask = base->pamCreateHomeDirectoryUmask->value();
m_clientRealmConfig.pamConfig.autocreate_user_directories_skel = base->pamCreateHomeDirectorySkelDir->url();
// Write system configuration // Write system configuration
if (LDAPManager::saveClientRealmConfig(m_clientRealmConfig, systemconfig, &errorstring) != 0) { if (LDAPManager::saveClientRealmConfig(m_clientRealmConfig, systemconfig, &errorstring) != 0) {
KMessageBox::error(this, i18n("<qt><b>Unable to save configuration!</b><p>Details: %2</qt>").arg(errorstring), i18n("Unable to Save Configuration")); KMessageBox::error(this, i18n("<qt><b>Unable to save configuration!</b><p>Details: %2</qt>").arg(errorstring), i18n("Unable to Save Configuration"));
@ -231,7 +248,7 @@ void LDAPConfig::save() {
return; return;
} }
// Write the PAM configuration files // Write the PAM configuration files
if (LDAPManager::writePAMFiles(&errorstring) != 0) { if (LDAPManager::writePAMFiles(m_clientRealmConfig.pamConfig, &errorstring) != 0) {
KMessageBox::error(this, i18n("<qt><b>Unable to save configuration!</b><p>Details: %2</qt>").arg(errorstring), i18n("Unable to Save Configuration")); KMessageBox::error(this, i18n("<qt><b>Unable to save configuration!</b><p>Details: %2</qt>").arg(errorstring), i18n("Unable to Save Configuration"));
return; return;
} }
@ -284,6 +301,7 @@ void LDAPConfig::processLockouts() {
base->groupRealms->setEnabled(panelIsEnabled); base->groupRealms->setEnabled(panelIsEnabled);
base->groupKrbDefaults->setEnabled(panelIsEnabled); base->groupKrbDefaults->setEnabled(panelIsEnabled);
base->groupConnectionParameters->setEnabled(panelIsEnabled); base->groupConnectionParameters->setEnabled(panelIsEnabled);
base->groupPamConfig->setEnabled(panelIsEnabled);
TQListViewItem *selrealm = base->ldapRealmList->selectedItem(); TQListViewItem *selrealm = base->ldapRealmList->selectedItem();
if (selrealm) { if (selrealm) {
@ -308,6 +326,15 @@ void LDAPConfig::processLockouts() {
base->btnRemoveRealm->setEnabled(false); base->btnRemoveRealm->setEnabled(false);
base->btnRealmProperties->setEnabled(false); base->btnRealmProperties->setEnabled(false);
} }
if (base->pamCreateHomeDirectory->isChecked()) {
base->pamCreateHomeDirectoryUmask->setEnabled(true);
base->pamCreateHomeDirectorySkelDir->setEnabled(true);
}
else {
base->pamCreateHomeDirectoryUmask->setEnabled(false);
base->pamCreateHomeDirectorySkelDir->setEnabled(false);
}
} }
void LDAPConfig::bondToNewRealm() { void LDAPConfig::bondToNewRealm() {

@ -427,6 +427,89 @@
</widget> </widget>
</grid> </grid>
</widget> </widget>
<widget class="TQGroupBox" row="2" column="0">
<property name="name">
<cstring>groupPamConfig</cstring>
</property>
<property name="title">
<string>Authentication Settings</string>
</property>
<grid>
<property name="name">
<cstring>unnamed</cstring>
</property>
<widget class="TQCheckBox" row="0" column="0" colspan="1">
<property name="name">
<cstring>pamCreateHomeDirectory</cstring>
</property>
<property name="text">
<string>&amp;Create home directory on first logon</string>
</property>
</widget>
<widget class="TQCheckBox" row="1" column="0" colspan="2">
<property name="name">
<cstring>pamEnableCachedLogons</cstring>
</property>
<property name="text">
<string>&amp;Enable logon credentials cache</string>
</property>
</widget>
<widget class="TQLabel" row="0" column="2">
<property name="name">
<cstring>unnamed</cstring>
</property>
<property name="text">
<string>Home directory mode creation mask</string>
</property>
<property name="sizePolicy">
<sizepolicy>
<hsizetype>0</hsizetype>
<vsizetype>0</vsizetype>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
<widget class="TDEUmaskInput" row="0" column="3" >
<property name="name">
<cstring>pamCreateHomeDirectoryUmask</cstring>
</property>
<property name="base">
<number>8</number>
</property>
<property name="minValue">
<number>0</number>
</property>
<property name="maxValue">
<number>7777</number>
</property>
</widget>
<widget class="TQLabel" row="1" column="2">
<property name="name">
<cstring>unnamed</cstring>
</property>
<property name="text">
<string>Home directory skeleton location</string>
</property>
<property name="sizePolicy">
<sizepolicy>
<hsizetype>0</hsizetype>
<vsizetype>0</vsizetype>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
<widget class="KURLRequester" row="1" column="3" >
<property name="name">
<cstring>pamCreateHomeDirectorySkelDir</cstring>
</property>
<property name="mode">
<number>18</number>
</property>
</widget>
</grid>
</widget>
<spacer row="4" column="0"> <spacer row="4" column="0">
<property name="name" stdset="0"> <property name="name" stdset="0">
<cstring>Spacer4</cstring> <cstring>Spacer4</cstring>
@ -454,6 +537,7 @@
</includes> </includes>
<includes> <includes>
<include location="local" impldecl="in implementation">kdialog.h</include> <include location="local" impldecl="in implementation">kdialog.h</include>
<include location="local" impldecl="in implementation">tdeumaskinput.h</include>
</includes> </includes>
<layoutdefaults spacing="3" margin="6"/> <layoutdefaults spacing="3" margin="6"/>
<layoutfunctions spacing="KDialog::spacingHint" margin="KDialog::marginHint"/> <layoutfunctions spacing="KDialog::spacingHint" margin="KDialog::marginHint"/>

@ -0,0 +1,61 @@
/*
* tdeumaskinput.cpp
*
* Copyright (c) 2013 Timothy Pearson <kb9vqf@pearsoncomputing.net>
*
* Requires the Qt widget libraries, available at no cost at
* http://www.troll.no/
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library 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
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public License
* along with this library; see the file COPYING.LIB. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#include "tdeumaskinput.h"
TDEUmaskInput::TDEUmaskInput(TQWidget *parent, const char *name)
: KIntSpinBox(parent, name)
{
//
}
TDEUmaskInput::TDEUmaskInput(int lower, int upper, int step, int value, int base,
TQWidget* parent, const char* name)
: KIntSpinBox(lower, upper, step, value, base, parent, name)
{
//
}
TDEUmaskInput::~TDEUmaskInput()
{
//
}
void TDEUmaskInput::setBase(int base)
{
KIntSpinBox::setBase(base);
}
int TDEUmaskInput::base() const
{
return KIntSpinBox::base();
}
TQString TDEUmaskInput::mapValueToText (int v) {
TQString baseText = KIntSpinBox::mapValueToText(v);
while (baseText.length() < 4) {
baseText.prepend("0");
}
return baseText;
}

@ -0,0 +1,83 @@
/*
* tdeumaskinput.h
*
* Copyright (c) 2013 Timothy Pearson <kb9vqf@pearsoncomputing.net>
*
* Requires the Qt widget libraries, available at no cost at
* http://www.troll.no/
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library 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
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public License
* along with this library; see the file COPYING.LIB. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#ifndef TDE_UMASKINPUT_H
#define TDE_UMASKINPUT_H
#include <knuminput.h>
class TDEUI_EXPORT TDEUmaskInput : public KIntSpinBox
{
Q_OBJECT
TQ_PROPERTY( int base READ base WRITE setBase )
public:
/**
* Constructor.
*
* Constructs a widget with an integer inputline with a little scrollbar
* and a slider, with minimal value 0, maximal value 99, step 1, base 10
* and initial value 0.
*/
TDEUmaskInput( TQWidget *parent=0, const char *name=0);
/**
* Constructor.
*
* Constructs a widget with an integer inputline with a little scrollbar
* and a slider.
*
* @param lower The lowest valid value.
* @param upper The greatest valid value.
* @param step The step size of the scrollbar.
* @param value The actual value.
* @param base The base of the used number system.
* @param parent The parent of the widget.
* @param name The Name of the widget.
*/
TDEUmaskInput(int lower, int upper, int step, int value, int base = 10, TQWidget* parent = 0, const char* name = 0);
/**
* Destructor.
*/
virtual ~TDEUmaskInput();
public:
/**
* Sets the base in which the numbers in the spin box are represented.
*/
void setBase(int base);
/**
* @return the base in which numbers in the spin box are represented.
*/
int base() const;
protected:
virtual TQString mapValueToText(int);
};
#endif // TDE_UMASKINPUT_H
Loading…
Cancel
Save