You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdeadmin/kuser/kgroup.cpp

329 lines
5.9 KiB

/*
* Copyright (c) 1998 Denis Perchine <dyp@perchine.com>
* Copyright (c) 2004 Szombathelyi György <gyurco@freemail.hu>
* Former maintainer: Adriaan de Groot <groot@kde.org>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License version 2 as published by the Free Software Foundation.
*
* 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 <tqstring.h>
#include <kdebug.h>
#include "kglobal_.h"
#include "kgroup.h"
#include "misc.h"
KU::KGroup::KGroup()
{
pwd = TQString::tqfromLatin1("*");
gid = 0;
type = 2;
caps = 0;
}
KU::KGroup::KGroup(KU::KGroup *group)
{
copy( group );
}
KU::KGroup::~KGroup()
{
}
void KU::KGroup::copy( const KU::KGroup *group )
{
if ( group != this ) {
caps = group->caps;
name = group->name;
pwd = group->pwd;
gid = group->gid;
sid = group->sid;
type = group->type;
displayname = group->displayname;
desc = group->desc;
u = group->u;
}
}
void KU::KGroup::setCaps( int data )
{
caps = data;
}
int KU::KGroup::getCaps()
{
return caps;
}
const TQString &KU::KGroup::getName() const
{
return name;
}
const TQString &KU::KGroup::getPwd() const
{
return pwd;
}
gid_t KU::KGroup::getGID() const
{
return gid;
}
const SID &KU::KGroup::getSID() const
{
return sid;
}
int KU::KGroup::getType() const
{
return type;
}
const TQString &KU::KGroup::getDisplayName() const
{
return displayname;
}
const TQString &KU::KGroup::getDesc() const
{
return desc;
}
void KU::KGroup::setName(const TQString &data)
{
name = data;
}
void KU::KGroup::setPwd(const TQString &data)
{
pwd = data;
}
void KU::KGroup::setGID(gid_t data)
{
gid = data;
}
void KU::KGroup::setSID(const SID &data)
{
sid = data;
}
void KU::KGroup::setType(int data)
{
type = data;
}
void KU::KGroup::setDisplayName(const TQString &data)
{
displayname = data;
}
void KU::KGroup::setDesc(const TQString &data)
{
desc = data;
}
bool KU::KGroup::lookup_user(const TQString &name)
{
return (u.tqfind(name) != u.end());
}
bool KU::KGroup::addUser(const TQString &name)
{
if (!lookup_user(name)) {
u.append(name);
return true;
} else
return false;
}
bool KU::KGroup::removeUser(const TQString &name)
{
return ( u.remove(name) > 0 );
}
uint KU::KGroup::count() const
{
return u.count();
}
TQString KU::KGroup::user(uint i)
{
return u[i];
}
void KU::KGroup::clear()
{
u.clear();
}
KU::KGroups::KGroups(KUserPrefsBase *cfg)
{
mGroups.setAutoDelete(TRUE);
mCfg = cfg;
}
KU::KGroup *KU::KGroups::lookup(const TQString &name)
{
KU::KGroup *group;
TQPtrListIterator<KU::KGroup> it( mGroups );
while ( (group = it.current()) != 0 && group->getName() != name ) ++it;
return group;
}
KU::KGroup *KU::KGroups::lookup(gid_t gid)
{
KU::KGroup *group;
TQPtrListIterator<KU::KGroup> it( mGroups );
while ( (group = it.current()) != 0 && group->getGID() != gid ) ++it;
return group;
}
KU::KGroup *KU::KGroups::lookup_sam( const SID &sid )
{
KU::KGroup *group;
TQPtrListIterator<KU::KGroup> it( mGroups );
while ( (group = it.current()) != 0 && group->getSID() != sid ) ++it;
return group;
}
KU::KGroup *KU::KGroups::lookup_sam( const TQString &sid )
{
KU::KGroup *group;
TQPtrListIterator<KU::KGroup> it( mGroups );
while ( (group = it.current()) != 0 && group->getSID().getSID() != sid ) ++it;
return group;
}
KU::KGroup *KU::KGroups::lookup_sam( uint rid )
{
KU::KGroup *group;
TQPtrListIterator<KU::KGroup> it( mGroups );
while ( (group = it.current()) != 0 && group->getSID().getRID() != rid ) ++it;
return group;
}
gid_t KU::KGroups::first_free()
{
gid_t t;
for (t = mCfg->firstGID(); t<65534; t++)
if (lookup(t) == NULL)
return t;
return NO_FREE;
}
uint KU::KGroups::first_free_sam()
{
uint t;
for (t = 30000; t<65534; t++)
if (lookup_sam(t) == NULL)
return t;
return 0;
}
KU::KGroups::~KGroups()
{
mGroups.clear();
}
KU::KGroup *KU::KGroups::operator[](uint num)
{
return mGroups.at(num);
}
KU::KGroup *KU::KGroups::first()
{
return mGroups.first();
}
KU::KGroup *KU::KGroups::next()
{
return mGroups.next();
}
uint KU::KGroups::count() const
{
return mGroups.count();
}
const TQString &KU::KGroups::getDOMSID() const
{
return domsid;
}
void KU::KGroups::add(KU::KGroup *group)
{
kdDebug() << "adding group: " << group->getName() << " gid: " << group->getGID() << endl;
mAdd.append( group );
}
void KU::KGroups::del(KU::KGroup *group)
{
kdDebug() << "deleting group: " << group->getName() << " gid: " << group->getGID() << endl;
mDel.append( group );
}
void KU::KGroups::mod(KU::KGroup *gold, const KU::KGroup &gnew)
{
kdDebug() << "modify group " << gnew.getName() << " gid: " << gnew.getGID() << endl;
mMod.insert( gold, gnew );
}
void KU::KGroups::commit()
{
kdDebug() << "KU::KGroups::commit()" << endl;
KU::KGroup *group;
DelIt dit( mDelSucc );
AddIt ait( mAddSucc );
ModIt mit = mModSucc.begin();
while ( mit != mModSucc.end() ) {
*(mit.key()) = mit.data();
mit++;
}
while ( (group = dit.current()) != 0 ) {
++dit;
mGroups.remove( group );
}
while ( (group = ait.current()) != 0 ) {
++ait;
mGroups.append( group );
}
cancelMods();
}
void KU::KGroups::cancelMods()
{
KU::KGroup *group;
while ( (group = mAdd.first()) ) {
delete group;
mAdd.remove();
}
mDel.clear();
mMod.clear();
}