• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • tdecore
 

tdecore

kuser.cpp
00001 /*
00002  *  KUser - represent a user/account
00003  *  Copyright (C) 2002 Tim Jansen <tim@tjansen.de>
00004  *
00005  *
00006  *  This library is free software; you can redistribute it and/or
00007  *  modify it under the terms of the GNU Library General Public
00008  *  License as published by the Free Software Foundation; either
00009  *  version 2 of the License, or (at your option) any later version.
00010  *
00011  *  This library is distributed in the hope that it will be useful,
00012  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014  *  Library General Public License for more details.
00015  *
00016  *  You should have received a copy of the GNU Library General Public License
00017  *  along with this library; see the file COPYING.LIB.  If not, write to
00018  *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00019  *  Boston, MA 02110-1301, USA.
00020  */
00021 
00022 #include <kuser.h>
00023 
00024 #include "kstringhandler.h"
00025 #include <tqvaluelist.h>
00026 #include <tqstringlist.h>
00027 
00028 #include <sys/types.h>
00029 #include <pwd.h>
00030 #include <unistd.h>
00031 #include <stdlib.h>
00032 #include <grp.h>
00033 
00034 
00035 class KUserPrivate : public TDEShared
00036 {
00037 public:
00038     bool valid;
00039     long uid, gid;
00040     TQString loginName, fullName;
00041     TQString roomNumber, workPhone, homePhone;
00042     TQString homeDir, shell;
00043 
00044     KUserPrivate() : valid(false) {}
00045 
00046     KUserPrivate(long _uid,
00047              long _gid,
00048              const TQString &_loginname,
00049              const TQString &_fullname,
00050              const TQString &_room,
00051              const TQString &_workPhone,
00052              const TQString &_homePhone,
00053              const TQString &_homedir,
00054              const TQString &_shell) :
00055         valid(true),
00056         uid(_uid),
00057         gid(_gid),
00058         loginName(_loginname),
00059         fullName(_fullname),
00060         roomNumber(_room),
00061         workPhone(_workPhone),
00062         homePhone(_homePhone),
00063         homeDir(_homedir),
00064         shell(_shell) {}
00065 };
00066 
00067 
00068 KUser::KUser(UIDMode mode) {
00069     long _uid = ::getuid(), _euid;
00070     if (mode == UseEffectiveUID && (_euid = ::geteuid()) != _uid )
00071         fillPasswd( ::getpwuid( _euid ) );
00072     else {
00073         fillName( ::getenv( "LOGNAME" ) );
00074         if (uid() != _uid) {
00075             fillName( ::getenv( "USER" ) );
00076             if (uid() != _uid)
00077                 fillPasswd( ::getpwuid( _uid ) );
00078         }
00079     }
00080 }
00081 
00082 KUser::KUser(long uid) {
00083     fillPasswd( ::getpwuid( uid ) );
00084 }
00085 
00086 KUser::KUser(const TQString& name) {
00087     fillName( name.local8Bit().data() );
00088 }
00089 
00090 KUser::KUser(const char *name) {
00091     fillName( name );
00092 }
00093 
00094 KUser::KUser(struct passwd *p) {
00095     fillPasswd(p);
00096 }
00097 
00098 KUser::KUser(const KUser & user) 
00099   : d(user.d) 
00100 {
00101 }
00102 
00103 KUser& KUser::operator =(const KUser& user) 
00104 {
00105   d = user.d;
00106   return *this;
00107 }
00108 
00109 bool KUser::operator ==(const KUser& user) const {
00110     if (isValid() != user.isValid())
00111     return false;
00112     if (isValid())
00113     return uid() == user.uid();
00114     else
00115     return true;
00116 }
00117 
00118 bool KUser::operator !=(const KUser& user) const {
00119     return !operator ==(user);
00120 }
00121 
00122 void KUser::fillName(const char *name) {
00123     fillPasswd(name ? ::getpwnam( name ) : 0);
00124 }
00125 
00126 void KUser::fillPasswd(struct passwd *p) {
00127     if (p) {
00128         TQString gecos = KStringHandler::from8Bit(p->pw_gecos); 
00129         TQStringList gecosList = TQStringList::split(',', gecos, true);
00130 
00131         d = new KUserPrivate(p->pw_uid,
00132                      p->pw_gid,
00133                      TQString::fromLocal8Bit(p->pw_name),
00134                      (gecosList.size() > 0) ? gecosList[0] : TQString::null,
00135                      (gecosList.size() > 1) ? gecosList[1] : TQString::null,
00136                      (gecosList.size() > 2) ? gecosList[2] : TQString::null,
00137                      (gecosList.size() > 3) ? gecosList[3] : TQString::null,
00138                      TQString::fromLocal8Bit(p->pw_dir),
00139                      TQString::fromLocal8Bit(p->pw_shell));
00140     }
00141     else
00142         d = new KUserPrivate();
00143 }
00144 
00145 bool KUser::isValid() const {
00146     return d->valid;
00147 }
00148 
00149 long KUser::uid() const {
00150     if (d->valid)
00151         return d->uid;
00152     else
00153         return -1;
00154 }
00155 
00156 long KUser::gid() const {
00157     if (d->valid)
00158         return d->gid;
00159     else
00160         return -1;
00161 }
00162 
00163 bool KUser::isSuperUser() const {
00164     return uid() == 0;
00165 }
00166 
00167 TQString KUser::loginName() const {
00168     if (d->valid)
00169         return d->loginName;
00170     else
00171         return TQString::null;
00172 }
00173 
00174 TQString KUser::fullName() const {
00175     if (d->valid)
00176         return d->fullName;
00177     else
00178         return TQString::null;
00179 }
00180 
00181 TQString KUser::roomNumber() const {
00182     if (d->valid)
00183         return d->roomNumber;
00184     else
00185         return TQString::null;
00186 }
00187 
00188 TQString KUser::workPhone() const {
00189     if (d->valid)
00190         return d->workPhone;
00191     else
00192         return TQString::null;
00193 }
00194 
00195 TQString KUser::homePhone() const {
00196     if (d->valid)
00197         return d->homePhone;
00198     else
00199         return TQString::null;
00200 }
00201 
00202 TQString KUser::homeDir() const {
00203     if (d->valid)
00204         return d->homeDir;
00205     else
00206         return TQString::null;
00207 }
00208 
00209 TQString KUser::shell() const {
00210     if (d->valid)
00211         return d->shell;
00212     else
00213         return TQString::null;
00214 }
00215 
00216 TQValueList<KUserGroup> KUser::groups() const {
00217   TQValueList<KUserGroup> result;
00218   TQValueList<KUserGroup> allGroups = KUserGroup::allGroups();
00219   TQValueList<KUserGroup>::const_iterator it;
00220   for ( it = allGroups.begin(); it != allGroups.end(); ++it ) {
00221     TQValueList<KUser> users = (*it).users();
00222     if ( users.find( *this ) != users.end()) {
00223        result.append(*it);
00224     }
00225   }
00226   return result;
00227 }
00228 
00229 TQStringList KUser::groupNames() const {
00230   TQStringList result;
00231   TQValueList<KUserGroup> allGroups = KUserGroup::allGroups();
00232   TQValueList<KUserGroup>::const_iterator it;
00233   for ( it = allGroups.begin(); it != allGroups.end(); ++it ) {
00234     TQValueList<KUser> users = (*it).users();
00235     if ( users.find( *this ) != users.end()) {
00236        result.append((*it).name());
00237     }
00238   }
00239   return result;
00240 }
00241 
00242 
00243 TQValueList<KUser> KUser::allUsers() {
00244   TQValueList<KUser> result;
00245 
00246   struct passwd* p;
00247 
00248   while ((p = getpwent()))  {
00249     result.append(KUser(p));
00250   }
00251 
00252   endpwent();
00253 
00254   return result;
00255 }
00256 
00257 TQStringList KUser::allUserNames() {
00258   TQStringList result;
00259 
00260   struct passwd* p;
00261 
00262   while ((p = getpwent()))  {
00263     result.append(TQString::fromLocal8Bit(p->pw_name));
00264   }
00265 
00266   endpwent();
00267   return result;
00268 }
00269 
00270 
00271 KUser::~KUser() {
00272 }
00273 
00274 class KUserGroupPrivate : public TDEShared
00275 {
00276 public:
00277   bool valid;
00278   long gid;
00279   TQString name;
00280   TQValueList<KUser> users;
00281   
00282   KUserGroupPrivate() : valid(false) {}
00283   
00284   KUserGroupPrivate(long _gid, 
00285                 const TQString & _name, 
00286                 const TQValueList<KUser> & _users):
00287     valid(true), 
00288     gid(_gid), 
00289     name(_name),
00290     users(_users) {}
00291 };
00292 
00293 KUserGroup::KUserGroup(KUser::UIDMode mode) {
00294   KUser user(mode);
00295   fillGroup(getgrgid(user.gid()));
00296 }
00297 
00298 KUserGroup::KUserGroup(long gid) {
00299   fillGroup(getgrgid(gid));
00300 }
00301 
00302 KUserGroup::KUserGroup(const TQString& name) {
00303   fillName(name.local8Bit().data());
00304 }
00305 
00306 KUserGroup::KUserGroup(const char *name) {
00307   fillName(name);
00308 }
00309 
00310 KUserGroup::KUserGroup(struct group *g) {
00311   fillGroup(g);
00312 }
00313 
00314 
00315 KUserGroup::KUserGroup(const KUserGroup & group) 
00316   : d(group.d)
00317 {
00318 }
00319 
00320 KUserGroup& KUserGroup::operator =(const KUserGroup& group) {
00321   d = group.d;
00322   return *this;
00323 }
00324 
00325 bool KUserGroup::operator ==(const KUserGroup& group) const {
00326   if (isValid() != group.isValid())
00327     return false;
00328   if (isValid())
00329     return gid() == group.gid();
00330   else
00331     return true;
00332 }
00333 
00334 bool KUserGroup::operator !=(const KUserGroup& user) const {
00335   return !operator ==(user);
00336 }
00337 
00338 void KUserGroup::fillName(const char *name) {
00339   fillGroup(name ? ::getgrnam( name ) : 0);
00340 }
00341 
00342 void KUserGroup::fillGroup(struct group *p) {
00343   if (!p) {
00344     d = new KUserGroupPrivate();
00345     return;
00346   }
00347   
00348   TQString name = KStringHandler::from8Bit(p->gr_name); 
00349   TQValueList<KUser> users;
00350   
00351   char **user = p->gr_mem;  
00352   for ( ; *user; user++) {
00353     KUser kUser(TQString::fromLocal8Bit(*user));
00354     users.append(kUser);
00355   }
00356   
00357   d = new KUserGroupPrivate(p->gr_gid,
00358             TQString::fromLocal8Bit(p->gr_name),
00359             users);  
00360 
00361 }
00362 
00363 bool KUserGroup::isValid() const {
00364   return d->valid;
00365 }
00366 
00367 long KUserGroup::gid() const {
00368   if (d->valid)
00369     return d->gid;
00370   else
00371     return -1;
00372 }
00373 
00374 TQString KUserGroup::name() const {
00375   if (d->valid)
00376     return d->name;
00377   else
00378     return TQString::null;
00379 }
00380 
00381 const TQValueList<KUser>& KUserGroup::users() const {
00382   return d->users;
00383 }
00384 
00385 TQStringList KUserGroup::userNames() const {
00386   TQStringList result;
00387   TQValueList<KUser>::const_iterator it;
00388   for ( it = d->users.begin(); it != d->users.end(); ++it ) {
00389     result.append((*it).loginName());
00390   }
00391   return result;
00392 }
00393 
00394 
00395 
00396 TQValueList<KUserGroup> KUserGroup::allGroups() {
00397   TQValueList<KUserGroup> result;
00398   
00399   struct group* g;
00400   while ((g = getgrent()))  {
00401      result.append(KUserGroup(g));
00402   }
00403 
00404   endgrent();
00405 
00406   return result;
00407 }
00408 
00409 TQStringList KUserGroup::allGroupNames() {
00410   TQStringList result;
00411   
00412   struct group* g;
00413   while ((g = getgrent()))  {
00414      result.append(TQString::fromLocal8Bit(g->gr_name));
00415   }
00416 
00417   endgrent();
00418 
00419   return result;
00420 }
00421 
00422 
00423 KUserGroup::~KUserGroup() {
00424 }
00425 

tdecore

Skip menu "tdecore"
  • Main Page
  • Modules
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

tdecore

Skip menu "tdecore"
  • arts
  • dcop
  • dnssd
  • interfaces
  •   kspeech
  •     interface
  •     library
  •   tdetexteditor
  • kate
  • kded
  • kdoctools
  • kimgio
  • kjs
  • libtdemid
  • libtdescreensaver
  • tdeabc
  • tdecmshell
  • tdecore
  • tdefx
  • tdehtml
  • tdeinit
  • tdeio
  •   bookmarks
  •   httpfilter
  •   kpasswdserver
  •   kssl
  •   tdefile
  •   tdeio
  •   tdeioexec
  • tdeioslave
  •   http
  • tdemdi
  •   tdemdi
  • tdenewstuff
  • tdeparts
  • tdeprint
  • tderandr
  • tderesources
  • tdespell2
  • tdesu
  • tdeui
  • tdeunittest
  • tdeutils
  • tdewallet
Generated for tdecore by doxygen 1.7.6.1
This website is maintained by Timothy Pearson.