mirror of
https://bitbucket.org/smil3y/kde-playground.git
synced 2025-02-23 18:32:51 +00:00
393 lines
8 KiB
C++
393 lines
8 KiB
C++
/*
|
|
This file is part of libkldap.
|
|
Copyright (c) 2004-2006 Szombathelyi György <gyurco@freemail.hu>
|
|
|
|
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 "ldapserver.h"
|
|
|
|
#include <kdebug.h>
|
|
|
|
using namespace KLDAP;
|
|
|
|
class LdapServer::LdapServerPrivate
|
|
{
|
|
public:
|
|
QString mHost;
|
|
int mPort;
|
|
LdapDN mBaseDn;
|
|
QString mUser;
|
|
QString mBindDn;
|
|
QString mRealm;
|
|
QString mPassword;
|
|
QString mMech;
|
|
QString mFilter;
|
|
int mTimeLimit, mSizeLimit, mVersion, mPageSize, mTimeout;
|
|
Security mSecurity;
|
|
Auth mAuth;
|
|
LdapUrl::Scope mScope;
|
|
};
|
|
|
|
LdapServer::LdapServer()
|
|
: d( new LdapServerPrivate )
|
|
{
|
|
clear();
|
|
}
|
|
|
|
LdapServer::LdapServer( const LdapUrl &url )
|
|
: d( new LdapServerPrivate )
|
|
{
|
|
clear();
|
|
|
|
setUrl( url );
|
|
}
|
|
|
|
LdapServer::LdapServer( const LdapServer &that )
|
|
: d( new LdapServerPrivate )
|
|
{
|
|
*d = *that.d;
|
|
}
|
|
|
|
LdapServer &LdapServer::operator= ( const LdapServer &that )
|
|
{
|
|
if ( this == &that ) {
|
|
return *this;
|
|
}
|
|
|
|
*d = *that.d;
|
|
|
|
return *this;
|
|
}
|
|
|
|
LdapServer::~LdapServer()
|
|
{
|
|
delete d;
|
|
}
|
|
|
|
void LdapServer::clear()
|
|
{
|
|
d->mPort = 389;
|
|
d->mHost.clear();
|
|
d->mUser.clear();
|
|
d->mBindDn.clear();
|
|
d->mMech.clear();
|
|
d->mPassword.clear();
|
|
d->mSecurity = None;
|
|
d->mAuth = Anonymous;
|
|
d->mVersion = 3;
|
|
d->mTimeout = 0;
|
|
d->mSizeLimit = d->mTimeLimit = d->mPageSize = 0;
|
|
}
|
|
|
|
QString LdapServer::host() const
|
|
{
|
|
return d->mHost;
|
|
}
|
|
|
|
int LdapServer::port() const
|
|
{
|
|
return d->mPort;
|
|
}
|
|
|
|
LdapDN LdapServer::baseDn() const
|
|
{
|
|
return d->mBaseDn;
|
|
}
|
|
|
|
QString LdapServer::user() const
|
|
{
|
|
return d->mUser;
|
|
}
|
|
|
|
QString LdapServer::bindDn() const
|
|
{
|
|
return d->mBindDn;
|
|
}
|
|
|
|
QString LdapServer::realm() const
|
|
{
|
|
return d->mRealm;
|
|
}
|
|
|
|
QString LdapServer::password() const
|
|
{
|
|
return d->mPassword;
|
|
}
|
|
|
|
QString LdapServer::filter() const
|
|
{
|
|
return d->mFilter;
|
|
}
|
|
|
|
LdapUrl::Scope LdapServer::scope() const
|
|
{
|
|
return d->mScope;
|
|
}
|
|
|
|
int LdapServer::timeLimit() const
|
|
{
|
|
return d->mTimeLimit;
|
|
}
|
|
|
|
int LdapServer::sizeLimit() const
|
|
{
|
|
return d->mSizeLimit;
|
|
}
|
|
|
|
int LdapServer::pageSize() const
|
|
{
|
|
return d->mPageSize;
|
|
}
|
|
|
|
int LdapServer::version() const
|
|
{
|
|
return d->mVersion;
|
|
}
|
|
|
|
LdapServer::Security LdapServer::security() const
|
|
{
|
|
return d->mSecurity;
|
|
}
|
|
|
|
LdapServer::Auth LdapServer::auth() const
|
|
{
|
|
return d->mAuth;
|
|
}
|
|
|
|
QString LdapServer::mech() const
|
|
{
|
|
return d->mMech;
|
|
}
|
|
|
|
int LdapServer::timeout() const
|
|
{
|
|
return d->mTimeout;
|
|
}
|
|
|
|
void LdapServer::setHost( const QString &host )
|
|
{
|
|
d->mHost = host;
|
|
}
|
|
|
|
void LdapServer::setPort( int port )
|
|
{
|
|
d->mPort = port;
|
|
}
|
|
|
|
void LdapServer::setBaseDn( const LdapDN &baseDn )
|
|
{
|
|
d->mBaseDn = baseDn;
|
|
}
|
|
|
|
void LdapServer::setUser( const QString &user )
|
|
{
|
|
d->mUser = user;
|
|
}
|
|
|
|
void LdapServer::setBindDn( const QString &bindDn )
|
|
{
|
|
d->mBindDn = bindDn;
|
|
}
|
|
|
|
void LdapServer::setRealm( const QString &realm )
|
|
{
|
|
d->mRealm = realm;
|
|
}
|
|
|
|
void LdapServer::setPassword( const QString &password )
|
|
{
|
|
d->mPassword = password;
|
|
}
|
|
|
|
void LdapServer::setTimeLimit( int timelimit )
|
|
{
|
|
d->mTimeLimit = timelimit;
|
|
}
|
|
|
|
void LdapServer::setSizeLimit( int sizelimit )
|
|
{
|
|
d->mSizeLimit = sizelimit;
|
|
}
|
|
|
|
void LdapServer::setPageSize( int pagesize )
|
|
{
|
|
d->mPageSize = pagesize;
|
|
}
|
|
|
|
void LdapServer::setFilter( const QString &filter )
|
|
{
|
|
d->mFilter = filter;
|
|
}
|
|
|
|
void LdapServer::setScope( LdapUrl::Scope scope )
|
|
{
|
|
d->mScope = scope;
|
|
}
|
|
|
|
void LdapServer::setVersion( int version )
|
|
{
|
|
d->mVersion = version;
|
|
}
|
|
|
|
void LdapServer::setSecurity( Security security )
|
|
{
|
|
d->mSecurity = security;
|
|
}
|
|
|
|
void LdapServer::setAuth( Auth auth )
|
|
{
|
|
d->mAuth = auth;
|
|
}
|
|
|
|
void LdapServer::setMech( const QString &mech )
|
|
{
|
|
d->mMech = mech;
|
|
}
|
|
|
|
void LdapServer::setTimeout( int timeout )
|
|
{
|
|
d->mTimeout = timeout;
|
|
}
|
|
|
|
void LdapServer::setUrl( const LdapUrl &url )
|
|
{
|
|
bool critical = true;
|
|
|
|
d->mHost = url.host();
|
|
int port = url.port();
|
|
if ( port <= 0 ) {
|
|
d->mPort = 389;
|
|
} else {
|
|
d->mPort = port;
|
|
}
|
|
d->mBaseDn = url.dn();
|
|
d->mScope = url.scope();
|
|
|
|
d->mFilter = url.filter();
|
|
|
|
d->mSecurity = None;
|
|
if ( url.protocol() == QLatin1String("ldaps") ) {
|
|
d->mSecurity = SSL;
|
|
} else if ( url.hasExtension( QLatin1String("x-tls") ) ) {
|
|
d->mSecurity = TLS;
|
|
}
|
|
kDebug() << "security:" << d->mSecurity;
|
|
|
|
d->mMech.clear();
|
|
d->mUser.clear();
|
|
d->mBindDn.clear();
|
|
if ( url.hasExtension(QLatin1String( "x-sasl") ) ) {
|
|
d->mAuth = SASL;
|
|
if ( url.hasExtension( QLatin1String("x-mech") ) ) {
|
|
d->mMech = url.extension( QLatin1String("x-mech"), critical );
|
|
}
|
|
if ( url.hasExtension( QLatin1String("x-realm") ) ) {
|
|
d->mRealm = url.extension( QLatin1String("x-realm"), critical );
|
|
}
|
|
if ( url.hasExtension( QLatin1String("bindname") ) ) {
|
|
d->mBindDn = url.extension( QLatin1String("bindname"), critical );
|
|
}
|
|
d->mUser = url.user();
|
|
} else if ( url.hasExtension( QLatin1String("bindname") ) ) {
|
|
d->mAuth = Simple;
|
|
d->mBindDn = url.extension( QLatin1String("bindname"), critical );
|
|
} else {
|
|
QString user = url.user();
|
|
if ( user.isEmpty() ) {
|
|
d->mAuth = Anonymous;
|
|
} else {
|
|
d->mAuth = Simple;
|
|
d->mBindDn = user;
|
|
}
|
|
}
|
|
d->mPassword = url.password();
|
|
if ( url.hasExtension( QLatin1String("x-version") ) ) {
|
|
d->mVersion = url.extension( QLatin1String("x-version"), critical ).toInt();
|
|
} else {
|
|
d->mVersion = 3;
|
|
}
|
|
|
|
if ( url.hasExtension( QLatin1String("x-timeout") ) ) {
|
|
d->mTimeout = url.extension( QLatin1String("x-timeout"), critical ).toInt();
|
|
} else {
|
|
d->mTimeout = 0;
|
|
}
|
|
|
|
if ( url.hasExtension( QLatin1String("x-timelimit") ) ) {
|
|
d->mTimeLimit = url.extension( QLatin1String("x-timelimit"), critical ).toInt();
|
|
} else {
|
|
d->mTimeLimit = 0;
|
|
}
|
|
|
|
if ( url.hasExtension( QLatin1String("x-sizelimit") ) ) {
|
|
d->mSizeLimit = url.extension( QLatin1String("x-sizelimit"), critical ).toInt();
|
|
} else {
|
|
d->mSizeLimit = 0;
|
|
}
|
|
|
|
if ( url.hasExtension( QLatin1String("x-pagesize") ) ) {
|
|
d->mPageSize = url.extension( QLatin1String("x-pagesize"), critical ).toInt();
|
|
} else {
|
|
d->mPageSize = 0;
|
|
}
|
|
}
|
|
|
|
LdapUrl LdapServer::url() const
|
|
{
|
|
LdapUrl url;
|
|
url.setProtocol( d->mSecurity == SSL ? QLatin1String("ldaps") : QLatin1String("ldap") );
|
|
url.setPort( d->mPort );
|
|
url.setHost( d->mHost );
|
|
url.setDn( d->mBaseDn );
|
|
url.setFilter( d->mFilter );
|
|
url.setScope( d->mScope );
|
|
if ( d->mAuth == SASL ) {
|
|
url.setUser( d->mUser );
|
|
url.setPassword( d->mPassword );
|
|
url.setExtension( QLatin1String("bindname"), d->mBindDn, true );
|
|
url.setExtension( QLatin1String("x-sasl"), QString() );
|
|
if ( !d->mMech.isEmpty() ) {
|
|
url.setExtension( QLatin1String("x-mech"), d->mMech );
|
|
}
|
|
if ( !d->mRealm.isEmpty() ) {
|
|
url.setExtension( QLatin1String("x-realm"), d->mRealm );
|
|
}
|
|
} else if (d->mAuth == Simple ) {
|
|
url.setUser( d->mBindDn );
|
|
url.setPassword( d->mPassword );
|
|
}
|
|
if ( d->mVersion == 2 ) {
|
|
url.setExtension( QLatin1String("x-version"), d->mVersion );
|
|
}
|
|
if ( d->mTimeout ) {
|
|
url.setExtension( QLatin1String("x-timeout"), d->mTimeout );
|
|
}
|
|
if ( d->mTimeLimit != 0 ) {
|
|
url.setExtension( QLatin1String("x-timelimit"), d->mTimeLimit );
|
|
}
|
|
if ( d->mSizeLimit != 0 ) {
|
|
url.setExtension( QLatin1String("x-sizelimit"), d->mSizeLimit );
|
|
}
|
|
if ( d->mPageSize != 0 ) {
|
|
url.setExtension( QLatin1String("x-pagesize"), d->mPageSize );
|
|
}
|
|
if ( d->mSecurity == TLS ) {
|
|
url.setExtension( QLatin1String("x-tls"), 1, true );
|
|
}
|
|
|
|
return url;
|
|
}
|