KLDAP Library
ldapconfigwidget.cpp
00001 /* 00002 This file is part of libkldap. 00003 Copyright (c) 2004-2006 Szombathelyi György <gyurco@freemail.hu> 00004 00005 This library is free software; you can redistribute it and/or 00006 modify it under the terms of the GNU Library General Public 00007 License as published by the Free Software Foundation; either 00008 version 2 of the License, or (at your option) any later version. 00009 00010 This library is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 Library General Public License for more details. 00014 00015 You should have received a copy of the GNU Library General Public License 00016 along with this library; see the file COPYING.LIB. If not, write to 00017 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 00018 Boston, MA 02110-1301, USA. 00019 */ 00020 00021 #include "ldapconfigwidget.h" 00022 #include "ldapsearch.h" 00023 00024 #include <kacceleratormanager.h> 00025 #include <kprogressdialog.h> 00026 #include <kcombobox.h> 00027 #include <kdebug.h> 00028 #include <klocale.h> 00029 #include <klineedit.h> 00030 #include <kmessagebox.h> 00031 00032 #include <QtCore/QObject> 00033 #include <QtGui/QCheckBox> 00034 #include <QtGui/QGroupBox> 00035 #include <QtGui/QLabel> 00036 #include <QtGui/QLayout> 00037 #include <QtGui/QPushButton> 00038 #include <QtGui/QRadioButton> 00039 #include <QtGui/QSpinBox> 00040 00041 using namespace KLDAP; 00042 00043 class LdapConfigWidget::Private 00044 { 00045 public: 00046 Private( LdapConfigWidget *parent ) 00047 : mParent( parent ), mFeatures( W_ALL ), mProg( 0 ) 00048 { 00049 mainLayout = new QGridLayout( mParent ); 00050 mainLayout->setMargin( 0 ); 00051 } 00052 00053 void setLDAPPort(); 00054 void setLDAPSPort(); 00055 void setAnonymous( bool on ); 00056 void setSimple( bool on ); 00057 void setSASL( bool on ); 00058 void queryDNClicked(); 00059 void queryMechClicked(); 00060 void loadData( LdapSearch *search, const LdapObject &object ); 00061 void loadResult( LdapSearch *search ); 00062 void sendQuery(); 00063 void initWidget(); 00064 00065 LdapConfigWidget *mParent; 00066 WinFlags mFeatures; 00067 QStringList mQResult; 00068 QString mAttr; 00069 00070 KLineEdit *mUser; 00071 KLineEdit *mPassword; 00072 KLineEdit *mHost; 00073 QSpinBox *mPort, *mVersion, *mSizeLimit, *mTimeLimit, *mPageSize; 00074 KLineEdit *mDn, *mBindDn, *mRealm; 00075 KLineEdit *mFilter; 00076 QRadioButton *mAnonymous,*mSimple,*mSASL; 00077 QCheckBox *mSubTree; 00078 QPushButton *mEditButton; 00079 QPushButton *mQueryMech; 00080 QRadioButton *mSecNo,*mSecTLS,*mSecSSL; 00081 KComboBox *mMech; 00082 00083 bool mCancelled; 00084 KProgressDialog *mProg; 00085 00086 QGridLayout *mainLayout; 00087 }; 00088 00089 void LdapConfigWidget::Private::initWidget() 00090 { 00091 QLabel *label; 00092 00093 mUser = mPassword = mHost = mDn = mBindDn = mRealm = mFilter = 0; 00094 mPort = mVersion = mTimeLimit = mSizeLimit = 0; 00095 mAnonymous = mSimple = mSASL = mSecNo = mSecTLS = mSecSSL = 0; 00096 mEditButton = mQueryMech = 0; 00097 mPageSize = 0; 00098 mMech = 0; 00099 int row = 0; 00100 int col; 00101 00102 if ( mFeatures & W_USER ) { 00103 label = new QLabel( i18n( "User:" ), mParent ); 00104 mUser = new KLineEdit( mParent ); 00105 mUser->setObjectName( "kcfg_ldapuser" ); 00106 00107 mainLayout->addWidget( label, row, 0 ); 00108 mainLayout->addWidget( mUser, row, 1, 1, 3 ); 00109 row++; 00110 } 00111 00112 if ( mFeatures & W_BINDDN ) { 00113 label = new QLabel( i18n( "Bind DN:" ), mParent ); 00114 mBindDn = new KLineEdit( mParent ); 00115 mBindDn->setObjectName( "kcfg_ldapbinddn" ); 00116 00117 mainLayout->addWidget( label, row, 0 ); 00118 mainLayout->addWidget( mBindDn, row, 1, 1, 3 ); 00119 row++; 00120 } 00121 00122 if ( mFeatures & W_REALM ) { 00123 label = new QLabel( i18n( "Realm:" ), mParent ); 00124 mRealm = new KLineEdit( mParent ); 00125 mRealm->setObjectName( "kcfg_ldaprealm" ); 00126 00127 mainLayout->addWidget( label, row, 0 ); 00128 mainLayout->addWidget( mRealm, row, 1, 1, 3 ); 00129 row++; 00130 } 00131 00132 if ( mFeatures & W_PASS ) { 00133 label = new QLabel( i18n( "Password:" ), mParent ); 00134 mPassword = new KLineEdit( mParent ); 00135 mPassword->setObjectName( "kcfg_ldappassword" ); 00136 mPassword->setEchoMode( KLineEdit::Password ); 00137 00138 mainLayout->addWidget( label, row, 0 ); 00139 mainLayout->addWidget( mPassword, row, 1, 1, 3 ); 00140 row++; 00141 } 00142 00143 if ( mFeatures & W_HOST ) { 00144 label = new QLabel( i18n( "Host:" ), mParent ); 00145 mHost = new KLineEdit( mParent ); 00146 mHost->setObjectName( "kcfg_ldaphost" ); 00147 00148 mainLayout->addWidget( label, row, 0 ); 00149 mainLayout->addWidget( mHost, row, 1, 1, 3 ); 00150 row++; 00151 } 00152 00153 col = 0; 00154 if ( mFeatures & W_PORT ) { 00155 label = new QLabel( i18n( "Port:" ), mParent ); 00156 mPort = new QSpinBox( mParent ); 00157 mPort->setRange( 0, 65535 ); 00158 mPort->setObjectName( "kcfg_ldapport" ); 00159 mPort->setSizePolicy( QSizePolicy( QSizePolicy::Maximum, QSizePolicy::Preferred ) ); 00160 mPort->setValue( 389 ); 00161 00162 mainLayout->addWidget( label, row, col ); 00163 mainLayout->addWidget( mPort, row, col+1 ); 00164 col += 2; 00165 } 00166 00167 if ( mFeatures & W_VER ) { 00168 label = new QLabel( i18n( "LDAP version:" ), mParent ); 00169 mVersion = new QSpinBox( mParent ); 00170 mVersion->setRange( 2, 3 ); 00171 mVersion->setObjectName( "kcfg_ldapver" ); 00172 mVersion->setSizePolicy( QSizePolicy( QSizePolicy::Maximum, QSizePolicy::Preferred ) ); 00173 mVersion->setValue( 3 ); 00174 mainLayout->addWidget( label, row, col ); 00175 mainLayout->addWidget( mVersion, row, col+1 ); 00176 } 00177 if ( mFeatures & ( W_PORT | W_VER ) ) { 00178 row++; 00179 } 00180 00181 col = 0; 00182 if ( mFeatures & W_SIZELIMIT ) { 00183 label = new QLabel( i18n( "Size limit:" ), mParent ); 00184 mSizeLimit = new QSpinBox( mParent ); 00185 mSizeLimit->setRange( 0, 9999999 ); 00186 mSizeLimit->setObjectName( "kcfg_ldapsizelimit" ); 00187 mSizeLimit->setSizePolicy( QSizePolicy( QSizePolicy::Maximum, QSizePolicy::Preferred ) ); 00188 mSizeLimit->setValue( 0 ); 00189 mSizeLimit->setSpecialValueText( i18nc( "default ldap size limit", "Default" ) ); 00190 mainLayout->addWidget( label, row, col ); 00191 mainLayout->addWidget( mSizeLimit, row, col+1 ); 00192 col += 2; 00193 } 00194 00195 if ( mFeatures & W_TIMELIMIT ) { 00196 label = new QLabel( i18n( "Time limit:" ), mParent ); 00197 mTimeLimit = new QSpinBox( mParent ); 00198 mTimeLimit->setRange( 0, 9999999 ); 00199 mTimeLimit->setObjectName( "kcfg_ldaptimelimit" ); 00200 mTimeLimit->setSizePolicy( QSizePolicy( QSizePolicy::Maximum, QSizePolicy::Preferred ) ); 00201 mTimeLimit->setValue( 0 ); 00202 mTimeLimit->setSuffix( i18n( " sec" ) ); 00203 mTimeLimit->setSpecialValueText( i18nc( "default ldap time limit", "Default" ) ); 00204 mainLayout->addWidget( label, row, col ); 00205 mainLayout->addWidget( mTimeLimit, row, col+1 ); 00206 } 00207 if ( mFeatures & ( W_SIZELIMIT | W_TIMELIMIT ) ) { 00208 row++; 00209 } 00210 00211 if ( mFeatures & W_PAGESIZE ) { 00212 label = new QLabel( i18n( "Page size:" ), mParent ); 00213 mPageSize = new QSpinBox( mParent ); 00214 mPageSize->setRange( 0, 9999999 ); 00215 mPageSize->setObjectName( "kcfg_ldappagesize" ); 00216 mPageSize->setSizePolicy( QSizePolicy( QSizePolicy::Maximum, QSizePolicy::Preferred ) ); 00217 mPageSize->setValue( 0 ); 00218 mPageSize->setSpecialValueText( i18n( "No paging" ) ); 00219 mainLayout->addWidget( label, row, 0 ); 00220 mainLayout->addWidget( mPageSize, row++, 1 ); 00221 } 00222 00223 if ( mFeatures & W_DN ) { 00224 label = new QLabel( i18nc( "Distinguished Name", "DN:" ), mParent ); 00225 mDn = new KLineEdit( mParent ); 00226 mDn->setObjectName( "kcfg_ldapdn" ); 00227 00228 mainLayout->addWidget( label, row, 0 ); 00229 mainLayout->addWidget( mDn, row, 1, 1, 1 ); 00230 //without host query doesn't make sense 00231 if ( mHost ) { 00232 QPushButton *dnquery = new QPushButton( i18n( "Query Server" ), mParent ); 00233 connect( dnquery, SIGNAL( clicked() ), mParent, SLOT( queryDNClicked() ) ); 00234 mainLayout->addWidget( dnquery, row, 2, 1, 1 ); 00235 } 00236 row++; 00237 } 00238 00239 if ( mFeatures & W_FILTER ) { 00240 label = new QLabel( i18n( "Filter:" ), mParent ); 00241 mFilter = new KLineEdit( mParent ); 00242 mFilter->setObjectName( "kcfg_ldapfilter" ); 00243 00244 mainLayout->addWidget( label, row, 0 ); 00245 mainLayout->addWidget( mFilter, row, 1, 1, 3 ); 00246 row++; 00247 } 00248 00249 if ( mFeatures & W_SECBOX ) { 00250 QGroupBox *btgroup = new QGroupBox( i18n( "Security" ), mParent ); 00251 QHBoxLayout *hbox = new QHBoxLayout; 00252 btgroup->setLayout( hbox ); 00253 mSecNo = new QRadioButton( i18nc( "@option:radio set no security", "No" ), btgroup ); 00254 mSecNo->setObjectName( "kcfg_ldapnosec" ); 00255 hbox->addWidget( mSecNo ); 00256 mSecTLS = new QRadioButton( i18nc( "@option:radio use TLS security", "TLS" ), btgroup ); 00257 mSecTLS->setObjectName( "kcfg_ldaptls" ); 00258 hbox->addWidget( mSecTLS ); 00259 mSecSSL = new QRadioButton( i18nc( "@option:radio use SSL security", "SSL" ), btgroup ); 00260 mSecSSL->setObjectName( "kcfg_ldapssl" ); 00261 hbox->addWidget( mSecSSL ); 00262 mainLayout->addWidget( btgroup, row, 0, 1, 4 ); 00263 00264 connect( mSecNo, SIGNAL( clicked() ), mParent, SLOT( setLDAPPort() ) ); 00265 connect( mSecTLS, SIGNAL( clicked() ), mParent, SLOT( setLDAPPort() ) ); 00266 connect( mSecSSL, SIGNAL( clicked() ), mParent, SLOT( setLDAPSPort( ) ) ); 00267 00268 mSecNo->setChecked( true ); 00269 row++; 00270 } 00271 00272 if ( mFeatures & W_AUTHBOX ) { 00273 00274 QGroupBox *authbox = 00275 new QGroupBox( i18n( "Authentication" ), mParent ); 00276 QVBoxLayout *vbox = new QVBoxLayout; 00277 authbox->setLayout( vbox ); 00278 QHBoxLayout *hbox = new QHBoxLayout; 00279 vbox->addLayout( hbox ); 00280 00281 mAnonymous = 00282 new QRadioButton( i18nc( "@option:radio anonymous authentication", "Anonymous" ), authbox ); 00283 mAnonymous->setObjectName( "kcfg_ldapanon" ); 00284 hbox->addWidget( mAnonymous ); 00285 mSimple = 00286 new QRadioButton( i18nc( "@option:radio simple authentication", "Simple" ), authbox ); 00287 mSimple->setObjectName( "kcfg_ldapsimple" ); 00288 hbox->addWidget( mSimple ); 00289 mSASL = 00290 new QRadioButton( i18nc( "@option:radio SASL authentication", "SASL" ), authbox ); 00291 mSASL->setObjectName( "kcfg_ldapsasl" ); 00292 hbox->addWidget( mSASL ); 00293 00294 hbox = new QHBoxLayout; 00295 vbox->addLayout( hbox ); 00296 label = new QLabel( i18n( "SASL mechanism:" ), authbox ); 00297 hbox->addWidget( label ); 00298 mMech = new KComboBox( false, authbox ); 00299 mMech->setObjectName( "kcfg_ldapsaslmech" ); 00300 mMech->setEditable( true ); 00301 mMech->addItem( "DIGEST-MD5" ); 00302 mMech->addItem( "GSSAPI" ); 00303 mMech->addItem( "PLAIN" ); 00304 hbox->addWidget( mMech ); 00305 00306 //without host query doesn't make sense 00307 if ( mHost ) { 00308 mQueryMech = new QPushButton( i18n( "Query Server" ), authbox ); 00309 hbox->addWidget( mQueryMech ); 00310 connect( mQueryMech, SIGNAL( clicked() ), mParent, SLOT( queryMechClicked() ) ); 00311 } 00312 00313 mainLayout->addWidget( authbox, row, 0, 2, 4 ); 00314 00315 connect( mAnonymous, SIGNAL( toggled( bool ) ), mParent, SLOT( setAnonymous( bool ) ) ); 00316 connect( mSimple, SIGNAL( toggled( bool ) ), mParent, SLOT( setSimple( bool ) ) ); 00317 connect( mSASL, SIGNAL( toggled( bool ) ), mParent, SLOT( setSASL( bool ) ) ); 00318 00319 mAnonymous->setChecked( true ); 00320 } 00321 } 00322 00323 void LdapConfigWidget::Private::sendQuery() 00324 { 00325 LdapUrl _url; 00326 00327 mQResult.clear(); 00328 mCancelled = true; 00329 00330 _url.setProtocol( ( mSecSSL && mSecSSL->isChecked() ) ? "ldaps" : "ldap" ); 00331 if ( mHost ) { 00332 _url.setHost( mHost->text() ); 00333 } 00334 if ( mPort ) { 00335 _url.setPort( mPort->value() ); 00336 } 00337 _url.setDn( LdapDN( "" ) ); 00338 _url.setAttributes( QStringList( mAttr ) ); 00339 _url.setScope( LdapUrl::Base ); 00340 if ( mVersion ) { 00341 _url.setExtension( "x-ver", QString::number( mVersion->value() ) ); 00342 } 00343 if ( mSecTLS && mSecTLS->isChecked() ) { 00344 _url.setExtension( "x-tls", "" ); 00345 } 00346 00347 kDebug() << "sendQuery url:" << _url.prettyUrl(); 00348 00349 LdapSearch search; 00350 connect( &search, SIGNAL( data( KLDAP::LdapSearch*, const KLDAP::LdapObject& ) ), 00351 mParent, SLOT( loadData( KLDAP::LdapSearch*, const KLDAP::LdapObject& ) ) ); 00352 connect( &search, SIGNAL( result( KLDAP::LdapSearch* ) ), 00353 mParent, SLOT( loadResult( KLDAP::LdapSearch* ) ) ); 00354 00355 if ( !search.search( _url ) ) { 00356 KMessageBox::error( mParent, search.errorString() ); 00357 return; 00358 } 00359 00360 if ( mProg == 0 ) { 00361 mProg = new KProgressDialog( mParent ); 00362 mProg->setWindowTitle( i18n( "LDAP Query" ) ); 00363 mProg->setModal( true ); 00364 } 00365 mProg->setLabelText( _url.prettyUrl() ); 00366 mProg->progressBar()->setRange( 0, 1 ); 00367 mProg->progressBar()->setValue( 0 ); 00368 mProg->exec(); 00369 if ( mCancelled ) { 00370 kDebug() << "query canceled!"; 00371 search.abandon(); 00372 } else { 00373 if ( search.error() ) { 00374 KMessageBox::error( mParent, search.errorString() ); 00375 } 00376 } 00377 } 00378 00379 void LdapConfigWidget::Private::queryMechClicked() 00380 { 00381 mAttr = "supportedsaslmechanisms"; 00382 sendQuery(); 00383 if ( !mQResult.isEmpty() ) { 00384 mQResult.sort(); 00385 mMech->clear(); 00386 mMech->addItems( mQResult ); 00387 } 00388 } 00389 00390 void LdapConfigWidget::Private::queryDNClicked() 00391 { 00392 mAttr = "namingcontexts"; 00393 sendQuery(); 00394 if ( !mQResult.isEmpty() ) { 00395 mDn->setText( mQResult.first() ); 00396 } 00397 } 00398 00399 void LdapConfigWidget::Private::loadData( LdapSearch *, const LdapObject &object ) 00400 { 00401 kDebug() << "object:" << object.toString(); 00402 mProg->progressBar()->setValue( mProg->progressBar()->value() + 1 ); 00403 for ( LdapAttrMap::ConstIterator it = object.attributes().constBegin(); 00404 it != object.attributes().constEnd(); ++it ) { 00405 for ( LdapAttrValue::ConstIterator it2 = (*it).constBegin(); 00406 it2 != (*it).constEnd(); ++it2 ) { 00407 mQResult.push_back( QString::fromUtf8( *it2 ) ); 00408 } 00409 } 00410 } 00411 00412 void LdapConfigWidget::Private::loadResult( LdapSearch *search ) 00413 { 00414 Q_UNUSED( search ); 00415 mCancelled = false; 00416 mProg->close(); 00417 } 00418 00419 void LdapConfigWidget::Private::setAnonymous( bool on ) 00420 { 00421 if ( !on ) { 00422 return; 00423 } 00424 if ( mUser ) { 00425 mUser->setEnabled( false ); 00426 } 00427 if ( mPassword ) { 00428 mPassword->setEnabled( false ); 00429 } 00430 if ( mBindDn ) { 00431 mBindDn->setEnabled( false ); 00432 } 00433 if ( mRealm ) { 00434 mRealm->setEnabled( false ); 00435 } 00436 if ( mMech ) { 00437 mMech->setEnabled( false ); 00438 } 00439 if ( mQueryMech ) { 00440 mQueryMech->setEnabled( false ); 00441 } 00442 } 00443 00444 void LdapConfigWidget::Private::setSimple( bool on ) 00445 { 00446 if ( !on ) { 00447 return; 00448 } 00449 if ( mUser ) { 00450 mUser->setEnabled( false ); 00451 } 00452 if ( mPassword ) { 00453 mPassword->setEnabled( true ); 00454 } 00455 if ( mBindDn ) { 00456 mBindDn->setEnabled( true ); 00457 } 00458 if ( mRealm ) { 00459 mRealm->setEnabled( false ); 00460 } 00461 if ( mMech ) { 00462 mMech->setEnabled( false ); 00463 } 00464 if ( mQueryMech ) { 00465 mQueryMech->setEnabled( false ); 00466 } 00467 } 00468 00469 void LdapConfigWidget::Private::setSASL( bool on ) 00470 { 00471 if ( !on ) { 00472 return; 00473 } 00474 if ( mUser ) { 00475 mUser->setEnabled( true ); 00476 } 00477 if ( mPassword ) { 00478 mPassword->setEnabled( true ); 00479 } 00480 if ( mBindDn ) { 00481 mBindDn->setEnabled( true ); 00482 } 00483 if ( mRealm ) { 00484 mRealm->setEnabled( true ); 00485 } 00486 if ( mMech ) { 00487 mMech->setEnabled( true ); 00488 } 00489 if ( mQueryMech ) { 00490 mQueryMech->setEnabled( true ); 00491 } 00492 } 00493 00494 void LdapConfigWidget::Private::setLDAPPort() 00495 { 00496 if ( mPort ) { 00497 mPort->setValue( 389 ); 00498 } 00499 } 00500 00501 void LdapConfigWidget::Private::setLDAPSPort() 00502 { 00503 if ( mPort ) { 00504 mPort->setValue( 636 ); 00505 } 00506 } 00507 00508 LdapConfigWidget::LdapConfigWidget( QWidget *parent, Qt::WFlags fl ) 00509 : QWidget( parent, fl ), d( new Private( this ) ) 00510 { 00511 } 00512 00513 LdapConfigWidget::LdapConfigWidget( LdapConfigWidget::WinFlags flags, 00514 QWidget *parent, Qt::WFlags fl ) 00515 : QWidget( parent, fl ), d( new Private( this ) ) 00516 { 00517 d->mFeatures = flags; 00518 00519 d->initWidget(); 00520 } 00521 00522 LdapConfigWidget::~LdapConfigWidget() 00523 { 00524 delete d; 00525 } 00526 00527 LdapUrl LdapConfigWidget::url() const 00528 { 00529 return server().url(); 00530 } 00531 00532 void LdapConfigWidget::setUrl( const LdapUrl &url ) 00533 { 00534 LdapServer _server; 00535 _server.setUrl( url ); 00536 setServer( _server ); 00537 } 00538 00539 LdapServer LdapConfigWidget::server() const 00540 { 00541 LdapServer _server; 00542 if ( d->mSecSSL && d->mSecSSL->isChecked() ) { 00543 _server.setSecurity( LdapServer::SSL ); 00544 } else if ( d->mSecTLS && d->mSecTLS->isChecked() ) { 00545 _server.setSecurity( LdapServer::TLS ); 00546 } else { 00547 _server.setSecurity( LdapServer::None ); 00548 } 00549 00550 if ( d->mUser ) { 00551 _server.setUser( d->mUser->text() ); 00552 } 00553 if ( d->mBindDn ) { 00554 _server.setBindDn( d->mBindDn->text() ); 00555 } 00556 if ( d->mPassword ) { 00557 _server.setPassword( d->mPassword->text() ); 00558 } 00559 if ( d->mRealm ) { 00560 _server.setRealm( d->mRealm->text() ); 00561 } 00562 if ( d->mHost ) { 00563 _server.setHost( d->mHost->text() ); 00564 } 00565 if ( d->mPort ) { 00566 _server.setPort( d->mPort->value() ); 00567 } 00568 if ( d->mDn ) { 00569 _server.setBaseDn( LdapDN( d->mDn->text() ) ); 00570 } 00571 if ( d->mFilter ) { 00572 _server.setFilter( d->mFilter->text() ); 00573 } 00574 if ( d->mVersion ) { 00575 _server.setVersion( d->mVersion->value() ); 00576 } 00577 if ( d->mSizeLimit && d->mSizeLimit->value() != 0 ) { 00578 _server.setSizeLimit( d->mSizeLimit->value() ); 00579 } 00580 if ( d->mTimeLimit && d->mTimeLimit->value() != 0 ) { 00581 _server.setTimeLimit( d->mTimeLimit->value() ); 00582 } 00583 if ( d->mPageSize && d->mPageSize->value() != 0 ) { 00584 _server.setPageSize( d->mPageSize->value() ); 00585 } 00586 if ( d->mAnonymous && d->mAnonymous->isChecked() ) { 00587 _server.setAuth( LdapServer::Anonymous ); 00588 } else if ( d->mSimple && d->mSimple->isChecked() ) { 00589 _server.setAuth( LdapServer::Simple ); 00590 } else if ( d->mSASL && d->mSASL->isChecked() ) { 00591 _server.setAuth( LdapServer::SASL ); 00592 _server.setMech( d->mMech->currentText() ); 00593 } 00594 return _server; 00595 } 00596 00597 void LdapConfigWidget::setServer( const LdapServer &server ) 00598 { 00599 switch ( server.security() ) { 00600 case LdapServer::SSL: 00601 if ( d->mSecSSL ) { 00602 d->mSecSSL->setChecked( true ); 00603 } 00604 case LdapServer::TLS: 00605 if ( d->mSecTLS ) { 00606 d->mSecTLS->setChecked( true ); 00607 } 00608 case LdapServer::None: 00609 if ( d->mSecNo ) { 00610 d->mSecNo->setChecked( true ); 00611 } 00612 } 00613 00614 switch ( server.auth() ) { 00615 case LdapServer::Anonymous: 00616 if ( d->mAnonymous ) { 00617 d->mAnonymous->setChecked( true ); 00618 } 00619 case LdapServer::Simple: 00620 if ( d->mSimple ) { 00621 d->mSimple->setChecked( true ); 00622 } 00623 case LdapServer::SASL: 00624 if ( d->mSASL ) { 00625 d->mSASL->setChecked( true ); 00626 } 00627 } 00628 00629 setUser( server.user() ); 00630 setBindDn( server.bindDn() ); 00631 setPassword( server.password() ); 00632 setRealm( server.realm() ); 00633 setHost( server.host() ); 00634 setPort( server.port() ); 00635 setFilter( server.filter() ); 00636 setDn( server.baseDn() ); 00637 setVersion( server.version() ); 00638 setSizeLimit( server.sizeLimit() ); 00639 setTimeLimit( server.timeLimit() ); 00640 setPageSize( server.pageSize() ); 00641 setMech( server.mech() ); 00642 } 00643 00644 void LdapConfigWidget::setUser( const QString &user ) 00645 { 00646 if ( d->mUser ) { 00647 d->mUser->setText( user ); 00648 } 00649 } 00650 00651 QString LdapConfigWidget::user() const 00652 { 00653 return d->mUser ? d->mUser->text() : QString(); 00654 } 00655 00656 void LdapConfigWidget::setPassword( const QString &password ) 00657 { 00658 if ( d->mPassword ) { 00659 d->mPassword->setText( password ); 00660 } 00661 } 00662 00663 QString LdapConfigWidget::password() const 00664 { 00665 return d->mPassword ? d->mPassword->text() : QString(); 00666 } 00667 00668 void LdapConfigWidget::setBindDn( const QString &binddn ) 00669 { 00670 if ( d->mBindDn ) { 00671 d->mBindDn->setText( binddn ); 00672 } 00673 } 00674 00675 QString LdapConfigWidget::bindDn() const 00676 { 00677 return d->mBindDn ? d->mBindDn->text() : QString(); 00678 } 00679 00680 void LdapConfigWidget::setRealm( const QString &realm ) 00681 { 00682 if ( d->mRealm ) { 00683 d->mRealm->setText( realm ); 00684 } 00685 } 00686 00687 QString LdapConfigWidget::realm() const 00688 { 00689 return d->mRealm ? d->mRealm->text() : QString(); 00690 } 00691 00692 void LdapConfigWidget::setHost( const QString &host ) 00693 { 00694 if ( d->mHost ) { 00695 d->mHost->setText( host ); 00696 } 00697 } 00698 00699 QString LdapConfigWidget::host() const 00700 { 00701 return d->mHost ? d->mHost->text() : QString(); 00702 } 00703 00704 void LdapConfigWidget::setPort( int port ) 00705 { 00706 if ( d->mPort ) { 00707 d->mPort->setValue( port ); 00708 } 00709 } 00710 00711 int LdapConfigWidget::port() const 00712 { 00713 return d->mPort ? d->mPort->value() : 389; 00714 } 00715 00716 void LdapConfigWidget::setVersion( int version ) 00717 { 00718 if ( d->mVersion ) { 00719 d->mVersion->setValue( version ); 00720 } 00721 } 00722 00723 int LdapConfigWidget::version() const 00724 { 00725 return d->mVersion ? d->mVersion->value() : 3; 00726 } 00727 00728 void LdapConfigWidget::setDn( const LdapDN &dn ) 00729 { 00730 if ( d->mDn ) { 00731 d->mDn->setText( dn.toString() ); 00732 } 00733 } 00734 00735 LdapDN LdapConfigWidget::dn() const 00736 { 00737 return d->mDn ? LdapDN( d->mDn->text() ) : LdapDN(); 00738 } 00739 00740 void LdapConfigWidget::setFilter( const QString &filter ) 00741 { 00742 if ( d->mFilter ) { 00743 d->mFilter->setText( filter ); 00744 } 00745 } 00746 00747 QString LdapConfigWidget::filter() const 00748 { 00749 return d->mFilter ? d->mFilter->text() : QString(); 00750 } 00751 00752 void LdapConfigWidget::setMech( const QString &mech ) 00753 { 00754 if ( d->mMech == 0 ) { 00755 return; 00756 } 00757 if ( !mech.isEmpty() ) { 00758 int i = 0; 00759 while ( i < d->mMech->count() ) { 00760 if ( d->mMech->itemText( i ) == mech ) { 00761 break; 00762 } 00763 i++; 00764 } 00765 if ( i == d->mMech->count() ) { 00766 d->mMech->addItem( mech ); 00767 } 00768 d->mMech->setCurrentIndex( i ); 00769 } 00770 } 00771 00772 QString LdapConfigWidget::mech() const 00773 { 00774 return d->mMech ? d->mMech->currentText() : QString(); 00775 } 00776 00777 void LdapConfigWidget::setSecurity( Security security ) 00778 { 00779 switch ( security ) { 00780 case None: 00781 d->mSecNo->setChecked( true ); 00782 break; 00783 case SSL: 00784 d->mSecSSL->setChecked( true ); 00785 break; 00786 case TLS: 00787 d->mSecTLS->setChecked( true ); 00788 break; 00789 } 00790 } 00791 00792 LdapConfigWidget::Security LdapConfigWidget::security() const 00793 { 00794 if ( d->mSecTLS->isChecked() ) { 00795 return TLS; 00796 } 00797 if ( d->mSecSSL->isChecked() ) { 00798 return SSL; 00799 } 00800 return None; 00801 } 00802 00803 void LdapConfigWidget::setAuth( Auth auth ) 00804 { 00805 switch ( auth ) { 00806 case Anonymous: 00807 d->mAnonymous->setChecked( true ); 00808 break; 00809 case Simple: 00810 d->mSimple->setChecked( true ); 00811 break; 00812 case SASL: 00813 d->mSASL->setChecked( true ); 00814 break; 00815 } 00816 } 00817 00818 LdapConfigWidget::Auth LdapConfigWidget::auth() const 00819 { 00820 if ( d->mSimple->isChecked() ) { 00821 return Simple; 00822 } 00823 if ( d->mSASL->isChecked() ) { 00824 return SASL; 00825 } 00826 return Anonymous; 00827 } 00828 00829 void LdapConfigWidget::setSizeLimit( int sizelimit ) 00830 { 00831 if ( d->mSizeLimit ) { 00832 d->mSizeLimit->setValue( sizelimit ); 00833 } 00834 } 00835 00836 int LdapConfigWidget::sizeLimit() const 00837 { 00838 return d->mSizeLimit ? d->mSizeLimit->value() : 0; 00839 } 00840 00841 void LdapConfigWidget::setTimeLimit( int timelimit ) 00842 { 00843 if ( d->mTimeLimit ) { 00844 d->mTimeLimit->setValue( timelimit ); 00845 } 00846 } 00847 00848 int LdapConfigWidget::timeLimit() const 00849 { 00850 return d->mTimeLimit ? d->mTimeLimit->value() : 0; 00851 } 00852 00853 void LdapConfigWidget::setPageSize( int pagesize ) 00854 { 00855 if ( d->mPageSize ) { 00856 d->mPageSize->setValue( pagesize ); 00857 } 00858 } 00859 00860 int LdapConfigWidget::pageSize() const 00861 { 00862 return d->mPageSize ? d->mPageSize->value() : 0; 00863 } 00864 00865 LdapConfigWidget::WinFlags LdapConfigWidget::features() const 00866 { 00867 return d->mFeatures; 00868 } 00869 00870 void LdapConfigWidget::setFeatures( LdapConfigWidget::WinFlags features ) 00871 { 00872 d->mFeatures = features; 00873 00874 // First delete all the child widgets. 00875 // FIXME: I hope it's correct 00876 QList<QObject*> ch = children(); 00877 00878 for ( int i = 0; i < ch.count(); ++i ) { 00879 QWidget *widget = dynamic_cast<QWidget*>( ch[ i ] ); 00880 if ( widget && widget->parent() == this ) { 00881 delete ( widget ); 00882 } 00883 } 00884 00885 // Re-create child widgets according to the new flags 00886 d->initWidget(); 00887 } 00888 00889 #include "ldapconfigwidget.moc"