Commits

Nico Golde  committed 4c68922

minor changes, fix fd leak due to case insensitive channel name comparison, fix treatment of raw irc commands (thanks samurai)

  • Participants
  • Parent commits 432e781

Comments (0)

Files changed (3)

+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
 
 INCDIR      = ${PREFIX}/include
 LIBDIR      = ${PREFIX}/lib
-VERSION     = 1.4
+VERSION     = 1.5
 
 # includes and libs
 INCLUDES    = -I. -I${INCDIR} -I/usr/include
-/*
- * (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>
 	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);
 
 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);
 	}
 	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))
 		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;