summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/message.h4
-rw-r--r--src/inspsocket.cpp2
-rw-r--r--src/message.cpp69
-rw-r--r--src/socket.cpp2
4 files changed, 19 insertions, 58 deletions
diff --git a/include/message.h b/include/message.h
index c1e1932fb..fd9d47ff2 100644
--- a/include/message.h
+++ b/include/message.h
@@ -31,7 +31,7 @@
int common_channels(userrec *u, userrec *u2);
void Blocking(int s);
void NonBlocking(int s);
-int CleanAndResolve (char *resolvedHost, const char *unresolvedHost, bool forward);
+int CleanAndResolve(char *resolvedHost, const char *unresolvedHost, bool forward, unsigned long timeout);
int c_count(userrec* u);
void ChangeName(userrec* user, const char* gecos);
void ChangeDisplayedHost(userrec* user, const char* host);
@@ -39,9 +39,7 @@ int isident(const char* n);
int isnick(const char* n);
const char* cmode(userrec *user, chanrec *chan);
int cstatus(userrec *user, chanrec *chan);
-void TidyBan(char *ban);
std::string chlist(userrec *user, userrec* source);
-void send_network_quit(const char* nick, const char* reason);
int cflags(userrec *user, chanrec *chan);
#endif
diff --git a/src/inspsocket.cpp b/src/inspsocket.cpp
index cc0368525..2d49c19db 100644
--- a/src/inspsocket.cpp
+++ b/src/inspsocket.cpp
@@ -204,7 +204,7 @@ bool InspSocket::BindAddr()
{
/* If they gave a hostname, bind to the IP it resolves to */
log(DEBUG,"Resolving host %s",IP.c_str());
- if (CleanAndResolve(resolved_addr, IP.c_str(), true))
+ if (CleanAndResolve(resolved_addr, IP.c_str(), true, 1))
{
log(DEBUG,"Resolved host %s to %s",IP.c_str(),resolved_addr);
IP = resolved_addr;
diff --git a/src/message.cpp b/src/message.cpp
index 91744dd50..6fef78552 100644
--- a/src/message.cpp
+++ b/src/message.cpp
@@ -76,8 +76,7 @@ int common_channels(userrec *u, userrec *u2)
/* Eliminate the inner loop (which used to be ~equal in size to the outer loop)
* by replacing it with a map::find which *should* be more efficient
*/
- CUList* channel_user_map = user_channel->channel->GetUsers();
- if (channel_user_map->find(u2) != channel_user_map->end())
+ if (user_channel->channel->HasUser(u2))
return 1;
}
}
@@ -96,7 +95,7 @@ void NonBlocking(int s)
fcntl(s, F_SETFL, flags | O_NONBLOCK);
}
-int CleanAndResolve (char *resolvedHost, const char *unresolvedHost, bool forward)
+int CleanAndResolve (char *resolvedHost, const char *unresolvedHost, bool forward, unsigned long timeout)
{
bool ok;
std::string ipaddr;
@@ -108,7 +107,7 @@ int CleanAndResolve (char *resolvedHost, const char *unresolvedHost, bool forwar
ok = d.ReverseLookup(unresolvedHost, false);
if (!ok)
return 0;
- time_t T = time(NULL)+1;
+ time_t T = time(NULL)+timeout;
while ((!d.HasResult()) && (time(NULL)<T));
if (forward)
ipaddr = d.GetResultIP();
@@ -169,7 +168,7 @@ int isident(const char* n)
{
continue;
}
- if (strchr(".-0123456789",*i))
+ if (((*i >= '0') && (*i <= '9')) || (*i == '-') || (*i == '.'))
{
continue;
}
@@ -188,13 +187,13 @@ int isnick(const char* n)
int p = 0;
for (char* i = (char*)n; *i; i++, p++)
{
- /* can occur anywhere in a nickname */
+ /* "A"-"}" can occur anywhere in a nickname */
if ((*i >= 'A') && (*i <= '}'))
{
continue;
}
- /* can occur anywhere BUT the first char of a nickname */
- if ((strchr("-0123456789",*i)) && (i > n))
+ /* "0"-"9", "-" can occur anywhere BUT the first char of a nickname */
+ if ((((*i >= '0') && (*i <= '9')) || (*i == '-')) && (i > n))
{
continue;
}
@@ -290,34 +289,6 @@ int cstatus(userrec *user, chanrec *chan)
return STATUS_NORMAL;
}
-void TidyBan(char *ban)
-{
- if (!ban) {
- log(DEFAULT,"*** BUG *** TidyBan was given an invalid parameter");
- return;
- }
-
- char temp[MAXBUF],NICK[MAXBUF],IDENT[MAXBUF],HOST[MAXBUF];
-
- strlcpy(temp,ban,MAXBUF);
-
- char* pos_of_pling = strchr(temp,'!');
- char* pos_of_at = strchr(temp,'@');
-
- pos_of_pling[0] = '\0';
- pos_of_at[0] = '\0';
- pos_of_pling++;
- pos_of_at++;
-
- strlcpy(NICK,temp,NICKMAX-1);
- strlcpy(IDENT,pos_of_pling,IDENTMAX+1);
- strlcpy(HOST,pos_of_at,63);
-
- snprintf(ban,MAXBUF,"%s!%s@%s",NICK,IDENT,HOST);
-}
-
-char lst[MAXBUF];
-
std::string chlist(userrec *user,userrec* source)
{
std::string list;
@@ -330,24 +301,16 @@ std::string chlist(userrec *user,userrec* source)
ucrec* rec = *i;
if(rec->channel && rec->channel->name)
- {
- /* XXX - Why does this check need to be here at all? :< */
- /* Commenting this out until someone finds a case where we need it */
- //if (lst.find(rec->channel->name) == std::string::npos)
- //{
-
- /*
- * If the target is the same as the sender, let them see all their channels.
- * If the channel is NOT private/secret AND the user is not invisible.
- * If the user is an oper, and the <options:operspywhois> option is set.
- */
- if ((source == user) || (*source->oper && Config->OperSpyWhois) || (((!rec->channel->modes[CM_PRIVATE]) && (!rec->channel->modes[CM_SECRET]) && !(user->modes[UM_INVISIBLE])) || (rec->channel->HasUser(source))))
- {
- list.append(cmode(user, rec->channel)).append(rec->channel->name).append(" ");
- }
- //}
+ {
+ /* If the target is the same as the sender, let them see all their channels.
+ * If the channel is NOT private/secret OR the user shares a common channel
+ * If the user is an oper, and the <options:operspywhois> option is set.
+ */
+ if ((source == user) || (*source->oper && Config->OperSpyWhois) || (((!rec->channel->modes[CM_PRIVATE]) && (!rec->channel->modes[CM_SECRET]) && !(user->modes[UM_INVISIBLE])) || (rec->channel->HasUser(source))))
+ {
+ list.append(cmode(user, rec->channel)).append(rec->channel->name).append(" ");
+ }
}
}
-
return list;
}
diff --git a/src/socket.cpp b/src/socket.cpp
index b9d5fee5f..56358c503 100644
--- a/src/socket.cpp
+++ b/src/socket.cpp
@@ -47,7 +47,7 @@ bool BindSocket(int sockfd, insp_sockaddr client, insp_sockaddr server, int port
if (*addr && !inet_aton(addr,&addy))
{
/* If they gave a hostname, bind to the IP it resolves to */
- if (CleanAndResolve(resolved_addr, addr, true))
+ if (CleanAndResolve(resolved_addr, addr, true, 1))
{
inet_aton(resolved_addr,&addy);
log(DEFAULT,"Resolved binding '%s' -> '%s'",addr,resolved_addr);