Changeset 15586
- Timestamp:
- 2008-05-20T11:16:23+12:00 (16 years ago)
- Location:
- gsdl/trunk/src/recpt
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
gsdl/trunk/src/recpt/userdb.cpp
r15207 r15586 26 26 #include "gsdlconf.h" 27 27 #include "userdb.h" 28 #include "gdbmclass.h" 28 29 #include "gsdltimes.h" 29 30 #include "fileutil.h" … … 78 79 { 79 80 storeduserdbfilename = userdbfilename; 80 activated = (!userdb.opendatabase(storeduserdbfilename, GDBM_READER, 1000, true)) ? false : true; 81 userdb = new gdbmclass(); 82 activated = (!userdb->opendatabase(storeduserdbfilename, DB_READER, 1000, true)) ? false : true; 81 83 if (activated == false) 82 84 { 83 activated = (!userdb .opendatabase(storeduserdbfilename, GDBM_WRCREAT, 1000, true)) ? false : true;85 activated = (!userdb->opendatabase(storeduserdbfilename, DB_WRITER_CREATE, 1000, true)) ? false : true; 84 86 if (activated == true) 85 87 { 86 userdb .closedatabase();87 activated = (!userdb .opendatabase(storeduserdbfilename, GDBM_READER, 1000, true)) ? false : true;88 userdb->closedatabase(); 89 activated = (!userdb->opendatabase(storeduserdbfilename, DB_READER, 1000, true)) ? false : true; 88 90 } 89 91 } … … 92 94 } 93 95 94 userdbclass::userdbclass(const gdbmclass &external_userdb)95 {96 userdb = external_userdb;97 activated = true;98 external_db = true;99 }100 101 96 userdbclass::~userdbclass() 102 97 { 103 if (external_db == false) { userdb.closedatabase();} 98 if (external_db == false) 99 { 100 userdb->closedatabase(); 101 delete userdb; 102 } 104 103 } 105 104 … … 207 206 infodbclass info; 208 207 // See if we can get the user's infomration 209 if (userdb .getinfo (username, info))208 if (userdb->getinfo (username, info)) 210 209 { 211 210 userinfo.username = info["username"]; … … 248 247 info["groups"] = userinfo.groups; 249 248 info["comment"] = userinfo.comment; 250 userdb .closedatabase();251 userdb .opendatabase(storeduserdbfilename, GDBM_WRCREAT, 1000, true);252 int result = (userdb .setinfo (username, info)) ? ERRNO_SUCCEED : ERRNO_GDBMACTIONFILED;253 userdb .closedatabase();254 userdb .opendatabase(storeduserdbfilename, GDBM_READER, 1000, true);249 userdb->closedatabase(); 250 userdb->opendatabase(storeduserdbfilename, DB_WRITER_CREATE, 1000, true); 251 int result = (userdb->setinfo (username, info)) ? ERRNO_SUCCEED : ERRNO_DBACTIONFAILED; 252 userdb->closedatabase(); 253 userdb->opendatabase(storeduserdbfilename, DB_READER, 1000, true); 255 254 return result; 256 255 } … … 278 277 { 279 278 infodbclass info; 280 if (userdb .getinfo (userinfo.username, info))279 if (userdb->getinfo (userinfo.username, info)) 281 280 { 282 281 // There is an existing username already … … 297 296 { 298 297 infodbclass info; 299 if (userdb .getinfo (userinfo.username, info))298 if (userdb->getinfo (userinfo.username, info)) 300 299 { 301 300 return set_user_info(userinfo.username, userinfo); … … 315 314 if (activated == true) 316 315 { 317 userdb .closedatabase();318 userdb .opendatabase(storeduserdbfilename, GDBM_WRCREAT, 1000, true);319 userdb .deletekey (username);320 userdb .closedatabase();321 userdb .opendatabase(storeduserdbfilename, GDBM_READER, 1000, true);316 userdb->closedatabase(); 317 userdb->opendatabase(storeduserdbfilename, DB_WRITER_CREATE, 1000, true); 318 userdb->deletekey (username); 319 userdb->closedatabase(); 320 userdb->opendatabase(storeduserdbfilename, DB_READER, 1000, true); 322 321 return ERRNO_SUCCEED; 323 322 } … … 333 332 { 334 333 userinfo_array.erase(userinfo_array.begin(), userinfo_array.end()); 335 text_t user = userdb .getfirstkey();334 text_t user = userdb->getfirstkey(); 336 335 while (!user.empty()) { 337 336 userinfo_t one_userinfo; … … 339 338 if (returned != ERRNO_SUCCEED) return returned; 340 339 userinfo_array.push_back(one_userinfo); 341 user = userdb .getnextkey(user);340 user = userdb->getnextkey(user); 342 341 } 343 342 return ERRNO_SUCCEED; … … 355 354 userlist.erase (userlist.begin(), userlist.end()); 356 355 357 text_t user = userdb .getfirstkey ();356 text_t user = userdb->getfirstkey (); 358 357 while (!user.empty()) { 359 358 userlist.push_back(user); 360 user = userdb .getnextkey (user);359 user = userdb->getnextkey (user); 361 360 } 362 361 return ERRNO_SUCCEED; … … 374 373 { 375 374 storedkeydbfilename = keydbfilename; 376 activated = keydb.opendatabase(storedkeydbfilename, GDBM_READER, 1000, true); 375 keydb = new gdbmclass(); 376 activated = keydb->opendatabase(storedkeydbfilename, DB_READER, 1000, true); 377 377 if (activated == false) 378 378 { 379 activated = keydb .opendatabase(storedkeydbfilename, GDBM_WRCREAT, 1000, true);379 activated = keydb->opendatabase(storedkeydbfilename, DB_WRITER_CREATE, 1000, true); 380 380 if (activated == true) 381 381 { 382 keydb .closedatabase();383 activated = keydb .opendatabase(storedkeydbfilename, GDBM_READER, 1000, true);382 keydb->closedatabase(); 383 activated = keydb->opendatabase(storedkeydbfilename, DB_READER, 1000, true); 384 384 } 385 385 } … … 387 387 } 388 388 389 keydbclass::keydbclass(const gdbmclass &external_keydb)390 {391 keydb = external_keydb;392 activated = true;393 external_db = true;394 }395 396 389 keydbclass::~keydbclass() 397 390 { 398 if (external_db == false) { keydb.closedatabase();} 399 } 391 if (external_db == false) 392 { 393 keydb->closedatabase(); 394 delete keydb; 395 } 396 } 397 400 398 // generates a random key for the user, stores it in the database and 401 399 // returns it so that it can be used in page generation … … 423 421 // make sure this key is not in the database 424 422 crypt_userkey = userdbclass::crypt_text(userkey); 425 if (keydb .exists (crypt_userkey)) userkey.clear();423 if (keydb->exists (crypt_userkey)) userkey.clear(); 426 424 } while (userkey.empty()); 427 425 … … 431 429 keydata["time"] = time2text(time(NULL)); 432 430 433 keydb .closedatabase();434 keydb .opendatabase(storedkeydbfilename, GDBM_WRCREAT, 1000, true);435 if (!keydb .setinfo (crypt_userkey, keydata))431 keydb->closedatabase(); 432 keydb->opendatabase(storedkeydbfilename, DB_WRITER_CREATE, 1000, true); 433 if (!keydb->setinfo (crypt_userkey, keydata)) 436 434 { 437 435 userkey.clear(); // failed 438 436 } 439 keydb .closedatabase();440 keydb .opendatabase(storedkeydbfilename, GDBM_READER, 1000, true);437 keydb->closedatabase(); 438 keydb->opendatabase(storedkeydbfilename, DB_READER, 1000, true); 441 439 442 440 return userkey; … … 463 461 text_t crypt_key = userdbclass::crypt_text(key); 464 462 infodbclass info; 465 if (keydb .getinfo (crypt_key, info)) {463 if (keydb->getinfo (crypt_key, info)) { 466 464 if (info["user"] == thisuser.username) { 467 465 time_t keycreation = text2time (info["time"]); … … 470 468 // succeeded, update the key's time 471 469 info["time"] = time2text(time(NULL)); 472 keydb .closedatabase();473 keydb .opendatabase(storedkeydbfilename, GDBM_WRCREAT, 1000, true);474 keydb .setinfo (crypt_key, info);475 keydb .closedatabase();476 keydb .opendatabase(storedkeydbfilename, GDBM_READER, 1000, true);470 keydb->closedatabase(); 471 keydb->opendatabase(storedkeydbfilename, DB_WRITER_CREATE, 1000, true); 472 keydb->setinfo (crypt_key, info); 473 keydb->closedatabase(); 474 keydb->opendatabase(storedkeydbfilename, DB_READER, 1000, true); 477 475 return true; 478 476 } … … 492 490 // get a list of keys created more than keydecay seconds agon 493 491 text_tarray oldkeys; 494 text_t key = keydb .getfirstkey ();492 text_t key = keydb->getfirstkey (); 495 493 infodbclass info; 496 494 time_t timenow = text2time(time2text(time(NULL))); 497 495 time_t keycreation = (time_t)-1; 498 496 while (!key.empty()) { 499 if (keydb .getinfo (key, info)) {497 if (keydb->getinfo (key, info)) { 500 498 keycreation = text2time (info["time"]); 501 499 if (keycreation != (time_t)-1 && difftime (timenow, keycreation) > keydecay) { … … 505 503 } 506 504 507 key = keydb .getnextkey (key);505 key = keydb->getnextkey (key); 508 506 } 509 507 510 508 // delete the old keys 511 509 if (oldkeys.size() > 0) { 512 keydb .closedatabase();513 keydb .opendatabase(storedkeydbfilename, GDBM_WRCREAT, 1000, true);510 keydb->closedatabase(); 511 keydb->opendatabase(storedkeydbfilename, DB_WRITER_CREATE, 1000, true); 514 512 text_tarray::iterator keys_here = oldkeys.begin(); 515 513 text_tarray::iterator keys_end = oldkeys.end(); 516 514 while (keys_here != keys_end) { 517 keydb .deletekey(*keys_here);515 keydb->deletekey(*keys_here); 518 516 ++keys_here; 519 517 } 520 keydb .closedatabase();521 keydb .opendatabase(storedkeydbfilename, GDBM_READER, 1000, true);518 keydb->closedatabase(); 519 keydb->opendatabase(storedkeydbfilename, DB_READER, 1000, true); 522 520 } 523 521 } -
gsdl/trunk/src/recpt/userdb.h
r15432 r15586 34 34 #define ERRNO_MISSINGPASSWORD -4 35 35 #define ERRNO_PASSWORDMISMATCH -5 36 #define ERRNO_ GDBMACTIONFILED-636 #define ERRNO_DBACTIONFAILED -6 37 37 38 38 39 #include " gdbmclass.h"39 #include "dbclass.h" 40 40 41 41 // The user information object and it provides basic functions for the information object, such as clear and copy (=) functions; … … 61 61 protected: 62 62 // The internal storage for the userdbfilename and the userdb object 63 gdbmclassuserdb;63 dbclass* userdb; 64 64 bool external_db; 65 65 bool activated; … … 68 68 public: 69 69 userdbclass (const text_t &userdbfilename); 70 userdbclass (const gdbmclass &external_userdb);71 70 virtual ~userdbclass(); 72 71 … … 121 120 protected: 122 121 // The internal storage for the userdbfilename and the userdb object 123 gdbmclasskeydb;122 dbclass* keydb; 124 123 bool external_db; 125 124 bool activated; … … 128 127 public: 129 128 keydbclass (const text_t &keydbfilename); 130 keydbclass (const gdbmclass &external_keydb);131 129 virtual ~keydbclass(); 132 130 // functions dealing with databases of temporary keys
Note:
See TracChangeset
for help on using the changeset viewer.