summaryrefslogtreecommitdiff
path: root/src/modules/mysql/db_mysql_read.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/mysql/db_mysql_read.cpp')
-rw-r--r--src/modules/mysql/db_mysql_read.cpp618
1 files changed, 0 insertions, 618 deletions
diff --git a/src/modules/mysql/db_mysql_read.cpp b/src/modules/mysql/db_mysql_read.cpp
deleted file mode 100644
index 3ffc82366..000000000
--- a/src/modules/mysql/db_mysql_read.cpp
+++ /dev/null
@@ -1,618 +0,0 @@
-/* RequiredLibraries: mysqlpp */
-
-#include "db_mysql.h"
-
-static std::vector<std::string> MakeVector(std::string buf)
-{
- std::string s;
- spacesepstream sep(buf);
- std::vector<std::string> params;
-
- while (sep.GetToken(s))
- {
- if (s[0] == ':')
- {
- s.erase(s.begin());
- if (!s.empty() && !sep.StreamEnd())
- params.push_back(s + " " + sep.GetRemaining());
- else if (!s.empty())
- params.push_back(s);
- }
- else
- params.push_back(s);
- }
-
- return params;
-}
-
-static void LoadDatabase()
-{
- mysqlpp::Query query(me->Con);
- mysqlpp::StoreQueryResult qres;
-
- query << "SELECT * FROM `anope_ns_core`";
- qres = StoreQuery(query);
-
- if (qres)
- for (size_t i = 0, end = qres.num_rows(); i < end; ++i)
- {
- NickCore *nc = new NickCore(SQLAssign(qres[i]["display"]));
- nc->pass = SQLAssign(qres[i]["pass"]);
- if (qres[i]["email"].size())
- nc->email = sstrdup(qres[i]["email"].c_str());
- if (qres[i]["greet"].size())
- nc->greet = sstrdup(qres[i]["greet"].c_str());
- if (qres[i]["icq"].size())
- nc->icq = atol(qres[i]["icq"].c_str());
- if (qres[i]["url"].size())
- nc->url = sstrdup(qres[i]["url"].c_str());
-
- spacesepstream sep(SQLAssign(qres[i]["flags"]));
- std::string buf;
- while (sep.GetToken(buf))
- for (int j = 0; NickCoreFlags[j].Flag != -1; ++j)
- if (NickCoreFlags[j].Name == buf)
- nc->SetFlag(NickCoreFlags[j].Flag);
-
- nc->language = atoi(qres[i]["language"].c_str());
- nc->channelcount = atoi(qres[i]["channelcount"].c_str());
- nc->memos.memomax = atoi(qres[i]["memomax"].c_str());
- }
-
- query << "SELECT * FROM `anope_ns_access`";
- qres = StoreQuery(query);
-
- if (qres)
- for (size_t i = 0, end = qres.num_rows(); i < end; ++i)
- {
- NickCore *nc = findcore(qres[i]["display"].c_str());
- if (!nc)
- {
- Alog() << "MySQL: Got NickCore access entry for nonexistant core " << qres[i]["display"];
- continue;
- }
-
- nc->AddAccess(SQLAssign(qres[i]["access"]));
- }
-
- query << "SELECT * FROM `anope_ns_core_metadata`";
- qres = StoreQuery(query);
-
- if (qres)
- for (size_t i = 0, end = qres.num_rows(); i < end; ++i)
- {
- NickCore *nc = findcore(qres[i]["display"].c_str());
- if (!nc)
- {
- Alog() << "MySQL: Got NickCore access entry for nonexistant core " << qres[i]["display"];
- continue;
- }
- EventReturn MOD_RESULT;
- std::vector<std::string> Params = MakeVector(SQLAssign(qres[i]["value"]));
- FOREACH_RESULT(I_OnDatabaseReadMetadata, OnDatabaseReadMetadata(nc, SQLAssign(qres[i]["name"]), Params));
- }
-
- query << "SELECT * FROM `anope_ns_alias`";
- qres = StoreQuery(query);
-
- if (qres)
- for (size_t i = 0, end = qres.num_rows(); i < end; ++i)
- {
- NickCore *nc = findcore(qres[i]["display"].c_str());
- if (!nc)
- {
- Alog() << "MySQL: Got NickAlias for nick " << qres[i]["nick"] << " with nonexistant core " << qres[i]["display"];
- continue;
- }
-
- NickAlias *na = new NickAlias(SQLAssign(qres[i]["nick"]), nc);
- na->last_quit = sstrdup(qres[i]["last_quit"].c_str());
- na->last_realname = sstrdup(qres[i]["last_realname"].c_str());
- na->last_usermask = sstrdup(qres[i]["last_usermask"].c_str());
- na->time_registered = atol(qres[i]["time_registered"].c_str());
- na->last_seen = atol(qres[i]["last_seen"].c_str());
-
- spacesepstream sep(SQLAssign(qres[i]["flags"]));
- std::string buf;
- while (sep.GetToken(buf))
- for (int j = 0; NickAliasFlags[j].Flag != -1; ++j)
- if (NickAliasFlags[j].Name == buf)
- na->SetFlag(NickAliasFlags[j].Flag);
- }
-
- query << "SELECT * FROM `anope_ns_alias_metadata`";
- qres = StoreQuery(query);
-
- if (qres)
- for (size_t i = 0, end = qres.num_rows(); i < end; ++i)
- {
- NickAlias *na = findnick(SQLAssign(qres[i]["nick"]));
- if (!na)
- {
- Alog() << "MySQL: Got metadata for nonexistant nick " << qres[i]["nick"];
- continue;
- }
- EventReturn MOD_RESULT;
- std::vector<std::string> Params = MakeVector(SQLAssign(qres[i]["value"]));
- FOREACH_RESULT(I_OnDatabaseReadMetadata, OnDatabaseReadMetadata(na, SQLAssign(qres[i]["name"]), Params));
- }
-
- query << "SELECT * FROM `anope_bs_core`";
- qres = StoreQuery(query);
-
- if (qres)
- for (size_t i = 0, end = qres.num_rows(); i < end; ++i)
- {
- BotInfo *bi = findbot(SQLAssign(qres[i]["nick"]));
- if (!bi)
- bi = new BotInfo(SQLAssign(qres[i]["nick"]));
- bi->user = SQLAssign(qres[i]["user"]);
- bi->host = SQLAssign(qres[i]["host"]);
- bi->real = SQLAssign(qres[i]["rname"]);
-
- if (qres[i]["flags"].size())
- {
- spacesepstream sep(SQLAssign(qres[i]["flags"]));
- std::string buf;
- while (sep.GetToken(buf))
- for (unsigned j = 0; BotServFlags[j].Flag != -1; ++j)
- if (buf == BotServFlags[j].Name)
- {
- bi->SetFlag(BotServFlags[j].Flag);
- break;
- }
- }
- bi->created = atol(qres[i]["created"]);
- bi->chancount = atol(qres[i]["chancount"]);
- }
-
- query << "SELECT * FROM `anope_bs_info_metadata`";
- qres = StoreQuery(query);
-
- if (qres)
- for (size_t i = 0, end = qres.num_rows(); i < end; ++i)
- {
- BotInfo *bi = findbot(SQLAssign(qres[i]["botname"]));
- if (!bi)
- {
- Alog() << "MySQL: BotInfo metadata for nonexistant bot " << qres[i]["botname"];
- continue;
- }
-
- EventReturn MOD_RESULT;
- std::vector<std::string> Params = MakeVector(SQLAssign(qres[i]["value"]));
- FOREACH_RESULT(I_OnDatabaseReadMetadata, OnDatabaseReadMetadata(bi, SQLAssign(qres[i]["name"]), Params));
- }
-
- query << "SELECT * FROM `anope_cs_info`";
- qres = StoreQuery(query);
-
- if (qres)
- for (size_t i = 0, end = qres.num_rows(); i < end; ++i)
- {
- NickCore *nc;
- if (qres[i]["founder"].size())
- {
- nc = findcore(qres[i]["founder"].c_str());
- if (!nc)
- {
- Alog() << "MySQL: Channel " << qres[i]["name"] << " with nonexistant founder " << qres[i]["founder"];
- continue;
- }
- }
-
- ChannelInfo *ci = new ChannelInfo(SQLAssign(qres[i]["name"]));
- ci->founder = nc;
- if (qres[i]["successor"].size())
- ci->successor = findcore(qres[i]["successor"].c_str());
- ci->desc = sstrdup(qres[i]["descr"].c_str());
- if (qres[i]["url"].size())
- ci->url = sstrdup(qres[i]["url"].c_str());
- if (qres[i]["email"].size())
- ci->email = sstrdup(qres[i]["email"].c_str());
- ci->time_registered = atol(qres[i]["time_registered"]);
- ci->last_used = atol(qres[i]["last_used"]);
- if (qres[i]["last_topic"].size())
- ci->last_topic = sstrdup(qres[i]["last_topic"].c_str());
- if (qres[i]["last_topic_setter"].size())
- ci->last_topic_setter = SQLAssign(qres[i]["last_topic_setter"]);
- if (qres[i]["last_topic_time"].size())
- ci->last_topic_time = atol(qres[i]["last_topic_time"].c_str());
- if (qres[i]["flags"].size())
- {
- std::string buf;
- spacesepstream sep(SQLAssign(qres[i]["flags"]));
- while (sep.GetToken(buf))
- for (int j = 0; ChannelFlags[j].Flag != -1; ++j)
- if (buf == ChannelFlags[j].Name)
- {
- ci->SetFlag(ChannelFlags[j].Flag);
- break;
- }
- }
- if (qres[i]["forbidby"].size())
- ci->forbidby = sstrdup(qres[i]["forbidby"].c_str());
- if (qres[i]["forbidreason"].size())
- ci->forbidreason = sstrdup(qres[i]["forbidreason"].c_str());
- ci->bantype = atoi(qres[i]["bantype"].c_str());
- if (qres[i]["mlock_on"].size())
- {
- std::vector<std::string> modes;
- std::string buf;
-
- spacesepstream sep(SQLAssign(qres[i]["mlock_on"]));
- while (sep.GetToken(buf))
- modes.push_back(buf);
-
- ci->Extend("db_mlock_modes_on", new ExtensibleItemRegular<std::vector<std::string> >(modes));
- }
- if (qres[i]["mlock_off"].size())
- {
- std::vector<std::string> modes;
- std::string buf;
-
- spacesepstream sep(SQLAssign(qres[i]["mlock_off"]));
- while (sep.GetToken(buf))
- modes.push_back(buf);
-
- ci->Extend("db_mlock_modes_off", new ExtensibleItemRegular<std::vector<std::string> >(modes));
- }
- if (qres[i]["mlock_params"].size())
- {
- std::vector<std::pair<std::string, std::string> > mlp;
- std::string buf, buf2;
-
- spacesepstream sep(SQLAssign(qres[i]["mlock_params"]));
-
- while (sep.GetToken(buf) && sep.GetToken(buf2))
- mlp.push_back(std::make_pair(buf, buf2));
-
- ci->Extend("db_mlp", new ExtensibleItemRegular<std::vector<std::pair<std::string, std::string> > >(mlp));
- }
- if (qres[i]["entry_message"].size())
- ci->entry_message = sstrdup(qres[i]["entry_message"].c_str());
- ci->memos.memomax = atoi(qres[i]["memomax"].c_str());
- if (qres[i]["botnick"].size())
- ci->bi = findbot(SQLAssign(qres[i]["botnick"]));
- if (ci->bi)
- {
- if (qres[i]["botflags"].size())
- {
- std::string buf;
- spacesepstream sep(SQLAssign(qres[i]["botflags"]));
- while (sep.GetToken(buf))
- for (int j = 0; BotFlags[j].Flag != -1; ++j)
- if (buf == BotFlags[j].Name)
- {
- ci->botflags.SetFlag(BotFlags[j].Flag);
- break;
- }
- }
- }
- if (qres[i]["capsmin"].size())
- ci->capsmin = atoi(qres[i]["capsmin"].c_str());
- if (qres[i]["capspercent"].size())
- ci->capspercent = atoi(qres[i]["capspercent"].c_str());
- if (qres[i]["floodlines"].size())
- ci->floodlines = atoi(qres[i]["floodlines"].c_str());
- if (qres[i]["floodsecs"].size())
- ci->floodsecs = atoi(qres[i]["floodsecs"].c_str());
- if (qres[i]["repeattimes"].size())
- ci->repeattimes = atoi(qres[i]["repeattimes"].c_str());
- }
-
- query << "SELECT * FROM `anope_cs_ttb";
- qres = StoreQuery(query);
-
- if (qres)
- for (size_t i = 0, end = qres.num_rows(); i < end; ++i)
- {
- ChannelInfo *ci = cs_findchan(SQLAssign(qres[i]["channel"]));
- if (!ci)
- {
- Alog() << "MySQL: Channel ttb for nonexistant channel " << qres[i]["channel"];
- continue;
- }
-
- ci->ttb[atoi(qres[i]["ttb_id"].c_str())] = atoi(qres[i]["value"].c_str());
- }
-
- query << "SELECT * FROM `anope_bs_badwords`";
- qres = StoreQuery(query);
-
- if (qres)
- for (size_t i = 0, end = qres.num_rows(); i < end; ++i)
- {
- ChannelInfo *ci = cs_findchan(SQLAssign(qres[i]["channel"]));
- if (!ci)
- {
- Alog() << "MySQL: Channel badwords entry for nonexistant channel " << qres[i]["channel"];
- continue;
- }
-
- BadWordType BWTYPE = BW_ANY;
- if (qres[i]["type"] == "SINGLE")
- BWTYPE = BW_SINGLE;
- else if (qres[i]["type"] == "START")
- BWTYPE = BW_START;
- else if (qres[i]["type"] == "END")
- BWTYPE = BW_END;
- ci->AddBadWord(SQLAssign(qres[i]["word"]), BWTYPE);
- }
-
- query << "SELECT * FROM `anope_cs_access`";
- qres = StoreQuery(query);
-
- if (qres)
- for (size_t i = 0, end = qres.num_rows(); i < end; ++i)
- {
- ChannelInfo *ci = cs_findchan(SQLAssign(qres[i]["channel"]));
- if (!ci)
- {
- Alog() << "MySQL: Channel access entry for nonexistant channel " << qres[i]["channel"];
- continue;
- }
- NickCore *nc = findcore(qres[i]["display"]);
- if (!nc)
- {
- Alog() << "MySQL: Channel access entry for " << ci->name << " with nonexistant nick " << qres[i]["display"];
- continue;
- }
-
- ci->AddAccess(nc, atoi(qres[i]["level"]), SQLAssign(qres[i]["creator"]), atol(qres[i]["last_seen"]));
- }
-
- query << "SELECT * FROM `anope_cs_akick`";
- qres = StoreQuery(query);
-
- if (qres)
- for (size_t i = 0, end = qres.num_rows(); i < end; ++i)
- {
- ChannelInfo *ci = cs_findchan(SQLAssign(qres[i]["channel"]));
- if (!ci)
- {
- Alog() << "MySQL: Channel akick entry for nonexistant channel " << qres[i]["channel"];
- continue;
- }
- NickCore *nc = NULL;
- spacesepstream sep(qres[i]["flags"]);
- std::string flag, mask;
- bool stuck = false;
- while (sep.GetToken(flag))
- if (flag == "ISNICK")
- nc = findcore(qres[i]["mask"]);
- else if (flag == "STUCK")
- stuck = true;
- AutoKick *ak;
- if (nc)
- ak = ci->AddAkick(SQLAssign(qres[i]["creator"]), nc, SQLAssign(qres[i]["reason"]), atol(qres[i]["created"].c_str()), atol(qres[i]["last_used"].c_str()));
- else
- ak = ci->AddAkick(SQLAssign(qres[i]["creator"]), SQLAssign(qres[i]["mask"]), SQLAssign(qres[i]["reason"]), atol(qres[i]["created"].c_str()), atol(qres[i]["last_used"].c_str()));
- if (stuck)
- ak->SetFlag(AK_STUCK);
- if (nc)
- ak->SetFlag(AK_ISNICK);
- }
-
- query << "SELECT * FROM `anope_cs_levels`";
- qres = StoreQuery(query);
-
- if (qres)
- for (size_t i = 0, end = qres.num_rows(); i < end; ++i)
- {
- ChannelInfo *ci = cs_findchan(SQLAssign(qres[i]["channel"]));
- if (!ci)
- {
- Alog() << "MySQL: Channel level entry for nonexistant channel " << qres[i]["channel"];
- continue;
- }
- ci->levels[atoi(qres[i]["position"])] = atoi(qres[i]["level"]);
- }
-
- query << "SELECT * FROM `anope_cs_info_metadata`";
- qres = StoreQuery(query);
-
- if (qres)
- for (size_t i = 0, end = qres.num_rows(); i < end; ++i)
- {
- ChannelInfo *ci = cs_findchan(SQLAssign(qres[i]["channel"]));
- if (!ci)
- {
- Alog() << "MySQL: Channel metadata for nonexistant channel " << qres[i]["channel"];
- continue;
- }
-
- EventReturn MOD_RESULT;
- std::vector<std::string> Params = MakeVector(SQLAssign(qres[i]["value"]));
- FOREACH_RESULT(I_OnDatabaseReadMetadata, OnDatabaseReadMetadata(ci, SQLAssign(qres[i]["name"]), Params));
- }
-
- query << "SELECT * FROM `anope_ns_request`";
- qres = StoreQuery(query);
-
- if (qres)
- for (size_t i = 0, end = qres.num_rows(); i < end; ++i)
- {
- NickRequest *nr = new NickRequest(qres[i]["nick"].c_str());
- nr->passcode = SQLAssign(qres[i]["passcode"]);
- nr->password = SQLAssign(qres[i]["password"]);
- nr->email = sstrdup(qres[i]["email"].c_str());
- nr->requested = atol(qres[i]["requested"].c_str());
- }
-
- EventReturn MOD_RESULT;
- query << "SELECT * FROM `anope_extra`";
- qres = StoreQuery(query);
-
- if (qres)
- for (size_t i = 0, end = qres.num_rows(); i < end; ++i)
- {
- std::vector<std::string> params = MakeVector(SQLAssign(qres[i]["data"]));
- FOREACH_RESULT(I_OnDatabaseRead, OnDatabaseRead(params));
- }
-
- query << "SELECT * FROM `anope_ns_core_metadata`";
- qres = StoreQuery(query);
-
- if (qres)
- for (size_t i = 0, end = qres.num_rows(); i < end; ++i)
- {
- NickCore *nc = findcore(qres[i]["nick"].c_str());
- if (nc)
- {
- std::vector<std::string> params = MakeVector(SQLAssign(qres[i]["value"]));
- FOREACH_RESULT(I_OnDatabaseReadMetadata, OnDatabaseReadMetadata(nc, SQLAssign(qres[i]["name"]), params));
- }
- }
-
- query << "SELECT * FROM `anope_ns_alias_metadata`";
- qres = StoreQuery(query);
-
- if (qres)
- for (size_t i = 0, end = qres.num_rows(); i < end; ++i)
- {
- NickAlias *na = findnick(SQLAssign(qres[i]["nick"]));
- if (na)
- {
- std::vector<std::string> params = MakeVector(SQLAssign(qres[i]["value"]));
- FOREACH_RESULT(I_OnDatabaseReadMetadata, OnDatabaseReadMetadata(na, SQLAssign(qres[i]["name"]), params));
- }
- }
-
- query << "SELECT * FROM `anope_cs_info_metadata`";
- qres = StoreQuery(query);
-
- if (qres)
- for (size_t i = 0, end = qres.num_rows(); i < end; ++i)
- {
- ChannelInfo *ci = cs_findchan(SQLAssign(qres[i]["channel"]));
- if (ci)
- {
- std::vector<std::string> params = MakeVector(SQLAssign(qres[i]["value"]));
- FOREACH_RESULT(I_OnDatabaseReadMetadata, OnDatabaseReadMetadata(ci, SQLAssign(qres[i]["name"]), params));
- }
- }
-
- query << "SELECT * FROM `anope_ms_info`";
- qres = StoreQuery(query);
-
- if (qres)
- for (size_t i = 0, end = qres.num_rows(); i < end; ++i)
- {
- MemoInfo *mi = NULL;
- if (qres[i]["serv"] == "NICK")
- {
- NickCore *nc = findcore(qres[i]["receiver"].c_str());
- if (nc)
- mi = &nc->memos;
- }
- else if (qres[i]["serv"] == "CHAN")
- {
- ChannelInfo *ci = cs_findchan(SQLAssign(qres[i]["receiver"]));
- if (ci)
- mi = &ci->memos;
- }
- if (mi)
- {
- Memo *m = new Memo();
- mi->memos.push_back(m);
- m->sender = SQLAssign(qres[i]["sender"]);
- if (mi->memos.size() > 1)
- {
- m->number = mi->memos[mi->memos.size() - 2]->number + 1;
- if (m->number < 1)
- {
- for (unsigned j = 0; j < mi->memos.size(); ++j)
- mi->memos[j]->number = j + 1;
- }
- }
- else
- m->number = 1;
- m->time = atol(qres[i]["time"].c_str());
- m->text = sstrdup(qres[i]["text"].c_str());
-
- if (qres[i]["flags"].size())
- {
- spacesepstream sep(SQLAssign(qres[i]["flags"]));
- std::string buf;
- while (sep.GetToken(buf))
- for (unsigned j = 0; MemoFlags[j].Flag != -1; ++j)
- if (MemoFlags[j].Name == buf)
- m->SetFlag(MemoFlags[j].Flag);
- }
- }
- }
-
- query << "SELECT * FROM `anope_os_akills`";
- qres = StoreQuery(query);
-
- if (qres && SGLine)
- for (size_t i = 0, end = qres.num_rows(); i < end; ++i)
- {
- ci::string user = qres[i]["user"].c_str();
- ci::string host = qres[i]["host"].c_str();
- ci::string by = qres[i]["xby"].c_str();
- std::string reason = SQLAssign(qres[i]["reason"]);
- time_t seton = atol(qres[i]["seton"].c_str());
- time_t expires = atol(qres[i]["expire"].c_str());
-
- XLine *x = SGLine->Add(NULL, NULL, user + "@" + host, expires, reason);
- if (x)
- {
- x->By = by;
- x->Created = seton;
- }
- }
-
- query << "SELECT * FROM `anope_os_xlines`";
- qres = StoreQuery(query);
-
- if (qres)
- for (size_t i = 0, end = qres.num_rows(); i < end; ++i)
- {
- ci::string mask = qres[i]["mask"].c_str();
- ci::string by = qres[i]["xby"].c_str();
- std::string reason = SQLAssign(qres[i]["reason"]);
- time_t seton = atol(qres[i]["seton"].c_str());
- time_t expires = atol(qres[i]["expires"].c_str());
-
- XLine *x = NULL;
- if (qres[i]["type"] == "SNLINE" && SNLine)
- x = SNLine->Add(NULL, NULL, mask, expires, reason);
- else if (qres[i]["type"] == "SQLINE" && SQLine)
- x = SQLine->Add(NULL, NULL, mask, expires, reason);
- else if (qres[i]["type"] == "SZLINE" && SZLine)
- x = SZLine->Add(NULL, NULL,mask, expires, reason);
- if (x)
- {
- x->By = by;
- x->Created = seton;
- }
- }
-}
-
-class DBMySQLRead : public DBMySQL
-{
- public:
- DBMySQLRead(const std::string &modname, const std::string &creator) : DBMySQL(modname, creator)
- {
- Implementation i[] = { I_OnLoadDatabase };
- ModuleManager::Attach(i, this, 1);
- }
-
- ~DBMySQLRead()
- {
- }
-
- EventReturn OnLoadDatabase()
- {
- LoadDatabase();
-
- /* No need to ever reload this again, although this should never be triggered again */
- ModuleManager::Detach(I_OnLoadDatabase, this);
-
- return EVENT_STOP;
- }
-};
-
-MODULE_INIT(DBMySQLRead)