mirror of
https://bitbucket.org/smil3y/kde-playground.git
synced 2025-02-24 19:02:51 +00:00
159 lines
3.3 KiB
C++
159 lines
3.3 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 "ldapcontrol.h"
|
||
|
#include "ber.h"
|
||
|
|
||
|
#include <QtCore/QSharedData>
|
||
|
|
||
|
using namespace KLDAP;
|
||
|
|
||
|
class LdapControl::Private : public QSharedData
|
||
|
{
|
||
|
public:
|
||
|
Private()
|
||
|
{
|
||
|
mCritical = false;
|
||
|
}
|
||
|
|
||
|
Private( const Private &other )
|
||
|
: QSharedData( other )
|
||
|
{
|
||
|
mOid = other.mOid;
|
||
|
mValue = other.mValue;
|
||
|
mCritical = other.mCritical;
|
||
|
}
|
||
|
|
||
|
QString mOid;
|
||
|
QByteArray mValue;
|
||
|
bool mCritical;
|
||
|
};
|
||
|
|
||
|
LdapControl::LdapControl()
|
||
|
: d( new Private )
|
||
|
{
|
||
|
setControl( QString(), QByteArray(), false );
|
||
|
}
|
||
|
|
||
|
LdapControl::LdapControl( QString &oid, QByteArray &value, bool critical )
|
||
|
: d( new Private )
|
||
|
{
|
||
|
setControl( oid, value, critical );
|
||
|
}
|
||
|
|
||
|
LdapControl::LdapControl( const LdapControl &that )
|
||
|
: d( that.d )
|
||
|
{
|
||
|
setControl( that.d->mOid, that.d->mValue, that.d->mCritical );
|
||
|
}
|
||
|
|
||
|
LdapControl &LdapControl::operator= ( const LdapControl &that )
|
||
|
{
|
||
|
if ( this != &that ) {
|
||
|
d = that.d;
|
||
|
}
|
||
|
|
||
|
setControl( that.d->mOid, that.d->mValue, that.d->mCritical );
|
||
|
|
||
|
return *this;
|
||
|
}
|
||
|
|
||
|
LdapControl::~LdapControl()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void LdapControl::setControl( const QString &oid, const QByteArray &value, bool critical )
|
||
|
{
|
||
|
d->mOid = oid;
|
||
|
d->mValue = value;
|
||
|
d->mCritical = critical;
|
||
|
}
|
||
|
|
||
|
QString LdapControl::oid() const
|
||
|
{
|
||
|
return d->mOid;
|
||
|
}
|
||
|
|
||
|
QByteArray LdapControl::value() const
|
||
|
{
|
||
|
return d->mValue;
|
||
|
}
|
||
|
|
||
|
bool LdapControl::critical() const
|
||
|
{
|
||
|
return d->mCritical;
|
||
|
}
|
||
|
|
||
|
void LdapControl::setOid( const QString &oid )
|
||
|
{
|
||
|
d->mOid = oid;
|
||
|
}
|
||
|
|
||
|
void LdapControl::setValue( const QByteArray &value )
|
||
|
{
|
||
|
d->mValue = value;
|
||
|
}
|
||
|
|
||
|
void LdapControl::setCritical( bool critical )
|
||
|
{
|
||
|
d->mCritical = critical;
|
||
|
}
|
||
|
|
||
|
int LdapControl::parsePageControl( QByteArray &cookie ) const
|
||
|
{
|
||
|
if ( d->mOid != QLatin1String("1.2.840.113556.1.4.319") ) {
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
Ber ber( d->mValue );
|
||
|
int size;
|
||
|
if ( ber.scanf( QLatin1String("{iO}"), &size, &cookie ) == -1 ) {
|
||
|
return -1;
|
||
|
} else {
|
||
|
return size;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
LdapControl LdapControl::createPageControl( int pagesize, const QByteArray &cookie )
|
||
|
{
|
||
|
LdapControl control;
|
||
|
Ber ber;
|
||
|
|
||
|
ber.printf( QLatin1String("{iO}"), pagesize, &cookie );
|
||
|
control.setOid( QLatin1String("1.2.840.113556.1.4.319") );
|
||
|
control.setValue( ber.flatten() );
|
||
|
return control;
|
||
|
}
|
||
|
|
||
|
void LdapControl::insert( LdapControls &list, const LdapControl &ctrl )
|
||
|
{
|
||
|
LdapControls::iterator it;
|
||
|
LdapControls::iterator endit = list.end();
|
||
|
const QString oid = ctrl.oid();
|
||
|
|
||
|
for ( it = list.begin(); it != endit; ++it ) {
|
||
|
if ( it->oid() == oid ) {
|
||
|
*it = ctrl;
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
list.append( ctrl );
|
||
|
}
|