From e048dac3dfcdc38d9869af04a18593046908a0a5 Mon Sep 17 00:00:00 2001 From: Nico Golde Date: Mon, 24 Jan 2011 16:46:25 +0100 Subject: [PATCH] minor changes, fix fd leak due to case insensitive channel name comparison, fix treatment of raw irc commands (thanks samurai) --- CHANGES | 7 +++++++ config.mk | 2 +- ii.c | 22 +++++++++++----------- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/CHANGES b/CHANGES index 001cdc1..22dc841 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,10 @@ +1.5 (2011-01-24): + - fix channel name comparison in add_channel(), compare lowercase + to prevent leaking file descriptors in the long run => Thanks samurai! + - only handle commands ii explicitely understands and treat the rest + as raw irc (only worked for raw commands in capital lettersin the past) => Thanks samurai! + - minor changes + 1.4 (2008-08-09): - fix directory traversal on servers that support SAJOIN NOTE: not marking as security relevant as it is only possible to diff --git a/config.mk b/config.mk index ac9a047..601ed05 100644 --- a/config.mk +++ b/config.mk @@ -12,7 +12,7 @@ DESTDIR = INCDIR = ${PREFIX}/include LIBDIR = ${PREFIX}/lib -VERSION = 1.4 +VERSION = 1.5 # includes and libs INCLUDES = -I. -I${INCDIR} -I/usr/include diff --git a/ii.c b/ii.c index 40021bb..c467728 100644 --- a/ii.c +++ b/ii.c @@ -1,8 +1,7 @@ -/* - * (C)opyright MMV-MMVI Anselm R. Garbe - * (C)opyright MMV-MMVII Nico Golde - * See LICENSE file for license details. - */ +/* (C)opyright MMV-MMVI Anselm R. Garbe + * (C)opyright MMV-MMXI Nico Golde + * See LICENSE file for license details. */ + #include #include #include @@ -47,7 +46,7 @@ static void usage() { fprintf(stderr, "%s", "ii - irc it - " VERSION "\n" "(C)opyright MMV-MMVI Anselm R. Garbe\n" - "(C)opyright MMV-MMVII Nico Golde\n" + "(C)opyright MMV-MMXI Nico Golde\n" "usage: ii [-i ] [-s ] [-p ]\n" " [-n ] [-k ] [-f ]\n"); exit(EXIT_SUCCESS); @@ -82,16 +81,16 @@ static void create_dirtree(const char *dir) { static int get_filepath(char *filepath, size_t len, char *channel, char *file) { if(channel) { - if(!snprintf(filepath, len, "%s/%s", path, striplower(channel))) + if(!snprintf(filepath, len, "%s/%s", path, channel)) return 0; create_dirtree(filepath); - return snprintf(filepath, len, "%s/%s/%s", path, striplower(channel), file); + return snprintf(filepath, len, "%s/%s/%s", path, channel, file); } return snprintf(filepath, len, "%s/%s", path, file); } static void create_filepath(char *filepath, size_t len, char *channel, char *suffix) { - if(!get_filepath(filepath, len, channel, suffix)) { + if(!get_filepath(filepath, len, striplower(channel), suffix)) { fprintf(stderr, "%s", "ii: path to irc directory too long\n"); exit(EXIT_FAILURE); } @@ -105,9 +104,10 @@ static int open_channel(char *name) { return open(infile, O_RDONLY | O_NONBLOCK, 0); } -static void add_channel(char *name) { +static void add_channel(char *cname) { Channel *c; int fd; + char *name = striplower(cname); for(c = channels; c; c = c->next) if(!strcmp(name, c->name)) @@ -234,7 +234,7 @@ static void proc_channels_input(Channel *c, char *buf) { return; } message[0] = '\0'; - switch (buf[1]) { + if(buf[2] == ' ' || buf[2] == '\0') switch (buf[1]) { case 'j': p = strchr(&buf[3], ' '); if(p) *p = 0;