Skip site navigation (1)Skip section navigation (2)
Date:      28 Jun 2003 12:51:39 +0200
From:      arno@heho.snv.jussieu.fr
To:        "Karl M. Joch" <k.joch@kmjeuro.com>
Cc:        freebsd-current@freebsd.org
Subject:   Re: 5.1 on a production box with some small problems (su, linux emu 7)
Message-ID:  <wpof0ifpac.fsf@heho.snv.jussieu.fr>
In-Reply-To: <3EFCC896.7050104@kmjeuro.com>
References:  <3EFCC896.7050104@kmjeuro.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Karl,

> i run 5.1 on one of the inhouse production boxes successful. there are
> only 2 small points witch are a pain and i found no solution. box was
> fresh setup with 5.0 then cvsuped to 5.1.
> 
> 1. when starting some scripts su doesnt return from the shell and
> hangs on boot. when starting manually i get "tty output stopped". with
> exit there is a way out of this shell, but i havnt found a
> solution. most of the scripts runs since 3.x, at least 4.x and was
> working up to 4.8. one of this scripts is the pervasive sql server
> startup script which is part of the pervasive server for linux. using
> #!/compat/linux/bin/sh doesnt help. there are 2 lines in it starting
> sqlmgr and psql with:
> echo "commands...." | /bin/su - psql || exit 1
> after the 1st one tty output is stopped. the other script is vmware
> and vncserver related and uses linux emu too.

I had a similar problem, which has been solved by the following
patch posted by David Xu (not white-space clean), you might
give it a try.

Arno

#####
Index: usr.bin/su/su.c
===================================================================
RCS file: /home/ncvs/src/usr.bin/su/su.c,v
retrieving revision 1.68
diff -c -r1.68 su.c
*** usr.bin/su/su.c     8 Apr 2003 16:59:53 -0000       1.68
--- usr.bin/su/su.c     28 Jun 2003 10:33:17 -0000
***************
*** 359,364 ****
--- 359,366 ----
        child_pid = fork();
        switch (child_pid) {
        default:
+                 sa.sa_handler = SIG_IGN;
+                 sigaction(SIGTTOU, &sa, NULL);
                close(fds[0]);
                setpgid(child_pid, child_pid);
                tcsetpgrp(1, child_pid);
***************
*** 366,372 ****
                sigaction(SIGPIPE, &sa_pipe, NULL);
                while ((pid = waitpid(child_pid, &statusp, WUNTRACED)) != -1) {
                        if (WIFSTOPPED(statusp)) {
!                               kill(getpid(), SIGSTOP);
                                child_pgrp = getpgid(child_pid);
                                tcsetpgrp(1, child_pgrp);
                                kill(child_pid, SIGCONT);
--- 368,376 ----
                sigaction(SIGPIPE, &sa_pipe, NULL);
                while ((pid = waitpid(child_pid, &statusp, WUNTRACED)) != -1) {
                        if (WIFSTOPPED(statusp)) {
!                                 if (WSTOPSIG(statusp) != SIGTTOU && 
!                                     WSTOPSIG(statusp) != SIGTTIN)
!                                         kill(getpid(), SIGSTOP);
                                child_pgrp = getpgid(child_pid);
                                tcsetpgrp(1, child_pgrp);
                                kill(child_pid, SIGCONT);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?wpof0ifpac.fsf>