diff options
Diffstat (limited to 'mysql.c')
-rw-r--r-- | mysql.c | 669 |
1 files changed, 668 insertions, 1 deletions
@@ -58,8 +58,10 @@ int db_mysql_init() do_mysql = 1; alog("MySQL has been enabled."); } + if (!db_mysql_open()) + do_mysql = 0; + return 1; - } /*************************************************************************/ @@ -103,6 +105,10 @@ int db_mysql_query(char *sql) { int result, lcv; + char *s = db_mysql_quote(sql); + + if(debug) alog(s); + free(s); result = mysql_query(mysql, sql); @@ -867,3 +873,664 @@ void db_mysql_save_bs_core(BotInfo * bi) } /*************************************************************************/ + +void db_mysql_load_bs_dbase(void) +{ + BotInfo *bi; + char sqlcmd[MAX_SQL_BUF]; + + if (!do_mysql) return; + + snprintf(sqlcmd,MAX_SQL_BUF,"SELECT `nick`,`user`,`host`,`rname`,`flags`,`created`,`chancount` FROM `anope_bs_core`"); + + if (db_mysql_query(sqlcmd)) { + log_perror("Can't create sql query: %s", sqlcmd); + db_mysql_error(MYSQL_WARNING, "query"); + } + mysql_res = mysql_store_result(mysql); + if (mysql_num_rows(mysql_res) == 0) { + mysql_free_result(mysql_res); + return; + } + while((mysql_row = mysql_fetch_row(mysql_res))) { + bi = makebot(mysql_row[0]); + bi->user = sstrdup(mysql_row[1]); + bi->host = sstrdup(mysql_row[2]); + bi->real = sstrdup(mysql_row[3]); + bi->flags = atoi(mysql_row[4]); + bi->created = atoi(mysql_row[5]); + bi->chancount = atoi(mysql_row[6]); + } + mysql_free_result(mysql_res); +} + +void db_mysql_load_hs_dbase(void) +{ + char sqlcmd[MAX_SQL_BUF]; + char *nick; + char *vHost; + char *creator; + char *vIdent; + int32 time; + + if (!do_mysql) return; + + snprintf(sqlcmd,MAX_SQL_BUF,"SELECT `nick`,`vident`,`vhost`,`creator`,`time` FROM `anope_hs_core`"); + + if (db_mysql_query(sqlcmd)) { + log_perror("Can't create sql query: %s", sqlcmd); + db_mysql_error(MYSQL_WARNING, "query"); + } + mysql_res = mysql_store_result(mysql); + if (mysql_num_rows(mysql_res) == 0) { + mysql_free_result(mysql_res); + return; + } + while((mysql_row = mysql_fetch_row(mysql_res))) { + nick = sstrdup(mysql_row[0]); + vIdent = sstrdup(mysql_row[1]); + vHost = sstrdup(mysql_row[2]); + creator = sstrdup(mysql_row[3]); + time = atoi(mysql_row[4]); + addHostCore(nick, vIdent, vHost, creator, time); + free(nick); + free(vHost); + free(creator); + free(vIdent); + } + mysql_free_result(mysql_res); +} + +void db_mysql_load_news(void) +{ + char sqlcmd[MAX_SQL_BUF]; + int j; + + if (!do_mysql) return; + + snprintf(sqlcmd, MAX_SQL_BUF,"SELECT `type`,`num`,`ntext`,`who`,`time` FROM `anope_os_news`"); + if (db_mysql_query(sqlcmd)) { + log_perror("Can't create sql query: %s",sqlcmd); + db_mysql_error(MYSQL_WARNING, "query"); + } + mysql_res = mysql_store_result(mysql); + nnews = mysql_num_rows(mysql_res); + if (nnews < 8) news_size = 16; + else if (nnews >= 16384) news_size = 32767; + else news_size = 2 * nnews; + news = scalloc(sizeof(*news) * news_size, 1); + if (!nnews) { + mysql_free_result(mysql_res); + return; + } + j = 0; + while((mysql_row = mysql_fetch_row(mysql_res))) { + news[j].type = atoi(mysql_row[0]); + news[j].num = atoi(mysql_row[1]); + news[j].text = sstrdup(mysql_row[2]); + snprintf(news[j].who, NICKMAX, "%s",mysql_row[3]); + news[j].time = atoi(mysql_row[4]); + j++; + } + mysql_free_result(mysql_res); +} + +void db_mysql_load_exceptions(void) +{ + char sqlcmd[MAX_SQL_BUF]; + int j; + + if (!do_mysql) return; + + snprintf(sqlcmd, MAX_SQL_BUF,"SELECT `mask`,`lim`,`who`,`reason`,`time`,`expires` FROM `anope_os_exceptions`;"); + if (db_mysql_query(sqlcmd)) { + log_perror("Can't create sql query: %s",sqlcmd); + db_mysql_error(MYSQL_WARNING, "query"); + } + mysql_res = mysql_store_result(mysql); + nexceptions = mysql_num_rows(mysql_res); + exceptions = scalloc(sizeof(Exception) * nexceptions, 1); + j = 0; + while((mysql_row = mysql_fetch_row(mysql_res))) { + exceptions[j].mask = sstrdup(mysql_row[0]); + exceptions[j].limit = atoi(mysql_row[1]); + snprintf(exceptions[j].who, NICKMAX, "%s",mysql_row[2]); + exceptions[j].reason = sstrdup(mysql_row[3]); + exceptions[j].time = atoi(mysql_row[4]); + exceptions[j].expires = atoi(mysql_row[5]); + j++; + } + mysql_free_result(mysql_res); +} + +#define HASH(host) ((tolower((host)[0])&31)<<5 | (tolower((host)[1])&31)) + +void db_mysql_load_os_dbase(void) +{ + char sqlcmd[MAX_SQL_BUF]; + Akill *ak; + SXLine *sx; + HostCache *hc; + int akc,sgc,sqc,szc,j; + + if (!do_mysql) return; + + snprintf(sqlcmd, MAX_SQL_BUF,"SELECT `maxusercnt`,`maxusertime`,`akills_count`,`sglines_count`,`sqlines_count`,`szlines_count` FROM `anope_os_core`;"); + if (db_mysql_query(sqlcmd)) { + log_perror("Can't create sql query: %s",sqlcmd); + db_mysql_error(MYSQL_WARNING, "query"); + } + mysql_res = mysql_store_result(mysql); + if ((mysql_row = mysql_fetch_row(mysql_res))) { + maxusercnt = atoi(mysql_row[0]); + maxusertime = atoi(mysql_row[1]); + akc = atoi(mysql_row[2]); + sgc = atoi(mysql_row[3]); + sqc = atoi(mysql_row[4]); + szc = atoi(mysql_row[5]); + } else { + maxusercnt = 0; + maxusertime = time(NULL); + akc = sgc = sqc = szc = 0; + } + mysql_free_result(mysql_res); + + snprintf(sqlcmd, MAX_SQL_BUF, "SELECT `user`,`host`,`xby`,`reason`,`seton`,`expire` FROM `anope_os_akills`;"); + if (db_mysql_query(sqlcmd)) { + log_perror("Can't create sql query: %s",sqlcmd); + db_mysql_error(MYSQL_WARNING, "query"); + } + mysql_res = mysql_store_result(mysql); + slist_setcapacity(&akills,akc); + while((mysql_row = mysql_fetch_row(mysql_res))) { + ak = scalloc(sizeof(Akill), 1); + ak->user = sstrdup(mysql_row[0]); + ak->host = sstrdup(mysql_row[1]); + ak->by = sstrdup(mysql_row[2]); + ak->reason = sstrdup(mysql_row[3]); + ak->seton = atoi(mysql_row[4]); + ak->expires = atoi(mysql_row[5]); + slist_add(&akills, ak); + } + mysql_free_result(mysql_res); + + slist_setcapacity(&sglines,sgc); + slist_setcapacity(&sqlines,sqc); + slist_setcapacity(&szlines,szc); + + snprintf(sqlcmd, MAX_SQL_BUF, "SELECT `mask`,`xby`,`reason`,`seton`,`expire` FROM `anope_os_sglines`;"); + if (db_mysql_query(sqlcmd)) { + log_perror("Can't create sql statement: %s",sqlcmd); + db_mysql_error(MYSQL_WARNING, "query"); + } + mysql_res = mysql_store_result(mysql); + while ((mysql_row = mysql_fetch_row(mysql_res))) { + sx = scalloc(sizeof(SXLine), 1); + sx->mask = sstrdup(mysql_row[0]); + sx->by = sstrdup(mysql_row[1]); + sx->reason = sstrdup(mysql_row[2]); + sx->seton = atoi(mysql_row[3]); + sx->expires = atoi(mysql_row[4]); + slist_add(&sglines, sx); + } + mysql_free_result(mysql_res); + + snprintf(sqlcmd, MAX_SQL_BUF, "SELECT `mask`,`xby`,`reason`,`seton`,`expire` FROM `anope_os_sqlines`;"); + if (db_mysql_query(sqlcmd)) { + log_perror("Can't create sql statement: %s",sqlcmd); + db_mysql_error(MYSQL_WARNING, "query"); + } + mysql_res = mysql_store_result(mysql); + while ((mysql_row = mysql_fetch_row(mysql_res))) { + sx = scalloc(sizeof(SXLine), 1); + sx->mask = sstrdup(mysql_row[0]); + sx->by = sstrdup(mysql_row[1]); + sx->reason = sstrdup(mysql_row[2]); + sx->seton = atoi(mysql_row[3]); + sx->expires = atoi(mysql_row[4]); + slist_add(&sqlines, sx); + } + mysql_free_result(mysql_res); + + snprintf(sqlcmd, MAX_SQL_BUF, "SELECT `mask`,`xby`,`reason`,`seton`,`expire` FROM `anope_os_szlines`;"); + if (db_mysql_query(sqlcmd)) { + log_perror("Can't create sql statement: %s",sqlcmd); + db_mysql_error(MYSQL_WARNING, "query"); + } + mysql_res = mysql_store_result(mysql); + while ((mysql_row = mysql_fetch_row(mysql_res))) { + sx = scalloc(sizeof(SXLine), 1); + sx->mask = sstrdup(mysql_row[0]); + sx->by = sstrdup(mysql_row[1]); + sx->reason = sstrdup(mysql_row[2]); + sx->seton = atoi(mysql_row[3]); + sx->expires = atoi(mysql_row[4]); + slist_add(&szlines, sx); + } + mysql_free_result(mysql_res); + + snprintf(sqlcmd,MAX_SQL_BUF,"SELECT `mask`,`status`,`used` FROM `anope_os_hcache`"); + if (db_mysql_query(sqlcmd)) { + log_perror("Can't create sql query: %s",sqlcmd); + db_mysql_error(MYSQL_WARNING,"query"); + } + mysql_res = mysql_store_result(mysql); + if (mysql_num_rows(mysql_res) == 0) { + mysql_free_result(mysql_res); + return; + } + while ((mysql_row = mysql_fetch_row(mysql_res))) { + j = HASH(mysql_row[0]); + hc = scalloc(1, sizeof(HostCache)); + hc->host = sstrdup(mysql_row[0]); + hc->status = atoi(mysql_row[1]); + hc->used = atoi(mysql_row[2]); + + hc->prev = NULL; + hc->next = hcache[j]; + if (hc->next) + hc->next->prev = hc; + hcache[j] = hc; + } + mysql_free_result(mysql_res); +} + +#undef HASH + +void db_mysql_load_cs_dbase(void) +{ + char sqlcmd[MAX_SQL_BUF], *tempstr; + ChannelInfo *ci; + int n_levels, j; + MYSQL_RES *res; + MYSQL_ROW row; + + if (!do_mysql) return; + + snprintf(sqlcmd,MAX_SQL_BUF,"SELECT `name`,`founder`,`successor`,`founderpass`,`descr`,`url`,`email`,`time_registered`,`last_used`,`last_topic`,`last_topic_setter`,`last_topic_time`,`flags`,`forbidby`,`forbidreason`,`bantype`,`accesscount`,`akickcount`,`mlock_on`,`mlock_off`,`mlock_limit`,`mlock_key`,`mlock_flood`,`mlock_redirect`,`entry_message`,`memomax`,`botnick`,`botflags`,`ttb`,`bwcount`,`capsmin`,`capspercent`,`floodlines`,`floodsecs`,`repeattimes` FROM `anope_cs_info`"); + if (db_mysql_query(sqlcmd)) { + log_perror("Can't create sql query: %s",sqlcmd); + db_mysql_error(MYSQL_WARNING,"query"); + } + mysql_res = mysql_store_result(mysql); + if (mysql_num_rows(mysql_res) == 0) { + mysql_free_result(mysql_res); + return; + } + while((mysql_row = mysql_fetch_row(mysql_res))) { + ci = scalloc(sizeof(ChannelInfo),1); + snprintf(ci->name,CHANMAX,"%s",mysql_row[0]); + ci->founder = findcore(mysql_row[1]); + ci->successor = findcore(mysql_row[2]); + snprintf(ci->founderpass,PASSMAX,"%s",mysql_row[3]); + ci->desc = sstrdup(mysql_row[4]); + ci->url = sstrdup(mysql_row[5]); + if (strlen(ci->url) == 0) { free(ci->url); ci->url = NULL; } + ci->email = sstrdup(mysql_row[6]); + if (strlen(ci->email) == 0) { free(ci->email); ci->email = NULL; } + ci->time_registered = atoi(mysql_row[7]); + ci->last_used = atoi(mysql_row[8]); + ci->last_topic = sstrdup(mysql_row[9]); + snprintf(ci->last_topic_setter,NICKMAX,"%s",mysql_row[10]); + ci->last_topic_time = atoi(mysql_row[11]); + ci->flags = atoi(mysql_row[12]); +#ifdef USE_ENCRYPTION + if (!(ci->flags & (CI_ENCRYPTEDPW | CI_VERBOTEN))) { + if (debug) + alog("debug: %s: encrypting password for %s on load",s_ChanServ,ci->name); + if (encrypt_in_place(ci->founderpass, PASSMAX) < 0) + fatal("%s: load database: Can't encrypt %s password!",s_ChanServ,ci->name); + ci->flags |= CI_ENCRYPTEDPW; + } +#else + if (ci->flags & CI_ENCRYPTEDPW) { + fatal("%s: load database: password for %s encrypted but encryption disabled, aborting",s_ChanServ,ci->name); + } +#endif + ci->flags &= ~CI_INHABIT; + + ci->forbidby = sstrdup(mysql_row[13]); + ci->forbidreason = sstrdup(mysql_row[14]); + ci->bantype = atoi(mysql_row[15]); + + tempstr = db_mysql_quote(ci->name); + snprintf(sqlcmd,MAX_SQL_BUF,"SELECT `position`,`level` FROM `anope_cs_levels` WHERE `channel` = '%s'",tempstr); + if (db_mysql_query(sqlcmd)) { + log_perror("Can't create sql query: %s",sqlcmd); + db_mysql_error(MYSQL_WARNING,"query"); + } + res = mysql_store_result(mysql); + n_levels = mysql_num_rows(res); + ci->levels = scalloc(2 * CA_SIZE, 1); + reset_levels(ci); + while((row = mysql_fetch_row(res))) { + ci->levels[atoi(row[0])] = atoi(row[1]); + } + mysql_free_result(res); + ci->accesscount = atoi(mysql_row[16]); + if (ci->accesscount) { + ci->access = scalloc(ci->accesscount, sizeof(ChanAccess)); + snprintf(sqlcmd,MAX_SQL_BUF,"SELECT `in_use`,`level`,`display`,`last_seen` FROM `anope_cs_access` WHERE `channel` = '%s'",tempstr); + if (db_mysql_query(sqlcmd)) { + log_perror("Can't create sql query: %s",sqlcmd); + db_mysql_error(MYSQL_WARNING,"query"); + } + res = mysql_store_result(mysql); + j = 0; + while((row = mysql_fetch_row(res))) { + ci->access[j].in_use = atoi(row[0]); + if (ci->access[j].in_use) { + ci->access[j].level = atoi(row[1]); + ci->access[j].nc = findcore(row[2]); + if (ci->access[j].nc == NULL) ci->access[j].in_use = 0; + ci->access[j].last_seen = atoi(row[3]); + } + j++; + } + mysql_free_result(res); + } else { + ci->access = NULL; + } + ci->akickcount = atoi(mysql_row[17]); + if (ci->akickcount) { + ci->akick = scalloc(ci->akickcount,sizeof(AutoKick)); + snprintf(sqlcmd,MAX_SQL_BUF,"SELECT `flags`,`dmask`,`reason`,`creator`,`addtime` FROM `anope_cs_akicks` WHERE `channel` = '%s'",tempstr); + if (db_mysql_query(sqlcmd)) { + log_perror("Can't create sql query: %s",sqlcmd); + db_mysql_error(MYSQL_WARNING,"query"); + } + res = mysql_store_result(mysql); + j = 0; + while((row = mysql_fetch_row(res))) { + ci->akick[j].flags = atoi(row[0]); + if (ci->akick[j].flags & AK_USED) { + if (ci->akick[j].flags & AK_ISNICK) { + ci->akick[j].u.nc = findcore(row[1]); + if (!ci->akick[j].u.nc) ci->akick[j].flags &= ~AK_USED; + } else { + ci->akick[j].u.mask = sstrdup(row[1]); + } + ci->akick[j].reason = sstrdup(row[2]); + ci->akick[j].creator = sstrdup(row[3]); + ci->akick[j].addtime = atoi(row[4]); + } + j++; + } + mysql_free_result(res); + } else { + ci->akick = NULL; + } + ci->mlock_on = atoi(mysql_row[18]); + ci->mlock_off = atoi(mysql_row[19]); + ci->mlock_limit = atoi(mysql_row[20]); + ci->mlock_key = sstrdup(mysql_row[21]); +#ifdef HAS_FMODE + ci->mlock_flood = sstrdup(mysql_row[22]); +#endif + +#ifdef HAS_LMODE + ci->mlock_redirect = sstrdup(mysql_row[23]); +#endif + ci->memos.memomax = atoi(mysql_row[25]); + snprintf(sqlcmd,MAX_SQL_BUF,"SELECT `number`,`flags`,`time`,`sender`,`text` FROM `anope_ms_info` WHERE `receiver` = '%s'",tempstr); + if (db_mysql_query(sqlcmd)) { + log_perror("Can't create sql query: %s",sqlcmd); + db_mysql_error(MYSQL_WARNING, "query"); + } + res = mysql_store_result(mysql); + ci->memos.memocount = mysql_num_rows(res); + if (ci->memos.memocount) { + Memo *memos; + memos = scalloc(sizeof(Memo) * ci->memos.memocount, 1); + ci->memos.memos = memos; + while((row = mysql_fetch_row(res))) { + memos->number = atoi(row[0]); + memos->flags = atoi(row[1]); + memos->time = atoi(row[2]); + snprintf(memos->sender,NICKMAX,"%s",row[3]); + memos->text = sstrdup(row[4]); + memos++; + } + } + mysql_free_result(res); + ci->entry_message = sstrdup(mysql_row[24]); + if (strlen(ci->entry_message) == 0) { free(ci->entry_message); ci->entry_message = NULL; } + ci->c = NULL; + + ci->bi = findbot(mysql_row[26]); + ci->botflags = atoi(mysql_row[27]); + ci->ttb = scalloc(2 * TTB_SIZE, 1); + for (j = 0; j < TTB_SIZE; j++) { + ci->ttb[j] = 0; + } + ci->capsmin = atoi(mysql_row[30]); + ci->capspercent = atoi(mysql_row[31]); + ci->floodlines = atoi(mysql_row[32]); + ci->floodsecs = atoi(mysql_row[33]); + ci->repeattimes = atoi(mysql_row[34]); + + ci->bwcount = atoi(mysql_row[29]); + if (ci->bwcount) { + ci->badwords = scalloc(ci->bwcount, sizeof(BadWord)); + snprintf(sqlcmd,MAX_SQL_BUF,"SELECT `word`,`type` FROM `anope_cs_badwords` WHERE `channel` = '%s'",tempstr); + if (db_mysql_query(sqlcmd)) { + log_perror("Can't create sql query: %s",sqlcmd); + db_mysql_error(MYSQL_WARNING, "query"); + } + res = mysql_store_result(mysql); + j = 0; + while((row = mysql_fetch_row(res))) { + ci->badwords[j].in_use = 1; + if (ci->badwords[j].in_use) { /* I know... but for later */ + ci->badwords[j].word = sstrdup(row[0]); + ci->badwords[j].type = atoi(row[1]); + } + j++; + } + mysql_free_result(res); + } else { + ci->badwords = NULL; + } + alpha_insert_chan(ci); + free(tempstr); + } + mysql_free_result(mysql_res); + + for (j = 0; j < 256; j++) { + ChannelInfo *next; + for (ci = chanlists[j]; ci; ci = next) { + next = ci->next; + if (!(ci->flags & CI_VERBOTEN) && !ci->founder) { + alog("%s: database load: Deleting founderless channel %s",s_ChanServ,ci->name); + delchan(ci); + } + } + } +} + +void db_mysql_load_ns_req_dbase(void) +{ + char sqlcmd[MAX_SQL_BUF]; + NickRequest *nr; + + if (!do_mysql) return; + + snprintf(sqlcmd,MAX_SQL_BUF,"SELECT `nick`,`passcode`,`password`,`email`,`requested`,`active` FROM `anope_ns_req`;"); + if (db_mysql_query(sqlcmd)) { + log_perror("Can't create sql query: %s",sqlcmd); + db_mysql_error(MYSQL_WARNING,"query"); + } + mysql_res = mysql_store_result(mysql); + if (mysql_num_rows(mysql_res) == 0) { + mysql_free_result(mysql_res); + return; + } + while((mysql_row = mysql_fetch_row(mysql_res))) { + nr = scalloc(1, sizeof(NickRequest)); + nr->nick = sstrdup(mysql_row[0]); + nr->passcode = sstrdup(mysql_row[1]); + nr->password = sstrdup(mysql_row[2]); + nr->email = sstrdup(mysql_row[3]); + nr->requested = atoi(mysql_row[4]); + insert_requestnick(nr); + } + mysql_free_result(mysql_res); +} + +void db_mysql_load_ns_dbase(void) +{ + char sqlcmd[MAX_SQL_BUF], *tmpstr; + NickCore *nc; + NickAlias *na; + MYSQL_RES *res; + MYSQL_ROW row; + int i,j; + + if (!do_mysql) return; + + snprintf(sqlcmd,MAX_SQL_BUF,"SELECT `display`,`pass`,`email`,`icq`,`url`,`flags`,`language`,`accesscount`,`memocount`,`memomax`,`channelcount`,`channelmax`,`greet`,`active` FROM `anope_ns_core`"); + + if (db_mysql_query(sqlcmd)) { + log_perror("Can't create sql query: %s", sqlcmd); + db_mysql_error(MYSQL_WARNING, "query"); + } + mysql_res = mysql_store_result(mysql); + if (mysql_num_rows(mysql_res) == 0) { + mysql_free_result(mysql_res); + return; + } + + while((mysql_row = mysql_fetch_row(mysql_res))) { + nc = scalloc(1, sizeof(NickCore)); + + nc->display = sstrdup(mysql_row[0]); + nc->pass = sstrdup(mysql_row[1]); + nc->email = sstrdup(mysql_row[2]); + nc->icq = atoi(mysql_row[3]); + nc->url = sstrdup(mysql_row[4]); + nc->flags = atoi(mysql_row[5]); + nc->language = atoi(mysql_row[6]); + nc->accesscount = atoi(mysql_row[7]); + nc->memos.memocount = atoi(mysql_row[8]); + nc->memos.memomax = atoi(mysql_row[9]); + nc->channelcount = atoi(mysql_row[10]); + nc->channelmax = atoi(mysql_row[11]); + nc->greet = sstrdup(mysql_row[12]); + + if (!NSAllowKillImmed) + nc->flags &= ~NI_KILL_IMMED; + +#ifdef USE_ENCRYPTION + if (nc->pass && !(nc->flags & NI_ENCRYPTEDPW)) { + if (debug) + alog("debug: %s: encrypting password for `%s' on load", s_NickServ, nc->display); + if(encrypt_in_place(nc->pass, PASSMAX) < 0) + fatal("%s: Can't encrypt `%s' nickname password!", s_NickServ, nc->display); + + nc->flags |= NI_ENCRYPTEDPW; + } +#else + if (nc->flags & NI_ENCRYPTEDPW) + fatal("%s: load database: password for %s encrypted but encryption disabled, aborting", s_NickServ, nc->display); +#endif + + if (nc->flags & NI_SERVICES_ADMIN) + slist_add(&servadmins, nc); + if (nc->flags & NI_SERVICES_OPER) + slist_add(&servopers, nc); + + if (nc->accesscount) { + char **access; + access = scalloc(sizeof(char *) * nc->accesscount, 1); + nc->access = access; + tmpstr = db_mysql_quote(nc->display); + snprintf(sqlcmd,MAX_SQL_BUF,"SELECT `access` FROM `anope_ns_access` WHERE `display` = '%s'",tmpstr); + free(tmpstr); + if (db_mysql_query(sqlcmd)) { + log_perror("Can't create sql query: %s", sqlcmd); + db_mysql_error(MYSQL_WARNING, "query"); + } + res = mysql_store_result(mysql); + while((row = mysql_fetch_row(res))) { + *access = sstrdup(row[0]); + access++; + } + mysql_free_result(res); + } + + if (nc->memos.memocount) { + Memo *memos; + memos = scalloc(sizeof(Memo) * nc->memos.memocount, 1); + nc->memos.memos = memos; + tmpstr = db_mysql_quote(nc->display); + snprintf(sqlcmd,MAX_SQL_BUF,"SELECT `number`,`flags`,`time`,`sender`,`text` FROM `anope_ms_info` WHERE `receiver` = '%s' ORDER BY `number` ASC",tmpstr); + free(tmpstr); + if (db_mysql_query(sqlcmd)) { + log_perror("Can't create sql query: %s", sqlcmd); + db_mysql_error(MYSQL_WARNING, "query"); + } + res = mysql_store_result(mysql); + while((row = mysql_fetch_row(res))) { + memos->number = atoi(row[0]); + memos->flags = atoi(row[1]); + memos->time = atoi(row[2]); + snprintf(memos->sender,NICKMAX,"%s",row[3]); + memos->text = sstrdup(row[4]); + memos++; + } + mysql_free_result(res); + } + insert_core(nc); + } + mysql_free_result(mysql_res); + + snprintf(sqlcmd,MAX_SQL_BUF,"SELECT `display`,`nick`,`time_registered`,`last_seen`,`status`,`last_usermask`,`last_realname`,`last_quit` FROM `anope_ns_alias`"); + if (db_mysql_query(sqlcmd)) { + log_perror("Can't create sql query: %s", sqlcmd); + db_mysql_error(MYSQL_WARNING, "query"); + } + mysql_res = mysql_store_result(mysql); + while((mysql_row = mysql_fetch_row(mysql_res))) { + na = scalloc(1, sizeof(NickAlias)); + na->nick = sstrdup(mysql_row[1]); + + na->last_usermask = sstrdup(mysql_row[5]); + na->last_realname = sstrdup(mysql_row[6]); + na->last_quit = sstrdup(mysql_row[7]); + na->time_registered = atoi(mysql_row[2]); + na->last_seen = atoi(mysql_row[3]); + na->status = atoi(mysql_row[4]); + na->status &= ~NS_TEMPORARY; + tmpstr = sstrdup(mysql_row[0]); + na->nc = findcore(tmpstr); + free(tmpstr); + + slist_add(&na->nc->aliases, na); + + if(!(na->status & NS_VERBOTEN)) { + if (!na->last_usermask) na->last_usermask = sstrdup(""); + if (!na->last_realname) na->last_realname = sstrdup(""); + } + + na->nc->flags &= ~NI_SERVICES_ROOT; + alpha_insert_alias(na); + } + mysql_free_result(mysql_res); + + for (j = 0; j < 1024; j++) { + NickAlias *next; + for (na = nalists[j]; na; na = next) { + next = na->next; + if (!na->nc) { + alog("%s: while loading database: %s has no core! We delete it.",s_NickServ, na->nick); + delnick(na); + continue; + } + for (i = 0; i < RootNumber; i++) { + if (!stricmp(ServicesRoots[i], na->nick)) + na->nc->flags |= NI_SERVICES_ROOT; + } + } + } +} + |