diff options
author | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2005-05-29 04:25:25 +0000 |
---|---|---|
committer | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2005-05-29 04:25:25 +0000 |
commit | aba25d142ea1505cc401cc087f3f02e5db72c02d (patch) | |
tree | c0c5fce0288b6aabbde9c8997d97be9645f58f55 | |
parent | 9b6a63ba94301187ec1cfffae756cf26b69ed5dd (diff) |
A lot more of the core consts are now configurable at compile time
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@1546 e03df62e-2008-0410-955e-edbf42e46eb7
-rwxr-xr-x | configure | 146 | ||||
-rw-r--r-- | include/inspircd.h | 7 | ||||
-rw-r--r-- | include/users.h | 11 | ||||
-rw-r--r-- | src/commands.cpp | 12 | ||||
-rw-r--r-- | src/inspircd.cpp | 6 | ||||
-rw-r--r-- | src/servers.cpp | 2 | ||||
-rw-r--r-- | src/users.cpp | 6 |
7 files changed, 152 insertions, 38 deletions
@@ -37,6 +37,12 @@ chomp($config{OSNAME} = `/bin/uname`); # Operating $config{CC} = "g++"; # C++ compiler $config{MAKEORDER} = "ircd mods config bininst"; # build order $config{STATICLIBS} = ""; # library archive path +$config{MAX_IDENT} = "12"; # max ident size +$config{MAX_QUIT} = "255"; # max quit message size +$config{MAX_TOPIC} = "307"; # max topic size +$config{MAX_KICK} = "255"; # max kick message size +$config{MAX_GECOS} = "128"; # max GECOS size +$config{MAX_AWAY} = "200"; # max AWAY size if ((!$config{OSNAME}) || ($config{OSNAME} eq "")) { chomp($config{OSNAME} = `/usr/bin/uname`); @@ -201,6 +207,14 @@ if (!$chose_hiperf) print "not to enable one. Defaulting to select() engine.\n\n"; } +print "\nThe following questions will ask you for various figures relating\n"; +print "To your IRCd install. Please note that these should usually be left\n"; +print "as defaults unless you have a real reason to change them. If they\n"; +print "changed, then the values must be identical on all servers on your\n"; +print "network, or malfunctions and/or crashes may occur, with the exception\n"; +print "of the 'maximum number of clients' setting which may be different on\n"; +print "different servers on the network.\n\n"; + # File Descriptor Settings.. my $continue = 0; while (!$continue) { @@ -248,7 +262,7 @@ while (!$continue) { } } -my $continue = 0; +$continue = 0; while (!$continue) { print "What is the maximum length of channel names?\n"; print "[\033[1;32m$config{CHAN_LENGT}\033[0m] -> "; @@ -264,7 +278,7 @@ while (!$continue) { } } -my $continue = 0; +$continue = 0; while (!$continue) { print "What is the maximum number of channels a user may join at any one time?\n"; print "[\033[1;32m$config{MAX_CHANNE}\033[0m] -> "; @@ -280,8 +294,7 @@ while (!$continue) { } } - -my $continue = 0; +$continue = 0; while (!$continue) { print "What is the maximum number of mode changes in one line?\n"; print "[\033[1;32m$config{MAXI_MODES}\033[0m] -> "; @@ -297,14 +310,113 @@ while (!$continue) { } } +$continue = 0; +while (!$continue) { + print "What is the maximum length of an ident (username)?\n"; + print "[\033[1;32m$config{MAX_IDENT}\033[0m] -> "; + chomp($var = <STDIN>); + if ($var eq "") { $var = $config{MAX_IDENT}; } + if ($var =~ /^\d+$/) { + # We don't care what the number is, set it and be on our way. + $config{MAX_IDENT} = $var; + $continue = 1; + print "\n"; + } else { + print "You must enter a number in this field. Please try again.\n\n"; + } +} + +$continue = 0; +while (!$continue) { + print "What is the maximum length of a quit message?\n"; + print "[\033[1;32m$config{MAX_QUIT}\033[0m] -> "; + chomp($var = <STDIN>); + if ($var eq "") { $var = $config{MAX_QUIT}; } + if ($var =~ /^\d+$/) { + # We don't care what the number is, set it and be on our way. + $config{MAX_QUIT} = $var; + $continue = 1; + print "\n"; + } else { + print "You must enter a number in this field. Please try again.\n\n"; + } +} + +$continue = 0; +while (!$continue) { + print "What is the maximum length of a channel topic?\n"; + print "[\033[1;32m$config{MAX_TOPIC}\033[0m] -> "; + chomp($var = <STDIN>); + if ($var eq "") { $var = $config{MAX_TOPIC}; } + if ($var =~ /^\d+$/) { + # We don't care what the number is, set it and be on our way. + $config{MAX_TOPIC} = $var; + $continue = 1; + print "\n"; + } else { + print "You must enter a number in this field. Please try again.\n\n"; + } +} + +$continue = 0; +while (!$continue) { + print "What is the maximum length of a kick message?\n"; + print "[\033[1;32m$config{MAX_KICK}\033[0m] -> "; + chomp($var = <STDIN>); + if ($var eq "") { $var = $config{MAX_KICK}; } + if ($var =~ /^\d+$/) { + # We don't care what the number is, set it and be on our way. + $config{MAX_KICK} = $var; + $continue = 1; + print "\n"; + } else { + print "You must enter a number in this field. Please try again.\n\n"; + } +} + +$continue = 0; +while (!$continue) { + print "What is the maximum length of a GECOS (real name) field?\n"; + print "[\033[1;32m$config{MAX_GECOS}\033[0m] -> "; + chomp($var = <STDIN>); + if ($var eq "") { $var = $config{MAX_GECOS}; } + if ($var =~ /^\d+$/) { + # We don't care what the number is, set it and be on our way. + $config{MAX_GECOS} = $var; + $continue = 1; + print "\n"; + } else { + print "You must enter a number in this field. Please try again.\n\n"; + } +} + +$continue = 0; +while (!$continue) { + print "What is the maximum length of an away message?\n"; + print "[\033[1;32m$config{MAX_AWAY}\033[0m] -> "; + chomp($var = <STDIN>); + if ($var eq "") { $var = $config{MAX_AWAY}; } + if ($var =~ /^\d+$/) { + # We don't care what the number is, set it and be on our way. + $config{MAX_AWAY} = $var; + $continue = 1; + print "\n"; + } else { + print "You must enter a number in this field. Please try again.\n\n"; + } +} + # Code Optimisation -print "Enter the Level Of Binary optimisation. This is a number between 0 and 3 (inclusive) -The InspIRCd Team will _NOT_ support any bug reports above 0. -Also note, the IRCd behaviour will be different depending on this value. -Please read the documentation for more information. +print "Enter the Level Of Binary optimisation. This is a number between 0 and 3. +The InspIRCd Team will NOT support any bug reports above 0. Also note, +the IRCd behaviour will be different depending on this value. Please +read the documentation for more information. + +The higher the number, the more optimised your binary will be. This +value will default to 0 if you either don't enter a number, or enter +a value outside the range. -The Higher the number, the more optimised your binary will be. This value will default to 0 -If you either a) Dont enter a number, or b) Enter a value outside the range.\n"; +As always, if you are unsure, just press enter and accept the default.\n\n"; print "[\033[1;32m$config{OPTIMITEMP}\033[0m] -> "; chomp($var = <STDIN>); if ($var eq "") { @@ -329,10 +441,16 @@ print "\n\033[1;32mPre-build configuration is complete!\033[0m\n\n"; print "\033[0mConfig path:\033[1;32m\t\t\t$config{CONFIG_DIR}\n"; print "\033[0mModule path:\033[1;32m\t\t\t$config{MODULE_DIR}\n"; print "\033[0mMax connections:\033[1;32m\t\t$config{MAX_CLIENT}\n"; -print "\033[0mMax User Channels\033[1;32m\t\t$config{MAX_CHANNE}\n"; +print "\033[0mMax User Channels:\033[1;32m\t\t$config{MAX_CHANNE}\n"; print "\033[0mMax nickname length:\033[1;32m\t\t$config{NICK_LENGT}\n"; print "\033[0mMax channel length:\033[1;32m\t\t$config{CHAN_LENGT}\n"; print "\033[0mMax mode length:\033[1;32m\t\t$config{MAXI_MODES}\n"; +print "\033[0mMax ident length:\033[1;32m\t\t$config{MAX_IDENT}\n"; +print "\033[0mMax quit length:\033[1;32m\t\t$config{MAX_QUIT}\n"; +print "\033[0mMax topic length:\033[1;32m\t\t$config{MAX_TOPIC}\n"; +print "\033[0mMax kick length:\033[1;32m\t\t$config{MAX_KICK}\n"; +print "\033[0mMax name length:\033[1;32m\t\t$config{MAX_GECOS}\n"; +print "\033[0mMax away length:\033[1;32m\t\t$config{MAX_AWAY}\n"; print "\033[0mGCC Version Found:\033[1;32m\t\t$config{GCCVER}.$config{GCC34}\n"; print "\033[0mOptimatizaton Flag:\033[1;32m\t\t$config{OPTIMISATI}\033[0m\n"; print "\033[0mCompiler program:\033[1;32m\t\t$config{CC}\033[0m\n"; @@ -526,6 +644,12 @@ sub writefiles { #define CHANMAX $CL #define MAXCHANS $config{MAX_CHANNE} #define MAXMODES $config{MAXI_MODES} +#define IDENTMAX $config{MAX_IDENT} +#define MAXQUIT $config{MAX_QUIT} +#define MAXTOPIC $config{MAX_TOPIC} +#define MAXKICK $config{MAX_KICK} +#define MAXGECOS $config{MAX_GECOS} +#define MAXAWAY $config{MAX_AWAY} #define OPTIMISATION $config{OPTIMITEMP} #define SYSTEM "$incos" #define MAXBUF 514 diff --git a/include/inspircd.h b/include/inspircd.h index 11ef19f8b..89ce61ae6 100644 --- a/include/inspircd.h +++ b/include/inspircd.h @@ -46,15 +46,8 @@ #define ERROR -1 #define TRUE 1 #define FALSE 0 -#define IDENTMAX 12 #define MAXSOCKS 64 - -// maximum lengths of items - -#define MAXQUIT 255 #define MAXCOMMAND 32 -#define MAXTOPIC 307 -#define MAXKICK 255 // flags for use with log() diff --git a/include/users.h b/include/users.h index c3a9e79b5..351fd661d 100644 --- a/include/users.h +++ b/include/users.h @@ -122,7 +122,7 @@ class userrec : public connection /** The users ident reply. */ - char ident[16]; + char ident[MAXIDENT+1]; /** The host displayed to non-opers (used for cloaking etc). * This usually matches the value of userrec::host. @@ -131,7 +131,7 @@ class userrec : public connection /** The users full name. */ - char fullname[128]; + char fullname[MAXGECOS+1]; /** The user's mode string. * This may contain any of the following RFC characters: o, w, s, i @@ -148,12 +148,7 @@ class userrec : public connection /** The user's away message. * If this string is empty, the user is not marked as away. */ - char awaymsg[512]; - - /** Stores the result of the last GetFullHost or GetRealHost call. - * You may use this to increase the speed of use of this class. - */ - char result[256]; + char awaymsg[MAXAWAY+1]; /** Number of lines the user can place into the buffer * (up to the global NetBufferSize bytes) before they diff --git a/src/commands.cpp b/src/commands.cpp index ae4b97c3e..5ab25e4f0 100644 --- a/src/commands.cpp +++ b/src/commands.cpp @@ -1164,7 +1164,7 @@ void handle_user(char **parameters, int pcnt, userrec *user) else { strcpy(user->ident,"~"); /* we arent checking ident... but these days why bother anyway? */ strlcat(user->ident,parameters[0],IDENTMAX); - strlcpy(user->fullname,parameters[3],128); + strlcpy(user->fullname,parameters[3],MAXGECOS); user->registered = (user->registered | 1); } } @@ -1228,12 +1228,12 @@ void handle_away(char **parameters, int pcnt, userrec *user) { if (pcnt) { - strlcpy(user->awaymsg,parameters[0],512); + strlcpy(user->awaymsg,parameters[0],MAXAWAY); WriteServ(user->fd,"306 %s :You have been marked as being away",user->nick); } else { - strlcpy(user->awaymsg,"",512); + strlcpy(user->awaymsg,"",MAXAWAY); WriteServ(user->fd,"305 %s :You are no longer marked as being away",user->nick); } } @@ -2407,8 +2407,8 @@ void handle_N(char token,char* params,serverrec* source,serverrec* reply, char* strlcpy(clientlist[nick]->host, host,160); strlcpy(clientlist[nick]->dhost, dhost,160); strlcpy(clientlist[nick]->server, server,256); - strlcpy(clientlist[nick]->ident, ident,10); // +1 char to compensate for tilde - strlcpy(clientlist[nick]->fullname, gecos,128); + strlcpy(clientlist[nick]->ident, ident,IDENTMAX); // +1 char to compensate for tilde + strlcpy(clientlist[nick]->fullname, gecos,MAXGECOS); strlcpy(clientlist[nick]->ip,ipaddr,16); clientlist[nick]->signon = TS; clientlist[nick]->nping = 0; // this is ignored for a remote user anyway. @@ -2448,7 +2448,7 @@ void handle_a(char token,char* params,serverrec* source,serverrec* reply, char* userrec* user = Find(nick); if (user) - strlcpy(user->fullname,gecos,MAXBUF); + strlcpy(user->fullname,gecos,MAXGECOS); } void handle_b(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) diff --git a/src/inspircd.cpp b/src/inspircd.cpp index 43142f893..47f699a91 100644 --- a/src/inspircd.cpp +++ b/src/inspircd.cpp @@ -1310,10 +1310,10 @@ void AddWhoWas(userrec* u) whowas_hash::iterator iter = whowas.find(u->nick); WhoWasUser *a = new WhoWasUser(); strlcpy(a->nick,u->nick,NICKMAX); - strlcpy(a->ident,u->ident,15); + strlcpy(a->ident,u->ident,IDENTMAX); strlcpy(a->dhost,u->dhost,160); strlcpy(a->host,u->host,160); - strlcpy(a->fullname,u->fullname,128); + strlcpy(a->fullname,u->fullname,MAXGECOS); strlcpy(a->server,u->server,256); a->signon = u->signon; @@ -1401,7 +1401,7 @@ void AddClient(int socket, char* host, int port, bool iscached, char* ip) strncpy(clientlist[tempnick]->host, host,160); strncpy(clientlist[tempnick]->dhost, host,160); strncpy(clientlist[tempnick]->server, ServerName,256); - strncpy(clientlist[tempnick]->ident, "unknown",15); + strncpy(clientlist[tempnick]->ident, "unknown",IDENTMAX); clientlist[tempnick]->registered = 0; clientlist[tempnick]->signon = TIME+dns_timeout; clientlist[tempnick]->lastping = 1; diff --git a/src/servers.cpp b/src/servers.cpp index cf5d30f01..891eaf722 100644 --- a/src/servers.cpp +++ b/src/servers.cpp @@ -326,7 +326,7 @@ void serverrec::FlushWriteBuffers() } has_been_netsplit = true; } - if (this->connectors[i].HasBufferedOutput()) + if ((this->connectors[i].HasBufferedOutput()) && (this->connectors[i].GetState() != STATE_DISCONNECTED)) { if (!this->connectors[i].FlushWriteBuf()) { diff --git a/src/users.cpp b/src/users.cpp index 8c7f1409b..cf977dff2 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -67,6 +67,7 @@ void userrec::CloseSocket() char* userrec::GetFullHost() { + static char result[MAXBUF]; snprintf(result,MAXBUF,"%s!%s@%s",nick,ident,dhost); return result; } @@ -83,8 +84,9 @@ int userrec::ReadData(void* buffer, size_t size) char* userrec::GetFullRealHost() { - snprintf(result,MAXBUF,"%s!%s@%s",nick,ident,host); - return result; + static char fresult[MAXBUF]; + snprintf(fresult,MAXBUF,"%s!%s@%s",nick,ident,host); + return fresult; } bool userrec::IsInvited(char* channel) |