applying patch from bug 24:
authorpgf <pgf@69ca8d6d-28ef-0310-b511-8ec308f3f277>
Mon, 1 Aug 2005 16:43:13 +0000 (16:43 +0000)
committerpgf <pgf@69ca8d6d-28ef-0310-b511-8ec308f3f277>
Mon, 1 Aug 2005 16:43:13 +0000 (16:43 +0000)
    0000024 03-16-05 patch: allow init to set controlling tty

git-svn-id: svn://busybox.net/trunk/busybox@11007 69ca8d6d-28ef-0310-b511-8ec308f3f277

init/Config.in
init/init.c

index 521f8fe..a3584aa 100644 (file)
@@ -43,6 +43,17 @@ config CONFIG_FEATURE_INIT_SWAPON
          If the system has less than one megabyte of total memory, init
          will run '/sbin/swapon -a' to add swap memory.
 
+config CONFIG_FEATURE_INIT_SCTTY
+       bool "  Support running commands with a controlling-tty?"
+       default n
+       depends on CONFIG_INIT
+       help
+         If this option is enabled a command starting with hyphen (-)
+         is run in its own session (setsid(2)) and possibly with a
+         controlling tty (TIOCSCTTY).  This is not the traditional init
+         behavour, but is often what you want in an embedded system where
+         the console is only accessed during development or for maintenance.
+
 config CONFIG_FEATURE_EXTRA_QUIET
        bool "  Should init be _extra_ quiet on boot?"
        default y
index 8687b10..0f49a45 100644 (file)
@@ -577,6 +577,13 @@ static pid_t run(const struct init_action *a)
                                cmd[0][0] = '-';
                                strcpy(cmd[0] + 1, s);
                        }
+#ifdef CONFIG_FEATURE_INIT_SCTTY
+                       /* Establish this process as session leader and
+                        * (attempt) to make the tty (if any) a controlling tty.
+                        */
+                       (void) setsid();
+                       (void) ioctl(0, TIOCSCTTY, 0/*don't steal it*/);
+#endif
                }
 
 #if !defined(__UCLIBC__) || defined(__ARCH_HAS_MMU__)