1
0
mirror of https://github.com/osmarks/ngircd.git synced 2024-12-12 09:50:29 +00:00

Add support for longer config lines

With the introduction of CipherList we could have longer config lines.
Handle up to 1024 bytes and warn if the line will be truncated.
This commit is contained in:
Federico G. Schwindt 2013-10-17 22:10:53 +01:00
parent a7dda1b28c
commit 62865f7e19
8 changed files with 16 additions and 10 deletions

View File

@ -238,7 +238,7 @@ Client_Destroy( CLIENT *Client, const char *LogMsg, const char *FwdMsg, bool Sen
/* remove a client */ /* remove a client */
CLIENT *last, *c; CLIENT *last, *c;
char msg[LINE_LEN]; char msg[COMMAND_LEN];
const char *txt; const char *txt;
assert( Client != NULL ); assert( Client != NULL );

View File

@ -1063,7 +1063,7 @@ static void Read_Config_File(const char *File, FILE *fd)
/* Read configuration file */ /* Read configuration file */
section[0] = '\0'; section[0] = '\0';
while (true) { while (true) {
if (!fgets(str, LINE_LEN, fd)) if (!fgets(str, sizeof(str), fd))
break; break;
ngt_TrimStr(str); ngt_TrimStr(str);
line++; line++;
@ -1072,6 +1072,12 @@ static void Read_Config_File(const char *File, FILE *fd)
if (str[0] == ';' || str[0] == '#' || str[0] == '\0') if (str[0] == ';' || str[0] == '#' || str[0] == '\0')
continue; continue;
if (strlen(str) >= sizeof(str) - 1) {
Config_Error(LOG_WARNING, "%s, line %d too long!",
File, line);
continue;
}
/* Is this the beginning of a new section? */ /* Is this the beginning of a new section? */
if ((str[0] == '[') && (str[strlen(str) - 1] == ']')) { if ((str[0] == '[') && (str[strlen(str) - 1] == ']')) {
strlcpy(section, str, sizeof(section)); strlcpy(section, str, sizeof(section));
@ -1474,7 +1480,7 @@ Handle_GLOBAL(const char *File, int Line, char *Var, char *Arg )
len = strlen(Arg); len = strlen(Arg);
if (len == 0) if (len == 0)
return; return;
if (len >= LINE_LEN) { if (len >= 127) {
Config_Error_TooLong(File, Line, Var); Config_Error_TooLong(File, Line, Var);
return; return;
} }

View File

@ -36,7 +36,7 @@
/* Generic buffer sizes */ /* Generic buffer sizes */
/** Max. length of a line in the configuration file. */ /** Max. length of a line in the configuration file. */
#define LINE_LEN 256 #define LINE_LEN 1024
/** Max. length of a log message. */ /** Max. length of a log message. */
#define MAX_LOG_MSG_LEN 256 #define MAX_LOG_MSG_LEN 256

View File

@ -37,7 +37,7 @@ static UINT32 jenkins_hash PARAMS((UINT8 *k, UINT32 length, UINT32 initval));
GLOBAL UINT32 GLOBAL UINT32
Hash( const char *String ) Hash( const char *String )
{ {
char buffer[LINE_LEN]; char buffer[COMMAND_LEN];
strlcpy(buffer, String, sizeof(buffer)); strlcpy(buffer, String, sizeof(buffer));
return jenkins_hash((UINT8 *)ngt_LowerStr(buffer), return jenkins_hash((UINT8 *)ngt_LowerStr(buffer),

View File

@ -630,7 +630,7 @@ GLOBAL bool
IRC_QUIT( CLIENT *Client, REQUEST *Req ) IRC_QUIT( CLIENT *Client, REQUEST *Req )
{ {
CLIENT *target; CLIENT *target;
char quitmsg[LINE_LEN]; char quitmsg[COMMAND_LEN];
assert(Client != NULL); assert(Client != NULL);
assert(Req != NULL); assert(Req != NULL);

View File

@ -53,7 +53,7 @@
GLOBAL bool GLOBAL bool
IRC_SERVER( CLIENT *Client, REQUEST *Req ) IRC_SERVER( CLIENT *Client, REQUEST *Req )
{ {
char str[LINE_LEN]; char str[100];
CLIENT *from, *c; CLIENT *from, *c;
int i; int i;

View File

@ -47,7 +47,7 @@ Announce_Channel(CLIENT *Client, CHANNEL *Chan)
{ {
CL2CHAN *cl2chan; CL2CHAN *cl2chan;
CLIENT *cl; CLIENT *cl;
char str[LINE_LEN], *ptr; char str[COMMAND_LEN], *ptr;
bool njoin, xop; bool njoin, xop;
/* Check features of remote server */ /* Check features of remote server */
@ -82,7 +82,7 @@ Announce_Channel(CLIENT *Client, CHANNEL *Chan)
strlcat(str, Client_ID(cl), sizeof(str)); strlcat(str, Client_ID(cl), sizeof(str));
/* Send the data if the buffer is "full" */ /* Send the data if the buffer is "full" */
if (strlen(str) > (LINE_LEN - CLIENT_NICK_LEN - 8)) { if (strlen(str) > (sizeof(str) - CLIENT_NICK_LEN - 8)) {
if (!IRC_WriteStrClient(Client, "%s", str)) if (!IRC_WriteStrClient(Client, "%s", str))
return DISCONNECTED; return DISCONNECTED;
snprintf(str, sizeof(str), "NJOIN %s :", snprintf(str, sizeof(str), "NJOIN %s :",

View File

@ -423,7 +423,7 @@ Handle_Numeric(CLIENT *client, REQUEST *Req)
{ 376, IRC_Num_ENDOFMOTD } { 376, IRC_Num_ENDOFMOTD }
}; };
int i, num; int i, num;
char str[LINE_LEN]; char str[COMMAND_LEN];
CLIENT *prefix, *target = NULL; CLIENT *prefix, *target = NULL;
/* Determine target */ /* Determine target */