Re: 5.1 on a production box with some small problems (su, linux emu 7)

From: <arno_at_heho.snv.jussieu.fr>
Date: 28 Jun 2003 12:51:39 +0200
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);
Received on Sat Jun 28 2003 - 01:51:42 UTC

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