On Thu, Dec 31, 2009 at 02:27:29PM +0000, Mike Belopuhov wrote: > On Thu, Dec 31, 2009 at 13:13 +0000, Michael Shalayeff wrote: > > On Wed, Dec 30, 2009 at 07:23:00PM +0000, konrad merz wrote: > > > Hey, > > > > > > during writing on icb (client) I discoverd a bug by sending /topic w/o an > > > argument to the daemon, which leads to a segfault. > > > > i do not think we should wait till this gets "reimplemented" > > and fix it first. then we can wait till it's "reimplemented" > > then fix it everywhere not in one place. apart from that it's not > clear if returning "No topic set for %s" is supported by the existing > clients. > > as it is, this diff makes no sense at all.
this diffs fixes a real problem. maybe you can get some of that xmas cheer and be a good sport about this all... unless you can produce a "better" solution this diffs is good to go in. > > i do not see anything wrong w/ the fix unless mikeb can > > argue otherwise... > > > > > The segfault of one process leads to a endless loop of the dns which > > > allways > > > returns to the 'dns read'. > > > > yes the exit is better since any kind of failure indicates problem > > at the parent process... (short read or failure or eof) > > > > Index: usr.sbin/icbd/cmd.c > > =================================================================== > > RCS file: /cvs/src/usr.sbin/icbd/cmd.c,v > > retrieving revision 1.19 > > diff -u -p -r1.19 cmd.c > > --- usr.sbin/icbd/cmd.c 23 Jun 2009 13:39:33 -0000 1.19 > > +++ usr.sbin/icbd/cmd.c 30 Dec 2009 19:06:18 -0000 > > @@ -227,9 +227,15 @@ icb_cmd_topic(struct icb_cmdarg *ca) > > char buf[ICB_MAXGRPLEN + ICB_MAXTOPICLEN + 25]; > > struct icb_group *ig = ca->sess->group; > > > > - if (strlen(ca->arg) == 0) { > > - (void)snprintf(buf, sizeof buf, "Topic for %s is \"%s\"", > > - ig->name, ig->topic); > > + if (ca->arg == NULL) { > > + if (strlen(ig->topic) > 0) > > + (void)snprintf(buf, sizeof buf, > > + "Topic for %s is \"%s\"", > > + ig->name, ig->topic); > > + else > > + (void)snprintf(buf, sizeof buf, "No topic set for %s", > > + ig->name); > > + > > icb_status(ca->sess, STATUS_TOPIC, buf); > > return; > > } > > Index: usr.sbin/icbd/dns.c > > =================================================================== > > RCS file: /cvs/src/usr.sbin/icbd/dns.c,v > > retrieving revision 1.1 > > diff -u -p -r1.1 dns.c > > --- usr.sbin/icbd/dns.c 23 Jun 2009 13:39:33 -0000 1.1 > > +++ usr.sbin/icbd/dns.c 30 Dec 2009 19:06:18 -0000 > > @@ -114,7 +114,7 @@ dns_dispatch(int fd, short event, void * > > > > if (read(fd, &ss, ss_len) != ss_len) { > > syslog(LOG_ERR, "dns read: %m"); > > - return; > > + exit(1); > > } > > > > if ((gerr = getnameinfo(sa, sa->sa_len, -- paranoic mickey (my employers have changed but, the name has remained)