Changeset 14269


Ignore:
Timestamp:
2007-07-24T16:20:41+12:00 (17 years ago)
Author:
qq6
Message:

Jeffrey has fixed operating records of users database on Windows

Location:
gsdl/trunk/src/recpt
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • gsdl/trunk/src/recpt/authenaction.cpp

    r14014 r14269  
    3333#include "infodbclass.h"
    3434#include "gsdltimes.h"
    35 #include "userdb.h"
    3635
    3736
     
    129128
    130129void authenaction::configure (const text_t &key, const text_tarray &cfgline) {
    131   // get the password filename
    132   if (cfgline.size() == 1) {
    133     if (key == "usersfile") usersfile = cfgline[0];
    134     else if (key == "keyfile") keyfile = cfgline[0];
    135     else if (key == "keydecay") keydecay = cfgline[0].getint();
    136   }
    137 
    138130  action::configure (key, cfgline);
    139131}
    140132
    141133bool authenaction::init (ostream &logout) {
    142 
    143134  if (gdbmhome.empty()) {
    144135    logout << "ERROR (authenaction::init) gdbmhome is not set\n";
    145136    return false;
    146137  }
    147 
    148   if (usersfile.empty()) usersfile = filename_cat (gdbmhome, "etc", "users.db");
    149   if (keyfile.empty()) keyfile = filename_cat (gdbmhome, "etc", "key.db");
    150138
    151139  return action::init (logout);
     
    169157  if (args["uan"].empty()) return true;
    170158
    171   userdbclass *user_database = new userdbclass(usersfile);
    172   keydbclass *key_database = new keydbclass(keyfile);
    173 
    174159  // failure means we have to redirect to this action to get authentication
    175160  // (if we are not already doing this)
     
    188173  else args_us = "failed";
    189174
    190   // make sure we have a username
    191   if (!args_un.empty() && (user_database->get_user_info (args_un, thisuser) == ERRNO_SUCCEED)) {
     175  // make sure we have a username                                                                                                 
     176  int status = user_database->get_user_info (args_un, thisuser);
     177  if (!args_un.empty() && (status == ERRNO_SUCCEED)) {
    192178    if (!args_pw.empty()) {
    193179      // we are authenticating using a password
     
    286272  }
    287273
    288   //close the database
    289   user_database->closedatabase();
    290   key_database->closedatabase();
    291274  return true;
    292275}
  • gsdl/trunk/src/recpt/authenaction.h

    r7432 r14269  
    3333#include "action.h"
    3434#include "text_t.h"
     35#include "userdb.h"
    3536#include "receptionist.h"
    3637
     
    4142class authenaction : public action {
    4243protected:
    43   text_t usersfile;
    44   text_t keyfile;
     44  userdbclass *user_database;
     45  keydbclass *key_database;
    4546  int keydecay;
    4647
     
    5051  authenaction ();
    5152  virtual ~authenaction () {}
     53
     54  void set_userdb(userdbclass *udb) {user_database = udb;}
     55
     56  void set_keydb (keydbclass *kdb) {key_database = kdb;}
    5257
    5358  void set_receptionist (receptionist *therecpt) {recpt=therecpt;}
  • gsdl/trunk/src/recpt/librarymain.cpp

    r12517 r14269  
    178178  recpt.add_action (adocumentaction);
    179179
     180  text_t userdbfile = filename_cat(gsdlhome, "etc", "users.db");
     181  userdbclass *udb = new userdbclass(userdbfile);
     182
     183  text_t keydbfile = filename_cat(gsdlhome, "etc", "key.db");
     184  keydbclass *kdb = new keydbclass(keydbfile);
     185
    180186#ifdef GSDL_USE_USERS_ACTION
    181   recpt.add_action (new usersaction());
     187  usersaction *ausersaction = new usersaction();
     188  ausersaction->set_userdb(udb);
     189  recpt.add_action (ausersaction);
    182190#endif
    183191
     
    190198#ifdef GSDL_USE_AUTHEN_ACTION
    191199  authenaction *aauthenaction = new authenaction();
     200  aauthenaction->set_userdb(udb);
     201  aauthenaction->set_keydb(kdb);
    192202  aauthenaction->set_receptionist(&recpt);
    193203  recpt.add_action (aauthenaction);
     
    272282  cgiwrapper (recpt, "");
    273283  delete cservers;
     284  delete udb;
     285  delete kdb;
    274286
    275287  // clean up the actions
  • gsdl/trunk/src/recpt/userdb.cpp

    r14013 r14269  
    7777userdbclass::userdbclass(const text_t &userdbfilename)
    7878{
    79   activated = (!userdb.opendatabase(userdbfilename, GDBM_WRCREAT, 1000, true)) ? false : true;
     79  storeduserdbfilename = userdbfilename;
     80  activated = (!userdb.opendatabase(storeduserdbfilename, GDBM_READER, 1000, true)) ? false : true;
     81  if (activated == false)
     82    {
     83      activated = (!userdb.opendatabase(storeduserdbfilename, GDBM_WRCREAT, 1000, true)) ? false : true;
     84      if (activated == true)
     85        {
     86          userdb.closedatabase();
     87          activated = (!userdb.opendatabase(storeduserdbfilename, GDBM_READER, 1000, true)) ? false : true;
     88        }
     89    }
     90   
    8091  external_db = false;
    8192}
     
    227238      info["groups"] = userinfo.groups;
    228239      info["comment"] = userinfo.comment;
    229      
    230       return (userdb.setinfo (username, info)) ? ERRNO_SUCCEED : ERRNO_GDBMACTIONFILED ;
     240      userdb.closedatabase();
     241      userdb.opendatabase(storeduserdbfilename, GDBM_WRCREAT, 1000, true);
     242      int result = (userdb.setinfo (username, info)) ? ERRNO_SUCCEED : ERRNO_GDBMACTIONFILED;
     243      userdb.closedatabase();
     244      userdb.opendatabase(storeduserdbfilename, GDBM_READER, 1000, true);         
     245      return  result;
    231246    }
    232247  return ERRNO_CONNECTIONFAILED;
     
    290305  if (activated == true)
    291306    {
     307      userdb.closedatabase();
     308      userdb.opendatabase(storeduserdbfilename, GDBM_WRCREAT, 1000, true);
    292309      userdb.deletekey (username);
     310      userdb.closedatabase();
     311      userdb.opendatabase(storeduserdbfilename, GDBM_READER, 1000, true);
    293312      return ERRNO_SUCCEED;
    294313    }
     
    335354  return ERRNO_CONNECTIONFAILED;
    336355}
    337 
    338 //an alernative way to colse the database if the class can't reach the destructor
    339 void userdbclass::closedatabase()
    340 {
    341    userdb.closedatabase();
    342 }
    343 
    344356//==========================================//
    345357//       userdbclass functions (End)        //
     
    351363keydbclass::keydbclass(const text_t &keydbfilename)
    352364{
    353   activated = (!keydb.opendatabase(keydbfilename, GDBM_WRCREAT, 1000, true)) ? false : true;
     365  storedkeydbfilename = keydbfilename;
     366  activated = (!keydb.opendatabase(storedkeydbfilename, GDBM_READER, 1000, true)) ? false : true;
     367  if (activated == false)
     368    {
     369      activated = (!keydb.opendatabase(storedkeydbfilename, GDBM_WRCREAT, 1000, true)) ? false : true;
     370      if (activated == true)
     371        {
     372          keydb.closedatabase();
     373          activated = (!keydb.opendatabase(storedkeydbfilename, GDBM_READER, 1000, true)) ? false : true;
     374        }
     375    }
    354376  external_db = false;
    355377}
     
    399421      keydata["time"] = time2text(time(NULL));
    400422     
     423      keydb.closedatabase();
     424      keydb.opendatabase(storedkeydbfilename, GDBM_WRCREAT, 1000, true);
    401425      if (!keydb.setinfo (crypt_userkey, keydata))
    402426        {
    403427          userkey.clear(); // failed
    404428        }
     429      keydb.closedatabase();
     430      keydb.opendatabase(storedkeydbfilename, GDBM_READER, 1000, true);
    405431     
    406432      return userkey;
     
    434460            // succeeded, update the key's time
    435461            info["time"] = time2text(time(NULL));
     462            keydb.closedatabase();
     463            keydb.opendatabase(storedkeydbfilename, GDBM_WRCREAT, 1000, true);
    436464            keydb.setinfo (crypt_key, info);
     465            keydb.closedatabase();
     466            keydb.opendatabase(storedkeydbfilename, GDBM_READER, 1000, true);
    437467            return true;
    438468          }
     
    477507    }
    478508}
    479 
    480 //an alernative way to colse the database if the class can't reach the destructor
    481 void keydbclass::closedatabase()
    482 {
    483    keydb.closedatabase();
    484 }
    485509//==========================================//
    486510//       keydbclass functions (End)         //
  • gsdl/trunk/src/recpt/userdb.h

    r14015 r14269  
    6464  bool external_db;
    6565  bool activated;
     66  text_t storeduserdbfilename;
    6667 
    6768 public:
     
    114115  // on success
    115116  int get_user_list (text_tarray &userlist);
    116 
    117   //an alernative way to colse the database if the class can't reach the destructor
    118   void closedatabase();
    119117};
    120118
     
    126124  bool external_db;
    127125  bool activated;
     126   text_t storedkeydbfilename;
    128127 
    129128 public:
     
    146145  // use sparingly, it can be quite an expensive function
    147146  void remove_old_keys (int keydecay);
    148 
    149  //an alernative way to colse the database if the class can't reach the destructor
    150   void closedatabase();
    151147};
    152148
  • gsdl/trunk/src/recpt/usersaction.cpp

    r13844 r14269  
    147147
    148148void usersaction::configure (const text_t &key, const text_tarray &cfgline) {
    149   // get the password filename
    150   if (cfgline.size() == 1) {
    151     if (key == "usersfile") usersfile = cfgline[0];
    152   }
    153 
    154149  action::configure (key, cfgline);
    155150}
     
    161156    return false;
    162157  }
    163 
    164   if (usersfile.empty()) usersfile = filename_cat (gdbmhome, "etc", "users.db");
    165158
    166159  return action::init (logout);
     
    193186                 outconvertclass &outconvert, ostream &textout,
    194187                 ostream &logout) {
    195 
    196   // open the user database (it will be used a lot)
    197   user_database = new userdbclass(usersfile);
    198188
    199189  if (args["uma"] == "adduser" || args["uma"] == "edituser") {
  • gsdl/trunk/src/recpt/usersaction.h

    r13844 r14269  
    3232#include "gsdlconf.h"
    3333#include "action.h"
     34#include "userdb.h"
    3435#include "text_t.h"
    35 #include "userdb.h"
    3636
    3737
    3838class usersaction : public action {
    3939protected:
    40   text_t usersfile;
    41   userdbclass* user_database;
     40  userdbclass *user_database;
    4241
    4342public:
     
    4847
    4948  bool init (ostream &logout);
     49
     50  void set_userdb(userdbclass *udb) {user_database = udb;}
    5051 
    5152  text_t get_action_name () {return "um";}
Note: See TracChangeset for help on using the changeset viewer.