summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/inspircd_io.h2
-rw-r--r--src/commands.cpp14
-rw-r--r--src/inspircd_io.cpp11
-rw-r--r--src/modules/m_spanningtree.cpp4
4 files changed, 16 insertions, 15 deletions
diff --git a/include/inspircd_io.h b/include/inspircd_io.h
index 6ddb9983e..6d9085786 100644
--- a/include/inspircd_io.h
+++ b/include/inspircd_io.h
@@ -308,6 +308,8 @@ class ServerConfig : public classbase
*/
char CustomVersion[MAXBUF];
+ std::vector<irc::string> ulines;
+
ServerConfig();
/** Clears the include stack in preperation for
diff --git a/src/commands.cpp b/src/commands.cpp
index 048a5fae7..9bf4883f9 100644
--- a/src/commands.cpp
+++ b/src/commands.cpp
@@ -177,22 +177,12 @@ void do_whois(userrec* user, userrec* dest,unsigned long signon, unsigned long i
/* XXX - these really belong in helperfuncs perhaps -- w00t */
bool is_uline(const char* server)
{
- char ServName[MAXBUF];
-
if (!server)
return false;
- if (!(*server))
+ if (!*server)
return true;
- for (int i = 0; i < Config->ConfValueEnum("uline",&Config->config_f); i++)
- {
- Config->ConfValue("uline","server",i,ServName,&Config->config_f);
- if (!strcasecmp(server,ServName))
- {
- return true;
- }
- }
- return false;
+ return (find(Config->ulines.begin(),Config->ulines.end(),server) != Config->ulines.end());
}
int operstrcmp(char* data,char* input)
diff --git a/src/inspircd_io.cpp b/src/inspircd_io.cpp
index c9d64d57c..5488b025f 100644
--- a/src/inspircd_io.cpp
+++ b/src/inspircd_io.cpp
@@ -157,7 +157,7 @@ void ServerConfig::Read(bool bail, userrec* user)
*/
char dbg[MAXBUF],pauseval[MAXBUF],Value[MAXBUF],timeout[MAXBUF],NB[MAXBUF],flood[MAXBUF],MW[MAXBUF],MCON[MAXBUF],MT[MAXBUF];
char AH[MAXBUF],AP[MAXBUF],AF[MAXBUF],DNT[MAXBUF],pfreq[MAXBUF],thold[MAXBUF],sqmax[MAXBUF],rqmax[MAXBUF],SLIMT[MAXBUF];
- char localmax[MAXBUF],globalmax[MAXBUF],HS[MAXBUF],HB[MAXBUF];
+ char localmax[MAXBUF],globalmax[MAXBUF],HS[MAXBUF],HB[MAXBUF],ServName[MAXBUF];
ConnectClass c;
std::stringstream errstr;
include_stack.clear();
@@ -408,6 +408,15 @@ void ServerConfig::Read(bool bail, userrec* user)
}
}
+ Config->ulines.clear();
+ for (int i = 0; i < ConfValueEnum("uline",&Config->config_f); i++)
+ {
+ ConfValue("uline","server",i,ServName,&Config->config_f);
+ {
+ log(DEBUG,"Read ULINE '%s'",ServName);
+ Config->ulines.push_back(ServName);
+ }
+ }
log(DEFAULT,"Reading K lines,Q lines and Z lines from config...");
read_xline_defaults();
log(DEFAULT,"Applying K lines, Q lines and Z lines...");
diff --git a/src/modules/m_spanningtree.cpp b/src/modules/m_spanningtree.cpp
index 01cf39757..966cb3f1d 100644
--- a/src/modules/m_spanningtree.cpp
+++ b/src/modules/m_spanningtree.cpp
@@ -1094,8 +1094,8 @@ class TreeSocket : public InspSocket
clientlist[tempnick] = new userrec();
clientlist[tempnick]->fd = FD_MAGIC_NUMBER;
strlcpy(clientlist[tempnick]->nick, tempnick,NICKMAX-1);
- strlcpy(clientlist[tempnick]->host, params[2].c_str(),160);
- strlcpy(clientlist[tempnick]->dhost, params[3].c_str(),160);
+ strlcpy(clientlist[tempnick]->host, params[2].c_str(),63);
+ strlcpy(clientlist[tempnick]->dhost, params[3].c_str(),63);
clientlist[tempnick]->server = (char*)FindServerNamePtr(source.c_str());
strlcpy(clientlist[tempnick]->ident, params[4].c_str(),IDENTMAX);
strlcpy(clientlist[tempnick]->fullname, params[7].c_str(),MAXGECOS);