ii

irc it, simple FIFO based irc client
git clone git://git.suckless.org/ii
Log | Files | Refs | README | LICENSE

commit e048dac3dfcdc38d9869af04a18593046908a0a5
parent 566fa01e471cbbe318640150b44fa59bfe50f9a8
Author: Nico Golde <nion@suckless.org>
Date:   Mon, 24 Jan 2011 16:46:25 +0100

minor changes, fix fd leak due to case insensitive channel name comparison, fix treatment of raw irc commands (thanks samurai)
Diffstat:
MCHANGES | 7+++++++
Mconfig.mk | 2+-
Mii.c | 22+++++++++++-----------
3 files changed, 19 insertions(+), 12 deletions(-)

diff --git 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 @@ -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 @@ -1,8 +1,7 @@ -/* - * (C)opyright MMV-MMVI Anselm R. Garbe <garbeam at gmail dot com> - * (C)opyright MMV-MMVII Nico Golde <nico at ngolde dot de> - * See LICENSE file for license details. - */ +/* (C)opyright MMV-MMVI Anselm R. Garbe <garbeam at gmail dot com> + * (C)opyright MMV-MMXI Nico Golde <nico at ngolde dot de> + * See LICENSE file for license details. */ + #include <errno.h> #include <netdb.h> #include <sys/types.h> @@ -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 <irc dir>] [-s <host>] [-p <port>]\n" " [-n <nick>] [-k <password>] [-f <fullname>]\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;