Source Code (Use browser search to find items of interest.)

Class Index

kuser'KGroups (./kdeadmin/kuser/kgroup.h:43)

class KGroups {
public:
  KGroups();
  ~KGroups();

  KGroup *lookup(const QString &name);
  KGroup *lookup(gid_t gid);
  gid_t first_free();

  bool save();
  bool load();

  KGroup *first();
  KGroup *next();
  KGroup *operator[](uint num);

  void add(KGroup *ku);
  void del(KGroup *au);

  uint count() const;

protected:
  int g_saved;
  QList<KGroup> g;

  int mode;
  uid_t uid;
  gid_t gid;
};

kuser'KGroups::KGroups() (./kdeadmin/kuser/kgroup.cpp:112)

KGroups::KGroups() {
  g_saved = 0;

  mode = 0644;
  uid = 0;
  gid = 0;

  g.setAutoDelete(TRUE);

  if (!load())
    err->display();
}


kuser'KGroups::load() (./kdeadmin/kuser/kgroup.cpp:125)

bool KGroups::load() {
  struct group *p;
  KGroup *tmpKG = 0;
  struct stat st;

  stat(GROUP_FILE, &st);
  mode = st.st_mode;
  uid = st.st_uid;
  gid = st.st_gid;

#ifdef HAVE_FGETGRENT
  FILE *fgrp = fopen(GROUP_FILE, "r");
  QString tmp;
  if (fgrp == 0) {
    err->addMsg(i18n("Error opening %1 for reading").arg(GROUP_FILE));
    return FALSE;
  }

  while ((p = fgetgrent(fgrp)) != NULL) {
#else
  while ((p = getgrent()) != NULL) {
#endif
    tmpKG = new KGroup();
    tmpKG->setGID(p->gr_gid);
    tmpKG->setName(p->gr_name);
    tmpKG->setPwd(p->gr_passwd);

    char *u_name;
    int i = 0;
    while ((u_name = p->gr_mem[i])!=0) {
      tmpKG->addUser(u_name);
      i++;
    }

    g.append(tmpKG);
  }

#ifdef HAVE_FGETGRENT
  fclose(fgrp);
#endif

  return TRUE;
}


kuser'KGroups::save() (./kdeadmin/kuser/kgroup.cpp:169)

bool KGroups::save() {
  FILE *grp;
  QString tmpS;
  QString tmp;

  if (!g_saved) {
    backup(GROUP_FILE);
    g_saved = TRUE;
  }

  umask(0077);

  if ((grp = fopen(GROUP_FILE, "w")) == NULL) {
    err->addMsg(i18n("Error opening %1 for writing").arg(GROUP_FILE));
    return FALSE;
  }

  for (unsigned int i=0; i<g.count(); i++) {
    KGroup *gr = g.at(i);
    tmpS = QString("%1:%2:%3:")
      .arg(gr->getName())
      .arg(gr->getPwd())
      .arg(gr->getGID());
    for (uint j=0; j<gr->count(); j++) {
       if (j != 0)
	 tmpS += ',';

       tmpS += gr->user(j);
    }
    tmpS += '\n';
    fputs(tmpS, grp);
  }
  fclose(grp);

  chmod(GROUP_FILE, mode);
  chown(GROUP_FILE, uid, gid);

#ifdef GRMKDB
  if (system(GRMKDB) != 0) {
    err->addMsg(i18n("Unable to build group database"), STOP);
    return FALSE;
  }
#endif
  return TRUE;
}


kuser'KGroups::lookup() (./kdeadmin/kuser/kgroup.cpp:215)

KGroup *KGroups::lookup(const QString &name) {
  for (uint i = 0; i<g.count(); i++)
    if (g.at(i)->getName() == name)
      return g.at(i);
  return NULL;
}


kuser'KGroups::lookup() (./kdeadmin/kuser/kgroup.cpp:222)

KGroup *KGroups::lookup(gid_t gid) {
  for (uint i = 0; i<g.count(); i++)
    if (g.at(i)->getGID() == gid)
      return g.at(i);
  return NULL;
}


kuser'KGroups::first_free() (./kdeadmin/kuser/kgroup.cpp:229)

gid_t KGroups::first_free() {
  gid_t t = _KU_FIRST_GID ;

  for (t = _KU_FIRST_GID ; t<65534; t++)
    if (lookup(t) == NULL)
      return t;

  err->addMsg(i18n("You have more than 65534 groups!?!? You have ran out of gid space!"));
  return (-1);
}


kuser'KGroups::~KGroups() (./kdeadmin/kuser/kgroup.cpp:240)

KGroups::~KGroups() {
  g.clear();
}


kuser'KGroups::first() (./kdeadmin/kuser/kgroup.cpp:248)

KGroup *KGroups::first() {
  return g.first();
}


kuser'KGroups::next() (./kdeadmin/kuser/kgroup.cpp:252)

KGroup *KGroups::next() {
  return g.next();
}


kuser'KGroups::add() (./kdeadmin/kuser/kgroup.cpp:256)

void KGroups::add(KGroup *ku) {
  g.append(ku);
}


kuser'KGroups::del() (./kdeadmin/kuser/kgroup.cpp:260)

void KGroups::del(KGroup *au) {
  g.remove(au);
}


kuser'KGroups::count() (./kdeadmin/kuser/kgroup.cpp:264)

uint KGroups::count() const {
  return g.count();
}