Re: calendar in Debian
On Sat, Jan 21, 2012 at 09:39:30AM +0100, Otto Moerbeek wrote: On Fri, Jan 20, 2012 at 10:48:54AM +0100, Otto Moerbeek wrote: On Fri, Jan 20, 2012 at 10:38:35AM +0100, Michael Meskes wrote: On Thu, Jan 19, 2012 at 09:41:08PM +0100, Otto Moerbeek wrote: With a hint from Paul Jantzen I did test this a bit further. There's That is, Paul Janzen, sorry about that. code to avoid having a child runing too long. If you have 20s patience, you'll see this: calendar: uid 1000 did not finish in time After reading Paul's explanation I found my mistake. The fix works great for calendar -a but not if you call calendar directly on the named pipe. Of course the latter is not really a problem, so I'm going to remove that patch from our sources. Thanks for the explanations. Any ideas about the other patches? I don't think I have a chance to look at them the coming time. Any other volunteer here? -Otto Buete here is Paul's diff. It makes sure all descendants are killed, insted of only the direct child. OK? Nobody? Unless somebody objects, I'm going to commit this soon. -Otto -Otto Index: calendar.c === RCS file: /cvs/src/usr.bin/calendar/calendar.c,v retrieving revision 1.27 diff -u calendar.c --- calendar.c12 Sep 2011 21:23:00 - 1.27 +++ calendar.c19 Jan 2012 18:29:22 - @@ -169,6 +169,7 @@ warn(fork); continue; case 0: /* child */ + (void)setpgid(getpid(), getpid()); (void)setlocale(LC_ALL, ); if (setusercontext(NULL, pw, pw-pw_uid, LOGIN_SETALL ^ LOGIN_SETLOGIN)) @@ -214,7 +215,10 @@ /* It doesn't _really_ matter if the kill fails, e.g. * if there's only a zombie now. */ - (void)kill(kid, SIGTERM); + if (getpgid(kid) != getpgrp()) + (void)killpg(getpgid(kid), SIGTERM); + else + (void)kill(kid, SIGTERM); warnx(uid %u did not finish in time, pw-pw_uid); } if (time(NULL) - t = SECSPERDAY)
Re: calendar in Debian
On Fri, Jan 20, 2012 at 10:48:54AM +0100, Otto Moerbeek wrote: On Fri, Jan 20, 2012 at 10:38:35AM +0100, Michael Meskes wrote: On Thu, Jan 19, 2012 at 09:41:08PM +0100, Otto Moerbeek wrote: With a hint from Paul Jantzen I did test this a bit further. There's That is, Paul Janzen, sorry about that. code to avoid having a child runing too long. If you have 20s patience, you'll see this: calendar: uid 1000 did not finish in time After reading Paul's explanation I found my mistake. The fix works great for calendar -a but not if you call calendar directly on the named pipe. Of course the latter is not really a problem, so I'm going to remove that patch from our sources. Thanks for the explanations. Any ideas about the other patches? I don't think I have a chance to look at them the coming time. Any other volunteer here? -Otto Buete here is Paul's diff. It makes sure all descendants are killed, insted of only the direct child. OK? -Otto Index: calendar.c === RCS file: /cvs/src/usr.bin/calendar/calendar.c,v retrieving revision 1.27 diff -u calendar.c --- calendar.c 12 Sep 2011 21:23:00 - 1.27 +++ calendar.c 19 Jan 2012 18:29:22 - @@ -169,6 +169,7 @@ warn(fork); continue; case 0: /* child */ + (void)setpgid(getpid(), getpid()); (void)setlocale(LC_ALL, ); if (setusercontext(NULL, pw, pw-pw_uid, LOGIN_SETALL ^ LOGIN_SETLOGIN)) @@ -214,7 +215,10 @@ /* It doesn't _really_ matter if the kill fails, e.g. * if there's only a zombie now. */ - (void)kill(kid, SIGTERM); + if (getpgid(kid) != getpgrp()) + (void)killpg(getpgid(kid), SIGTERM); + else + (void)kill(kid, SIGTERM); warnx(uid %u did not finish in time, pw-pw_uid); } if (time(NULL) - t = SECSPERDAY)
Re: calendar in Debian
On Thu, Jan 19, 2012 at 05:46:48PM +0100, Otto Moerbeek wrote: Introducing a race is never the right solution, imo. That I totally agree with. By the way, your fix does not catch an included file being a fifo either. So while introducing a race, it actually does not fix the problem. Good point. It seems noone noticed so far. Michael -- Michael Meskes Michael at Fam-Meskes dot De, Michael at Meskes dot (De|Com|Net|Org) Michael at BorussiaFan dot De, Meskes at (Debian|Postgresql) dot Org Jabber: michael.meskes at googlemail dot com VfL Borussia! ForC'a BarC'a! Go SF 49ers! Use Debian GNU/Linux, PostgreSQL
Re: calendar in Debian
On Fri, Jan 20, 2012 at 10:30:01AM +0100, Michael Meskes wrote: On Thu, Jan 19, 2012 at 09:38:06PM +0100, Otto Moerbeek wrote: With a hint from Paul Jantzen I did test this a bit further. There's code to avoid having a child runing too long. If you have 20s patience, you'll see this: calendar: uid 1000 did not finish in time Now that's interesting. I certainly don't see this message. Here's what I did: $ mkfifo c $ ./calendar -f c I killed the program after 40 minutes without any action from it, strace verifies it still waits in open(). Could it be that this works differently on OpenBSD? Yes indeed. Likely we diverged here from net and freebsd. In particular, rev 1.15 op calendar.c and rev 1.13 of io.c are relevant. BTW, there's a slight problem with the current code that kills the child after a timeout. Paul Janzen sent me a diff I'm currently testing. -Otto
Re: calendar in Debian
On Thu, Jan 19, 2012 at 09:41:08PM +0100, Otto Moerbeek wrote: With a hint from Paul Jantzen I did test this a bit further. There's That is, Paul Janzen, sorry about that. code to avoid having a child runing too long. If you have 20s patience, you'll see this: calendar: uid 1000 did not finish in time After reading Paul's explanation I found my mistake. The fix works great for calendar -a but not if you call calendar directly on the named pipe. Of course the latter is not really a problem, so I'm going to remove that patch from our sources. Thanks for the explanations. Any ideas about the other patches? Michael -- Michael Meskes Michael at Fam-Meskes dot De, Michael at Meskes dot (De|Com|Net|Org) Michael at BorussiaFan dot De, Meskes at (Debian|Postgresql) dot Org Jabber: michael.meskes at googlemail dot com VfL Borussia! ForC'a BarC'a! Go SF 49ers! Use Debian GNU/Linux, PostgreSQL
Re: calendar in Debian
On Fri, Jan 20, 2012 at 10:38:35AM +0100, Michael Meskes wrote: On Thu, Jan 19, 2012 at 09:41:08PM +0100, Otto Moerbeek wrote: With a hint from Paul Jantzen I did test this a bit further. There's That is, Paul Janzen, sorry about that. code to avoid having a child runing too long. If you have 20s patience, you'll see this: calendar: uid 1000 did not finish in time After reading Paul's explanation I found my mistake. The fix works great for calendar -a but not if you call calendar directly on the named pipe. Of course the latter is not really a problem, so I'm going to remove that patch from our sources. Thanks for the explanations. Any ideas about the other patches? I don't think I have a chance to look at them the coming time. Any other volunteer here? -Otto
Re: calendar in Debian
On Thu, Jan 19, 2012 at 10:40:13AM +0100, Michael Meskes wrote: Hi, I'm working on the Debian package bsdmainutils which includes calendar from OpenBSD. In an effort to fix bugs and improve the feature set we added several patches to calendar. Some are Linux specific, but the majority would also be applicable to OpenBSD. Maybe you're interested in adding these changes to your sources. You can find the patches here: http://anonscm.debian.org/gitweb/?p=bsdmainutils/bsdmainutils.git;a=tree;f=debian/patches;hb=HEAD I'm absolutely willing to explain what we did with each patch and why. I looked through some of the diffs and noted your are introducing a race in calendar_fifo.diff. Why are you changing this code? -Otto Feel free to redirect me or forward this email to the right place/person if this list is not the right place. Michael -- Michael Meskes Michael at Fam-Meskes dot De, Michael at Meskes dot (De|Com|Net|Org) Michael at BorussiaFan dot De, Meskes at (Debian|Postgresql) dot Org Jabber: michael.meskes at googlemail dot com VfL Borussia! ForC'a BarC'a! Go SF 49ers! Use Debian GNU/Linux, PostgreSQL -- Michael Meskes Michael at Fam-Meskes dot De, Michael at Meskes dot (De|Com|Net|Org) Michael at BorussiaFan dot De, Meskes at (Debian|Postgresql) dot Org Jabber: michael.meskes at googlemail dot com VfL Borussia! ForC'a BarC'a! Go SF 49ers! Use Debian GNU/Linux, PostgreSQL
Re: calendar in Debian
On Thu, Jan 19, 2012 at 12:30:15PM +0100, Otto Moerbeek wrote: I looked through some of the diffs and noted your are introducing a race in calendar_fifo.diff. Why are you changing this code? Because the old code blocks if a named pipe is used as a calendar file, a bug report is here: http://bugs.launchpad.net/ubuntu/+source/bsdmainutils/+bug/357055 Michael -- Michael Meskes Michael at Fam-Meskes dot De, Michael at Meskes dot (De|Com|Net|Org) Michael at BorussiaFan dot De, Meskes at (Debian|Postgresql) dot Org Jabber: michael.meskes at googlemail dot com VfL Borussia! ForC'a BarC'a! Go SF 49ers! Use Debian GNU/Linux, PostgreSQL
Re: calendar in Debian
On Thu, Jan 19, 2012 at 05:46:48PM +0100, Otto Moerbeek wrote: On Thu, Jan 19, 2012 at 05:09:25PM +0100, Michael Meskes wrote: On Thu, Jan 19, 2012 at 12:30:15PM +0100, Otto Moerbeek wrote: I looked through some of the diffs and noted your are introducing a race in calendar_fifo.diff. Why are you changing this code? Because the old code blocks if a named pipe is used as a calendar file, a bug report is here: http://bugs.launchpad.net/ubuntu/+source/bsdmainutils/+bug/357055 Michael -- Michael Meskes Michael at Fam-Meskes dot De, Michael at Meskes dot (De|Com|Net|Org) Michael at BorussiaFan dot De, Meskes at (Debian|Postgresql) dot Org Jabber: michael.meskes at googlemail dot com VfL Borussia! ForC'a BarC'a! Go SF 49ers! Use Debian GNU/Linux, PostgreSQL Introducing a race is never the right solution, imo. By the way, your fix does not catch an included file being a fifo either. So while introducing a race, it actually does not fix the problem. With a hint from Paul Jantzen I did test this a bit further. There's code to avoid having a child runing too long. If you have 20s patience, you'll see this: calendar: uid 1000 did not finish in time So imo, the debian diff not only is wrong, but it also tries to solve a problem that isn't actually a problem. -Otto
Re: calendar in Debian
On Thu, Jan 19, 2012 at 09:38:06PM +0100, Otto Moerbeek wrote: On Thu, Jan 19, 2012 at 05:46:48PM +0100, Otto Moerbeek wrote: On Thu, Jan 19, 2012 at 05:09:25PM +0100, Michael Meskes wrote: On Thu, Jan 19, 2012 at 12:30:15PM +0100, Otto Moerbeek wrote: I looked through some of the diffs and noted your are introducing a race in calendar_fifo.diff. Why are you changing this code? Because the old code blocks if a named pipe is used as a calendar file, a bug report is here: http://bugs.launchpad.net/ubuntu/+source/bsdmainutils/+bug/357055 Michael -- Michael Meskes Michael at Fam-Meskes dot De, Michael at Meskes dot (De|Com|Net|Org) Michael at BorussiaFan dot De, Meskes at (Debian|Postgresql) dot Org Jabber: michael.meskes at googlemail dot com VfL Borussia! ForC'a BarC'a! Go SF 49ers! Use Debian GNU/Linux, PostgreSQL Introducing a race is never the right solution, imo. By the way, your fix does not catch an included file being a fifo either. So while introducing a race, it actually does not fix the problem. With a hint from Paul Jantzen I did test this a bit further. There's That is, Paul Janzen, sorry about that. code to avoid having a child runing too long. If you have 20s patience, you'll see this: calendar: uid 1000 did not finish in time So imo, the debian diff not only is wrong, but it also tries to solve a problem that isn't actually a problem. -Otto