Re: Broken su in current - trying to fix myself, help needed!

From: David Xu <davidxu_at_FreeBSD.org>
Date: Thu, 18 Oct 2007 16:30:00 +0800
Artem Kuchin wrote:
> Hello!
> 
> I really not at all good at any kind of system programming
> in FreeBSD or Un*x, but since my contacts with last commited
> of su could not be establish i decided to look at it myself.
> 
> If you don't know what is the problem i'll describe it shortly:
> 
> if you try to run a very simple perl script:
> 
> #!/usr/bin/perl
> $com="/usr/bin/su root -c 'echo heck'";
> system($com);
> print "done!\n";
> 
> it will print heck
> 
> and then
> 
> Suspended (tty output)
> 
> and will hang in memory untill you type
> fg
> 
> then you get
> 
> done!
> 
> 
> I am working in csh, but i tested it in sh - result is
> the same. FreeBSD version is  7-PRERELEASE.
> 
> 
> So, I fetched su v. 1.76 from 6.2-STABLE and compiled it - it works
> like a charm. SO, i decided to figure what fails in 1.86.
> 
> There are such like in the default: dection of switch
> 
>                child_pgrp = getpgid(child_pid);
>                if (tcgetpgrp(STDERR_FILENO) == child_pgrp)
>                        tcsetpgrp(STDERR_FILENO, getpgrp());
> 
> 
> The problem is here.
> getpgid(child_pid) simply fails with errno 3 (process doesn't exist)
> and tcgetpgrp(STDERR_FILENO) return 100000 (can it be THAT high? i though
> it is only in 0-65535 range).
> 
> The weird thing is that if i just comment out those lines like this
> 
> /* child_pgrp = getpgid(child_pid);
>   if (tcgetpgrp(STDERR_FILENO) == child_pgrp) */
>   tcsetpgrp(STDERR_FILENO, getpgrp());
> 
> su starts working again just fine.
> 
> Any idea why getpgid fails and why tcgetpgrp return 100000 (always the same
> number)? What will brak if i leave these lines commented?
> 
> -- 
> Regards,
> Artem

file su.c, line 472 may be incorrect since line 456 is a while loop 
which only
exits if child process is exited. just remove line 472 and 473 to see if 
problem
is fixed.

Regards,
David Xu
Received on Thu Oct 18 2007 - 06:29:12 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:19 UTC