diff options
Diffstat (limited to 'src/nickserv.c')
-rw-r--r-- | src/nickserv.c | 362 |
1 files changed, 0 insertions, 362 deletions
diff --git a/src/nickserv.c b/src/nickserv.c index 536550045..e44441379 100644 --- a/src/nickserv.c +++ b/src/nickserv.c @@ -260,368 +260,6 @@ void nickserv(User * u, char *buf) /*************************************************************************/ -/* Load/save data files. */ - - -#define SAFE(x) do { \ - if ((x) < 0) { \ - if (!forceload) \ - fatal("Read error on %s", Config.NickDBName); \ - failed = 1; \ - break; \ - } \ -} while (0) - -void load_ns_req_db() -{ - dbFILE *f; - int i, c, ver; - NickRequest *nr; - uint32 tmp32; - int failed = 0, len; - char *pass; - - if (!(f = open_db(Config.s_NickServ, Config.PreNickDBName, "r", PRE_NICK_VERSION))) - return; - ver = get_file_version(f); - for (i = 0; i < 1024 && !failed; i++) - { - while ((c = getc_db(f)) == 1) - { - if (c != 1) - fatal("Invalid format in %s", Config.PreNickDBName); - - char *s; - SAFE(read_string(&s, f)); - nr = new NickRequest(s); - delete [] s; - - SAFE(read_string(&nr->passcode, f)); - if (ver < 2) - { - SAFE(read_string(&pass, f)); - len = strlen(pass); - enc_encrypt(pass, len, nr->password, PASSMAX); - memset(pass, 0, len); - delete [] pass; - } - else - SAFE(read_buffer(nr->password, f)); - SAFE(read_string(&nr->email, f)); - SAFE(read_int32(&tmp32, f)); - nr->requested = tmp32; - insert_requestnick(nr); - } - } - close_db(f); -} - -void load_ns_dbase() -{ - dbFILE *f; - int ver, c; - unsigned i, j; - NickAlias *na, **nalast, *naprev; - NickCore *nc, **nclast, *ncprev; - int failed = 0; - uint16 tmp16; - uint32 tmp32; - char *s; - - if (!(f = open_db(Config.s_NickServ, Config.NickDBName, "r", NICK_VERSION))) - return; - - ver = get_file_version(f); - - if (ver != 14) - { - close_db(f); - fatal("DB %s is too old", Config.NickDBName); - return; - } - - /* First we load nick cores */ - for (i = 0; i < 1024 && !failed; i++) - { - nclast = &nclists[i]; - ncprev = NULL; - - while ((c = getc_db(f)) == 1) - { - if (c != 1) - fatal("Invalid format in %s", Config.NickDBName); - - SAFE(read_string(&s, f)); - nc = new NickCore(s); - delete [] s; - *nclast = nc; - nclast = &nc->next; - nc->prev = ncprev; - ncprev = nc; - - slist_init(&nc->aliases); - - SAFE(read_buffer(nc->pass, f)); - - SAFE(read_string(&nc->email, f)); - SAFE(read_string(&nc->greet, f)); - SAFE(read_int32(&nc->icq, f)); - SAFE(read_string(&nc->url, f)); - - //SAFE(read_int32(&nc->flags, f)); - SAFE(read_int32(&tmp32, f)); - if (!Config.NSAllowKillImmed) - nc->UnsetFlag(NI_KILL_IMMED); - SAFE(read_int16(&nc->language, f)); - - uint16 accesscount; - SAFE(read_int16(&accesscount, f)); - if (accesscount) - { - for (j = 0; j < accesscount; ++j) - { - char *access; - SAFE(read_string(&access, f)); - if (access) - { - nc->AddAccess(access); - delete [] access; - } - } - } - - SAFE(read_int16(&tmp16, f)); - if (tmp16) nc->memos.memos.resize(tmp16); - SAFE(read_int16(&tmp16, f)); - nc->memos.memomax = static_cast<int16>(tmp16); - if (!nc->memos.memos.empty()) - { - for (j = 0; j < nc->memos.memos.size(); j++) - { - nc->memos.memos[j] = new Memo; - Memo *memo = nc->memos.memos[j]; - SAFE(read_int32(&memo->number, f)); - //SAFE(read_int16(&memo->flags, f)); - SAFE(read_int16(&tmp16, f)); - SAFE(read_int32(&tmp32, f)); - memo->time = tmp32; - SAFE(read_buffer(memo->sender, f)); - SAFE(read_string(&memo->text, f)); - } - } - - SAFE(read_int16(&nc->channelcount, f)); - SAFE(read_int16(&tmp16, f)); - } /* while (getc_db(f) != 0) */ - *nclast = NULL; - } /* for (i) */ - - for (i = 0; i < 1024 && !failed; i++) - { - nalast = &nalists[i]; - naprev = NULL; - while ((c = getc_db(f)) == 1) - { - if (c != 1) - fatal("Invalid format in %s", Config.NickDBName); - - SAFE(read_string(&s, f)); - na = new NickAlias(s, nclists[0]); // XXXXXXXX - delete [] s; - - SAFE(read_string(&na->last_usermask, f)); - SAFE(read_string(&na->last_realname, f)); - SAFE(read_string(&na->last_quit, f)); - - SAFE(read_int32(&tmp32, f)); - na->time_registered = tmp32; - SAFE(read_int32(&tmp32, f)); - na->last_seen = tmp32; - //SAFE(read_int16(&na->status, f)); - SAFE(read_int16(&tmp16, f)); - //na->UnsetFlag(NS_TEMPORARY); - - SAFE(read_string(&s, f)); - na->nc = findcore(s); - delete [] s; - - slist_add(&na->nc->aliases, na); - - if (!na->HasFlag(NS_FORBIDDEN)) - { - if (!na->last_usermask) - na->last_usermask = sstrdup(""); - if (!na->last_realname) - na->last_realname = sstrdup(""); - } - - *nalast = na; - nalast = &na->next; - na->prev = naprev; - naprev = na; - - } /* while (getc_db(f) != 0) */ - - *nalast = NULL; - } /* for (i) */ - - close_db(f); - - for (i = 0; i < 1024; i++) - { - NickAlias *next; - - for (na = nalists[i]; na; na = next) - { - next = na->next; - /* We check for coreless nicks (although it should never happen) */ - if (!na->nc) - { - alog("%s: while loading database: %s has no core! We delete it.", Config.s_NickServ, na->nick); - delete na; - continue; - } - - } - } -} - -#undef SAFE - -/*************************************************************************/ - -#define SAFE(x) do { \ - if ((x) < 0) { \ - restore_db(f); \ - log_perror("Write error on %s", Config.NickDBName); \ - if (time(NULL) - lastwarn > Config.WarningTimeout) { \ - ircdproto->SendGlobops(NULL, "Write error on %s: %s", Config.NickDBName, \ - strerror(errno)); \ - lastwarn = time(NULL); \ - } \ - return; \ - } \ -} while (0) - - - -void save_ns_dbase() -{ - dbFILE *f; - unsigned i, j; - NickAlias *na; - NickCore *nc; - static time_t lastwarn = 0; - - if (!(f = open_db(Config.s_NickServ, Config.NickDBName, "w", NICK_VERSION))) - return; - - for (i = 0; i < 1024; i++) - { - for (nc = nclists[i]; nc; nc = nc->next) - { - SAFE(write_int8(1, f)); - - SAFE(write_string(nc->display, f)); - SAFE(write_buffer(nc->pass, f)); - - SAFE(write_string(nc->email, f)); - SAFE(write_string(nc->greet, f)); - SAFE(write_int32(nc->icq, f)); - SAFE(write_string(nc->url, f)); - - //SAFE(write_int32(nc->flags, f)); - SAFE(write_int32(0, f)); - SAFE(write_int16(nc->language, f)); - - SAFE(write_int16(nc->access.size(), f)); - for (j = 0; j < nc->access.size(); ++j) - { - std::string access = nc->GetAccess(j); - SAFE(write_string(access.c_str(), f)); - } - - SAFE(write_int16(nc->memos.memos.size(), f)); - SAFE(write_int16(nc->memos.memomax, f)); - for (j = 0; j < nc->memos.memos.size(); j++) - { - Memo *memo = nc->memos.memos[j]; - SAFE(write_int32(memo->number, f)); - //SAFE(write_int16(memo->flags, f)); - SAFE(write_int16(0, f)); - SAFE(write_int32(memo->time, f)); - SAFE(write_buffer(memo->sender, f)); - SAFE(write_string(memo->text, f)); - } - - SAFE(write_int16(nc->channelcount, f)); - SAFE(write_int16(nc->channelcount, f)); // write this twice to avoid having to revbump the NickServ DB from anope 1.7, hack alert XXX - - } /* for (nc) */ - - SAFE(write_int8(0, f)); - - } /* for (i) */ - - for (i = 0; i < 1024; i++) - { - for (na = nalists[i]; na; na = na->next) - { - SAFE(write_int8(1, f)); - - SAFE(write_string(na->nick, f)); - - SAFE(write_string(na->last_usermask, f)); - SAFE(write_string(na->last_realname, f)); - SAFE(write_string(na->last_quit, f)); - - SAFE(write_int32(na->time_registered, f)); - SAFE(write_int32(na->last_seen, f)); - - //SAFE(write_int16(na->status, f)); - SAFE(write_int16(0, f)); - - SAFE(write_string(na->nc->display, f)); - - } /* for (na) */ - SAFE(write_int8(0, f)); - } /* for (i) */ - - close_db(f); - -} - -void save_ns_req_dbase() -{ - dbFILE *f; - int i; - NickRequest *nr; - static time_t lastwarn = 0; - - if (!(f = open_db(Config.s_NickServ, Config.PreNickDBName, "w", PRE_NICK_VERSION))) - return; - - for (i = 0; i < 1024; i++) - { - for (nr = nrlists[i]; nr; nr = nr->next) - { - SAFE(write_int8(1, f)); - SAFE(write_string(nr->nick, f)); - SAFE(write_string(nr->passcode, f)); - SAFE(write_buffer(nr->password, f)); - SAFE(write_string(nr->email, f)); - SAFE(write_int32(nr->requested, f)); - SAFE(write_int8(0, f)); - } - } - close_db(f); - -} - -#undef SAFE - -/*************************************************************************/ - /* Check whether a user is on the access list of the nick they're using If * not, send warnings as appropriate. If so (and not NI_SECURE), update * last seen info. |