diff options
-rw-r--r-- | include/users.h | 2 | ||||
-rw-r--r-- | src/InspIRCd.layout | 16 | ||||
-rw-r--r-- | src/inspircd.cpp | 34 | ||||
-rw-r--r-- | src/users.cpp | 1 |
4 files changed, 43 insertions, 10 deletions
diff --git a/include/users.h b/include/users.h index 8a71bf67e..d20de55a3 100644 --- a/include/users.h +++ b/include/users.h @@ -113,6 +113,8 @@ class userrec : public connection */ char result[256]; + unsigned long timeout; + userrec(); virtual ~userrec() { } diff --git a/src/InspIRCd.layout b/src/InspIRCd.layout index 325358fb1..aaa0daa11 100644 --- a/src/InspIRCd.layout +++ b/src/InspIRCd.layout @@ -13,9 +13,9 @@ LeftChar=1 [Editor_1] Open=1 Top=1 -CursorCol=54 -CursorRow=5298 -TopLine=5263 +CursorCol=22 +CursorRow=5263 +TopLine=5236 LeftChar=1 [Editor_2] @@ -53,8 +53,8 @@ LeftChar=1 [Editor_6] Open=1 Top=0 -CursorCol=22 -CursorRow=51 +CursorCol=2 +CursorRow=16 TopLine=1 LeftChar=1 @@ -181,9 +181,9 @@ LeftChar=1 [Editor_22] Open=1 Top=0 -CursorCol=34 -CursorRow=50 -TopLine=1 +CursorCol=24 +CursorRow=116 +TopLine=71 LeftChar=1 [Editor_23] diff --git a/src/inspircd.cpp b/src/inspircd.cpp index b998658f4..26c952062 100644 --- a/src/inspircd.cpp +++ b/src/inspircd.cpp @@ -3195,6 +3195,7 @@ bool IsDenied(userrec *user) } + void handle_pass(char **parameters, int pcnt, userrec *user) { if (!strcasecmp(parameters[0],Passwd(user))) @@ -3308,7 +3309,15 @@ void send_error(char *s) log(DEBUG,"send_error: %s",s); for (user_hash::const_iterator i = clientlist.begin(); i != clientlist.end(); i++) { - WriteServ(i->second->fd,"NOTICE %s :%s",i->second->nick,s); + if (isnick(i->second->nick)) + { + WriteServ(i->second->fd,"NOTICE %s :%s",i->second->nick,s); + } + else + { + // fix - unregistered connections receive ERROR, not NOTICE + Write(i->second->fd,"ERROR :%s",s); + } } } @@ -3467,12 +3476,12 @@ void AddClient(int socket, char* host, int port, bool iscached) NonBlocking(socket); log(DEBUG,"AddClient: %d %s %d",socket,host,port); - clientlist[tempnick]->fd = socket; strncpy(clientlist[tempnick]->nick, tn2,NICKMAX); strncpy(clientlist[tempnick]->host, host,160); strncpy(clientlist[tempnick]->dhost, host,160); strncpy(clientlist[tempnick]->server, ServerName,256); + strncpy(clientlist[tempnick]->ident, "unknown",9); clientlist[tempnick]->registered = 0; clientlist[tempnick]->signon = time(NULL); clientlist[tempnick]->nping = time(NULL)+240; @@ -3488,6 +3497,19 @@ void AddClient(int socket, char* host, int port, bool iscached) WriteServ(socket,"NOTICE Auth :Looking up your hostname..."); } + // set the registration timeout for this user + unsigned long class_regtimeout = 90; + for (ClassVector::iterator i = Classes.begin(); i != Classes.end(); i++) + { + if (match(clientlist[tempnick]->host,i->host) && (i->type == CC_ALLOW)) + { + class_regtimeout = (unsigned long)i->registration_timeout; + break; + } + } + log(DEBUG,"Client has a connection timeout value of %d",class_regtimeout); + clientlist[tempnick]->timeout = time(NULL)+class_regtimeout; + if (clientlist.size() == MAXCLIENTS) kill_link(clientlist[tempnick],"No more connections allowed in this class"); } @@ -5237,6 +5259,14 @@ int InspIRCd(void) if (count2->second) if (count2->second->fd) { + // registration timeout -- didnt send USER/NICK/HOST in the time specified in + // their connection class. + if ((time(NULL) > count2->second->timeout) && (count2->second->registered != 7)) + { + log(DEBUG,"InspIRCd: registration timeout: %s",count2->second->nick); + kill_link(count2->second,"Registration timeout"); + break; + } if (((time(NULL)) > count2->second->nping) && (isnick(count2->second->nick)) && (count2->second->registered == 7)) { if (!count2->second->lastping) diff --git a/src/users.cpp b/src/users.cpp index 857e2f1d6..3211a029f 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -13,6 +13,7 @@ userrec::userrec() // the PROPER way to do it, AVOID bzero at *ALL* costs strcpy(nick,""); ip = 0; + timeout = 0; strcpy(ident,""); strcpy(host,""); strcpy(dhost,""); |